求助:为什么得不到想要输出的结果
学习汇编不久,现在遇到了困难,希望大家可以不吝赐教,大家在讨论中共同进步!
从键盘输入任意一个不大于99的自然数,将它表示成连续自然数之和,显示在屏幕上(要求列出所有可能的序列)
data segment
buf db 3,0,3 dup(0)
str1 db "please input a number(<=99)$ "
sum dw 00
num dw 00
str2 db 30 dup(0)
data ends
code segment
assume cs:code,ds: data
start:
mov ax,data
mov ds,ax
mov dx,offset str1;显示字符串提示信息
mov ah,09h
int 21h
mov dx,offset buf;输入要表示成连续自然数之和的数
mov ah,0ah
int 21h
mov cl,buf+1;键输入数的位数存在cx
mov ch,0
push cx
mov si,offset buf+2
mov ax,0
;将输入的数转化成二进制,并存储在ax中
TenTo2:
mov dx,10
mul dx
and byte ptr [si],0fh
add al,[si]
adc ah,0
inc si
dec cl
jnz TenTo2
mov di,offset sum
mov word ptr [str2+29],'$'
;外层循环开始
mov cx,ax ;循环控制条件,也是输入的数值的二进制形式
mov bx,offset str2;bx存储显示结果的信息
mov [num],cx;保存循环空条件
mov ax,0
mov di,offset sum
loopOut:
push cx;循环控制次数
push ax
cmp ax,cx
ja exit
;内层循环
inc ax
mov dx,ax;内层循环初始值
;每次进内层循环都要将cx重新赋值
LoopIn: mov [bx],dx
add [di],dx
mov ax,[num]
cmp [di],ax
je Display
ja loopX
inc bx
dec cx
jnz loopIn
Display:
mov word ptr [str2+29],'$'
mov dx,offset str2
mov ah,09h
int 21h
loopX:
pop ax
pop cx
inc ax
jmp loopout
exit:
mov ah,4ch
int 21h
code ends
end start