“dword ptr”是什么意思?

160

有人能解释一下这是什么意思吗?(Intel语法,x86,Windows)

and     dword ptr [ebp-4], 0

请注意,这里的示例几乎永远不是您实际想要的。要将内存清零,请使用 mov dword ptr [ebp-4], 0。使用 and 可以节省 3 字节的机器码大小,但性能会受到影响(针对内存目标进行加载/AND/存储,而不仅仅是纯粹的存储,因此会牺牲一些性能)。 - Peter Cordes
3个回答

161

dword ptr 部分被称为大小指令。 这个页面 解释了它们,但无法直接链接到正确的章节。

基本上,它的意思是“目标操作数的大小为32位”,所以这将对在通过将ebp寄存器的内容减去四并加零计算得到的地址处的32位值进行按位与运算。


96
“dword” 中的 “d” 代表 “double”,“word” 的字长为16位。 - JeremyP
42
为什么需要 PTR 部分?使用 dword 不足以编码大小吗?据我所知,NASM 不使用 ptr - Ciro Santilli OurBigBook.com
1
@JeremyP 单词意义随着处理器而改变。在阅读本文后,您能否再次确定单词是16位,或者您只是定义了单词的简单意义,即代表两个字节? “现代处理器(包括嵌入式系统)通常具有8、16、24、32或64位的字长,而现代通用计算机通常使用32或64位。”https://zh.wikipedia.org/wiki/字_(計算機科學) - uzay95
8
这个问题标记了"x86",所以我们正在特定地讨论英特尔x86架构,其中一个字是16位宽。根据您的文章,即使x86_64也具有16位的字长。 - JeremyP
1
@pmor 不是的。后来我转到了GAS,因为它更跨平台一些。你可以试着问问Peter Cordes。 - Ciro Santilli OurBigBook.com
显示剩余2条评论

11
考虑这个问题中的图表ebp-4是您的第一个局部变量,并且作为双字指针,它是一个32位整数的地址,必须被清除。 也许您的源代码以此开始。
Object x = null;

7

这是一个32位声明。如果您在汇编文件的顶部键入语句[bits 32],那么您就不需要键入DWORD PTR。例如:

[bits 32]
.
.
and  [ebp-4], 0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接