MOV Yazmaçtan Yazmaca
Coddy'nin Assembly Journey'sinin Temel Bilgiler bölümünün bir parçası. Ders 16 / 45.
Artık bir sayıyı doğrudan bir yazmaç içine nasıl yerleştireceğinizi (MOV immediate) bildiğinize göre, değerleri yazmaçlar arasında da kopyalayabilirsiniz.
Sözdizimi:
mov destination_register, source_registersource yazmacındaki değer destination yazmacına kopyalanır. source yazmacı değişmeden kalır.
Örnek:
mov rax, 5 ; rax = 5
mov rbx, rax ; rbx = 5 (rax'tan kopyalandı)Bu iki talimattan sonra hem rax hem de rbx 5 içerir.
Önemli: Kaynak yazmacı (rax) hâlâ değerini korur. MOV kopyalar: kesmez veya taşımaz.
Başka bir örnek:
mov rax, 7 ; rax = 7
mov rcx, 3 ; rcx = 3
mov rdx, rcx ; rdx = 3 (rcx'den kopyalandı)
mov rbx, rax ; rbx = 7 (rax'tan kopyalandı)Bu talimatlardan sonra:
| Kayıt | Değer |
|---|---|
| rax | 7 |
| rcx | 3 |
| rdx | 3 |
| rbx | 7 |
Bu neden önemli:
- Orijinali değiştirmeden önce bir değeri başka bir yazmaçta kopyalayarak kaydedebilirsin
- Bellekten tekrar yüklemeden değerleri yeniden kullanabilirsin
- Bu, çoğu assembly işleminin temelidir
Görev
Bu görevler için assembly kodunu yaz:
- 4 sayısını
raxiçine koy raxiçindeki değerirbxiçine kopyalarbxiçindeki değerircxiçine kopyala
Kodundan sonra üç register'ın da 4 içermesi gerekir.
Kendin dene
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"
; Değerleri kaydet
mov r12, rax
mov r13, rbx
mov r14, rcx
; "rax = " yazdır
mov rax, 1
mov rdi, 1
mov rsi, msg_rax
mov rdx, msg_rax_len
syscall
; rax değerini yazdır
mov rax, r12
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; "rbx = " yazdır
mov rax, 1
mov rdi, 1
mov rsi, msg_rbx
mov rdx, msg_rbx_len
syscall
; rbx değerini yazdır
mov rax, r13
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; "rcx = " yazdır
mov rax, 1
mov rdi, 1
mov rsi, msg_rcx
mov rdx, msg_rcx_len
syscall
; rcx değerini yazdır
mov rax, r14
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Çıkış
mov rax, 60
mov rdi, 0
syscallBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temel Bilgiler bölümündeki tüm dersler
Kendi başına pratik yap: Assembly playground