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