我是汇编语言的初学者。我对以下代码感到困惑:
0x0100: load #varstr R2
store R2 varptr
jump whilebool
loop: load varptr R3
**load R3 R4**
store R4 0xfff0
load #'\n' R4
store R4 0xfff0
load varptr R3
load #1 R5
add R3 R5 R3
store R3 varptr
whilebool: load varptr R1
**load R1 R2**
jumpnz R2 loop
halt
varptr: block 1
varstr: block #"Hello"
我不明白大胆的内容。我认为首先,它可以写为load varptr R3并存储R3 0xfff0
感谢您的时间
答案 0 :(得分:0)
您应该已经指定了架构。
猜测你的标题是indirect load/store
,我会说load R3 R4
不仅仅是R4 = R3
,而是R4 = memory[R3]
,因为它被称为间接。如果是这种情况,你显然不能省略这一步。
varptr
最初设置为指向varstr
的开头。您的循环首先将此指针加载到R3
,然后加载引用到R4
的字符。然后将该字符写入地址0xfff0
,我假设该地址是内存映射输出设备。它在每个字符后打印一个换行符。然后代码将varptr
递增1,使其指向下一个字符。最后,whilebool
块通过检查当前字符是否为零来检查是否到达字符串的结尾。为此,需要再次取消引用指针。
有许多方法可以简化此代码,但删除间接不是其中之一;)