|
|
.MODEL SMALL
.STACK 64
DATA SEGMENT
KEY DB 04H
NUM DB 05H
ARRAY DB 05H
DB 04H
DB 03H
DB 02H
DB 01H
MID DB 00H
MSG1 DB 'PRESENT$'
MSG2 DB 'ABSENT$'
MSG3 DB 'SORTED LIST > $'
MSG4 DB 'KEY > $'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: CALL CLS
MOV DX,0000H
CALL CURSOR
MOV AX,DATA
MOV DS,AX
;Bubble Sort
MOV DL,NUM ;counter1
LIN1: DEC DL
JZ LOUT1
MOV CL,DL ;counter2
LEA BX,ARRAY ;pointer to first number
LIN2: MOV AL,[BX]
CMP AL,[BX+1]
JS LESS ;ARRAY(I)<ARRAY(I+1)
XCHG AL,[BX+1];
MOV [BX],AL
LESS: INC BX
DEC CL
JNZ LIN2
JMP LIN1
;Display
LOUT1: LEA DX,MSG3
MOV AH,09H
INT 21H
LEA BX,ARRAY
MOV CH,00H
MOV CL,NUM
DISP1: MOV AL,[BX]
MOV AH,AL
PUSH BX
PUSH CX
CALL SHOW
POP CX
POP BX
INC BX
LOOP DISP1
MOV DX,0200H
CALL CURSOR
LEA DX,MSG4
MOV AH,09H
INT 21H
MOV AL,KEY
MOV AH,AL
CALL SHOW
;Binary Search
MOV CX,01H ;lower
MOV DH,00H
MOV DL,NUM ;upper
LOOP1: CMP DX,CX
JC NFOUND
MOV AX,CX
ADD AX,DX
SHR AX,1
MOV MID,AL
LEA BX,ARRAY
ADD BX,AX
DEC BX
MOV AL,[BX]
CMP AL,KEY
JE FOUND
JC LHALF
UHALF: MOV DH,00H
MOV DL,MID
DEC DX
JMP LOOP1
LHALF: MOV CH,00H
MOV CL,MID
INC CX
JMP LOOP1
FOUND: LEA DX,MSG1
MOV AH,09H
INT 21H
JMP HALT
NFOUND: LEA DX,MSG2
MOV AH,09H
INT 21H
HALT: MOV AX,4C00H
INT 21H
;CLEARS SCREEN
CLS: MOV AX,0600H
MOV BH,07H
MOV CX,0000H
MOV DX,184FH
INT 10H
RET
;SET CURSOR
CURSOR: MOV AH,02H
MOV BH,00H
INT 10H
RET
SHOW: MOV BX,AX
AND BX,0F00FH
MOV CL,04H
SHR BH,CL
ADD BX,3030H
MOV AH,02H
MOV DL,BH
INT 21H
MOV AH,02H
MOV DL,BL
INT 21H
MOV AH,02H
MOV DL,' '
INT 21H
RET
CODE ENDS
END START
|
|
|