;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来一个个读入
基本原理:将负数,整数分开存储到数据段,且都一位一位的存储