MOV z rejestru do pamięci
Część sekcji Podstawy ścieżki Assembly w Coddy. Lekcja 18 z 45.
Teraz, gdy wiesz już, jak ładować dane z pamięci do rejestru, nauczysz się odwrotnej operacji: zapisywania danych z rejestru do pamięci.
Składnia:
mov [address], registerNawiasy [ ] oznaczają: „zapisz wartość z rejestru pod tym adresem pamięci”.
Pomyśl o tym w ten sposób:
Wyobraź sobie, że pod adresem pamięci destination znajduje się puste pudełko. Masz wartość w rejestrze (na przykład al zawiera liczbę 7).
Gdy zapisujesz:
mov [destination], alMówisz procesorowi: „Weź wartość z rejestru al (7) i umieść ją w komórce o nazwie destination”.
Po wykonaniu tej instrukcji adres pamięci destination zawiera teraz wartość 7. Wartość w al pozostaje na swoim miejscu. Nie zostaje usunięta.
Przykład:
mov al, 7 ; Umieść 7 w rejestrze al
mov [destination], al ; Zapisz wartość z rejestru al pod adresem pamięci "destination"Uwaga: W tym ćwiczeniu dane w pamięci mają rozmiar 1 bajta (8 bitów). Dlatego używamy al. Jest to 8-bitowy rejestr, który pasuje rozmiarem. Więcej o rozmiarach rejestrów dowiesz się później.
Ważne zasady:
| Zasada | Wyjaśnienie |
|---|---|
| Nawiasy są wymagane | mov destination, al byłoby niepoprawne |
| Miejscem docelowym musi być adres pamięci | Użyj etykiety takiej jak [destination] |
| Rozmiary muszą być zgodne | W tym ćwiczeniu użyj al (8 bitów) |
Częsty błąd:
; Błędnie: brak nawiasów kwadratowych
mov destination, al
; Poprawnie: zapisuje wartość w pamięci
mov [destination], alW poniższym wyzwaniu adres pamięci destination został już utworzony. Nauczysz się tworzyć własne dane w rozdziale 3. Na razie skup się tylko na instrukcji MOV.
Wyzwanie
Zapisz dwie linie kodu asemblera, aby:
- Umieścić liczbę 9 w rejestrze
al - Zapisać wartość z
alpod adresem pamięcidestination
(Adres pamięci destination jest już utworzony.)
Spróbuj swoich sił
section .data
msg db 'destination = '
msg_len equ $ - msg
section .bss
digit resb 1
section .text
global _start
_start:
; Plik solution.asm jest dołączany tutaj
; Definiuje destination ORAZ instrukcje MOV napisane przez ucznia
%include "solution.asm"
; Załaduj zapisaną wartość z pamięci do al, aby ją wypisać
mov al, [destination]
; Zapisz ją
mov r12, rax
; Wypisz "destination = "
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; Wypisz wartość
mov rax, r12
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Zakończ program
mov rax, 60
mov rdi, 0
syscallTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Maszyna
Czym jest CPUPamięćRejestry a pamięćJak działają instrukcjeWzorzec dwóch plikówArchitektura x86-642Systemy liczbowe
Dlaczego system binarny?Liczby binarneZamiana z systemu dziesiętnego na binarnyDlaczego system szesnastkowy?Zamiana z systemu szesnastkowego na dziesiętnyZamiana z systemu dziesiętnego na szesnastkowyASCII i system szesnastkowy5Wywołanie systemowe zakończenia
Czym jest syscall?Wywołanie systemowe zakończenia (60)Kody zakończeniaPodsumowanie: prawidłowe zakończenie3Pierwsza instrukcja – MOV
Czym jest MOV?MOV z wartością natychmiastowąMOV między rejestramiMOV z pamięci do rejestruMOV z rejestru do pamięciLEA – załaduj adresMOV z różnymi rozmiaramiĆwiczenie: zamiana rejestrówPowtórka: wyzwanie MOVPoćwicz samodzielnie: Edytor online Assembly