PTR运算符可以用来重写一个已经被声明过的操作数的大小类型。左右操作数容量必须一致,当不一致时需要用PTR运算符限定容量。
data
mydouble dword 12345678h
.code
mov ax, mydouble ;这是不允许的,因为mydouble被声明为4字节元素,ax寄存器只能存放2个字节。属于左右操作数不一致的情况。
mov ax, word ptr mydouble ;虽然mydouble是4字节元素,但word ptr表示从mydouble中只提取2个字节放入ax。ax=5678,因为是小端模式,mydouble的起始位置第一个字节是78,第二个字节是56。
mov ax, word ptr mydouble+1 ;ax=3456
mov ax, word ptr mydouble+2 ;ax=1234
mov ax, word ptr mydouble+3 ;超出了mydouble数据的范围一个字节,ax的低位是12,高位未知。
PTR必须与一个标准汇编数据类型一起使用,包括:byte, sbyte, word, sword, dword, sdword, fword, qword, tbyte。
.data
mydouble word 1234h, 5678h
.code
main PROC
mov eax, 0
mov eax, dword ptr mydouble ;mydouble被定义为2字节元素,左右操作数必须同样大小的原则,用
dword ptr来提取4字节才能交给eax寄存器。
invoke exitprocess, 0
main ENDP
END main