DATAS SEGMENT
;此处输入数据段代码
OP DW 10 ;数据个数为10个
CHE DW 105 DUP(?)
I DW ?
K DW ?
L1 DW ?
R1 DW ?
YU DW 254
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
main proc far
MOV AX,DATAS
MOV DS,AX
MOV CX,OP
LEA SI,CHE
XOR BX,BX
call inpu
call pai
call shu
call erfen
call shuchu
ret
main endp
inpu proc near
A1: MOV AH,1 ;输入
INT 21H
CMP AL,39H
JG L0
CMP AL,30H
JL L0
PUSH AX
MOV AX,10
MUL BX
MOV BX,AX
POP AX
SUB AL,30H
XOR AH,AH
ADD BX,AX
JMP A1
L0: MOV CHE[SI],BX
XOR BX,BX
ADD SI,2
LOOP A1
ret
inpu endp
pai proc near
;选择排序
MOV CX,OP
LEA SI,CHE
H1: MOV DI,SI
ADD DI,2
MOV I,DI
MOV AX,CHE[SI]
MOV BX,CX
DEC BX
H2: CMP BX,0
JLE H3
DEC BX
CMP AX,CHE[DI]
JLE H4
MOV I,DI
MOV AX,CHE[DI]
H4: ADD DI,2
JMP H2
H3: CMP CHE[SI],AX
JE H5
MOV DI,I
XCHG AX,CHE[SI]
XCHG AX,CHE[DI]
H5:
ADD SI,2
LOOP H1
ret
pai endp
shu proc near
XOR BX,BX
F1: MOV AH,1 ;输入第N+1个数字
INT 21H
CMP AL,39H
JG F0
CMP AL,30H
JL F0
PUSH AX
MOV AX,10
MUL BX
MOV BX,AX
POP AX
SUB AL,30H
XOR AH,AH
ADD BX,AX
JMP F1
;二分查询
F0:
ret
shu endp
erfen proc near
MOV K,BX
LEA SI,CHE
MOV BX,OP
DEC BX
SHL BX,1
ADD BX,SI
MOV R1,BX
MOV BX,K
E1: CMP SI,R1
JGE E2
XOR AX,AX
MOV AX,SI
ADD AX,R1
SHR AX,1
AND AX,YU
MOV DI,AX
CMP CHE[DI],BX
JGE E3
MOV SI,DI
ADD SI,2
JMP E4
E3: MOV R1,DI
JMP E4
E4: JMP E1
E2:
ret
erfen endp
shuchu proc near
;输出数据
MOV BX,K
CMP BX,CHE[SI]
JNE A7
MOV AX,CHE[SI]
MOV BX,10
MOV CX,0
A2: XOR DX,DX
DIV BX
PUSH DX
INC CX
CMP AX,0
JZ A3
JMP A2
A3: CMP CX,0
JZ A4
POP AX
CMP AX,9
JL A5
ADD AL,37H
JMP A6
A5: ADD AL,30H
A6:
MOV DL,AL
DEC CX
MOV AH,2
INT 21H
JMP A3
JMP A4
A7:
MOV DL,'N'
MOV AH,2
INT 21H
A4:
MOV AH,4CH
INT 21H
ret
shuchu endp
CODES ENDS
END START
用子程序形式实现以下功能。从键盘输入65535以内的整数N+1个,N大于10,用选择排序法对输入的前N个整数排序,并用二分查找法查找第N+1个数是否存在于前N个数中,并输出查找结果。
最新推荐文章于 2022-12-19 11:02:51 发布