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.
Задание
Напиши две строки assembly, чтобы:
- Put number 9 into register
al - Store значение из
alв memory addressdestination
(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В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Машина
Что такое CPUПамятьРегистры против памятиКак работают инструкцииПаттерн двух файловАрхитектура x86-64Потренируйтесь самостоятельно: Песочница Assembly