汇编实现多个数的输入

;2.  用户输入不少于5个,
;不多于30个的十进制整数
;(含负数,绝对值小于100),
;排序后将结果输出。
assume cs:code,ds:data,ss:stack

data segment
    tip db 'please input your number',13,10,'$'
    fushu db 15 dup (0)
    zhengshu db 15 dup (0)
data ends

stack segment
    db 10000 dup (0)
stack ends

code segment

fushu_input:    push cx
                lea bx,fushu
                mov cx,10
        s2:     mov ah,1;存储新输入的数
                int 21h
                mov ah,0                
                push ax
                cmp al,' ';空格表示一个数据输入完成
                jz over1

                mov al,10
                mul byte ptr ds:[bx+si]
                mov ds:[bx+si],al
                pop ax
                add ds:[bx],al;给上一次输入的十进制数乘10,并加上新输入的数

                loop s2

        over1:  inc si
                pop cx
                ret

zhengshu_input: push cx               
                mov ds:[bx+di],al;把第一位数先存进去
                lea bx,zhengshu
                mov cx,10
        s3:     mov ah,1;此时为整数的第二位数的存储
                int 21h
                mov ah,0
                push ax
                cmp al,' ';空格表示一个数据输入完成
                jz over2

                mov al,10
                mul byte ptr ds:[bx+di]
                mov ds:[bx+di],al
                pop ax
                add ds:[bx+di],al;乘10移位,并加上新输入的数

                loop s3

        over2:  inc di                
                pop cx
                ret


        start:      
                mov ax,data
                mov ds,ax
                mov ax,stack
                mov ss,ax
                mov sp,10000
                mov si,0;负数的偏移量用si
                mov di,0;正数的偏移量用di
                ;缺省

                lea dx,tip
                mov ah,9
                int 21h;输出提示符

                ;单个数的输入,一个一个字符读取
                mov cx,30
        s1:     mov ah,1
                int 21h
                cmp al,'-';若为负数则跳转
                jz fushu_input
                cmp al,'-'
                jnz zhengshu_input;反之则为正数跳转
                cmp al,13
                jz output
                loop s1

                mov ax,4c00h
                int 21h
code ends
end start

汇编无法实现整个数的输入,只能一个位一个位的输入,即123拆开成1,2,3来一个个读入

基本原理:将负数,整数分开存储到数据段,且都一位一位的存储

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值