汇编网首页登录博客注册
lsmss的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新评论
最新留言
好友圈
文章收藏
友情链接

[2009-10-15 13:38] 深入理解逻辑位移指令

逻辑位移指令shl和shr是第14章的内容,我感觉书上对这两个指令的描述不是太好理解,实际上对shl指令更容易让人理解的描述是:shl指令对给定的目的操作数左移(cl)次,每次移位时最高的那一位移入CF中,最低位补0,移动位数大于1时,必须将移动位数放在cl中。shr指令也可以类比理解。
    通过编写下面的一个子程序,能更加深入的理解了这两个指令。

;功能:把寄存器中的数值显示在屏幕上
;入口参数:ax,需要在屏幕上显示的寄存器
    
inputReg:
      mov cx,0003h         ;设置cl=3,初次左移3位。ch=0
   s1:shl ax,1             ;每次左移一位,移出后放在CF中
       pushf                ;标志寄存器入栈
       pop bx               ;出栈
      and bl,0000001b      ;取出CF的值
       shl bl,cl            
      add dl,bl            
      dec cl
      inc ch
      cmp cl,0ffh          ;循环4次,得到ax的最高4位
      jnz s1
      cmp dl,0ah
      jna s2
      add dl,37h
      jmp s3
   s2:add dl,30h
      
   s3:push ax              ;调用21h号中断的02h
       mov ah,02h
      int 21h
      pop ax
      cmp ch,16
      mov cl,3
      mov bl,0
      mov dl,0
      jnz s1

      ret
评论次数(0)  |  浏览次数(408)  |  类型(默认类型) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码