西安电子科技大学微机原理上机题37题
- 格式:docx
- 大小:55.88 KB
- 文档页数:5
编写程序实现将缓冲区BUFFER中的100个字按递增排序,并按下列格式顺序显示:数据1 <原序号>
数据2 <原序号>
数据3 <原序号>
················
程序如下(效果图):
N=100
DATAS SEGMENT
BUFFER LABEL WORD
X=55519
REPT 100
X=(X+7517)mod 65535
DW X
ENDM
NUMBER LABEL BYTE
Y=0
REPT 100
Y=Y+1
DB Y
ENDM
DECIMAL DB 5 DUP(?)
M DW 1 DUP(?)
DATAS ENDS
STACKS SEGMENT
DW 100H DUP(?)
TOP LABEL WORD
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
XOR AX,AX ;开始程序
LEA SI,BUFFER
LEA DI,NUMBER
CALL SORT
MOV CX,N ;显示程序开始
L1:
MOV AX,[SI]
MOV M,5
CALL DISPAXD
CALL DISPEM
ADD SI,2 ;显示数值
XOR AX,AX
MOV AL,[DI]
MOV M,3
CALL DISPAXD
CALL DISPCR
INC DI ;显示序号
LOOP L1
MOV AH,4CH
MOV AL,0
INT 21H
SORT PROC NEAR
PUSH SI
PUSH DI
PUSH AX
PUSH BX
PUSH CX
MOV CX,N;开始冒泡程序
DEC CX
LP1: ;外循环
PUSH SI
PUSH DI
PUSH CX
LP2: ;内循环
MOV AX,[SI]
CMP AX,[SI+2]
JBE NOXCHG
XCHG AX,[SI+2]
MOV [SI],AX
MOV BL,[DI]
XCHG BL,[DI+1]
MOV [DI],BL
NOXCHG:
ADD SI,2
INC DI
LOOP LP2
POP CX
POP DI
POP SI
LOOP LP1 ;冒泡结束
POP CX
POP BX
POP AX
POP DI
POP SI
RET
SORT ENDP
DISPAXD PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
LEA DI,DECIMAL
CALL TRANS16TO10
MOV CX,M
MOV BX,CX
DEC BX
LEA DI,DECIMAL[BX];指向最高位
MOV AH,2
DISPAXD2:
MOV DL,[DI]
ADD DL,30H
DEC DI
INT 21H
LOOP DISPAXD2
POP DI
POP DX
POP CX
POP BX
POP AX
RET
DISPAXD ENDP
TRANS16TO10 PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV BX,10
MOV CX,M
TRANS1:
XOR DX,DX
DIV BX
MOV [DI],DL
INC DI
LOOP TRANS1
POP DI
POP DX
POP CX
POP BX
POP AX
RET
TRANS16TO10 ENDP
DISPEM PROC NEAR
PUSH AX
PUSH DX
MOV AL,20H
MOV AH,02
MOV DL,AL
INT 21H ;显示一位字符
POP DX
POP AX
RET
DISPEM ENDP
DISPCR PROC NEAR
PUSH AX
PUSH DX
MOV AL,0AH
MOV AH,02
MOV DL,AL
INT 21H ;显示一位字符
POP DX
POP AX
RET
DISPCR ENDP
CODES ENDS
END START