汇编语言实现对数据块的求和,求最大最小值,排序

BCDBUG数据区的带符号数按从小到大的顺序排序,并将排序后的数据输出

;从小到大排序
;输出20个数
DATAS SEGMENT
;此处输入数据段代码
NUM DW 3,2,1,0
COUNT EQU ($-NUM)/2 ;N个数
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
DW 40H DUP (?)
TOP LABEL WORD
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
START:
MOV AX,DATAS
MOV DS,AX

MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
;此处输入代码段代码

MOV CX,COUNT
DEC CX
LEA SI,NUM
CLD
L2:
CALL SORT ;冒泡排序,按从小到大排序
LOOP L2

MOV CX,COUNT
LEA SI,NUM
CLD
L3:
CALL OUTPUT ;输出一个十进制有符号数

MOV DL,' '
MOV AH,6
INT 21H ;输出分隔符

LOOP L3

MOV AH,4CH
INT 21H
MAIN ENDP

;传入参数:CX,比较次数;SI,数组起始位置;数组
;返回值:数组
;功能:将最大的数移到数组末尾
SORT PROC NEAR
PUSH CX
PUSH SI
L4:
LODSW
CMP AX,[SI]
JNA L5
XCHG AX,[SI]
MOV [SI-2],AX
L5:
LOOP L4

POP SI
POP CX
RET
SORT ENDP

;传入参数:SI,数字存储位置
;返回值:数组
;功能:从存储位置上取出一个数,以十进制有符号数输出
OUTPUT PROC NEAR
PUSH CX
PUSH DI

MOV DI,10
XOR CX,CX

LODSW
MOV BX,AX
TEST BX,8000H
JZ L12

MOV DL,'-'
MOV AH,2
INT 21H

DEC BX
NOT BX
L12:
MOV AX,BX

L13:
XOR DX,DX
DIV DI
ADD DX,30H
PUSH DX
INC CX
CMP AX,0
JNE L13

MOV AH,2
L14:
POP DX
INT 21H
LOOP L14

POP DI
POP CX
RET
OUTPUT ENDP
CODES ENDS
END START
温馨提示:答案为网友推荐,仅供参考