帮助从十六进制中的MIPS指令中查找地址

时间:2011-09-01 09:33:48

标签: assembly mips

嗨,我被困在我的任务上,这要求我编写一个读取输入文件的程序,如下所示:

Registers
r1 = 0c100009

Instructions
0c100009
3c071001
8ce20011
84e33080
80e48000
ace2ffff
a4e39001
a0e48088
03e00008

找出指令是保存还是加载,指令访问了多少字节,以及内存中第一个字节的地址。

我需要帮助了解说明的工作原理。我知道我必须将指令翻译成二进制,例如

8ce20011

100011 00111 00010 0000000000010001 

lw $t3 17($s7)

但我不知道如何计算地址和访问的字节数。我想忽略所有未保存或加载的指令。

而且,符号扩展是什么意思?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你走在正确的轨道上。

操作码8ce20011反汇编为“lw v0,17(a3)”或等效“lw $ 2,17($ 7)”

在你的“lw $ t3,17($ 7)”示例中,您需要知道$ 7的当前值(即$ a3),然后才能计算出它的加载地址。提示:看看上一条指令。 “lw”指令加载一个字或4个字节。

顺便说一下,如果没有在字边界上对齐的偏移量为17的“lw”是非法的,会导致MIPS陷阱。

Sign extension