【问题标题】:In assembly, what does `PTR` stand for?在汇编中,`PTR` 代表什么?
【发布时间】:2017-05-24 13:59:01
【问题描述】:
and     dword ptr [ebp-4], 0

在上述汇编代码中,术语PTR 代表什么? 我知道它们的用法——尺寸指令;但是术语 PTR 是从哪里创造出来的?它代表PoinTeR吗?

我读过:

【问题讨论】:

  • 指针的意思。
  • 可能完全随机
  • 需要 Ptr 期限
  • ptr 不太有意义的一个例子是在推入立即值时,例如 | push dword ptr 012345678h | .语法意味着指针被压入堆栈,但立即值实际上不一定是指针。

标签: assembly x86


【解决方案1】:

这个提示的重点是告诉操作数的大小。

您正在写入内存中的某个点。由于您只给出一个 0,它不知道它是否应该写入一个字节、字或双字。 dword ptr 的意思是“写一个双字”。是的,它代表指针,因为您将内存地址作为目标。

【讨论】:

  • 为什么需要 PTR?为什么 DWORD 不足以推断操作数的大小?这只是一个语法怪癖吗?
  • @jonny 是的,这几乎是一个语法怪癖。大多数现代(与 Intel 兼容的)汇编程序将接受 and [ebp-4], 0and dword [ebp-4], 0and dword ptr [ebp-4], 0 一样。
  • @Toothbrush:好的汇编程序会拒绝 and [ebp-4], 0 作为不明确的操作数大小:您想将字节、字、dword 或 qword 归零。 Determining when NASM can infer the size of the mov operation。不太好的汇编器有一个默认的,通常是 dword(比如用于非 mov insns 的 GAS);对于像emu8086这样非常糟糕的汇编程序,大小取决于数字常量!!!此外,没有任何汇编程序 AFAIK 可以同时接受 dworddword ptr。 MASM 会将dword 组装成常数4,所以4[ebp-4] = [ebp - 4 + 4] = [ebp]
  • @Toothbrush:NASM 和 GNU .intel_syntax 是不同的。 NASM 阻塞 dword ptr,GAS / LLVM 阻塞 dword。使用 NASM 2.15.05 组装 MASM/GNU 语法:warning: 'ptr' is not a NASM keyword [-w+ptr] / error: symbol 'ptr' not defined。对于 clang/LLVM 组装 NASM 语法,我们得到error: Expected 'PTR' or 'ptr' token!。对于实际的 GAS,我们从 add dword [ebp - 4], 0 得到 Error: ambiguous operand size for 'add',但是对于 add dword [ebp-4], eax,反汇编是 add dword ptr [ebp+0], eax
  • @Toothbrush:至于没有尺寸说明符的and [ebp-4], 0,不,当前的 NASM 绝对拒绝:error: operation size not specified。较旧的 NASM 可能很糟糕并且有一些默认值,但您更有可能记错了。 (较旧的 GAS 不会用于错误或警告除 mov 以外的指令上的操作数大小不明确;我认为这是过去几个月的变化。但不适用于 NASM。)
猜你喜欢
  • 1970-01-01
  • 2021-12-23
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多