有关间接加载/存储的汇编语言的问题

时间:2014-12-25 09:35:27

标签: assembly

我是汇编语言的初学者。我对以下代码感到困惑:

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

感谢您的时间

1 个答案:

答案 0 :(得分:0)

您应该已经指定了架构。

猜测你的标题是indirect load/store,我会说load R3 R4不仅仅是R4 = R3,而是R4 = memory[R3],因为它被称为间接。如果是这种情况,你显然不能省略这一步。

varptr最初设置为指向varstr的开头。您的循环首先将此指针加载到R3,然后加载引用到R4的字符。然后将该字符写入地址0xfff0,我假设该地址是内存映射输出设备。它在每个字符后打印一个换行符。然后代码将varptr递增1,使其指向下一个字符。最后,whilebool块通过检查当前字符是否为零来检查是否到达字符串的结尾。为此,需要再次取消引用指针。

有许多方法可以简化此代码,但删除间接不是其中之一;)