神奇的汇编(一)

来源:互联网 发布:logstash 用python 编辑:程序博客网 时间:2024/05/19 01:11

汇编中也有强制转换的命令

 

使用

 类型    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而不是越界存取到其他的变量中。

      

 

 

  

 

 

 

 

 

 

原创粉丝点击