Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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中存储超过32位_Assembly_Mips_Mips32 - Fatal编程技术网

Assembly 在MIPS中存储超过32位

Assembly 在MIPS中存储超过32位,assembly,mips,mips32,Assembly,Mips,Mips32,我在使用MIPS将值存储在寄存器(不是div或mult操作)时遇到了很多麻烦。例如,我需要存储或保存5字节和8字节的数据。如何在$t3寄存器中获取0x1235343036(5字节)之类的值 如果我像你一样做手术 li $t3,0x1234 li $t4,0x567812 sll $t3,$t3,24 寄存器$t3仅包含0x340000000。(12丢失。在使用$t4执行“或”操作后,在$t3寄存器中获得类似0x1234567812的内容,我需要类似0x1234000000的内容。) 我想要大于

我在使用MIPS将值存储在寄存器(不是div或mult操作)时遇到了很多麻烦。例如,我需要存储或保存5字节和8字节的数据。如何在
$t3
寄存器中获取0x1235343036(5字节)之类的值

如果我像你一样做手术

li $t3,0x1234
li $t4,0x567812
sll $t3,$t3,24
寄存器
$t3
仅包含0x340000000。(12丢失。在使用
$t4
执行“或”操作后,在
$t3
寄存器中获得类似0x1234567812的内容,我需要类似0x1234000000的内容。)


我想要大于32位的寄存器。如何实现这一点?

我不是MIPS汇编专家,但我认为不可能有更大的寄存器(除非您的CPU有一些SIMD指令单元)。您必须通过使用2个寄存器来模拟64位操作来解决此问题。 下面是一些伪代码,您可以如何做到这一点:

# t1 is high dword of first variable, t2 is low dword of first variable
# t3 is high dword of second variable, t4 is low dword of second variable
# lets assign values to both variables
t1 = 0
t2 = 0x1234
t3 = 0
t4 = 0x567812
#now shift left first by 24 bits
t1 = (t1 << 24) + (t2 >> (32 - 24))
t2 = t2 << 24
#now lets or with second
t1 = t1 | t3
t2 = t2 | t4
#t1是第一个变量的高dword,t2是第一个变量的低dword
#t3是第二个变量的高dword,t4是第二个变量的低dword
#让我们为这两个变量赋值
t1=0
t2=0x1234
t3=0
t4=0x567812
#现在先向左移位24位
t1=(t1>(32-24))

t2=t2我不是MIPS汇编专家,但我认为不可能有更大的寄存器(除非您的CPU有一些SIMD指令单元)。您必须通过使用2个寄存器来模拟64位操作来解决此问题。 下面是一些伪代码,您可以如何做到这一点:

# t1 is high dword of first variable, t2 is low dword of first variable
# t3 is high dword of second variable, t4 is low dword of second variable
# lets assign values to both variables
t1 = 0
t2 = 0x1234
t3 = 0
t4 = 0x567812
#now shift left first by 24 bits
t1 = (t1 << 24) + (t2 >> (32 - 24))
t2 = t2 << 24
#now lets or with second
t1 = t1 | t3
t2 = t2 | t4
#t1是第一个变量的高dword,t2是第一个变量的低dword
#t3是第二个变量的高dword,t4是第二个变量的低dword
#让我们为这两个变量赋值
t1=0
t2=0x1234
t3=0
t4=0x567812
#现在先向左移位24位
t1=(t1>(32-24))

t2=t2毫米听起来更好,我试试看。谢谢!:)你可以有更大的寄存器,如果你移动到MIPS64mm听起来更好,我会试试。谢谢!:)如果移动到MIPS64,您可以拥有更大的寄存器。虽然您没有指定,但很明显您使用的是32位处理器内核,这意味着寄存器宽度为32位。左移位操作丢弃最左边的位。寄存器大小是固定的。不能在32位MIP中将大于32位的值存储到单个寄存器中。虽然未指定,但很明显您使用的是32位处理器内核,这意味着寄存器宽度为32位。左移位操作丢弃最左边的位。寄存器大小是固定的。不能将大于32位的值存储到32位MIPS中的单个寄存器中