嗨,我被困在我的任务上,这要求我编写一个读取输入文件的程序,如下所示:
Registers
r1 = 0c100009
Instructions
0c100009
3c071001
8ce20011
84e33080
80e48000
ace2ffff
a4e39001
a0e48088
03e00008
找出指令是保存还是加载,指令访问了多少字节,以及内存中第一个字节的地址。
我需要帮助了解说明的工作原理。我知道我必须将指令翻译成二进制,例如
8ce20011
到
100011 00111 00010 0000000000010001
是
lw $t3 17($s7)
但我不知道如何计算地址和访问的字节数。我想忽略所有未保存或加载的指令。
而且,符号扩展是什么意思?
感谢您的帮助。
答案 0 :(得分:0)
你走在正确的轨道上。
操作码8ce20011反汇编为“lw v0,17(a3)”或等效“lw $ 2,17($ 7)”
在你的“lw $ t3,17($ 7)”示例中,您需要知道$ 7的当前值(即$ a3),然后才能计算出它的加载地址。提示:看看上一条指令。 “lw”指令加载一个字或4个字节。
顺便说一下,如果没有在字边界上对齐的偏移量为17的“lw”是非法的,会导致MIPS陷阱。