Diferența dintre „addi” și „add” pentru pseudoinstrucțiunea „move” în MIPS? (Programare, Asamblare, Adăugați, Mips, Muta)

izelkay a intrebat.
a intrebat.

Pentru această pseudo-instrucție:

move $rt, $rs

Sunt acceptabile atât codul de asamblare „addi”, cât și cel de asamblare „add”? Așadar, aș putea folosi oricare dintre ele

add $rt, $rs, $0

fie

addi $rt, $rs, $0

?

Edit: Cred că am făcut o greșeală cu addi

add $rt, $rs, $0

ar fi același lucru ca și

addi $rt, $rs, 0

din moment ce add adaugă registre, iar eu am nevoie de o constantă pentru imediată pentru addi

1 răspunsuri
paxdiablo

The addi necesită o instrucțiune imediată imediată, mai degrabă decât un registru, astfel încât $0 ar fi de fapt 0:

add   $rt, $rs, $0
addi  $rt, $rs, 0

Ambele vor funcționa și au toate informațiile necesare codificate în instrucțiunea însăși):

add   $d, $s, $t
    0000 00ss ssst tttt dddd d000 0010 0000
addi  $t, $s, i
    0010 00ss ssst tttt iiii iiii iiii iiii

Cu toate acestea, ar fi mai obișnuit să se utilizeze doar instrucțiunea cu blocare zero $0 în acest caz particular, deoarece acesta este, până la urmă, scopul său.

De asemenea, aș tinde să folosesc totuși varianta fără semn, deoarece cred că îmi amintesc că în cazul instrucțiunilor cu semn este posibil să se facă o verificare suplimentară a depășirilor:

addu  $rt, $rs, $0

Comentarii

  • Mulțumesc, așa mă gândeam și eu. Mi-am editat întrebarea pentru a reflecta acest lucru exact așa cum ați răspuns, dar acum înțeleg. –  > Por izelkay.
  • Există vreun beneficiu de performanță dacă se folosește o instrucțiune mai degrabă decât cealaltă? –  > Por Yu Chen.
  • @YuChen, consultați stackoverflow.com/questions/44249629/… – –  > Por paxdiablo.