题目
MIPS版第二章39-42题,有关寻址。
概述
这道题主要考的是分支指令和跳转指令的寻址范围指令的寻址范围,相关知识点如下:
分支指令
分支指令的指令格式如下所示:
| op | reg | reg | address |
|---|---|---|---|
| 6位 | 5位 | 5位 | 16位 |
从格式可以看到,留给地址的只有16位,因此它的寻址范围是PC周围的±215字(在32位机中,一个字是4个字节)即±217字节。
跳转指令
跳转指令的格式如下所示:
| op | address |
|---|---|
| 6位 | 26位 |
从格式可以看到,留给地址的只有16位。因此它的寻址范围是PC周围的±226字(在32位机中,一个字是4个字节),即±228字节。MIPS跳转指令寻址采用伪直接寻址,跳转指令的目标地址由当前的PC的高4位与跳转指令的低26位左移2位后相加而成。
题目解析
2.39
这道题考察的是MIPS汇编。由于MPIS指令的长度是32位,指令中留给立即数的位数最多只有16位,因此需要分两步进行。首先,写t1寄存器的高16位,然后,写t2寄存器的低16位。
代码如下:
lui $t1, 0x2001
ori $t1, $t1, 0x4324
lui 指令将16位立即数放到目标寄存器高16位,目标寄存器的低16位填0,ori 指令将立即数与第二个寄存器中数的并一起送到第一个寄存器中,因此便完成了将一个32位数写入寄存器的操作。
2.40
由于j指令的跳转范围是±226个字,即±228个字节,因此最高跳转到0x0FFFFFFC。最后一位是C而不是F是因为MIPS对字寻址,无法寻址到具体某个字节。而题中的地址为0x20014324,因此跳转不到。
2.41
MIPS规定每执行一条指令,PC自动加4,因此分支指令从0x00000604开始。最大跳转17位,即增加0x1FFFC或者减少0x20000(17位补码所能表示的数的范围)。0x20014324不在这个范围内。
2.42
这里的初始PC增加0x1FFFC或者减少0x20000后可以到达0x20014324,因此可以跳转到该地址。
参考文献
- 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