微机原理上机作业汇编语言输入若干数字,其中有大于十的,从小到大排序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档