You are on page 1of 23

06CSL48 - Microprocessor Lab Manual Solutions 4th

Semester
Visvesvaraya Technological University
BCET
ISE

1. a) Search a key element in a list of ‘n’ 16-bit numbers


using the Binary
search algorithm.
Program :
;binary search
.MODEL SMALL
.STACK
.DATA
ARR DW 0111H,0112H,0113H,0114H,0115H
LEN DW ($-ARR)/2
KEY EQU 0115H
MSG1 DB "KEY IS FOUND AT "
RES DB " POSITION",13,10,"$"
MSG2 DB 'KEY NOT FOUND!!!!!!!!!!!!!. $'
.CODE
MOV AX,@DATA
MOV DS,AX
MOV BX,00
MOV DX,LEN
MOV CX,KEY
AGAIN:CMP BX,DX
JA FAIL
MOV AX,BX
ADD AX,DX
SHR AX,1
MOV SI,AX
ADD SI,SI
CMP CX,ARR[SI]
JAE BIG
DEC AX
MOV DX,AX
JMP AGAIN
BIG:JE SUCCESS
INC AX
MOV BX,AX
JMP AGAIN
SUCCESS:ADD AL,01
ADD AL,'0'
MOV RES,AL
LEA DX,MSG1
JMP DISP
FAIL:LEA DX,MSG2
DISP:MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
END
2. a) Write ALP macros:
i. To read a character from the keyboard in the
module (1) (in a different file)
ii. To display a character in module(2) (from different
file)
iii. Use the above two modules to read a string of
characters from the keyboard terminated by the carriage
return and print the string on the display in the next line.
Program:
;2A) FPROGRAM TO WRITE ALP MACROS:
;(1) TO READ A CHARACTER FROM THE KEYBOARD IN THE MODULE(1)
;(2) TO DISPLAY A CHARACTER IN MODULE(2)(FROM DIFFERENT FILE)
;(3) TO READ A STRING OF CHARACTERS TERMINATED BY THE
; CARRIAGE RETURN AND DISPLAY THE STRING IN THE NEXT LINE.
INCLUDE READKB.MAC ;Include file containing macro to read character from the
keyboard.
INCLUDE DISPCHAR.MAC ;Include file containing macro to display a character from the
;keyboard.
.MODEL SMALL
.STACK
.DATA
ARR DB 40 DUP(?)
.CODE
MOV AX,@DATA ;To initialise Data Segment(DS) Register
MOV DS,AX
MOV SI,0 ;Set array index to 0
BAK: READ ARR[SI] ;Read a character from the keyboard
INC SI ;and store it in arr
CMP AL,13 ;check for carriage return
JNZ BAK ;read the next character if not carriage return
MOV DL,10 ;Move the cursor to beginning of the next line
MOV AH,2
INT 21H
MOV DL,13
MOV AH,2
INT 21H
MOV SI,0
AGAIN: DISP ARR[SI] ;Display the string character by character
INC SI ;until carriage return is encountered
CMP AL,13
JNZ AGAIN
MOV AH,4CH
INT 21H
END

DISPCHAR.MAC

DISP MACRO LOC2


MOV DL,LOC2
MOV AH,02H
INT 21H
ENDM

READKB.MAC

READ MACRO LOC


MOV AH,01H
INT 21H
MOV LOC,AL
ENDM
3. a) Sort a given set of ‘n’ numbers in ascending and
descending orders using the Bubble Sort algorithm.
Program:
.MODEL SMALL
.STACK
.DATA
LIST DB 03H,04H,02H,01H,05H
N DW $-LIST
ORDER EQU 0
MSG DB 'THE SORTED ARRAY IS:: $'
.CODE
MOV AX,@DATA
MOV DS,AX
MOV BX,N
DEC BX
NXTPASS:MOV CX,BX
MOV SI,00H
NXTCOMP:MOV AL,LIST[SI]
INC SI
CMP AL,LIST[SI]
IF ORDER EQ 0
JB NEXT
ELSE
JA NEXT
ENDIF
XCHG AL,LIST[SI]
MOV LIST[SI-1],AL
NEXT:LOOP NXTCOMP
DEC BX
JNZ NXTPASS
LEA DX,MSG
MOV AH,09H
INT 21H
MOV BX,N
MOV SI,00H
AGAIN: MOV AL,LIST[SI]
ADD AL,'0'
MOV DL,AL
MOV AH,02H
INT 21H
MOV AH,02H
MOV DL,' '
INT 21H
INC SI
DEC BX
JNZ AGAIN
MOV AH,4CH
INT 21H
END
4. a) Read an alphanumeric character and display its
equivalent ASCII code at the center of the screen.
Program:

