Können über eckige Klammern auf einen Speicherbereich zugreifen
Zahl / Wert in Klammern gibt immer die Startadresse an
; Kopiert Speicherstellen 345 bis 352 (8 Byte) in rax
mov rax, [345]
; Kopiert Speicherstellen 345 bis 348 (4 Byte) in eax
mov eax, [345]
; Kopiert rbx in Speicherstellen rax bis rax+7 (8 Byte)
mov [rax], rbx
Nicht nur einfache Register oder feste Zahlen sind möglich
Allgemein: address = scale * index + base + offset
scale
∈ {1,2,4,8}
base,offset
∈ {rax, rbx, rcx, rdx, rbp, rsi, rdi}
offset
kann auch eine Zahl sein
mov rax, [rbx + 4*rdi + 7]
Sinnvoll für Arrayzugriffe in Schleifen
base
ist der Array-Beginnindex
ist der Array-Index (beginnt bei 0)scale
ist die Größe der Array-Einträgebss
-Section kann beschreibbarer Speicher reserviert werdensection .bss
mem:
resb 8 ; Reserviert 8 Byte Speicher
section .text
func:
; Schiebt eine Zahl in den Speicher (QWORD = 8 Byte)
mov QWORD [mem], 573456456
; Schiebt die Zahl aus dem Speicher in rax
mov rax, [mem]