0
点赞
收藏
分享

微信扫一扫

x86汇编_PTR运算符_笔记_9

自由的美人鱼 2022-03-18 阅读 71
linqp2pc#

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

举报

相关推荐

0 条评论