Menu
CoddyTech

MOV z pamięci do rejestru

Część sekcji Podstawy ścieżki Assembly w Coddy. Lekcja 17 z 45.

Do tej pory przenosiłeś liczby bezpośrednio do rejestrów (natychmiastowo) i kopiowałeś wartości między rejestrami. Teraz nauczysz się, jak wczytywać dane z pamięci do rejestru.

Dlaczego to ważne:

Pamiętaj z rozdziału 0: instrukcja może używać najwyżej jednego operandu pamięci, a rejestry są znacznie szybsze niż pamięć, więc ładujesz wartości, na których pracujesz, do rejestrów. Tak to robisz.

Składnia:

mov register, [address]

Nawiasy [ ] oznaczają: „przejdź pod ten adres pamięci i pobierz zapisaną tam wartość”.

Wyobraź sobie to tak:

Wyobraź sobie, że pod adresem pamięci number znajduje się pudełko. W środku tego pudełka znajduje się wartość, na przykład liczba 5. Gdy zapiszesz:

mov al, [number]    ; Load the value from memory address "number" into al

Wydajesz procesorowi polecenie: „Przejdź do pudełka o nazwie number, pobierz dowolną wartość, która jest w środku (w tym przypadku 5), i skopiuj ją do rejestru al”.

Po wykonaniu tej instrukcji wartość 5 jest teraz przechowywana w al. Oryginalna wartość w pudełku pod adresem number pozostaje tam. Nie zostaje usunięta.

Ważne zasady:

ZasadaWyjaśnienie
Źródłem musi być adres pamięci[label] lub [address]
Nawiasy kwadratowe są wymaganeBez nawiasów myNumber jest adresem, a nie wartością
Rozmiar musi się zgadzaćJeśli pamięć przechowuje bajt, użyj al (a nie rax)

Częsty błąd:

; Błędnie: bez nawiasów kwadratowych myNumber jest ADRESEM, a nie wartością
mov al, myNumber

; Poprawnie: ładuje WARTOŚĆ przechowywaną pod adresem myNumber
mov al, [myNumber]
challenge icon

Wyzwanie

Napisz jedną linię kodu asemblera, aby załadować wartość z adresu pamięci value do rejestru al.

Spróbuj swoich sił

section .data
    msg db 'al = '
    msg_len equ $ - msg

section .bss
    digit resb 1

section .text
    global _start

_start:
    ; Kod ucznia wykonuje się jako pierwszy (ładuje wartość do al)
    
    %include "solution.asm"
    
    ; Zapisz wartość z al
    mov r12, rax
    
    ; Wypisz "al = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msg_len
    syscall
    
    ; Wypisz wartość z al
    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