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