Menu
Coddy logo textTech

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 — неправильно
challenge icon

Задание

Напишите по одной строке ассемблерного кода для каждой задачи:

  1. Поместите число 5 в регистр rax.
  2. Поместите число 7 в регистр rbx.
  3. Поместите число 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
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы