Befehlssatz und Assembler

Was geschieht im Allgemeinen, wenn „a * b“ (Multiplikation zweier int) in C für eine RV32I-CPU ohne M-Erweiterung kompiliert wird?

  1. AEs wird ein Aufruf einer Bibliotheksfunktion, die die Multiplikation durch wiederholtes Schieben und Addieren ausführt
  2. BMultiplikation ist nicht verwendbar, es kommt zu einem Kompilierfehler
  3. CDer mul-Befehl der M-Erweiterung wird unverändert ausgegeben und zur Laufzeit automatisch ergänzt
Antwort und Erläuterung anzeigen

Antwort: A. Es wird ein Aufruf einer Bibliotheksfunktion, die die Multiplikation durch wiederholtes Schieben und Addieren ausführt

Für CPUs ohne Multiplizierer ersetzt der Compiler die Multiplikation durch den Aufruf einer Hilfsbibliotheksfunktion wie __mulsi3. Diese Funktion bestimmt das Produkt wie bei der schriftlichen Multiplikation, indem sie die Bits der einen Zahl einzeln prüft und bei 1 die verschobene andere Zahl addiert. Das Ergebnis ist korrekt, aber um ein Vielfaches von zehn langsamer als ein Hardware-Multiplizierer. Wird eine ISA-Erweiterung weggelassen, wird die Schaltung kleiner, die Verarbeitung aber langsamer.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Befehlssatz und Assembler

  1. Welche Aussage zum Branch Delay Slot (Regel, dass der Befehl unmittelbar nach einem Verzweigungsbefehl unabhängig davon ausgeführt wird, ob verzweigt wird), wie er beim früheren MIPS u. a. bestand, ist richtig?
  2. Wie wird der gelesene 32-Bit-Wert in das 64-Bit-Register eingetragen, wenn bei RV64I der Befehl lw ausgeführt wird?
  3. Welche Beschreibung des ABI (Application Binary Interface) ist richtig?
  4. Mit welchem Befehl erfolgt in RISC-V im Allgemeinen ein Aufruf über einen C-Funktionszeiger „(*fp)(x)“?
  5. Welche Aussage gilt für zwei CPUs, die dieselbe Befehlssatzarchitektur (ISA) verwenden?