加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

汇编语言-mov注意事项

(2010-03-03 08:39:06)
标签:

杂谈

分类: 汇编

对于MOV 这个传送指令 有7点规定:

1. 两个操作数的数据类型一定要相同,源操作数是8位那么目的操作数也得是8位的。以此类推 16位 32位也一样。
        例如:mov   EAX,EAX  //正确的
                    mov   EAX,AX     //错误的
2.两个操作数不可以同时为段寄存器 ,
       例如: MOV    ES,DS  //错误的
3.代码段寄存器CS 不能作为 目的操作数,但可以作为 源操作数使用。
       例如:MOV   CS,AX  // 错误的
                   MOV   AX,CS  //正确的
4.立即数不可以直接传给段寄存器,
       例如:MOV   DS,100H   //错误的
5.立即数也不能作为目的操作数,
        例如:MOV 100H,AX    // 错误的
6.指令指针 IP 寄存器 不可以做为 MOV 指令操作数;
7.两个操作数不能同时作为存储单元,
        例如:MOV  VARA,VARB  
那么真的规定 2 4 7 这几个规定,我可以可以用寄存器作为中转来达到传递数值的最终目的。  
数据传递示范
http://s3/middle/4696b376h80dab8e8a4b2&690

 

 

我们学习传送指令 中的填充指令 MOVSX 这个指令它的作用是把位数短的源操作数传送给位数长的目的操作数。

  指令的格式正确如下:
      指令             寄存器          内存地址                      //格式1
   MOVSX             EAX        [0A2B3FO1]  

     指令             寄存器          寄存器                           //格式2
     MOVSX             EAX        EBX

      指令             寄存器       立即数                             //格式3
     MOVSX             EAX        100H    

填充指令功能:



http://s13/middle/4696b376h80dac5399ddc&690

那么填充指令也分:符号填充指令与零填充指令
符号填充指令 =  MOVSX
符号填充指令填充方式: 用源操作数的 符合位 来填充 目的操作数的高位数据位。

零填充指令 =  MOVZX
零填充指令填充方式:恒用 0 来填充 目的操作数的高位数据位。
下面我举个例子: 假设 8位寄存器  AL = 78H  
  MOVSX     CX,AL
  执行这句指令后 CX 的值是多少?   既然MOVSX 是符号填充指令 那么答案将是等于:   0FF78H

而零填充指令
  MOVZX     CX,AL
  执行这句指令后 CX 的值是多少?   既然MOVZX 是零填充指令 那么答案将是等于:   0078H                                      

这样示范我相信大家都能够了解 是吧 O(∩_∩)O  

上面2句汇编指令 源操作数 都是完全一样的 都是 AL 寄存器,但因为它们的填充指令方式不同,所以得得结果就不同。

那么这节课程我就出个考题:
题目汇编代码为:
  MOV   AX,36H  
  执行该指令后AX 值是多少?
  MOVSX  AX,36H
  执行该指令后AX 值是多少?
  MOVZX  AX,36H
  执行该指令后AX 值是多少?

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有