Menu
Coddy logo textTech

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

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

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

Синтаксис:

mov [address], register

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

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

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

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

mov [destination], al

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

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

Пример:

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

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

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

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

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

; Неправильно: отсутствуют скобки
mov destination, al

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

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

challenge icon

Задание

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

  1. Put number 9 into register al
  2. Store значение из al в memory address destination

(memory address 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Проверьте себя

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

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

Потренируйтесь самостоятельно: Песочница Assembly