MOV: непосредственные значения
Часть раздела Основы путешествия по Assembly на Coddy — урок 15 из 45.
Самая простая форма MOV — это MOV immediate. «Immediate» означает, что значение записывается непосредственно в самой инструкции.
Синтаксис:
mov register, valueЗначение копируется в регистр.
Примеры:
| Инструкция | Что она делает |
|---|---|
mov rax, 5 | Копирует число 5 в rax |
mov rbx, 100 | Копирует число 100 в rbx |
mov rcx, 0 | Копирует число 0 в rcx |
Этот код не делает ничего видимого (пока нет вывода), но он успешно помещает числа в регистры.
Примечание: Вы увидите эффект этих инструкций MOV в последующих уроках, когда научитесь выводить данные на печать или отлаживать код. А пока просто знайте, что числа хранятся в регистрах.
Важные правила:
| Правило | Объяснение |
|---|---|
| Значение должно помещаться в регистр | rax может содержать очень большие числа (до 2⁶⁴-1) |
| Значение копируется, а не перемещается | Исходное число все еще существует (это просто число) |
| Регистры слева | mov rax, 5 — правильно. mov 5, rax — неправильно |
Задание
Напишите по одной строке ассемблерного кода для каждой задачи:
- Поместите число 5 в регистр
rax. - Поместите число 7 в регистр
rbx. - Поместите число 3 в регистр
rcx.
Попробуйте сами
section .data
msg_rax db 'rax = '
msg_rax_len equ $ - msg_rax
msg_rbx db 'rbx = '
msg_rbx_len equ $ - msg_rbx
msg_rcx db 'rcx = '
msg_rcx_len equ $ - msg_rcx
section .bss
digit resb 1
section .text
global _start
_start:
%include "solution.asm"
; Сохранить значения
mov r12, rax
mov r13, rbx
mov r14, rcx
; Вывести "rax = "
mov rax, 1
mov rdi, 1
mov rsi, msg_rax
mov rdx, msg_rax_len
syscall
; Вывести значение rax
mov rax, r12
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Вывести "rbx = "
mov rax, 1
mov rdi, 1
mov rsi, msg_rbx
mov rdx, msg_rbx_len
syscall
; Вывести значение rbx
mov rax, r13
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Вывести "rcx = "
mov rax, 1
mov rdi, 1
mov rsi, msg_rcx
mov rdx, msg_rcx_len
syscall
; Вывести значение rcx
mov rax, r14
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Выход
mov rax, 60
mov rdi, 0
syscallВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Машина
Что такое CPUПамятьРегистры против памятиКак работают инструкцииПаттерн двух файловАрхитектура x86-643Первая инструкция — MOV
Что такое MOV?MOV: непосредственные значенияMOV: из регистра в регистрMOV: из памяти в регистрMOV: из регистра в памятьLEA — загрузка адресаMOV с операндами разных размеровПрактика: обмен значениями регистровИтоги: испытание MOV