【发布时间】:2014-09-10 02:11:09
【问题描述】:
我有一些关于汇编中寻址模式的基本问题。
我得到以下指示:
mov 3[R2+], 0x100
,其中第一个操作数,以索引寻址模式给出,是目标,第二个,以内存直接模式给出,是源。
问题要求人们重写这条指令,只有以下寻址模式可供使用:
-
rx直接注册 -
[rx]间接注册 -
#立即寻址
我可以使用指令add、sub和mov。
我已经有了解决方案,但有些步骤不明白。
这些是说明:
add r2, #3
为什么你必须在这里使用直接寻址模式而不是[r2]?据我了解,间接寻址操作数是寄存器的地址,其内容是包含实际值的内存位置的地址。因此,如果我将 3 添加到 r2,我会得到一个指向不同寄存器的地址,不是吗?但我真正想要的是位于地址为 3 + 地址的前一个值的内存位置的值。有人可以向我解释一下吗?
下一条指令是:
mov r1, #0x100
我明白了。
mov [r2],[r1]
但是,我不明白这个说明。据我了解[r2] 是内存位置的地址。但是为什么在第二个操作数上使用间接寻址呢? R1 包括地址 0x100。那么我是否可以使用[r1] 获取存储在内存中位置 0x100 的值?
我一般来说,如果我想获得一个包含地址的寄存器rx 的值,我可以使用[rx] 之类的表达式来获取该值吗?我如何获得例如的价值在这种情况下,存储在位置[r2] 中的值是否有直接获取该值的方法,或者我是否必须先将内容(即r2 中包含的地址)写入另一个寄存器,例如r3,然后使用[r3]获取实际值?
最后一条指令是
sub r2, #2
我再次不确定为什么使用r2 而不是[r2]。我希望有人可以为我澄清这一点。
【问题讨论】:
-
“这里为什么要使用直接寻址方式?” - 你什么意思?我们要安排常量
3存储在寄存器r2中;你就是这样做的。你还有什么办法呢? -
“但是我不明白这个指令。” - 你不明白什么?你明白那个指令的效果是什么吗?如果没有,请阅读架构的说明手册——它会告诉您每条指令的功能和含义。
-
mov [r2],[r1] 看起来不对。另外,您的练习中没有任何线索-至少您没有提到-为什么需要先将 0x100 加载到另一个寄存器中,然后再将其移动到 r2 指向的地址,而不是执行 mov [r2], #0x100
标签: assembly cpu-registers computer-architecture