Menu
CoddyTech

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 al

Kamu 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:

AturanPenjelasan
Sumber harus berupa alamat memori[label] atau [address]
Tanda kurung siku wajib digunakanmov al, myNumber memuat alamat, bukan nilainya
Ukuran harus sesuaiJika 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]
challenge icon

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
    syscall
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Playground Assembly