我有关于汇编中寻址模式的一些基本问题。汇编指令中的寻址模式
我给出的下列指令:
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。那么我是否可以得到存储在位置0x100的内存中的值[r1]
?
我一般如果我想获得一个值给一个寄存器rx
包含一个地址,我可以得到值使用像[rx]
表达式?我如何获得例如在那种情况下存储在位置[r2]
中的值是否有直接获取值的方法,或者是否必须先将另一个寄存器中的内容(即r2中包含的地址)写入r3
,然后使用[r3]
来获取实际价值?
最后的指令
sub r2, #2
再次我不知道为什么r2
使用,而不是[r2]
。我希望有人能为我澄清这一点。
*“为什么你必须在这里使用直接寻址模式?” - - 你是什么意思?我们想要安排将常量'3'存储在寄存器'r2'中;这就是你如何做到的。你会做什么其他方式? –
*“但我不明白这条指令。”* - 你不明白什么?你明白这个指令的效果是什么吗?如果没有,请阅读架构指导手册 - 它会告诉您每条指令的意义和含义。 –
mov [r2],[r1]看起来不对。另外,你的练习中没有线索 - 至少没有你提到过 - 为什么0x100需要首先加载到另一个寄存器中,然后才将它移到r2指向的地址,而不是执行mov [r2],#0x100 –