Assembly 未对齐的负载。加载到R1中的单词的地址是什么?

Assembly 未对齐的负载。加载到R1中的单词的地址是什么?,assembly,mips,Assembly,Mips,有人能解释一下寄存器R2和R3的OR如何导致寄存器R1的地址值15吗 R5 = 12 lw R2, 0(R5) lw R3, 4(R5) sll R2, R2, 24 srl R3, R3, 8 or R1, R2, R3 那些相反的移位+或似乎在8字节的字对上实现了滑动窗口,实现了来自R5+3的未对齐加载 在与'4(R5)的低位3字节合并之前,我们将其左移24位=3字节。显然应该是这样的: R5 = 12 lw R2, 0(R5) -> [12,13,14,15] lw R3, 4

有人能解释一下寄存器R2和R3的OR如何导致寄存器R1的地址值15吗

R5 = 12 
lw R2, 0(R5)
lw R3, 4(R5)
sll R2, R2, 24
srl R3, R3, 8
or R1, R2, R3

那些相反的移位+或似乎在8字节的字对上实现了滑动窗口,实现了来自R5+3的未对齐加载


在与'4(R5)的低位3字节合并之前,我们将其左移24位=3字节。

显然应该是这样的:

R5 = 12 
lw R2, 0(R5) -> [12,13,14,15]
lw R3, 4(R5) ->[16,17,18,19], offset 4 bytes from value stored in R5, i.e. 12
sll R2, R2, 24 ->[15,0,0,0], shift left 3 bytes (24/8=3)
srl R3, R3, 8 -> [0,16,17,18], shift left 1 byte
or R1, R2, R3 ->[15,16,17,18], "merge the arrays"

所以这个词从索引或地址值15开始

lw
是从内存加载的。在不知道引用的内存内容的情况下,我们无法判断
R2
R3
将是什么。不,正如@Jester所说,鉴于这种不完整性,任何人如何回答内存位置12到19处的内容?问题是“加载到R1中的单词的地址是什么”。答案是15,但我不明白你怎么知道。没有单词加载到
R1
,因此加载到
R1
的单词没有地址——这个问题没有意义——这是一个非序列,术语不一致
R1
是通过算术运算(逻辑OR)而不是内存运算赋值的。算术运算有源,而不是(内存)地址。此后或之后的
R1
值取决于
R2
R3
的值,
R2
R3
中的值(假设
R5
保持12)取决于内存位置12-19,此处未显示。是的,带注释的写得不错;这正是我在回答中所描述的,但更详细。我认为这是针对big-endian MIPS(与MARS不同),因此
R2
加载的最高地址字节位于寄存器的低位8位。(并且应该是
3(R15)
处未对齐字的高8位)