Menu
Coddy logo textTech

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], register

Nawiasy [ ] 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], al

Mó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:

ZasadaWyjaśnienie
Nawiasy są wymaganemov destination, al byłoby niepoprawne
Miejscem docelowym musi być adres pamięciUżyj etykiety takiej jak [destination]
Rozmiary muszą być zgodneW 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], al

W 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.

challenge icon

Wyzwanie

Zapisz dwie linie kodu asemblera, aby:

  1. Umieścić liczbę 9 w rejestrze al
  2. Zapisać wartość z al pod adresem pamięci destination

(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
    syscall
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Edytor online Assembly