mips - 手动执行 lb MIPS 指令
问题描述
我正在手动执行 MIPS 指令,但我并不真正了解它是如何工作的。在下面给出的示例中,$t0 中的内容从 0x00001117 变为 0x00000080。我不明白为什么。任何帮助都会很棒。
lbu $t0, 5($s0)
lbu (i-type, load byte unsigned)
Registers before Instruction Registers after
Register Contents Register Contents
$t0 0x00001117 $t0 0x00000080
$s0 0x10010010 $s0 0x10010010
$pc 0x0040008c $pc 0x00400090
Memory before Memory After
Location Contents Location Contents
0x10010010 0x00400004 0x10010010 0x00400004
0x10010014 0x00408008 0x10010014 0x00408008
0x10010018 0x0040001c 0x10010018 0x0040001c
解决方案
这假设一个小端内存布局。
$s0
有值0x10010010
,所以5($s0)
指的是地址处的值0x10010015
。
以字节形式查看的内存内容如下所示:
+0 +1 +2 +3
-----------------------
0x10010010: 04 00 40 00
0x10010014: 08 80 40 00
...
如您所见,位于的字节0x10010015
为0x80
. 并且由于lbu
将加载的值零扩展为 32 位,因此高 24 位$t0
被清除。
推荐阅读
- python - 如何在使用 Keras 训练时打印或导出张量的文件值?
- r - R 中的属性分配如何根据语言语法分解?
- java - 如何使用 Kotlin 将列表转换为地图
- java - 我的查询给出以下错误,Unexpected token WHERE
- cypress - 在 Cypress 中键入转义字符在升级后停止工作
- reactjs - 输入'{孩子:字符串;}' 与类型 'IntrinsicAttributes & IModalProps' 没有共同的属性
- python - OpenCV 4.0 和 AMD 处理器 Python
- c# - 替换字符串中的特定重复字符
- php - 波形没有应有的平滑
- mysql - 尝试在表格布局中插入新列时出现问题