汇编中也有强制转换的命令
使用
类型 ptr 变量名
可以把这个变量强制转化为指定的类型,类型可以为byte,word,dword,fword,qword,real8和real10
看看下面这段
.data
bTest1 db 12h
wTest2 dw 1234h
dwTest3 dd 12345678h
.code
mov al,bTest1
mov ax,word ptr bTest1
mov eax,dword ptr bTest1
看看后面的结果发现
al 12h
ax 3412h
eax 78123412h
不是我们在c中那样的0012h 00000012h
为什么呢?
原因很简单的:
内存中是这个样子的,高位放高字节,低位放低字节,.data中的内存是这样子的
00403000 12 34 12 78 56 34 12
在执行 mov ax,word ptr bTest1的时候,是从bTest1的地址403000处取一个字,其长度已经超过了bTest1的
范围并落到wTest2中,从内存看,是取了bTest1的低位和wTest2的低位
这个例子说明了汇编中用ptr强制覆盖变量长度的时候,实质上只用了变量的地址,编译器并不考虑定界的问题,
如果程序员想实现和c语言中一样的效果,不妨使用mozx,它可以把一个字节扩展到一个字或是一个双字再放入寄存器中,高位保存
0而不是越界存取到其他的变量中。