在 8086 汇编中,word ptr 是一个类型指定运算符 (或称为汇编指示符 ),用来明确指明内存操作数的数据宽度为 1 个字(Word = 2 字节)。
为什么需要 word ptr?
8086 指令中,如果内存操作数的大小不明确 时,汇编器无法确定是访问 byte(字节)还是 word(字),这时就必须用 word ptr 或 byte ptr 来指明。
典型例子
MOV [BX], 1234h ; 错误![BX] 是字节还是字?
因为 1234h 是 16 位数值,为了正确生成机器码,必须加上类型指定:
MOV WORD PTR [BX], 1234h ; 将 1234h 存入 BX 指向的字单元
常见使用场景
1. 与立即数配合
MOV WORD PTR [SI], 0 ; 将 SI 指向的 2 字节清 0
2. 与段超越前缀配合
MOV WORD PTR ES:[DI], AX ; 将 AX 存入 ES:DI 指向的字单元
3. 与 INC / DEC / ADD 等配合
INC WORD PTR [BP+4] ; 对堆栈中某个字变量加 1
4. 与 CMP / TEST 等配合
CMP WORD PTR [BX+2], 10 ; 比较内存字与 10
对比 byte ptr 与 word ptr
| 类型 | 宽度 | 示例 |
|---|---|---|
byte ptr |
1 字节 | MOV BYTE PTR [DI], 'A' |
word ptr |
2 字节 | MOV WORD PTR [DI], 'AB' |
dword ptr |
4 字节 | MOV DWORD PTR [DI], 123456h(386+ 才支持) |
在算术/逻辑指令中的强制需求
XOR WORD PTR [SI], 8000h ; 对内存字异或
ADD WORD PTR [BX], DX ; 将 DX 加到内存字
NOT WORD PTR [DI] ; 对内存字按位取反
没有 word ptr 就会产生操作数大小不明确的汇编错误。
注意
-
ptr不是指令,只是一个汇编器提示,不会生成额外机器码。 -
某些汇编器(如 MASM/TASM)在内存操作数与寄存器宽度匹配时可以省略
word ptr:MOV [BX], AX ; AX 是 16 位 → 自动理解为 word ptr
MOV [BX], AL ; AL 是 8 位 → 自动理解为 byte ptr -
但为了代码清晰和可移植,建议显式写出。
总结
word ptr 在 8086 汇编中的作用:
-
强制将内存操作数视为 2 字节字。
-
解决指令中的操作数大小歧义。
-
与
byte ptr对应,确保汇编器正确生成机器码。
