Befehlssatz und Assembler

In a0 steht die Anfangsadresse eines Arrays a vom Typ int (4 Byte), in a1 der Index i. Was lädt der obige Code in a2?

slli t0, a1, 2
add  t0, a0, t0
lw   a2, 0(t0)
  1. ADen Wert von a[4*i]
  2. BDie Adresse von a[i]
  3. CDen Wert von a[i]
Antwort und Erläuterung anzeigen

Antwort: C. Den Wert von a[i]

Zeile 1 verschiebt i um 2 Bit nach links und bildet 4×i, Zeile 2 addiert dies zur Anfangsadresse des Arrays und ergibt die Adresse von a[i], Zeile 3 liest ab dieser Adresse 4 Byte. Da ein int-Element 4 Byte belegt, liegt das i-te Element 4×i Byte hinter dem Anfang. „a[i]“ in C wird vom Compiler in eine solche Adressberechnung und einen Load übersetzt.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Befehlssatz und Assembler

  1. Welche Aussage zu Verfahren ist richtig, bei denen Rechenbefehle wie „add eax, [rbx]“ bei x86 Werte im Speicher direkt verwenden können?
  2. Welche Erklärung, wie heutige leistungsfähige x86-CPUs komplexe Befehle intern ausführen, ist richtig?
  3. Welche Befehle fügt die M-Erweiterung von RISC-V dem Basis-Ganzzahlbefehlssatz hinzu?
  4. Was ist der Hauptzweck der C-Erweiterung (komprimierte Befehle) von RISC-V?
  5. Was geschieht im Allgemeinen, wenn „a * b“ (Multiplikation zweier int) in C für eine RV32I-CPU ohne M-Erweiterung kompiliert wird?