【发布时间】:2020-02-19 20:09:31
【问题描述】:
坚持学习汇编程序
mov byte ptr [rax+rdx-01],00
RAX=00000004
RDX=2295EA3B878
和
mov [r10+rsi],al
RAX=0000000000000065
RSI=000002295EA3B878
R10=0000000000000000
movalbyte ptr 很清楚。但我不明白 [rax+rdx-01] 和 [r10+rsi] 是什么意思,其中 rax 和 r10 不是指针。
在大多数情况下,我遇到[RAX+C1],其中 rax 是指针,C1 是偏移量,但我不知道当寄存器存储一些值而不是指针时是什么意思
【问题讨论】:
-
rax可能不是指针,但rdx可能是。 -
byte ptr表示形成了一个地址,因为无法推断0的大小,所以需要它。在[r10+rsi]中,rsi几乎肯定是一个指针。 -
Raymond 你的意思是它类似于 [rsi+0] 偏移量还是什么?
-
是的,这就是英特尔语法使用
+来表示寄存器和常量位移的原因,当然。英特尔的手册记录了寻址模式;您可以咨询他们或谷歌了解您想知道的任何细节。 -
所以,如果我理解正确的话,对于 r10 !=0 的情况,序列 [pointer+offset] 或 [offset+pointer] 和 0 偏移都没有关系?
标签: assembly x86-64 offset cpu-registers addressing-mode