為什麼這篇mips指令li鄉民發文收入到精華區:因為在mips指令li這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者BF3716 (JS)看板Grad-ProbAsk標題Re: [理工] [計組]-MIPS語言時...
: : Pseudoinstruction what is accomplishes Solution
無法直接在MIPS執行 簡述指令的功能 合法的MIPS指令
[1] : li $t5,small $t5=small addi $t5,$zero,small
將16Bit常數載入到$t5 # $t5 <--0 +small
addi是個可以直接加上常數的指令
[2] : li $t5,big $t5=big lui $t5,upper-hulf(big)
: ori $t5,lower-hulf(big)
將32Bit常數載入到$t5
這個要先了解一下定址法的運作方式
一個立即(或基底定址)的常數欄(位址欄)最多都只有16個Bits可表示
而現在要載入一個具有32Bit的數值勢必無法一次完成
lui $t5,upper-hulf(big) 這道指令是先載入高位元的16bits
ori $t5,lower-hulf(big) 這道指令是加上較低位元的16bits
lui會將較高的16bit載入之後,最低的16bit先補上16個0
ori就是指or的邏輯運算,那個i是拿常數來運算的意思
[3] : lw $t5,big($t3) $t5=Memory[$t3+big] li $at,big
: ^^^ add $at,$at,$t5 <-應該有錯
: 理由同上,因為他是32bits lw $t5,0($at)
沒辦法一次處理完成
既然沒辦法一次處理就要知道要去哪裡存取
li $at,big # 所以要先將偏移量big放在大型常數暫存器$at
add $at,$at,$t3 # 而你實際上要去抓的位置是$t3+big
lw $t5,0($at) # 將正確位置放在$at以後,不再需要偏移量,可直接載入了
如果這幾題看不太懂的話,先去讀一下定址法可能會更了解一點
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.37.170.171