Menu
Coddy logo textTech

MOV: из регистра в память

Часть раздела Основы путешествия по Assembly на Coddy — урок 18 из 45.

Теперь, когда вы знаете, как загружать данные из памяти в регистр, вы изучите обратное: сохранение данных из регистра в память.

Синтаксис:

mov [address], register

Квадратные скобки [ ] означают: «сохранить значение из регистра по этому адресу памяти».

Представьте это так:

Представьте, что по адресу памяти destination находится пустая ячейка. У вас есть значение, находящееся в регистре (например, al содержит число 7).

Когда вы пишете:

mov [destination], al

Вы сообщаете процессору: «Возьмите значение из регистра al (7) и поместите его в ячейку под названием destination».

После выполнения этой инструкции адрес памяти destination теперь содержит значение 7. Значение в al остается там — оно не удаляется.

Пример:

mov al, 7            ; Поместить 7 в регистр al
mov [destination], al ; Сохранить значение из al в адрес памяти "destination"

Примечание: В этом упражнении данные в памяти занимают 1 байт (8 бит). Вот почему мы используем al — это 8-битный регистр, который соответствует размеру. Вы узнаете больше о размерах регистров позже.

Важные правила:

ПравилоОбъяснение
Скобки обязательныmov destination, al было бы неверным
Место назначения должно быть адресом памятиИспользуйте метку, например [destination]
Размер должен совпадатьДля этого упражнения используйте al (8 бит)

Распространенная ошибка:

; Ошибка: отсутствуют скобки
mov destination, al

; Правильно: сохраняет значение в память
mov [destination], al

В задании ниже адрес памяти destination уже создан для вас. Вы узнаете, как создавать свои собственные данные, в главе 3. А пока просто сосредоточьтесь на инструкции MOV.

challenge icon

Задание

Напишите две строки на ассемблере, чтобы:

  1. Поместить число 9 в регистр al
  2. Сохранить значение из al в адрес памяти destination

(Адрес памяти destination уже создан для вас.)

Попробуйте сами

section .data
    msg db 'destination = '
    msg_len equ $ - msg

section .bss
    digit resb 1

section .text
    global _start

_start:
    ; solution.asm включен здесь
    ; Он определяет destination И инструкции MOV студента
    
    %include "solution.asm"
    
    ; Загрузить сохраненное значение из памяти в al для вывода
    mov al, [destination]
    
    ; Сохранить его
    mov r12, rax
    
    ; Вывести "destination = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msg_len
    syscall
    
    ; Вывести значение
    mov rax, r12
    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Проверьте себя

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

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