;题目:编制一个完整的汇编语言程序,从键盘上读入若干个(可以超过十个)十进制数(正数),排序后在屏幕上输出。
;采用冒泡法排序,综合运用子程序和宏汇编,使程序模块化。 ;程序代码
M_DIRECT MACRO STRING ;定义一个宏,调用09号DOS功能在屏幕上显示一个字符串
MOV DX,OFFSET STRING MOV AH,09 INT 21H ENDM
DATA SEGMENT
DIR1 DB 'count of numbers to sort:$ ' ;提示输入要排序的数据的个数
DIR2 DB 'please input sorting numbers:$ ';提示输入要排序的数据
DIR3 DB 'sorting result:$ ' ;在屏幕上提示排好续的数据
DIR4 DB '*************************$ '
DIR5 DB 'please choose u(up)ord(down):$ ' DIR6 DB 'input error$ ' COUNT = 100 WTEMP DW ?
ARRAY DW COUNT DUP(?) ;用来保存输入的数据
CRLF DB 13,10,
'$ ' ;实现回车换行的功能,13→0DH,回车;10→0AH,换行
LEN DW ? ;保存实际输入的数据的个数
DATA ENDS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA START:
PUSH DS SUB AX,AX ;置AX为0 PUSH AX
MOV
AX,DATA ;将数据段的地址送到DX中 MOV DS,AX
READ: M_DIRECT DIR1 ;宏调用,在屏幕上提示输入要输入的数据的个数
CALL
P_GETNEW ;调用子程序P-GETNEW,输入要输入的数据的个数
AH,09 21H
GETNUMBER: CALL 数据并保存到ARRAY中
SORT: CX,LEN COMPARE:MOV 'U' MOV CX,AX MOV LEN,AX LEA BX,ARRAY MOV
;调用09号功能,实现回车换行
LEA DX,CRLF INT
;屏幕提示输入要排序的数据 M_DIRECT DIR2 P_GETNEW
MOV [BX],AX ADD BX ,2
LOOP GETNUMBER ;排序程序部分 DEC CX
MOV AH,09H LEA DX,CRLF INT 21H
M_DIRECT DIR5
AH,01H
INT 21H
CMP ;判断是升序排序还是降序排序 JZ
;输入MOV AL, UP ;输入的字符是U或u跳转到升序排序程序 CMP AL, 'u'
JZ UP
CMP AL,
'D' ;输入的字符是D或d跳转到降叙排序程序 JZ DOWN CMP AL, 'd'
JZ DOWN UP: DI,CX MOV
LOOP1: MOV CMP JNGE XCHG MOV
CONTINUE1: ADD LOOP MOV LOOP JMP OUTPUT DOWN: DI,CX MOV
LOOP2: MOV CMP JGE XCHG MOV
CONTINUE2: ADD LOOP MOV LOOP JMP OUTPUT ;升序排序程序
BX,0 AX,ARRAY[BX]
AX,ARRAY[BX+2]
CONTINUE1 AX,ARRAY[BX+2] ARRAY[BX],AX BX,2
LOOP1 CX,DI UP
;排序完后跳转到输出程序部分 ;降序排序程序
BX,0 AX,ARRAY[BX]
AX,ARRAY[BX+2]
CONTINUE2 AX,ARRAY[BX+2] ARRAY[BX],AX BX,2
LOOP2 CX,DI
DOWN
;排序完后跳转到输出程序部分
MOV MOV OUTPUT: MOV
AH,09 ;回车换行
LEA DX,CRLF INT 21H
M_DIRECT DIR3
MOV
CX,LEN ;为输出程序设置好入口参数
MOV BX,OFFSET ARRAY
WRITE: MOV AX,[BX] 输出排好序的数据
MOV
WTEMP,AX
CALL P_OUTPUT
ADD BX,2 MOV
DL,20H 开
MOV AH,02H INT 21H LOOP WRITE
MOV
AH,09 LEA DX,CRLF INT 21H
M_DIRECT
MOV
AH,09 LEA DX,CRLF INT 21H LOOP READ RET MAIN ENDP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;从键盘上输入一个数据的子程序 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
P_GETNEW PROC PUSH BX ; ;将入口参数存放到共享变量中 ;显示空格,将两个输出的数据分 ;隔离两次输入排序输出的作用 DIR4 ;实现循环输入数据并排序输出 ;出口参数:AX=
相关推荐: