-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbinary_search.asm
More file actions
180 lines (140 loc) · 4.31 KB
/
binary_search.asm
File metadata and controls
180 lines (140 loc) · 4.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
DATA SEGMENT
ARRINP DB "Enter elements of array (in ascending order): $"
INPUT_ELE DB "Enter number to search: $"
NOTFOUND_MSG DB "Element not found! $"
FOUND_MSG DB "Element found! $"
INPSIZE DB "Enter size of array: $"
EMPTY DB "Empty array!$"
ELE DB ?
ARRAY DB 10 DUP(?)
SIZE DB ?
TWO DB 2
TEN DB 10
BEG DB ?
LAST DB ?
DATA ENDS
CODE SEGMENT
START:
ASSUME DS:DATA, CS:CODE
;LOADING DS AND ES
MOV AX, DATA
MOV DS, AX
MOV ES, AX
;USER INPUT SIZE
MOV AX,0
LEA DX, INPSIZE
MOV AH,9
INT 21H
CALL NEWLINE
CALL READ
CMP BX,0
JE EMP
MOV SIZE, BL
;INPUT ELEMENTS OF ARRAY
CALL NEWLINE
MOV AX,0
LEA DX, ARRINP
MOV AH,9
INT 21H
CALL NEWLINE
MOV CX, 0
MOV CL, SIZE
MOV DI,0
ARRAYINPUT:
MOV BX,0
CALL READ
MOV DX, BX
MOV BX, OFFSET ARRAY
MOV BX[DI], DX
INC DI
CALL NEWLINE
LOOP ARRAYINPUT
;INPUT ELEMENT TO SEARCH
MOV AX,0
LEA DX, INPUT_ELE
MOV AH,9
INT 21H
CALL NEWLINE
MOV BX,0
CALL READ
MOV ELE,BL
;BINARY SEARCH LOGIC
MOV BEG, 0
MOV AL, SIZE
AND AX, 0FFH
MOV LAST, AL
DEC LAST
SEARCH:
MOV AL, BEG
CMP AL, LAST
JG NOT_FOUND
ADD AL, LAST
DIV TWO
AND AX,0FFH
MOV SI,AX
MOV DL,ELE
CMP DL,BYTE PTR ARRAY[SI]
JL SMALLER
JG GREATER
JE FOUND
;ELEMENT TO SEARCH IS SMALLER THAN MIDDLE ELEMENT, UPDATE LAST
SMALLER:
MOV LAST,AL
DEC LAST
JMP SEARCH
;ELEMENT TO SEARCH IS GREATER THAN MIDDLE ELEMENT, UPDATE BEG
GREATER:
MOV BEG,AL
INC BEG
JMP SEARCH
;PRINT ELEMENT FOUND AND DISPLAY ITS INDEX
FOUND:
LEA DX,FOUND_MSG
MOV AH,9H
INT 21H
MOV DX,SI
ADD DL,30H
MOV AH,2H
INT 21H
JMP EXIT
;PRINT ELEMENT NOT FOUND
NOT_FOUND:
LEA DX,NOTFOUND_MSG
MOV AH,9H
INT 21H
JMP EXIT
;PRINT ARRAY EMPTY
EMP:
LEA DX,EMPTY
MOV AH,09H
INT 21H
EXIT: HLT
;---------------------------------
NEWLINE PROC NEAR ;PROCEDURE WHICH PRINTS A NEWLINE AND CARRIAGE RETURN ON THE CONSOLE
MOV AH, 2
MOV DL, 0DH
INT 21H
MOV DL, 0AH
INT 21H
RET
NEWLINE ENDP
;---------------------------------
READ PROC NEAR ;PROCEDURE WHICH READS INPUT FROM USER ONTO THE CONSOLE
MOV BX,0
MOV DX,0
LOOP1:
MOV AX, 0100H
INT 21H
CMP AL,0DH
JE ENDLOOP
AND AX,0FH
XCHG AX,BX
MUL TEN
ADD BX,AX
JMP LOOP1
ENDLOOP:
RET
READ ENDP
;--------------------------------
CODE ENDS
END START