Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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 MIPS-JAL转换_Assembly_Mips_Mips32 - Fatal编程技术网

Assembly MIPS-JAL转换

Assembly MIPS-JAL转换,assembly,mips,mips32,Assembly,Mips,Mips32,我很难理解如何在MIPS中翻译JAL(J型)指令。以下是我正在处理的指令集: 0x00400018 add $a0, $a3, $0 = 00E02020 0x0040001C jal L2 0x00400020 L1: jr $ra 0x00400024 L2: sw $s1, 0($s2) 0x00400028 bne $a0, $0, ELSE 0x0040002C j L1 0

我很难理解如何在MIPS中翻译JAL(J型)指令。以下是我正在处理的指令集:

0x00400018          add  $a0, $a3, $0 = 00E02020
0x0040001C          jal  L2
0x00400020  L1:     jr   $ra
0x00400024  L2:     sw   $s1, 0($s2)
0x00400028          bne  $a0, $0, ELSE
0x0040002C          j    L1
0x00400030  ELSE:   addi $a0, $a0, A2 
0x00400034          j    L2
第一行没有造成问题,但对于第二行,我完全不确定如何翻译日航L2。使用,我看到要获得地址,我需要执行R[31]=PC+8;PC=JumpAddr


J-Type指令是操作码/6位和地址26位,因此前6位是00 0011,但我不知道如何获得剩余的26位。任何帮助都将不胜感激。

MIPS有两个不同的控制流说明:
1.(有条件的)
分支机构
es
2.(无条件)立即
跳转
s
3.(无条件)寄存器
跳转
s

分支
b
包含相对于下一条指令的16位有符号整数个指令,以分支到。

jump
j
/jump和link
jal
包含一个26位立即数,它被右移两位(因为所有MIPS(32)指令都有4字节长)。高位4位来自指令,顺序跟随
跳转



跳转寄存器jr
/跳转和链接寄存器jalr
不包含分支目标。目标位于寄存器中,因此已经有32位长。

MIPS有两个不同的控制流指令:
1.(有条件的)
分支机构
es
2.(无条件)立即
跳转
s
3.(无条件)寄存器
跳转
s

分支
b
包含相对于下一条指令的16位有符号整数个指令,以分支到。

jump
j
/jump和link
jal
包含一个26位立即数,它被右移两位(因为所有MIPS(32)指令都有4字节长)。高位4位来自指令,顺序跟随
跳转



跳转寄存器jr
/跳转和链接寄存器jalr
不包含分支目标。目标位于寄存器中,因此已经有32位长。

我知道现在这完全不相关,但对于偶然发现此问题并需要帮助的任何人:

您将获取L2-->0x0040 0024的地址,并删除前四位和后两位。这将给您留下:

0000 0100 0000 0000 0010 01作为剩余的26位


希望我能帮助别人

我知道现在这完全无关紧要,但对于任何偶然发现这个问题并需要帮助的人:

您将获取L2-->0x0040 0024的地址,并删除前四位和后两位。这将给您留下:

0000 0100 0000 0000 0010 01作为剩余的26位


希望我能帮助别人

你说的“获取剩余的26位”是什么意思?这是为了什么(即,你在开发什么)?反汇编程序?模拟器?用于FPGA的MIPS内核?您的输入和输出是什么?这只是为了练习将MIPS指令翻译成机器代码(先是二进制,然后是十六进制)。每个MIPS指令(例如add$a0、$a3、$0)是32位的,因此对于第二行,因为我有操作码,操作码是6位的,所以我不知道如何获得剩余的26位(我不知道如何翻译jal L2)。如果你已经阅读了完整的32位指令字,那么你所要做的就是屏蔽掉不需要的位。类似于
lower\u26\u bits=指令\uword&0x3FFFFFF。请根据R[31]=PC+8的相关情况,一步一步地解释这一点;PC=JumpAddr。您是如何到达0X3FFFFFF的。我想我不知道你说的“屏蔽掉多余的部分”是什么意思。明白你说的“获取剩余的26位”是什么意思吗?这是为了什么(即,你在开发什么)?反汇编程序?模拟器?用于FPGA的MIPS内核?您的输入和输出是什么?这只是为了练习将MIPS指令翻译成机器代码(先是二进制,然后是十六进制)。每个MIPS指令(例如add$a0、$a3、$0)是32位的,因此对于第二行,因为我有操作码,操作码是6位的,所以我不知道如何获得剩余的26位(我不知道如何翻译jal L2)。如果你已经阅读了完整的32位指令字,那么你所要做的就是屏蔽掉不需要的位。类似于
lower\u26\u bits=指令\uword&0x3FFFFFF。请根据R[31]=PC+8的相关情况,一步一步地解释这一点;PC=JumpAddr。您是如何到达0X3FFFFFF的。我想我不知道你说的“屏蔽掉不需要的位”是什么意思。你看,如果PC的前四位不是0x00,它就不起作用。但是如果PC的前四位不是0x00,它就不起作用。