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

我的博客

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

[2013-08-31 09:45] 检测点14.2

;程序名称:shl_ax
;任务:用加法和移位指令计算(ax)=(ax)*10
;解题思路:分解(ax)*10=(ax)*5*2,即5个(ax)相加后再移位
;返回:(dx)=计算结果的高16位
;      (ax)=计算结果的低16位

方法一

assume cs:code
code segment

mov ax,0ffffh     ;为ax赋值 
sub dx,dx
mov cx,4
s: add ax,0ffffh  ;进行5个(ax)相加
adc dx,0          ;取出CF
loop s
shl dx,1           
shl ax,1 
adc dx,0          ;完成(ax)*5*2

mov ax,4c00h
int 21h
        
code ends
end
———————————————————————————————

方法二  如果数据较小,简单地用5个(ax)*2相加即可。乘法和循环,在这里没必要了。 

assume cs:code 
code segment 

mov ax,1234h  ;为ax赋值                       
shl ax,1      ;移位得到(ax)*2  
mov bx,ax     ;转存1个(ax)*2于bx中 
add ax,ax     ;得到2个(ax)*2相加 
add ax,ax     ;得到4个(ax)*2相加 
add ax,bx     ;得到5个(ax)*2相加

mov ax,4c00h 
int 21h 

code ends 
end
评论次数(0)  |  浏览次数(648)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码