用子程序形式实现以下功能。从键盘输入65535以内的整数N+1个,N大于10,用选择排序法对输入的前N个整数排序,并用二分查找法查找第N+1个数是否存在于前N个数中,并输出查找结果。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值