Assembly MIPS-JAL转换
我很难理解如何在MIPS中翻译JAL(J型)指令。以下是我正在处理的指令集: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
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.(有条件的)
分支机构
es2.(无条件)立即
跳转
s3.(无条件)寄存器
跳转
s
分支b
包含相对于下一条指令的16位有符号整数个指令,以分支到。jump
j
/jump和linkjal
包含一个26位立即数,它被右移两位(因为所有MIPS(32)指令都有4字节长)。高位4位来自指令,顺序跟随跳转
跳转寄存器jr
/跳转和链接寄存器jalr
不包含分支目标。目标位于寄存器中,因此已经有32位长。MIPS有两个不同的控制流指令:1.(有条件的)
分支机构
es2.(无条件)立即
跳转
s3.(无条件)寄存器
跳转
s
分支b
包含相对于下一条指令的16位有符号整数个指令,以分支到。jump
j
/jump和linkjal
包含一个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,它就不起作用。