;4A) Read an alphanumeric character and display its equivalent


; ASCII code(in HEX) at the center of the screen.
.MODEL SMALL
.STACK
.DATA
MSG DB 'ENTER A KEY',10,13,'$'
.CODE
MOV AX,@DATA
MOV DS,AX ;Initialise DS

MOV AH,0 ;To clear the screen


MOV AL,3 ;Video mode =3
INT 10H

LEA DX,MSG ;DISPLAY MSG


MOV AH,9
INT 21H

MOV AH,1 ;Read a char from KB


INT 21H

MOV BL,AL ;Store it in BL


MOV AH,2 ;move cursor
MOV BH,0 ;page 0
MOV DH,12 ;row=12 central row
MOV DL,40 ;col=40 central col
INT 10H

MOV AL,BL ;display the char


AND AL,0F0H ;select the higher order nible
MOV CL,4 ;Shift count
SHR AL,CL ;Shift right by 4
CALL DISP ;display it
MOV AL,BL
AND AL,0FH ;select the lower order nibble
CALL DISP ;display it
MOV AH,4CH ;safe exit to dos
INT 21H
DISP: CMP AL,0AH ;convert an alphanumeric character to
JB SKIP ;equivalent ASCII value
ADD AL,7
SKIP: ADD AL,30H
MOV DL,AL
MOV AH,02 ;call dos function 02h to print a character
INT 21H
RET
END
5. a) Reverse a given string and check whether it is a
palindrome or not.
Program:
;5A) REVERSE A GIVEN STRING AND CHECK WHETHER IT IS A PALINDROME OR NOT.
.MODEL SMALL
.STACK
.DATA
STR DB 20 DUP(?)
MSG DB 'ENTER THE STRING: $'
MSG0 DB 'THE REVERSED STRING IS: ',10,13,'$'
MSG1 DB 13,10,"STRING IS A PALINDROM$"
MSG2 DB 13,10,"STRING IS NOT A PALINDROM!!!!!!!!!!!!!$"
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI,00H
LEA DX,MSG
MOV AH,09H
INT 21H
GETS: MOV AH,01H
INT 21H
MOV STR[SI],AL
INC SI
MOV AH,0
PUSH AX
CMP AL,0DH
JNZ GETS
LEA DX,MSG0
MOV AH,09H
INT 21H
MOV CX,SI

