DATA SEGMENT ; 数据段
ARRAY DW 10 DUP(?)
MESS DB 'PLEASE INTPUT YOUR NUMBER',0DH,0AH,'$';请输入数字
MESS2 DB ',','$';逗号
MESS3 DB 'EEROR',0DH,0AH,'$';错误提示
MESS4 DB 'H,','$';H跟逗号
MESS5 DB 0DH,0AH,'RESULT:',0DH,0AH,'$';结果提示
LEN EQU 20;
LEN2 EQU 10;输入的数字个数
FLAG DB 1;标志输出是否结束
CHANGE DB 0;标志位,用于结束冒泡循环
DATA ENDS
STACK SEGMENT STACK ; 堆栈段
STA DB 64 DUP(0)
STACK_TOP DB 0
STACK ENDS
CODE SEGMENT ; 代码段
ASSUME CS:CODE , DS:DATA , ES:DATA , SS:STACK
START:
; 程序开头必须要有的五条指令
MOV AX, DATA
MOV DS, AX ; 设置数据段
MOV AX, STACK
MOV SS, AX ; 设置堆栈段
LEA SP, STACK_TOP ; 设置栈顶指针
;---------------------------------------
; 程序的中间部分
MOV AH,09H
LEA DX,MESS;输入提示
INT 21H
MOV SI,0
LEA BX,ARRAY
INPUT1:
XOR DX,DX
INPUT:
MOV AH,01H
INT 21H
CMP AL,48H
JE ENTER;等于H,说明结束一个四位数的输入
CMP AL,30H;与0比较
JB ERROR;小于0,错误
CMP AL,39H;与9比较
JBE GET1;在0-9之间
CMP AL,41H
JB ERROR;错误
CMP AL,46H
JBE GET2;在A-F之间
JMP ERROR;错误
GET1:;在0-9之间,减去30H
SUB AL,30H
JMP GET
GET2:;在A-F之间,减去37H
SUB AL,37H
JMP GET
GET:;将DX左移4位用于存储新输入的位(本质跟10进制一样)
MOV CL,4
SHL DX,CL
XOR AH,AH;消除高位的影响
ADD DX,AX
JMP INPUT;继续输入
ENTER:
MOV [BX+SI],DX;将四位数存入当前指针所指的位置
INC SI;自增2字节
INC SI
;;输出逗号
PUSH DX
MOV AH,09H
LEA DX,MESS2
INT 21H
POP DX
;;判断是否输入了10个数
CMP SI,LEN
JB INPUT1
;;清楚影响
XOR DX,DX
XOR SI,SI
XOR AX,AX
JMP SORT
ERROR:;;错误提示
MOV AH,09H
LEA DX,MESS3
INT 21H
JMP EXIT
;排序
SORT:
MOV SI, OFFSET ARRAY
MOV CX, LEN2-1
MOV CHANGE, 0
GOON:
MOV AX, [SI] ;
INC SI;
INC SI;
CMP AX, [SI]
JNA NEXT
MOV CHANGE, 1
MOV DX, [SI]
MOV [SI], AX
MOV [SI-2], DX
NEXT:
LOOP GOON
CMP CHANGE, 0
JNE SORT
;输出RESULT提示
MOV AH,09H
LEA DX,MESS5
INT 21H
XOR DX,DX
;;输出排序结果
PRINTHEAD:
INC FLAG;该标记用于判断是否输出完毕
PRINT: MOV SI,1;SI用于指示下一步执行STEP几
MOV DX,[BX]
STEP1: MOV CL,12
PUSH DX
SHR DX,CL
MOV SI,2
JMP DO
STEP2: PUSH DX
AND DX,0FFFH;消除高位
MOV CL,8
SHR DX,CL
MOV SI,3
JMP DO
STEP3: PUSH DX
AND DX,00FFH;
MOV CL,4
SHR DX,CL
MOV SI,4
JMP DO
STEP4: PUSH DX
AND DX,000FH;
MOV SI,5
JMP DO
DO:
CMP DX,09H
JBE PUT1
JMP PUT2
PUT1:
ADD DX,30H
JMP PRINT1
PUT2:
ADD DX,37H
PRINT1:
MOV AH,02H
INT 21H
POP DX
CMP SI,2
JE STEP2
CMP SI,3
JE STEP3
CMP SI,4
JE STEP4
;;打印H,字样
MOV AH,09H
LEA DX,MESS4
INT 21H
XOR DX,DX
INC BX
INC BX
;;判断是否结束输出
CMP FLAG,LEN2
JBE PRINTHEAD
EXIT:
;-----------------------------------------
; 程序结束必须要有的两条指令
MOV AX,4C00H ;
INT 21H ;
;------------------------------------------
CODE ENDS
END START ; 最后一行要按回车键
输入10个数字并且排序后输出(汇编)
最新推荐文章于 2022-05-01 13:51:22 发布