Befehlssatz und Assembler

Welche Wirkung hat der RISC-V-Befehl auipc (add upper immediate to PC)?

  1. AEr speichert den Wert des PC unverändert im Speicher
  2. BEr addiert zur eigenen Adresse (PC) den um 12 Bit nach links verschobenen 20-Bit-Immediate-Wert und legt das Ergebnis in einem Register ab
  3. CEr springt bedingungslos an die per Immediate angegebene Adresse und überschreibt den PC
Antwort und Erläuterung anzeigen

Antwort: B. Er addiert zur eigenen Adresse (PC) den um 12 Bit nach links verschobenen 20-Bit-Immediate-Wert und legt das Ergebnis in einem Register ab

auipc legt lediglich „PC + (Immediate << 12)“ in ein Register. Addiert man anschließend mit jalr oder lw einen Offset aus den unteren 12 Bit, lassen sich Adressen von Funktionen oder Daten in einem Bereich von etwa ±2 GiB als Abstand vom PC angeben. Damit können in positionsunabhängigem Code, der an beliebiger Stelle geladen läuft, entfernte Funktionen aufgerufen und globale Variablen gelesen werden.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Befehlssatz und Assembler

  1. Welchen 32-Bit-Wert enthält t0 nach Ausführung von „addi t0, zero, -1“ in RISC-V (RV32I)?
  2. Im Speicher steht in einem Byte der Wert 0x80. Welche Kombination von Werten ist richtig, wenn dieses Byte mit den RISC-V-Befehlen lb und lbu in ein 32-Bit-Register geladen wird?
  3. Welcher Unterschied zwischen RISC-V und x86 beim Mechanismus bedingter Verzweigungen ist richtig?
  4. Welche Wirkung hat der RISC-V-Befehl „slt t0, a0, a1“?
  5. Welchen Wert hat t0, wenn der obige RISC-V-Code ausgeführt wurde?