正在嘗試使用 SPIM 測驗我的程式并收到此訊息
spim:(決議器)立即值(-16)超出范圍(0 .. 65535)在檔案code1.a的第56行
andi $t1, $t0, 0xfffffff0
可能是什么問題呢?
uj5u.com熱心網友回復:
MIPS 處理器不能在一條指令中完成該操作。該andi指令是一個 I-Type 指令,它包含一個 16 位立即數 - 此外,andi指令零將 16 位立即數擴展到 32 位,因此它不能保存負數(ori&xori也是零擴展,而addi所有其他指令符號擴展立即數)。
每當我們不能在一條指令中做某事時,請使用一系列指令。在這種情況下,將立即數加載到暫存器中,然后使用andR-Type 指令。
僅供參考,MARS 模擬器的匯編器將采用andi $t1, $t0, 0xfffffff0,盡管它會將其視為偽指令,并將該行匯編擴展為 3 指令機器代碼序列,該序列將常量加載到暫存器中(使用兩條指令:比需要的多一條做這項作業),然后使用它and。
顯然,Spim 不提供那種特定的偽指令。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/430127.html
上一篇:指令集架構會同時受益于ADC和SBC,還是所有進位指令都可以重復前一種型別?
下一篇:對堆疊中的值地址感到困惑
