微机原理上机作业汇编语言输入若干数字其中有大于十的从小到大排序【VIP专享】
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言程序
排序
对输入的多个数字进行排序。
要求:
(a)所有数字从键盘输入;
(b)数字中至少包含一个大于10的数字;
(c)排好序的数字以十进制形式在屏幕显示输出。
data segment
shuzi_w db 0
;shuzi_q db 0
;shuzi_b db 0
;shuzi_s db 0
;shuzi_g db 0 ;将排序好的数字显示出来,需要每一位转换成ASCII码
key DW 100 dup(0) ;输入的数的存放位置
buffer dw 0 ;输入数字的暂存位置输入的数字大于10 需要缓冲
n db 1 ; 总共输入的数字个数注意从1开始loop循环原因n1 db 1
; add your data here!
pkey db 'the programmer has been done ..' ,0dh,0ah,24h
string db 'please input data: ',0dh,0ah,24h
string1 db 0dh,0dh,0dh,0dh,'output: ',0dh,0ah,'$'
kongge db 0dh, 0ah,24h
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
xor ax,ax
push ax
mov ax, data
mov ds, ax
mov es, ax
lea dx , string
mov ah, 09h
int 21h ;显示请输入数据
mov di , offset key
mov ax , 0
mov buffer,ax
biaohao1: ;程序输入处
mov ah,08h ;键盘输入但不显示
int 21h ; 输入保存在AL中
cmp al,0dh; 输入是回车,直接结束输入
jz biaohao4
cmp al,'0' ;当输入的数在0到9中间时输入的是ASCII码jb biaohao2 ;不跳转否则跳转
cmp al,'9'
ja biaohao2
;若输入的数在0到9之间时
mov ah,2
mov dl,al ;显示此数
int 21h
sub al,30h
mov ah,0
push ax ; 保存刚输入的数字
mov bx,buffer
mov ax,10
mul bx ;ax=10*buffer
pop bx ; 将上面保存的ax 的值给bx
add ax,bx ;ax=10*buffer+bx(之前的ax) 输入的数字大于10
mov buffer,ax ;将ax 的值给buf
mov [di],ax ;若输入11,循环第一次输入是1,第二次重输入12
jmp biaohao1; 输入大于10 的数字的下一位
biaohao2: ;输入数字不是0到9
cmp al,20h ;输入是否是空格
je biaohao3 ;是的话跳出循环
jmp biaohao1 ; 不是的话继续输入下一位
biaohao3: ;是空格表示输入下一个数字
call konggexianshi ;屏幕上显示空格
add di,2 ;修改di指针,输入下一个数字
inc n ;输入的数字个数加一
mov ax,0
mov buffer,ax ;初始化
jmp biaohao1;继续输入下一个数字
biaohao4:
mov al,n
cmp al,0
jz qw ;没有输入数字就直接回车,结束程序call konggexianshi
call paixu
;数字显示部分
push dx
push ax
lea dx,string1
mov ah ,09h
int 21h
pop ax
pop dx
mov cx,0
mov cl, n
mov bx,offset key
disp:
mov dx,0; chushihua
mov ax,[bx]
call shujuxianshi
call konggexianshi
inc bx
inc bx
loop disp
;================================== paixu proc near
mov al,n
mov n1,al; 外循环、
loop1:
mov cl,n
mov ch,0;内循环
dec cx
mov bx,offset key
loop2:
mov ax,[bx]
cmp ax,[bx+2]
jna loop3 ;ax不大于bx+2,不交换
push ax
mov ax,[bx+2]
mov [bx],ax
pop ax
mov [bx+2],ax
loop3:
add bx,2
loop loop2
dec n1
jz paixuend
jmp loop1
paixuend:
ret
paixu endp
;=================================
konggexianshi proc near
push ax
push dx
mov ah,09
mov dx ,offset kongge
int 21h
pop dx
pop ax
ret
konggexianshi endp