Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 反汇编代码并查找'la'的长度`_Assembly_Mips_Disassembly - Fatal编程技术网

Assembly 反汇编代码并查找'la'的长度`

Assembly 反汇编代码并查找'la'的长度`,assembly,mips,disassembly,Assembly,Mips,Disassembly,鉴于以下MIPS组件及其拆卸。la指令有多长?为什么将la指令转换为lui(加载上限立即数)?为什么加载负数 MIPS组件: la $t1,addr1 lw $t1,($t1) 拆卸: la $t1,addr1 lw $t1,($t1) 0x9D00024C: LUI T1, -24576 0x9D000254: LW T1, 0(T1) 长度是否通过减去0x9D000254-0x9D00024C确定?我不知道为什么la会被翻译成lui,为什么它是否定的。因为大概addr1的地址是0xA0

鉴于以下MIPS组件及其拆卸。
la
指令有多长?为什么将
la
指令转换为
lui
(加载上限立即数)?为什么加载负数

MIPS组件:

la $t1,addr1
lw $t1,($t1)
拆卸:

la $t1,addr1
lw $t1,($t1)
0x9D00024C: LUI T1, -24576
0x9D000254: LW T1, 0(T1)

长度是否通过减去
0x9D000254-0x9D00024C
确定?我不知道为什么
la
会被翻译成
lui
,为什么它是否定的。

因为大概
addr1
的地址是0xA0000000(您没有向我们展示过),而
lui t1,-24576
lui t1,0xA000
相同。您正在使用的反汇编程序刚刚决定将数字显示为有符号。每个MIPS指令都有一个字长。但是
la
不是MIPS指令,它是汇编程序“根据需要”编译成实际指令的伪指令,取决于地址值。如果该地址需要在指令中存储完整的32b数字,则它将被编译为
lui+ori
IIRC,但您的地址非常小,仅由
lui
构造。(显然?您不能将完整的32b值放入32b指令中,您将剩下0位来指定指令本身)@Ped7g,感谢您的响应。最后一个问题:
la
指令的长度是否按如下方式计算?@user7187525哦,我(和Michael)完全没有注意到这一点。A) 是的,有点像,你们写的是伪指令的长度,也就是说,在本机指令中支持其功能的代码块的长度。土生土长的印第安人。在MIPS CPU上仍然只有1个字(固定大小的ins.set)。B) 0x54-0x4C=8,因此有两条指令,反汇编隐藏了另一条指令(可能是
ori
)。如果您使用的是MARS/SPIM之类的工具,请搜索它的选项/视图,查看完整的本机指令级反汇编(MARS有一个100%,我曾经使用过一次)。