Assembly 存储字、加载字和移动字之间的区别

Assembly 存储字、加载字和移动字之间的区别,assembly,mips,mips32,mips64,Assembly,Mips,Mips32,Mips64,我是mips大会的新手。我无法得到这些指令的确切作用,所以我尝试测试它。该代码用于切换寄存器t0和t1的值 # Perform swap. lw $t3, 0($t0) lw $t4, 0($t1) sw $t3, 0($t1) sw $t4, 0($t0) 代码似乎合理,将它们的值存储在t3和t4中,然后交换它们。我不明白的是为什么我们不能在这里使用移动或加载单词而不是存储单词?例如,为什么代码不能是这样的 # Perform swap. l

我是mips大会的新手。我无法得到这些指令的确切作用,所以我尝试测试它。该代码用于切换寄存器t0和t1的值

# Perform swap.
    lw  $t3, 0($t0)
    lw  $t4, 0($t1) 
    sw  $t3, 0($t1)
    sw  $t4, 0($t0)
代码似乎合理,将它们的值存储在t3和t4中,然后交换它们。我不明白的是为什么我们不能在这里使用移动或加载单词而不是存储单词?例如,为什么代码不能是这样的

# Perform swap.
    lw  $t3, 0($t0)
    lw  $t4, 0($t1) 
    move $t1,$t3
    move $to,$t4
还是像这样

# Perform swap.
lw  $t3, 0($t0)
lw  $t4, 0($t1) 
lw  $t1,0($t3)
lw $t2,0($t4)
存储字(4字节):从寄存器中获取内容并将其存储在内存中

加载字(4个字节):完全相反,从内存定位和 将其存储在寄存器中

移动:它是从寄存器1(例如)复制值并将其放到另一个寄存器
寄存器

移动
实际上没有大小,它将移动整个寄存器。因此,这将取决于您运行的处理器(mips32中有4个字节,mips64中有8个字节)您是对的,但为什么在Gnu汇编中,有许多类似movq或movb等的movq、movb等都是英特尔指令。在MIPS中,无论如何都没有实际的
move
指令。它通常转换为
add$dst、$zero、$src
(将零添加到源代码并将其保存到目标代码相当于将$src移动到$dst。)