汇编语言中ptr相关相同代码模式行为差异问题咨询
汇编语句行为差异的核心原因
你观察到的差异本质是MASM风格汇编语法对内存标号(变量名)和通用寄存器两类操作数的方括号语义规则不同:
- 对于
mov edx, dword ptr [variable]语句
其中的variable是你在数据段定义的内存标号,MASM语法里variable本身就隐含对应内存地址的语义,[variable]和裸写variable效果完全等价,都代表取该地址处存储的内容。如果你想把variable本身的地址值加载到edx,需要额外使用offset关键字,语句为mov edx, offset variable。 - 对于
mov mm0, sword ptr [edx]语句
其中方括号内的操作数是通用寄存器edx,MASM对寄存器的处理规则和标号完全不同:裸写edx代表取寄存器本身存储的数值,只有加了方括号[edx]时,才会把edx中存储的数值当做内存地址,取该地址处的内容。
补充说明:如果是NASM风格的汇编,方括号的规则会更统一,不管操作数是标号还是寄存器,加方括号就代表取对应地址的内容,不加就代表立即数/寄存器本身的值,不会出现MASM下的这种差异。
内容的提问来源于stack exchange,提问作者strwake
相关产品推荐
相关产品推荐

