【发布时间】:2017-02-09 15:57:51
【问题描述】:
我有这个带有一些变量和 1 条指令的 ASM 代码块:
.data
g BYTE 32h
a DWORD 11111111h
h BYTE 64h
.code
mov ebx, DWORD PTR g
谁能解释一下为什么 ebx 的值不是 11 11 11 32 而不是 00 00 00 32 或者至少 PTR 是如何工作的?
我认为 PTR 指令会将操作数表示为 32 位操作数?
提前致谢。
【问题讨论】:
-
ebx之后应该是11111111h,因为您刚刚加载了a。32,它是g的一部分,在内存中较早,不能在ebx中。 -
stackoverflow.com/q/41562732/4271923 记下双关语 cmets,它基本上解释了
PTR的工作原理 - 它没有,由于语法,当您指定参数宽度时,它只需要 3 个字母。至少在 TASM/MASM 汇编器中。例如,在 NASM 中,根本不使用“PTR”,因为它实际上并没有做任何事情。 (当然,即使是为了有意义的事情,也可能有一些完全其他的汇编程序使用 PTR,但我猜你问的是 MASM/TASM 之一)
标签: pointers assembly x86 masm32