MOV dari Memori ke Register
Termasuk bagian Dasar-Dasar dalam perjalanan Assembly di Coddy. Pelajaran 17 dari 45.
Sejauh ini, kamu telah memindahkan angka langsung ke register (immediate) dan menyalin nilai antarregister. Sekarang kamu akan belajar cara memuat data dari memori ke dalam register.
Mengapa ini penting:
Ingat dari Bab 0: CPU tidak dapat bekerja langsung dengan memori. Data harus dimuat ke dalam register terlebih dahulu. Beginilah caranya.
Sintaks:
mov register, [address]Tanda kurung siku [ ] berarti: "pergi ke alamat memori ini dan ambil nilai yang tersimpan di sana."
Bayangkan seperti ini:
Bayangkan bahwa di alamat memori number terdapat sebuah kotak. Di dalam kotak itu ada sebuah nilai, misalnya angka 5. Saat kamu menulis:
mov al, [number] ; Load the value from memory address "number" into alKamu memberi tahu CPU: "Pergi ke kotak bernama number, ambil nilai apa pun yang ada di dalamnya (dalam kasus ini 5), lalu salin ke register al."
Setelah instruksi ini dijalankan, nilai 5 kini tersimpan di al. Nilai asli di dalam kotak pada alamat number tetap berada di sana. Nilai itu tidak dihapus.
Aturan penting:
| Aturan | Penjelasan |
|---|---|
| Sumber harus berupa alamat memori | [label] atau [address] |
| Tanda kurung siku wajib digunakan | mov al, myNumber memuat alamat, bukan nilainya |
| Ukuran harus sesuai | Jika memori menyimpan satu byte, gunakan al (bukan rax) |
Kesalahan umum:
; Salah: memuat ALAMAT myNumber, bukan nilainya
mov al, myNumber
; Benar: memuat NILAI yang tersimpan di myNumber
mov al, [myNumber]Tantangan
Tulis satu baris assembly untuk memuat nilai dari alamat memori value ke dalam register al.
Coba sendiri
section .data
msg db 'al = '
msg_len equ $ - msg
section .bss
digit resb 1
section .text
global _start
_start:
; Kodemu berjalan lebih dulu (memuat nilai ke al)
%include "solution.asm"
; Simpan nilai dari al
mov r12, rax
; Cetak "al = "
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msg_len
syscall
; Cetak nilai dalam al
mov rax, r12
add rax, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Keluar
mov rax, 60
mov rdi, 0
syscallPelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
3Instruksi Pertama: MOV
Apa Itu MOV?MOV dengan Nilai LangsungMOV dari Register ke RegisterMOV dari Memori ke RegisterMOV dari Register ke MemoriLEA: Muat AlamatMOV dengan Ukuran BerbedaLatihan: Tukar RegisterUlasan: Tantangan MOVLatihan sendiri: Playground Assembly