PRT运算符:用于源操作数大,但是目标操作数小的这种情况
注意:该关键字是微软汇编MASM才有的,NASM汇编就没有这个PRT,其他汇编我不清楚
汇编中,一个指令如果多个操作数,那么这多个操作数必须要一边大,比如
mov eax,b
上述的代码b必须是4个字节,否则无法编译,例如下面的代码就是错误的
.386
.model flat,stdcall
.data
mys BYTE 1
.code
ExitProcess PROTO,dwExitCode:DWORD
main PROC
;将1放到eax中
mov eax,[mys]
INVOKE ExitProcess,0
main ENDP
END main
上述代码验证了操作数大小不同,无法通过编译的情况,操作数大小分为两种情况
1.将大的操作数赋值给小的操作数,这种情况就会使用PTR运算符
.data
mys DWORD 1;4个字节
.code
mov eax,0
;将1放到eax中
mov al,byte ptr [mys];取mys的低位字节
2.将小的操作数赋值给大的操作数,这种情况就要使用低位寄存器了,比如al
.data
mys BYTE 1
.code
mov eax,0
;将1放到eax中
mov al,[mys]
总结:
byte ptr xxx 从xxx的低位开始,取第一个字节的值
word ptr xxx 从xxx的低位开始,取前2个字节的值
dword ptr xxx 从xxx的低位开始,取前4个字节的值