Menu
Coddy logo textTech

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ę wczytywać dane z pamięci do rejestru.

Dlaczego to ważne:

Pamiętasz z rozdziału 0: procesor nie może pracować bezpośrednio z pamięcią. Najpierw dane muszą zostać załadowane do rejestrów. Oto jak to zrobić.

Składnia:

mov register, [address]

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

Pomyśl o tym w ten sposób:

Wyobraź sobie, że pod adresem pamięci number znajduje się pudełko. W tym pudełku jest wartość, na przykład liczba 5. Kiedy zapisujesz:

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

Informujesz CPU: „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 na miejscu. Nie zostaje usunięta.

Ważne zasady:

ZasadaWyjaśnienie
Źródłem musi być adres pamięci[label] lub [address]
Nawiasy kwadratowe są wymaganemov al, myNumber ładuje adres, a nie wartość
Rozmiary muszą być zgodneJeśli pamięć przechowuje bajt, użyj al (nie rax)

Częsty błąd:

; Niepoprawnie: ładuje ADRES myNumber, a nie wartość
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 jest wykonywany jako pierwszy (ładuje wartość do al)
    
    %include "solution.asm"
    
    ; Zapisz wartość z al
    mov r12, rax
    
    ; Wyświetl "al = "
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msg_len
    syscall
    
    ; Wyświetl wartość w 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