TI2/Rechnerarchitektur-Tutorium, 02./03.06.2015

Vorbesprechung 7. Übungszettel

Speicherzugriffe

Grundlegender Zugriff auf Speicherbereiche

  • 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

Berechnung von Speicheradressen

  • 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-Beginn
    • index ist der Array-Index (beginnt bei 0)
    • scale ist die Größe der Array-Einträge

Reservieren und verwenden von Speicherbereichen

  • In der bss-Section kann beschreibbarer Speicher reserviert werden
section .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]

Hinweise zur Aufgabe 3 vom 7. Übungszettel

Nachbesprechung 5. Übungszettel