如果不是1234这种较小数,考虑CF问题,则多几行代码,但思路仍然是(ax)*10=(ax)*2*5即5个(ax)*2相加。
assume cs:code
code segment
mov ax,0ffffh ;为ax赋值
mov bx,5
sub dx,0 ;清0
shl ax,1 ;移位后,ax存放(ax)*2的低16位
adc dx,0 ;取出CF,存放ax移位后的高16位。完成1次(ax)*2
push ax ;低16位入栈
mov ax,dx
mul bx ;移位后的高16位乘5
mov cx,ax
pop ax
mul bx
add dx,cx ;完成5个(ax)*2相加
mov ax,4c00h
int 21h
code ends
end |