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

我的博客

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

[2010-09-01 12:51] 习题3.23

写一个片段实现如下功能:一次重复寄存器AL中的每一位,得到16位的结果送至寄存器DX中。

答:

;子程序名:将AL每位重复2次结果存放至DX
;入口参数:AL
:出口参数:DX
;利用循环移位和带进位加法
;----------------------------------------------------
repet   proc
        mov ah,0
        xor bx,bx
        xor dx,dx
        mov cx,7          ;为什么cx=8出错?
L:      push cx           ;保存计数器
        mov cx,0          ;cx作为缓冲器使用
        rol al,1          ;循环左移
        adc cx,0          ;将CF的值加入cx
        mov bx,cx         ;
        shl bx,1          ;将结果左移一位
        add bx,cx         ;再加上cx实现重复
        add dx,bx         ;存入DX
        shl dx,1          ;DX左移两位
        shl dx,1          ;给下一次移位预留空间
        pop cx            ;恢复计数器

        loop L
        ret
repet   endp
;----------------------------------------------------
加入AL=AAH,二进制即为:10101010H,重复后DX的内容应该为:11001100110011001100H
文字截图:

root@yeah /cygdrive/d
$ sh d2b.sh $((16#aa))
170's BinCode is:10101010
Convert Finish!

root@yeah /cygdrive/d
$ sh d2b.sh $((16#cccc))
52428's BinCode is:1100110011001100
Convert Finish!

root@yeah /cygdrive/d
$
;----------------------------------------------------
这个题我纠结了许久。。。反正我觉得题意就这意思。
评论次数(0)  |  浏览次数(307)  |  类型(汇编习题集) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码