Befehlssatz und Assembler

Was kann geschehen, wenn bei RISC-V die Adresse des lw-Befehls, der 4 Byte liest, kein Vielfaches von 4 ist (nicht ausgerichtet)?

  1. ADer Befehl wird automatisch auf das nächste Vielfache von 4 umgedeutet und liest stets gleich schnell und korrekt
  2. BJe nach CPU-Implementierung tritt eine Ausnahme auf, oder der Zugriff wird in Hardware oder Software behandelt und ist sehr langsam
  3. CDie unteren 2 Bit der Adresse werden ignoriert, und es gibt keinen Fehler
Antwort und Erläuterung anzeigen

Antwort: B. Je nach CPU-Implementierung tritt eine Ausnahme auf, oder der Zugriff wird in Hardware oder Software behandelt und ist sehr langsam

4-Byte-Daten an einer Adresse, die ein Vielfaches von 4 ist, lassen sich mit einem Speicherzugriff lesen. Überschreiten sie eine Grenze, sind zwei Zugriffe nötig; RISC-V überlässt es der Implementierung, nicht ausgerichtete Zugriffe in der Schaltung zu behandeln oder eine Ausnahme auszulösen und der Software zu überlassen. Im zweiten Fall ist der Zugriff um Größenordnungen langsamer. Deshalb fügen Compiler zwischen Strukturelementen Füllbytes (Padding) zur Ausrichtung ein.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Befehlssatz und Assembler

  1. Um das Wievielfache des Werts von a0 ist t0 nach dem RISC-V-Befehl „slli t0, a0, 3“ größer (Überlauf nicht beachtet)?
  2. 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?
  3. Welche Aussage zu Verfahren ist richtig, bei denen Rechenbefehle wie „add eax, [rbx]“ bei x86 Werte im Speicher direkt verwenden können?
  4. Welche Erklärung, wie heutige leistungsfähige x86-CPUs komplexe Befehle intern ausführen, ist richtig?
  5. Welche Befehle fügt die M-Erweiterung von RISC-V dem Basis-Ganzzahlbefehlssatz hinzu?