汇编实现数字的输入与输出

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的博客-CSDN博客

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值