MOV z wartością natychmiastową
Część sekcji Podstawy ścieżki Assembly w Coddy. Lekcja 15 z 45.
Najprostsza forma MOV to MOV immediate. „Immediate” oznacza, że wartość jest zapisana bezpośrednio w samej instrukcji.
Składnia:
mov register, valueWartość jest kopiowana do rejestru.
Przykłady:
| Instrukcja | Co robi |
|---|---|
mov rax, 5 | Kopiuje liczbę 5 do rax |
mov rbx, 100 | Kopiuje liczbę 100 do rbx |
mov rcx, 0 | Kopiuje liczbę 0 do rcx |
Ten kod nie robi nic widocznego (na razie nie wyświetla żadnego wyniku), ale poprawnie umieszcza liczby w rejestrach.
Uwaga: Efekt działania tych instrukcji MOV zobaczysz na późniejszych lekcjach, gdy nauczysz się wyświetlać dane lub debugować. Na razie wystarczy wiedzieć, że liczby są przechowywane w rejestrach.
Ważne zasady:
| Zasada | Wyjaśnienie |
|---|---|
| Wartość musi mieścić się w rejestrze | rax może przechowywać bardzo duże liczby (do 2⁶⁴-1) |
| Wartość jest kopiowana, a nie przenoszona | Oryginalna liczba nadal istnieje (to po prostu liczba) |
| Rejestry po lewej stronie | mov rax, 5 jest poprawne. mov 5, rax jest niepoprawne |
Wyzwanie
Napisz jedną linię kodu asemblera dla każdego zadania:
- Umieść liczbę 5 w rejestrze
rax. - Umieść liczbę 7 w rejestrze
rbx. - Umieść liczbę 3 w rejestrze
rcx.
Spróbuj swoich sił
section .data
msg_rax db 'rax = '
msg_rax_len equ $ - msg_rax
msg_rbx db 'rbx = '
msg_rbx_len equ $ - msg_rbx
msg_rcx db 'rcx = '
msg_rcx_len equ $ - msg_rcx
section .bss
digit resb 1
section .text
global _start
_start:
%include "solution.asm"
; Zapisz wartości
mov r12, rax
mov r13, rbx
mov r14, rcx
; Wypisz "rax = "
mov rax, 1
mov rdi, 1
mov rsi, msg_rax
mov rdx, msg_rax_len
syscall
; Wypisz wartość rax
mov rax, r12
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Wypisz "rbx = "
mov rax, 1
mov rdi, 1
mov rsi, msg_rbx
mov rdx, msg_rbx_len
syscall
; Wypisz wartość rbx
mov rax, r13
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Wypisz "rcx = "
mov rax, 1
mov rdi, 1
mov rsi, msg_rcx
mov rdx, msg_rcx_len
syscall
; Wypisz wartość rcx
mov rax, r14
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