REV:POP AX
MOV DL,AL
MOV AH,02H
INT 21H
LOOP REV
DEC SI
DEC SI
MOV DI,SI
MOV SI,00H
NC: MOV AL,STR[SI]
CMP AL,STR[DI]
JNZ FL_MSG
INC SI
DEC DI
JNZ NC
MOV AH,09H
MOV DX,OFFSET MSG1
INT 21H
JMP END_PR
FL_MSG: MOV AH,09H
MOV DX,OFFSET MSG2
INT 21H
END_PR: MOV AH,4CH
INT 21H
END
6. a) Read two strings, store them in locations STR1 and
STR2. Check whether they are equal or not and display
appropriated messages. Also display the length of the
stored strings.
Program:
;6A) PROGRAM TO READ TWO STRINGS STR1 AND STR2 AND COMPARE THEM.
.MODEL SMALL
.STACK
.DATA
STR1 DB 20 DUP(?)
STR2 DB 20 DUP(?)
MS1 DB 'ENTER THE STRING1: $'
MS2 DB 'ENTER THE STRING2: $'
MSG1 DB 13,10,"STRINGS ARE EQUAL$"
MSG2 DB 13,10,"STRINGS ARE NOT EQUAL$"
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI,00H
MOV DI,00H
MOV AH,09H
LEA DX,MS1
INT 21H
SG1: MOV AH,01H
INT 21H
MOV STR1[SI],AL
INC SI
CMP AL,0DH
JNZ SG1
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
MOV AH,09H
LEA DX,MS1
INT 21H
SG2: MOV AH,01H
INT 21H
MOV STR2[DI],AL
INC DI
CMP AL,0DH
JNZ SG2
DEC DI
DEC SI
nc: MOV AH,STR1[SI]
CMP AH,STR2[DI]
JNZ FL_MSG
DEC SI
DEC DI
JNZ NC
MOV AH,STR1
CMP AH,STR2
JNZ FL_MSG
CMP SI,DI
JNZ NC
MOV AH,09H
MOV DX,OFFSET MSG1
INT 21H
JMP END_PR
FL_MSG: MOV AH,09H
MOV DX,OFFSET MSG2
INT 21H
END_PR: MOV AH,4CH
INT 21H
END
7. a) Read your name from the keyboard and display it at a
specified location on the screen in front of the message
What is your name? You must clear the entire screen
before display.
Program:
;7A) READ YOUR NAME FROM THE KEYBOARD AND DISLAY IT AS A SPECIFIC LOCATION
; ON THE SCREEN IN FRONT OF MESSAGE WHAT IS YOUR NAME ?
READSTR MACRO LOC ;MACRO TO READ A CHARACTER
MOV AH,01H
INT 21H
MOV LOC,AL
ENDM
.MODEL SMALL
.STACK
.DATA
M0 DB 'ENTER NAME:$'
M1 DB 'WHAT IS YOUR NAME? $'
LEN DW ($-M1)
ARR DB 40H DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI,00
LEA DX,M0
MOV AH,09H
INT 21H
LOOP1: READSTR ARR[SI] ;READ NAME FROM THE KEYBOARD
INC SI
CMP AL,13
JNZ LOOP1
MOV ARR[SI],'$'
MOV AH,00 ;CLEAR THE SCREEN
MOV AL,3
INT 10H
MOV AH,2 ;POSITION THE CURSOR
MOV BH,0
MOV DH,2
MOV DL,20
INT 10H
LEA DX,M1
MOV AH,09H
INT 21H
MOV SI,0
D: LEA DX,ARR[SI]
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
END
8. a) Compute the factorial of a positive integer ‘n’ using
recursive procedure.
Program:
;8A) COMPUTE FACTORIAL OF POSITIVE INTEGER 'N' USING RECURSIVE PROCEDURE
.MODEL SMALL
.STACK
.DATA
NUM DB 05H
RES DW 01H (?)
MSG DB "THE FACTORIAL IS :$"
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AX,01H
CALL FACT
MOV RES,AX
LEA DX,MSG
MOV AH,09H
INT 21H
MOV AX,RES
CALL ASCII
MOV AH,4CH
INT 21H

FACT PROC NEAR


MUL NUM
DEC NUM
JZ NT
CALL FACT
NT: RET
FACT ENDP

ASCII PROC NEAR


