Micro 5
Micro 5
MAIN PROC
MOV AX,@DATA
MOV DS,AX
MOV BX,0
MOV CL,1
TOP:
MOV AH,1 ; INPUT CHARACTER
INT 21H ; COMPARE IS CR OR NOT
CMP AL,0DH ; IF EQUAL JUMP TO END IF NO THAN CONTINUE
JE END_
JMP TOP
CHECK:
CMP AL,31H ;COMPARE AL CONTAIN 1 OR NOT
JNE MSG ; IF NO GOTO MSG
JMP CONTINUE ; IF YES THAN GOTO CONTINUE
END_:
MOV AH,2 ;
MOV DL,0AH ;
INT 21H ;NEW LINE
MOV DL,0DH ;
INT 21H
MOV CL,1
MOV CH,0
OUTPUT:
CMP CH,4 ;COMPARE CH IS EQUAL 4
JE FINISH ;IF YES GOTO FINISH
INC CH ;INCREMENT CH
DIGIT:
ADD DL,30H ;ADD DL WITH 30h
MOV AH,2
INT 21H ;PRINTING DL
ROL BX,4 ;ROTATE BX LEFT 4 TIMES
JMP OUTPUT ;JUMP TO OUTPUT
MSG:
MOV AH,9 ;
LEA DX,STR ;ILLEGAL MSG
INT 21H ;
FINISH:
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
Question2
.model small
.stack 100h
.data
NUM DB 10 DUP('$')
RES DB 40 DUP('$')
SIZE DB 0
H0 DB '0000$'
H1 DB '0001$'
H2 DB '0010$'
H3 DB '0011$'
H4 DB '0100$'
H5 DB '0101$'
H6 DB '0110$'
H7 DB '0111$'
H8 DB '1000$'
H9 DB '1001$'
HA DB '1010$'
HB DB '1011$'
HC DB '1100$'
HD DB '1101$'
HE DB '1110$'
HF DB '1111$'
.code
main proc
MOV AX,@data
MOV DS,AX
LEA SI,NUM
MOV CX,0
loop_1:
MOV AH,1h
INT 21h
CMP AL,13
JE NA
INC CL
CMP CL,10
JE NA
CMP AL,57
JG ELSEA1
SUB AL,48
JMP BOTHA1
ELSEA1:
SUB AL,55
BOTHA1:
MOV AH,0H
MOV BL,AL
MOV [SI],AL
INC SI
JMP loop_1
NA:
MOV SIZE,CL
LEA SI,NUM
label_1:
MOV AL,[SI]
CALL val
INC SI
DEC CL
CMP CL,0
JG label_1
MOV AH,02
MOV DX,10
INT 21H
MOV DX,13
INT 21H
MOV CH,0
MOV AH,0
LEA SI,NUM
MOV CL,SIZE
label_2:
MOV AL,[SI]
MOV BL,15
SUB BL,AL
MOV AL,BL
CALL val
INC SI
DEC CL
CMP CL,0
JG label_2
MOV AH,02
MOV DX,10
INT 21H
MOV DX,13
INT 21H
main endp
val proc
CMP AL,0h
JNE N0
LEA DX,H0
JMP LAST
N0:
CMP AL,1
JNE N1
LEA DX,H1
JMP LAST
N1:
CMP AL,2
JNE N2
LEA DX,H2
JMP LAST
N2:
CMP AL,3
JNE N3
LEA DX,H3
JMP LAST
N3:
CMP AL,4
JNE N4
LEA DX,H4
JMP LAST
N4:
CMP AL,5
JNE N5
LEA DX,H5
JMP LAST
N5:
CMP AL,6
JNE N6
LEA DX,H6
JMP LAST
N6:
CMP AL,7
JNE N7
LEA DX,H7
JMP LAST
N7:
CMP AL,8
JNE N8
LEA DX,H8
JMP LAST
N8:
CMP AL,9
JNE N9
LEA DX,H9
JMP LAST
N9:
CMP AL,10
JNE N10
LEA DX,HA
JMP LAST
N10:
CMP AL,11
JNE N11
LEA DX,HB
JMP LAST
N11:
CMP AL,12
JNE N12
LEA DX,HC
JMP LAST
N12:
CMP AL,13
JNE N13
LEA DX,HD
JMP LAST
N13:
CMP AL,14
JNE N14
LEA DX,HE
JMP LAST
N14:
CMP AL,15
JNE N15
LEA DX,HF
JMP LAST
N15:
RET
LAST:
MOV AH,09h
INT 21h
ret
val endp
QUESTION3
.STACK 100H
.DATA
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
; interrupt to exit
MOV AH, 4CH
INT 21H
MAIN ENDP
REVERSE PROC
; load the offset of
; the string
MOV SI, OFFSET STRING
LOOP1:
; compare if this is;
;the last character
MOV AX, [SI]
CMP AL, '$'
JE LABEL1
LABEL1:
; again load the starting;
;address of the string
MOV SI, OFFSET STRING
LOOP2:
;if count not equal to zero
CMP CX,0
JE EXIT
; make dh, 0
XOR DH, DH
; increment si and;
;decrement count
INC SI
DEC CX
JMP LOOP2
EXIT:
; add $ to the end of string
MOV [SI],'$ '
RET
REVERSE ENDP
END MAIN
.STACK 100H
.DATA
.CODE
MOV AX,@DATA
MOV DS,AX
CALL REVERSE
LEA DX,STRING
; loaded in dx
INT 21H
; interrupt to exit
INT 21H
MAIN ENDP
REVERSE PROC
;string
MOV CX, 0H
LOOP1:
JE LABEL1
;stack
PUSH [SI]
;and count
INC SI
INC CX
LABEL1:
CMP CX,0
JE EXIT
POP DX
; make dh, 0
XOR DH, DH
;reversed string
MOV [SI], DX
; increment si and;
;decrement count
INC SI
DEC CX
JMP LOOP2
EXIT:
RET
REVERSE ENDP
END MAIN