;程序名称: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
- [游客] 为啥简版的int 13h之后不用 jmp 也行。 08/31 00:14
- [hky987654321] 是的,按压F1的次数 >=15 ,有“按下“→”键会出现光斑落在年份的百位数上”的现象。 这与缓冲 08/09 11:12
- [游客] 为什么多次按F1后,按下“→”键会出现光斑落在年份的百位数上? 08/02 21:42
- [游客] 懂了。 07/30 10:54
- [hky987654321] -1就是FFh。用-1兼济了ffff:0和简洁的数据分隔这二者的需要。 [bp-2],是因为刚进入 07/29 11:43
- [游客] 也看不懂[bp-2] 07/12 10:49
- [游客] 不懂-1 07/09 17:55
- [游客] 16位现在只有教学意义,看一眼就好。 04/13 00:46
- [游客] 没搞错吧,课程2才351b 03/09 18:01
- [游客] 没想到实验14只用13条代码! 03/02 15:46