MOV BX,AX
AND AX,0F000H
MOV AL,AH
MOV CL,4
SHR AL,CL
CALL DISP
MOV AX,BX
AND AX,0F00H
MOV AL,AH
SHR AL,CL
CALL DISP
MOV AX,BX
AND AL,0F0H
SHR AL,CL
CALL DISP
MOV AX,BX
AND AL,0FH
CALL DISP
RET
ASCII ENDP
DISP PROC NEAR
CMP AL,0AH
JB SKIP
ADD AL,7
SKIP: ADD AL,30H
MOV DL,AL
MOV AH,02
INT 21H
RET
END
9. a) Compute nCr using recursive procedure. Assume that
‘n’ and ‘r’ are non-negative integers.
Program:
;9A) COMPUTE nCr USING RECURSION PROCEDURE. ASSUME THAT 'n' AND 'r' ARE
; NON NEGATIVE INTEGER NUMBERS.
.MODEL SMALL
.STACK
.DATA
N DW 5
R DW 4
NCR DW 1
msg db "The nCr is :$"
.CODE
MOV AX,@DATA
MOV DS,AX
MOV BX,N
INC BX
MOV CX,R
CALL NCP
lea dx,msg
mov ah,09h
int 21h
mov ax,ncr
call ascii
MOV AH,4CH
INT 21H
NCP PROC NEAR
CMP CX,00H
JE L1
PUSH CX
DEC CX
CALL NCP
MOV AX,BX
POP CX
SUB AX,CX
MUL NCR
DIV CX
MOV NCR,AX
L1: RET
NCP ENDP
ASCII PROC NEAR
MOV BX,AX
AND AX,0F000H
MOV AL,AH
MOV CL,4
SHR AL,CL
CALL DISP
MOV AX,BX
AND AX,0F00H
MOV AL,AH
SHR AL,CL
CALL DISP
MOV AX,BX
AND AL,0F0H
SHR AL,CL
CALL DISP
MOV AX,BX
AND AL,0FH
CALL DISP
RET
ASCII ENDP
DISP PROC NEAR
CMP AL,0AH
JB SKIP
ADD AL,7
SKIP: ADD AL,30H
MOV DL,AL
MOV AH,02
INT 21H
RET
END
10. a) Find out whether a given sub-string is present or
not in a main string of characters.
Program:
;10A) FIND OUT WHETHER A GIVEN SUB STRING IS PRESENT OR NOT IN A
; MAIN STRING OF CHARACTERS.
.MODEL SMALL
.STACK
DIS_MSG MACRO P1 ; DISPLAY MESSAGE
MOV AH,09H
LEA DX,P1
INT 21H ; CALL DOS SERVICES
ENDM
READ MACRO P1
MOV AH,0AH
LEA DX,P1
INT 21H
ENDM
.DATA
CR EQU 0DH
LF EQU 0AH
M3 DB CR,LF,'ENTER THE MAIN STRING:$'
M4 DB CR,LF,'ENTER THE SUB STRING:$'
M1 DB CR,LF,'THE SUB STRING IS FOUND:$'
M2 DB CR,LF,'THE SUB STRING IS NOT FOUND:$'
Z DB 50H
DB 0H
DB 50H DUP(?)
Y DB 50H
DB 0H
DB 50H DUP(?)
.CODE
MOV AX,@DATA
MOV DS,AX
DIS_MSG M3
READ Z
DIS_MSG M4
READ Y
MOV CL,Z+1
LEA SI,Z
ADD SI,2H
LOOP1: PUSH SI
LEA DI,Y
ADD DI,2H
MOV CH,Y+1
MOV BH,00H
LOOP3: MOV AL,[SI]
CMP AL,[DI]
JNE LOOP2
INC SI
INC DI
INC BH
CMP BH,Y+1
JE MES1
DEC CH
JNZ LOOP3
LOOP2: POP SI
INC SI
DEC CL
CMP CL,00H
JNE LOOP1
DIS_MSG M2
JMP TER
MES1: DIS_MSG M1
TER: MOV AH,4CH
INT 21H
END
11. a) Generate the first ‘n’ Fibonacci numbers.
Program:
;11A) PROGRAM TO GENERATE FIRST N FIBONACCI NUMBERS;
.MODEL SMALL
.STACK
.DATA
ARR DB 20 DUP(?)
COUNT DB 0AH
msg db "The fibonacci series : ",13,10,"$"
.CODE
MOV AX,@DATA
MOV DS,AX
MOV SI,00H
MOV AX,00H
MOV ARR[SI],AL
INC SI
mov bx,01h
MOV ARR[SI],bl
INC SI
MOV CH,COUNT
SUB CH,02H
BACK: ADD AX,BX
MOV ARR[SI],AL
INC SI
xchg ax,bx
DEC CH
JNZ BACK
lea dx,msg
mov ah,9
int 21h
call disp
MOV AH,4CH
INT 21H
disp proc near
mov si,00h
mov ch,count
loop1: mov al,arr[si]
mov ah,0
aam
add ax,3030h
mov dl,ah
mov ah,2
push ax
int 21h
pop ax
mov dl,al
int 21h
mov ah,2
mov dl, ' '
int 21h
inc si
dec ch
jnz loop1
ret
disp endp
END
12. a) Read the current time from the system and display
it in the standard format on the screen.
Program:
;12A) PROGRAM TO READ THE CURRENT TIME FROM THE SYSTEM AND
; DISPLAY IT IN THE STANDARD FORMAT ON THRE SCREEN
.MODEL SMALL
.STACK
.DATA
MSG DB 'THE CURRENT TIME IS : $'
.CODE
MOV AX,@DATA
MOV DS,AX ;Initialise DS
LEA DX,MSG ;DISPLAY THE MESSAGE
MOV AH,09H
INT 21H
MOV AH,2CH ;DOS FUNCTION TO GET THE CURRENT SYSTEM TIME
INT 21H
MOV AL,CH
AAM ;BCD ADJUST AFTER MULTIPLY
MOV BX,AX
CALL DISPLAY
MOV DL,':' ;DISPLAY THE CHAR ':'
MOV AH,02H
INT 21H
MOV AL,CL
AAM ;BCD ADJUST AFTER MULTIPLY
MOV BX,AX
CALL DISPLAY
MOV AH,4CH ;DOS FUNCTION TO TERMINATE
INT 21H
DISPLAY: ;FUNCTION TO DISPLAY A CHARACTER ON
MOV DL,BH ;THE STANDARD O/P DEVICE
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,BL
ADD DL,30H
MOV AH,02H
INT 21H
RET
END
13. a) Program to simulate a Decimal Up-counter to
display 00-99.
Program:
;13A PROGRAM TO SIMULATE A DECIMAL UPCOUNTER TO DISPLAY 00-99
.MODEL SMALL
.STACK
.DATA
.CODE
MOV AX,@DATA
MOV DS,AX
START: MOV AL,30H ;AL CONTAINS FIRST DIGIT
LOOP2: MOV DL,AL
MOV AH,02H
INT 21H
PUSH AX
MOV BL,030H ;BL CONTAINS SECOND DIGIT
LOOP1: MOV AH,02H
MOV DL,BL
INT 21H
INC BL ;INCREMENT SECOND DIGIT
CALL DELAY
MOV AH,03H ;GET CURRENT CURSOR POSITION
INT 10H
MOV AH,02H ;SET CURSOR TO NEXT COLUMN
MOV DL,01H
INT 10H
CMP BL,039H
JLE LOOP1 ;LOOP SECOND DIGIT(0-9)
MOV AH,02H ;SET5 CURSOR POSITION TO PREVIOUS COLUMN
MOV DL,00H
INT 10H
POP AX
INC AL ;INCREMENT 1ST DIGIT
CMP AL,039H
JLE LOOP2 ;LOOP 1ST DIGIT(0-9)
MOV AH,4CH
INT 21H
DELAY PROC
PUSH CX
PUSH BX
MOV CX,0FFFH
N3: MOV BX,0FFFFH
N4: DEC BX
JNZ N4
LOOP N3
POP BX
POP CX
RET
DELAY ENDP
END START
14. a) Read a pair of input co-ordinates in BCD and move
the cursor to the specified location on the screen.
Program:
;14A) READ A PAIR OF INPUT CO-ORDINATES IN BCD AND MOVE CURSOR SPECIFIED
POSITION ON SCREEN.
.MODEL SMALL
.STACK
.DATA
XMSG DB 13,10,'ENTER VALUE OF X CO-ORDINATES:','$'
X DB ?
YMSG DB 13,10,'ENTER VALUE OF Y CO-ORDINATES:','$'
Y DB ?
.CODE
MOV AX,@DATA
MOV DS,AX
MOV DX,OFFSET XMSG ;TO READ BCD CO=ORDINATES
CALL READ_BCD
MOV X,BH
MOV DX,OFFSET YMSG
CALL READ_BCD
MOV Y,BH
MOV AH,0 ;TO CLEAR THE SCREEN
MOV AL,03
INT 10H
MOV AH,02H ;TO SET CURSOR POSITION
MOV DH,X
MOV DL,Y
MOV BH,0
INT 10H
MOV DL,'-'
MOV AH,06H
INT 21H
MOV AH,4CH
INT 21H
READ_BCD PROC
MOV AH,09H
INT 21H
MOV AH,01H ;FIRST DIGIT
INT 21H
MOV BH,AL
MOV AH,01H ;SECOND DIGIT
INT 21H
MOV BL,AL
MOV CL,4H
SUB BH,30H ;TO CONVERT FROM ASCII TO BCD
SUB BL,30H
SHL BH,CL
OR BH,BL
RET
READ_BCD ENDP
END
15. a) Program to create a file (input file) and to delete an
existing file.
Program:
;15A1) PROGRAM TO CREATE A FILE (INPUT FILE)
.MODEL SMALL
.STACK
.DATA
FNAME DB 'C:\MASM\FILE.ASM',00H
SUCCESS DB 'FILE IS CREATED SUCCESSFULLY$'
FAILURE DB 'ERROR DURING FILE CREATION$'
.CODE
MOV AX,@DATA
MOV DS,AX
MOV CX,20H
LEA DX,FNAME
MOV AH,3CH
INT 21H
JC FAIL
LEA DX,SUCCESS
JMP EXIT
FAIL: LEA DX,FAILURE
EXIT: MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
END
Program:
;15A2) PROGRAM TO DELETE AN EXISTING FILE
.MODEL SMALL
.STACK
.DATA
FNAME DB 'C:\MASM\FILE.ASM',00H
SUCCESS DB 'FILE DELETED SUCCESSFULLY$'
FAILURE DB 'ERROR IN DELETING FILE$'
.CODE
MOV AX,@DATA
MOV DS,AX
MOV CX,20H
LEA DX,FNAME
MOV AH,41H
INT 21H
JC FAIL
LEA DX,SUCCESS
JMP EXIT
FAIL: LEA DX,FAILURE
EXIT: MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
END

You might also like