MIPS: Integer Vermenigvuldigen en Delen

Dus ik ben een rekenprogramma aan het bouwen in MIPS en ik probeer de functies voor vermenigvuldigen en delen te schrijven.

Momenteel lees ik de gehele getallen in een lus als volgt:

li $v0, 5
syscall

en dan uiteindelijk mijn functies multien diviaanroepen, afhankelijk van welke actie de gebruiker wil doen.

Dus aangenomen dat ik de gehele getallen in $a0en $a1heb, wat zou dan een schone manier zijn om $a0te vermenigvuldigen met $a1en/of $a0delen door $a1? Ik heb online rondgekeken, maar ik kan geen schone en gemakkelijke manier vinden om dit te doen, omdat ik het resulterende antwoord terug moet sturen in $v0


Antwoord 1, autoriteit 100%

Gebruik om te vermenigvuldigen multvoor vermenigvuldiging met teken en multuvoor vermenigvuldiging zonder teken. Merk op dat het resultaat van de vermenigvuldiging van twee 32-bits getallen een 64-getal oplevert. Als je het resultaat terug wilt in $v0, dan betekent dat dat je ervan uitgaat dat het resultaat in 32 bits past.

De 32 meest significante bits worden vastgehouden in het speciale register HI(toegankelijk via de instructie mfhi) en de 32 minst significante bits worden vastgehouden in de LOspeciaal register (toegankelijk via de mfloinstructie):

Bijvoorbeeld:

li $a0, 5
li $a1, 3
mult $a0, $a1
mfhi $a2 # 32 most significant bits of multiplication to $a2
mflo $v0 # 32 least significant bits of multiplication to $v0

Gebruik divvoor getekende splitsingen en divuvoor ongetekende splitsingen om te splitsen. In dit geval zal het speciale register HIde rest bevatten en het speciale register LOhet quotiënt van de deling.

Bijvoorbeeld:

div $a0, $a1
mfhi $a2 # remainder to $a2
mflo $v0 # quotient to $v0

Other episodes