Instructieset en assembly

Wat gebeurt er in het algemeen als „a * b” (vermenigvuldiging van ints) in C wordt gecompileerd voor een RV32I-CPU zonder M-extensie?

  1. AHet wordt een aanroep van een bibliotheekfunctie die de vermenigvuldiging uitvoert door herhaald te schuiven en op te tellen
  2. BVermenigvuldigen kan niet worden gebruikt, dus er treedt een compileerfout op
  3. CDe mul-instructie van de M-extensie wordt ongewijzigd uitgevoerd en tijdens uitvoering automatisch toegevoegd
Antwoord en toelichting tonen

Antwoord: A. Het wordt een aanroep van een bibliotheekfunctie die de vermenigvuldiging uitvoert door herhaald te schuiven en op te tellen

Voor een CPU zonder vermenigvuldiger vervangt de compiler de vermenigvuldiging door een aanroep van een hulpbibliotheekfunctie zoals __mulsi3. Deze functie berekent het product op dezelfde manier als schriftelijk vermenigvuldigen: de bits van het ene getal worden een voor een onderzocht en als een bit 1 is, wordt het geschoven andere getal opgeteld. Het rekent correct, maar is tientallen malen trager dan een hardwarevermenigvuldiger. Als ISA-extensies worden weggelaten, wordt het circuit kleiner maar de verwerking trager.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Instructieset en assembly

  1. Welke uitspraak is juist over de branch delay slot die bij het vroegere MIPS en dergelijke bestond (de afspraak dat de ene instructie direct na een sprong-instructie wordt uitgevoerd, ongeacht of er wordt gesprongen)?
  2. Hoe komt de gelezen 32-bits waarde in het 64-bits register wanneer de lw-instructie wordt uitgevoerd in het 64-bits RV64I?
  3. Welke omschrijving van de ABI (application binary interface) is juist?
  4. Met welke instructie wordt een aanroep via een functiepointer in C, „(*fp)(x)”, in RISC-V gewoonlijk uitgevoerd?
  5. Welke uitspraak over twee CPU's met dezelfde instructiesetarchitectuur (ISA) is juist?