DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov cl,10
mov bx,0
call input
mov ax,bx
call output
MOV AH,4CH
INT 21H
input proc;输入函数
L0: mov ah,1
int 21h
cmp al,'0'
jb over
cmp al,'9'
ja over;如果不在范围内则结束输入
sub al,48;变为数值
mov dl,al;将al存到dl中,暂存输入的数
mov ax,bx;将bx存到ax中,做乘法
mul cl;ax乘以十
mov dh,0
add ax,dx;将dl里的数加到ax中
mov bx,ax
jmp L0
over:
ret
input endp
output proc;输出函数
mov bl,0
L3: div cl
push ax;入栈
add bl,1;计数器加一
mov ah,0
cmp ax,0;当被除数为0时结束循环
jne L3
L4: pop dx;出栈
sub bl,1;计数器减一
mov dl,dh
add dl,48
mov ah,2
int 21h
cmp bl,0;当计数器清零时结束循环
jne L4
ret
output endp
CODES ENDS
END START
这断简单代码仅支持输出最多不超过2559的4位数,位数再多时,输出函数在进行除法时,ax寄存器存不下,溢出造成错误,大于2559的4位数也会错误,因为al只有8位,最大存2^8-1,存不下256。
原因大概说了一下,大家可以自己仔细想想,我这里就不细说了
根据以上代码改成多个数字的输入与输出:
汇编实现多个数字的输入与输出_m0_53611007的博客-****博客