每当看到 WORD PTR [EAX]
类似的代码的时候就很疑惑,这里的 WORD, PTR到底代表了什么意思呢? PTR 表示是一个 Pointer 的意思么?很难分说得清。
PTR
在这个系列的地址中,对汇编有一些简单的指令的说明,其中就说到,有的时候我们会出现指令不明的情况,如:
.DATA |
对于我们最后的两个指令来说,[] 其应该是对 EBS/ESI 内存储的地址指向人内存写入 byte 大小,还是 word 大小。
所以这个时候就必须使用 WORD PTR, BYTE PTR
这两个类型修饰符来进行说明
mov WORD PTR [EBX], 100 |
其作用,是用来指明我们在一个内存操作的时候,要进行内存操作的大小是多少。
通常, PTR 操作符强制将表达式被当做一个特定类型的指针使用。
事实上,,PTR 要表达就是:取地址的意思。
.DATA |
这个所表达的确切意思应该是:num 地址处的数据是 WORD 大小,取得他的地址。
[]
这个操作符,有的地方把它叫做索引操作符,当我们把它应用到一个 直接内存操作数 时它和 操作符 + 工作得一样。
如
mov ax, array[ 2 ] |
都是将内存 array 的第二个 WORD 值放到寄存器 ax 内。
[]操作符内可以放入任何的直接内存操作数。如,
mov ax, var |
是等价的。
但是,建议的是,总是将内存地址放在 [] 内,用来表示我们是需要其地址处的内容,而不是地址本身。