LC3 LDR指令及其存储的值

3

我不明白为什么执行“LDR R3, R0, 2”指令后,存储在R3中的值是x370C。这个指令中的数字2代表什么意思呢?它似乎不是一个立即数。我理解此时R0包含x370C。能有人帮忙解释一下吗?非常感谢!

.ORIG X3700
 LEA R0, A
 LDI R2, C 
 LDR R3, R0, 2 
 AND R1, R1, #0 
 IN
 ST R0, D 
 JSR  F 
 HALT
 F LD  R1, B
 ADD R1, R1, #1
 BRp F 
 RET

 A .FILL X1234
 B .FILL X370B
 C .FILL X370C
 D .BLKW 2
 E .STRINGZ "ABCD"
 G .FILL X1234
 .END

好像有一段时间没玩了,但是让我回答这个问题,稍等。 - gustavodidomenico
1个回答

3
第二个参数是要加载的基地址的偏移量。
我开始拍照片以便在这里发布并进行解释,但我找到了一个有趣的讲座视频,它将比文字更好地解释,并节省大量时间。 LC3指令-LD、LDR、LDI、LEA 该视频解释了LC3的加载指令之间的区别,并突出了它们之间的差异。
在你的例子中:
你有你的数据:
A .FILL X1234
B .FILL X370B
C .FILL X370C

运行您的代码:

LEA R0, A      -- R0 has the address of A
LDI R2, C      -- R2 has value of which address C has
LDR R3, R0, 2  -- R3 has the value of C 
               -- because R0 has the address of A + 2 positions = C

谢谢。有趣的是,我实际上看过那个视频... 我明白我们应该将“偏移量”添加到R0并将该地址存储到R3中。问题是我不知道如何在指令中使用“2”并将其添加到R0中。 - user4046073
抱歉,我真的不明白你所说的“使用2”的意思是什么? - gustavodidomenico
我的意思是“LDR R3,R0,2”中的第二个参数是“2”,应该是偏移量,对吧?但是它前面没有#,所以看起来不像是立即值。那么我们如何将偏移量添加到R0中,R3为什么是x370c? - user4046073
啊,我明白了!谢谢你! - user4046073
你能看一下这个吗?http://superuser.com/questions/904324/which-of-the-following-instructions-can-reference-a-memory-location-that-is-100 - committedandroider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接