題目
MIPS版第二章39-42題瓣俯,有關(guān)尋址司蔬。
概述
這道題主要考的是分支指令和跳轉(zhuǎn)指令的尋址范圍指令的尋址范圍域携,相關(guān)知識點(diǎn)如下:
分支指令
分支指令的指令格式如下所示:
op | reg | reg | address |
---|---|---|---|
6位 | 5位 | 5位 | 16位 |
從格式可以看到巴帮,留給地址的只有16位帆啃,因此它的尋址范圍是PC周圍的±215字(在32位機(jī)中极舔,一個字是4個字節(jié))即±217字節(jié)。
跳轉(zhuǎn)指令
跳轉(zhuǎn)指令的格式如下所示:
op | address |
---|---|
6位 | 26位 |
從格式可以看到链瓦,留給地址的只有16位拆魏。因此它的尋址范圍是PC周圍的±226字(在32位機(jī)中盯桦,一個字是4個字節(jié)),即±228字節(jié)渤刃。MIPS跳轉(zhuǎn)指令尋址采用偽直接尋址拥峦,跳轉(zhuǎn)指令的目標(biāo)地址由當(dāng)前的PC的高4位與跳轉(zhuǎn)指令的低26位左移2位后相加而成。
題目解析
2.39
這道題考察的是MIPS匯編卖子。由于MPIS指令的長度是32位略号,指令中留給立即數(shù)的位數(shù)最多只有16位,因此需要分兩步進(jìn)行洋闽。首先玄柠,寫t1寄存器的高16位,然后诫舅,寫t2寄存器的低16位羽利。
代碼如下:
lui $t1, 0x2001
ori $t1, $t1, 0x4324
lui 指令將16位立即數(shù)放到目標(biāo)寄存器高16位刊懈,目標(biāo)寄存器的低16位填0这弧,ori 指令將立即數(shù)與第二個寄存器中數(shù)的并一起送到第一個寄存器中,因此便完成了將一個32位數(shù)寫入寄存器的操作虚汛。
2.40
由于j指令的跳轉(zhuǎn)范圍是±226個字匾浪,即±228個字節(jié),因此最高跳轉(zhuǎn)到0x0FFFFFFC卷哩。最后一位是C而不是F是因?yàn)镸IPS對字尋址蛋辈,無法尋址到具體某個字節(jié)。而題中的地址為0x20014324将谊,因此跳轉(zhuǎn)不到冷溶。
2.41
MIPS規(guī)定每執(zhí)行一條指令,PC自動加4瓢娜,因此分支指令從0x00000604開始挂洛。最大跳轉(zhuǎn)17位,即增加0x1FFFC或者減少0x20000(17位補(bǔ)碼所能表示的數(shù)的范圍)眠砾。0x20014324不在這個范圍內(nèi)虏劲。
2.42
這里的初始PC增加0x1FFFC或者減少0x20000后可以到達(dá)0x20014324,因此可以跳轉(zhuǎn)到該地址褒颈。
參考文獻(xiàn)
- https://blog.csdn.net/qq_42339060/article/details/89971314
- https://blog.csdn.net/goodlinux/article/details/6731484
備注
Author: Li Yunzhe
Contact: liyunzhe@whu.edu.cn
License: Copyright (c) 2019 Li Yunzhe