-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path4923.txt
235 lines (230 loc) · 8.27 KB
/
4923.txt
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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
.MODEL SMALL
.STACK 64
;-----------------
.DATA
DATA2 DB 5,?,5 DUP (?)
DATA3 DB 'Please enter your Identification Number: ','$'
DATA1 DB '0123456789ABCDEFabcdef?'
DATA4 DB 'EROR:The Identification Number must be 4-BIT HEX','$'
DATA5 DB ''WRONG ENTRY'Your Identification Number must contain data from 0-->9 or A-->F','$'
DATA6 DW 0AAAAH,0BBBBH,0CCCCH,0DDDDH,0EEEEH,0FFFFH,1111H,2222H,3333H,4444H ;IDs
DATA7 DW 5555H,6666H,7777H,8888H,9999H,0100H,0200H,0300H,0400H,5667H
DATA8 DW 1111H,2222H,3333H,4444H,5555H,6666H,000AH,000BH,000CH,000DH ;passwords
DATA9 DW 000FH,000EH,0001H,0002H,0003H,0A00H,0B00H,0C00H,0D00H,0A0AH
DATAA DB 'Your ID is wrong, Please try again!!','$'
DATAB DB 'Please enter your password : ','$'
DATAC DB 5,?,5 DUP (?)
DATAD DB 'Access Allowed','$'
DATAE DB 'Access Denied','$'
DATAF DB 00H
DATAG DB '---------------------------------------------------------------','$'
DATAH DB 'Secrity Lock','$'
;-----------------
.CODE
MAIN PROC FAR
MOV AX,@DATA ;move offset of data segment to AX
MOV DS,AX ;move AX to DS
MOV ES,AX ;Make DS and ES OVERLAP
MOV DH,00H ;Initialize DH With zeros
CALL CLEAR ;Call CLEAR screen procedure
MOV BP,OFFSET DATAF ;move Offset DataF to BP to use it in setting cursor
START: CALL SETCURSOR ;Call SETCURSOR procedure
CALL ENTRY ;Call ENTRY,which displays the message
CALL SETCURSOR ;Call SETCURSOR again to print a new line
ID: CALL WELCOME ;Call WELCOME,scans the user ID
CALL NOTLET4 ;Call NO.LET , checks if the number of digits you entered is less than 4
CALL CHECK ;Call CHECK , checks wether the scanned number is in range (0-->9 aw a-->f aw A-->F) or not
MOV SI,OFFSET DATA2+2 ;Initialize SI to point to the ID data in memory
CALL PUTIDINAX ;Call PUTIDINAX,puts the ID coming from memory in AX
CALL CHECKID ;Call CHECKID ,checks wether the entered ID is correct or not
CALL SETCURSOR
CALL GETPASS ;Call GETPASS ,scans the password from the user
MOV SI,OFFSET DATAC+2
CALL PUTIDINAX ;Call PUTIDINAX,puts the ID coming from memory in AX
CALL CHECKPASS ;Call CHECKPASS, checks wether the scanned password is correct or wrong
CALL SETCURSOR
CALL ENTER ;Call ENTER, if password is correct then access is allowed
NO_ERROR: CALL SETCURSOR
CALL NOERROR ;check if the entered nmber is less than 4!!
WR_ENT: CALL SETCURSOR
CALL WRONGENTRY ;check if the number is between 0 --> 9 or a --> f or A --> F
WRONGID: CALL SETCURSOR
CALL WRONG_ID
WRONGPASS: CALL SETCURSOR
CALL WRONG_PW
MOV AH,4CH
INT 21H
MAIN ENDP
;----------------
CLEAR PROC
MOV AX,0600H
MOV BH,07
MOV CX,0000
MOV DH,24
MOV DL,79
INT 10H
RET
CLEAR ENDP
;----------------
ENTRY PROC
MOV AH,09H
MOV DX,OFFSET DATAH
INT 21H
CALL SETCURSOR
MOV AH,09H
RET
ENTRY ENDP
;--------------
SETCURSOR PROC
MOV AH,02H
MOV BH,00
MOV DL,00
MOV DH,DS:[BP] ;coloumn ;row
INT 10H
ADD DS:[BP],1
RET
SETCURSOR ENDP
;----------------
WELCOME PROC
MOV AH,09H
LEA DX,DATA3
INT 21H
MOV AH,0AH
MOV DX,OFFSET DATA2
INT 21H
RET
WELCOME ENDP
;----------------
NOTLET4 PROC
LEA SI,DATA2+1
CMP [SI],04H
JNZ NO_ERROR
RET
NOTLET4 ENDP
;----------------
CHECK PROC
MOV AH,4
LEA SI,DATA2+2
AGAIN: LEA DI,DATA1
MOV CX,23
MOV AL,[SI]
REPNZ SCASB
CMP CX,00
JZ END
INC SI
DEC AH
JNZ AGAIN
RET
END: JMP WR_ENT
CHECK ENDP
;----------------
NOERROR PROC
MOV AH,09H
MOV DX,OFFSET DATA4
INT 21H
CALL Line
JMP START
RET
NOERROR ENDP
;---------------
WRONGENTRY PROC
MOV AH,09H
MOV DX,OFFSET DATA5
INT 21H
CALL Line
JMP START
RET
WRONGENTRY ENDP
;--------------
PUTIDINAX PROC
MOV CX,04H
AGAIN2: CMP [SI],39H
JZ ZERO
JB ZERO
JA OVER
ZERO: SUB [SI],30H
JMP STAR
OVER: CMP [SI],70
JZ CAPITAL
JB CAPITAL
JA SMALL
CAPITAL: SUB [SI],55
JMP STAR
SMALL: SUB [SI],87
JMP STAR
STAR: INC SI
DEC CX
JNZ AGAIN2
SUB SI,4
MOV AH,[SI]
MOV AL,[SI+2]
MOV BH,[SI+1]
MOV BL,[SI+3]
SHL AX,4
OR AX,BX
RET
PUTIDINAX ENDP
;--------------
CHECKID PROC
MOV CX,21 ; Set the counter to 21 decimal
LEA DI,DATA6 ; DI = OFFSET DATA6
CLD ; DF = 0 (AUTO INCREAMENT)
REPNE SCASW ; Check if the ID exists or not
CMP CX,0000H ; Check if the ID exists or not
JZ WRONGID ; If not exists jump to WRONGID
RET
CHECKID ENDP
;--------------
WRONG_ID PROC
MOV AH,09H
MOV DX,OFFSET DATAA
INT 21H
CALL Line
JMP START
RET
WRONG_ID ENDP
;-------------
GETPASS PROC
MOV AH,09H
MOV DX,OFFSET DATAB
INT 21H
MOV AH,0AH
MOV DX,OFFSET DATAC
INT 21H
RET
GETPASS ENDP
;-------------
CHECKPASS PROC
MOV BX,AX
ADD DI,38 ; If exist, jump to the password which equivalent to that ID
CMP BX,[DI] ; Check if the password correct or not
JNZ WRONGPASS
RET
CHECKPASS ENDP
;-------------
ENTER PROC
MOV AH,09H
MOV DX,OFFSET DATAD
INT 21H
CALL Line
JMP START
RET
ENTER ENDP
;------------
WRONG_PW PROC
MOV AH,09H
MOV DX,OFFSET DATAE
INT 21H
CALL Line
JMP START
WRONG_PW ENDP
;------------
Line PROC
CALL SETCURSOR
MOV AH,09H
MOV DX,OFFSET DATAG
INT 21H
RET
Line ENDP
;-----------
END MAIN