-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsearching_table_of_params.asm
More file actions
194 lines (143 loc) · 4.17 KB
/
searching_table_of_params.asm
File metadata and controls
194 lines (143 loc) · 4.17 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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
DATA SEGMENT
ARRINP DB "Enter elements of array: $"
INPUT_ELE DB "Enter number to search: $"
NOTFOUND_MSG DB "Element not found! $"
FOUND_MSG DB "Element found! $"
INPUT_SIZE DB "Enter size of array: $"
EMPTY DB "Empty array!$"
ELE DW ?
ARRAY DW 10 DUP(?)
SIZE DW ?
TEN DW 10
TABLE_OF_PARAMS DW 3 DUP(?)
DATA ENDS
CODE SEGMENT
START:
ASSUME DS:DATA, CS:CODE
;LOAD ES AND DS WITH DATA
MOV AX, DATA
MOV DS, AX
;MOV ES, AX
;TAKE SIZE OF ARRAY AS INPUT
MOV AX,0
LEA DX, INPUT_SIZE
MOV AH,9
INT 21H
CALL NEWLINE
CALL READ
MOV SIZE, BX
CMP BX,0
JE EMP
;INPUT ELEMENTS OF ARRAY
CALL NEWLINE
MOV AX,0
LEA DX, ARRINP
MOV AH,9
INT 21H
CALL NEWLINE
MOV CX, SIZE
MOV DI,0
ARRAYINPUT:
CALL READ
MOV DX, BX
MOV BX, OFFSET ARRAY
MOV BX[DI], DX
INC DI
INC DI
CALL NEWLINE
LOOP ARRAYINPUT
;INPUT ELEMENT TO BE SEARCHED
MOV AX,0
LEA DX, INPUT_ELE
MOV AH,9
INT 21H
CALL NEWLINE
MOV BX,0
CALL READ
MOV ELE,BX
;LINEAR SEARCH
MOV TABLE_OF_PARAMS, OFFSET ARRAY
MOV TABLE_OF_PARAMS+2, OFFSET SIZE
MOV TABLE_OF_PARAMS+4, OFFSET ELE
MOV BX, OFFSET TABLE_OF_PARAMS
CALL L_SEARCH
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
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
;--------------------------------
L_SEARCH PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
MOV DI,[BX+2]
MOV CX,[DI]
MOV DI,[BX+4]
MOV SI,[BX]
SEARCH:
MOV AX,[DI]
CMP AX, [SI]
JE FOUND
INC SI
INC SI
LOOP SEARCH
CALL NEWLINE
;PRINT MSG "ELEMENT NOT FOUND"
MOV AX,0
MOV DX, OFFSET NOTFOUND_MSG
MOV AH, 9
INT 21H
JMP EXITL
;PRINT MSG "ELEMENT FOUND"
FOUND:
CALL NEWLINE
MOV AX,0
MOV DX, OFFSET FOUND_MSG
MOV AH, 9
INT 21H
JMP EXITL
;PRINT MSG "ARRAY EMPTY"
EMP:
CALL NEWLINE
MOV AX,0
MOV DX, OFFSET EMPTY
MOV AH,9
INT 21H
EXITL:
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
L_SEARCH ENDP
;---------------------------------
CODE ENDS
END START