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 为什么该值存储在寄存器0x60504C中,而不是12中?_Assembly_Mips - Fatal编程技术网

Assembly 为什么该值存储在寄存器0x60504C中,而不是12中?

Assembly 为什么该值存储在寄存器0x60504C中,而不是12中?,assembly,mips,Assembly,Mips,我正在复习考试,我不明白为什么答案是0x60504c而不是12,或者为什么后面的答案是0123000而不是123 谢谢你的帮助,代码如下。我已经在QtSPIM中运行了它,但我仍然无法理解它 data var1: .byte 12 var2: .byte 4,5,6 var3: .word 1,2,3,4,5,6,7,8,9 .globl main .text main: la $t1, var1 la $t2, var2 la $t3, var3 lb $a1,1($t2) #$a1=

我正在复习考试,我不明白为什么答案是0x60504c而不是12,或者为什么后面的答案是0123000而不是123

谢谢你的帮助,代码如下。我已经在QtSPIM中运行了它,但我仍然无法理解它

data
var1:  .byte 12
var2:  .byte 4,5,6
var3:  .word 1,2,3,4,5,6,7,8,9
  .globl main
.text
main:
la $t1, var1
la $t2, var2
la $t3, var3
lb $a1,1($t2) #$a1= 0x5
lw $a1, 0($t1) #$a1= 0x605040c
lui $a1,0x123 #$a1= 0x01230000
lw $a1, 0($t3) #$a1= 0x1
sll $a1,$a1,3 #$a1= 0x8

对于您的问题,通常可以通过阅读有关您使用的每个MIPS说明的说明来回答

我将假定您的MIPS机器是

首先,让我们看看你的记忆:

Address:      0     1  2  3   4  5  6  7   8  9  10 11  12 13 14 15 ... 36 37 38 39
Value (hex):  0C    04 05 06  01 00 00 00  02 00 00 00  03 00 00 00 ... 09 00 00 00
Label:        ^var1 ^var2     ^var3
现在,我们将分析代码中棘手的部分:

lw $a1, 0($t1)
^这意味着加载从地址t1开始的32位(4字节)字,以小尾端为单位。t1=var1时,4个字节为0C 04 05 06。作为32位整数的解释为0605040C

lui $a1,0x123 #$a1= 0x01230000
^这意味着将立即16位常量加载到上16位,并使下16位全部为零。(请参阅,跳至LUI。)