You are on page 1of 37

MICROPROCESSORS & APPLICATION

LAB
MANUAL

COMMON FOR IV ECE, EEE


III CSE
Class : IV B.Tech.
Subject : Microprocessor Lab
List of Experiments
Sl.No. Name of the Experiment

1. SUMMATION & BLOCK TRANSFER OF DATA


a) Write and execute 8086 ALP to add the given series of BCD numbers and show the
result.
b) Write and execute 8086 ALP to transfer a Block of data from one memory location to
another memory location.
2. MULTIPLICATION & DIVISION
a) Write and execute 8086 ALP to perform the following multiplications.
1) Using Repeated addition
2) Using SHIFT and ADD instruction
b) Write and execute 8086 ALP to perform the following.
1) Binary division
2) BCD division
3. SEARCHING & SORTING DATA
a) Write and execute 8086 ALP to find the minimum and maximum number from a
given series of data
b) Write and execute 8086 ALP to arrange the given series of data in ascending order
and in descending order
4. EVALUATION OF MATHEMATICAL EXPRESSION
Mathematical Expressions
a) a*b- c/d + e
n
b) ∑ xi yi
i=1
5. CODE CONVERSION
a) Write and execute 8086 ALP to convert HEXA-DECIMAL to BCD number
b) Write and execute 8086 ALP to convert BCD to HEXA-DECIMAL number
c) Write and execute 8086 ALP to convert HEXA-DECIMAL to ASCII number
d) Write and execute 8086 ALP to convert ASCII to HEXA-DECIMAL number
6. LOGIC CONTROLLER MODULE
Write and execute 8086 ALP to design the logical expression(3 to 8 Decoder) using Logic
controller interface module

7. STEPPER MOTOR MODULE


Write and execute 8086 ALP to rotate a stepper motor either in clockwise direction or in
anticlockwise direction and to control the speed of rotation
8. SERIAL INPUT DISPLAY UNIT MODULE(SIDU)
Write and execute 8086 ALP to display the desired word in a 7-segment display of Serial
Input Display Unit Interface module
9. PARALLEL INPUT DISPLAY UNIT MODULE (PIDU)
Write and execute 8086 ALP to design an Up-Counter and Down-Counter using Parallel
Input Display Unit Interface module
10. DIGITAL TO ANALOG CONVERTER INTERFACE MODULE
Write and execute 8086 ALP to generate given waveform through CRO using DAC
Interface module
1b. BLOCK OF DATA TRANSFER
Aim: - Write an 8086 ALP to move block of data from one memory location to
Another.
Program:-
OUTPUT 2500AD
CODE SEGMENT
ASSUME CS: CODE
ORG 2000H
MOV SI, 2100H ; INTIALISE THE ADDRESS 2100H AS THE OFFSET
ADDRESS OF STACK INDEX REGISTER
MOV DI, 2200H ; INTIALISE THE ADDRESS 2200H AS THE STARTING
ADDRESS OF DATA INDEX REGISTER
MOV CX, 05H ; MOVE THE VALUE 05H TO THE COUNT REGISTER
L1:
MOV AL, [SI] ; MOVE THE CONTENT OF SI TO AL
MOV [DI], AL ; MOVE THE CONTENT OF AL TO DI
INC SI ; INCREMENT SI
INC DI ; INCREMENT DI
LOOP L1
INT 3
CODE ENDS
END
INPUT : - At location: 2100 – 01H,
2101 – 02H,
2102 – 03H,
2103 – 04H,
2104 – 05H.

OUTPUT : - At location: 2200 – 01H,


2201 – 02H,
2202 – 03H,
2203 – 04H,
2204 – 05H.
1a. ADDITION OF BCD NUMBERS

Aim: - Write an 8086 Assembly Language Program to add a series of BCD numbers.

Program:-

OUTPUT 2500AD
CODE SEGMENT
ASSUME CS: CODE
ORG 2000H
MOV AX, 0000H ; MOVE 0000H TO THE ACCUMULATOR
MOV CX, 05H ; MOVE THE VALUE 05H TO THE COUNT REGISTER
MOV SI,2100H ; INTIALISE THE ADDRESS 2100H AS THE OFFSET
ADDRESS OF SOURCE INDEX REGISTER
L1:
ADD AL,[SI] ; ADDING THE CONTENT OF AL AND CONTENT OF
SOURCE INDEX REGISTER
DAA ; DECIMAL ADJUST AFTER ADDITION
INC SI ; INCREMENT SOURCE INDEX REGISTER ADDRESS
INCREMENT
LOOP L1 ; CONTINUES IN THE LOOP L1 TILL CX BECOMES
ZERO
INT 3 ; BREAKING POINT INTERRUPT
CODE ENDS ; END OF CODE SEGMENT
END
INPUT:-
At location 2100H : 02H,
2101H : 03H,
2102H : 04H,
2103H : 05H,
2104H : 06H,
OUTPUT: - AX = 0020
2 (a1). MULTIPLICATION OF TWO NUMBERS
(Using Repeated addition method)

Aim: - Write an ALP in 8086 to multiply the numbers by using MUL instruction.

Program:-

OUTPUT 2500AD
CODE SEGMENT
ASSUME CS: CODE
ORG 2000H
MOV SI,2100H ; INTIALISE THE ADDRESS 2100 AS THE OFFSET
ADDRESS OF SOURCE INDEX REGISTER
MOV DI,2200H ; INTIALISE THE ADDRESS 2200 AS THE OFFSET
ADDRESS OF DESTINATION INDEX REGISTER
MOV AX,00H ; CLEAR AX REGISTER
MOV CX,00H : CLEAR CX REGISTER
MOV CL,[DI] ; MOVE THE CONTENT OF DI TO CL
L1:
ADD AL,[SI] ; ADD AL WITH THE CONTENT OF SI
LOOP L1 ; CONTINUE IN THE LOOP UNTIL CL BECOMES ZERO
INT 3
CODE ENDS
END

Input:-
At location 2100H, Multiplicand: 05H
At location 2200H, Multiplier : 08H

Output: - Product in AX: 28H


2(a2). MULTIPLICATION OF TWO NUMBERS
(Using Shift & Add Method)
Aim: - Write an ALP in 8086 to perform the multiplication of the given numbers using
Shift & Add procedure.
Program:-
OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
MOV SI,2100H ; INTIALISE THE ADDRESS 2100 AS THE OFFSET
ADDRESS OF SOURCE INDEX REGISTER
MOV DL,[SI] ; MOVE THE CONTENT OF SI TO DL REGISTER
INC SI ; INCREMENT THE REGISTER SI
MOV BL,[SI] ; MOVE THE CONTENT OF SI TO BL
MOV AX,00H ; CLEAR ACCUMULATOR
MOV BH,00H ; CLEAR BH REGISTER
MOV CX,08H ; MOVE THE VALUE 08H TO THE COUNT
REGISTER
L1:
SHL AL,01 ; SHIFT LEFT THE ACCUMULATOR BY 1 BIT
SHL BL,01 ; SHIFT LEFT THE BL REGISTER BY 1 BIT
JNC L2 ; JUMP TO L2 IF NO CARRY
ADD AL,DL ; ADD THE AL AND DL REGISTER VALUES
L2:
LOOP L1 ; CONTINUE IN THE LOOP UNTIL COUNT REGISTER
BECOMES ZERO
INT 3
CODE ENDS
END
Input:-
At location 2100H, 05H
At location 2101H, 08H

Output: - In AX register: 28H


2(b1). BINARY DIVISION

Aim:- Write an ALP to perform 16-bit by 8-bit Binary Division .

Program:-

OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
MOV SI, 2100H ; INTIALISE THE ADDRESS 2100 AS THE OFFSET
; ADDRESS OF STACK INDEX REGISTER
MOV AX,0000H ; CLEAR THE ACCUMULATOR
MOV AH,[SI] ; MOVE THE CONTENT OF SI TO AH
INC SI ; INCREMENT SI (ADDRESS)
MOV AL, [SI] ; MOVE THE CONTENT OF SI TO AL
INC SI ; INCREMENT SI
MOV BX, 0000H ; CLEAR B REGISTER
MOV BL,[SI] ; MOVE THE CONTENT OF SI TO BL
DIV BL ; DIVIDE AL BY BL
INT 3
CODE ENDS
END

Input:-
At location 2100H -02H
At location 2101H -04H
At location 2102H -03 H

Output:-
AX=00ACH i.e., Reminder AH=00H, Quotient AL=ACH
2(b2). BCD DIVISION

Aim: - Write an ALP in 8086 to perform BCD division of given numbers.

Program:-

OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
MOV AX,0000H ; CLEAR ACCUMULATOR
MOV SI,2100H ; INTIALISE THE ADDRESS 2100 AS THE
; OFFSET ADDRESS OF STACK INDEX REGISTER
MOV AH,[SI] ; MOVE THE CONTENT OF SI TO AH
INC SI ; INCREMENT SI (ADDRESS)
MOV AL,[SI] ; MOVE THE CONTENT OF SI TO AL
INC SI ; INCREMENT SI
MOV BX,0000H ; CLEAR B REGISTER
MOV BL,[SI] ; MOVE THE CONTENT OF SI TO AL
AAD ; ASCII ADJUST BEFORE DIVISION
DIV BL ; DIVIDE THE ACCUMULATOR WITH BL
CODE ENDS
END

Input:-
At location 2100H,02H
At location 2101H,04H
At location 2102H,03H

Output:-
AX=0008H
So remainder AH=00H Quotient AL=08H.
3a. FINDING THE MAXIMUM NUMBER
Aim:- Write an ALP in 8086 to find maximum number from the given numbers.
Program:-
OUTPUT2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
MOV AX,0000H ; CLEAR THE ACCUMULATOR
MOV BX,0000H ; CLEAR THE B REGISTER
MOV SI,2100H ; INITIALISE THE ADDRESS 2100 AS THE
; OFFSETADDRESS OF STACK INDEX REGISTER
MOV CX,0004H ; INITIALIZE 04H TO COUNT REGISTER
MOV AL,[SI] ; MOVE THE CONTENTS OF SI TO AL
L1:
INC SI ; INCREMENT SI
MOV BL,[SI] ; MOVE THE CONTENT OF SI TO BL
CMP AL,BL ; COMPARE AL AND BL REGISTERS
JG L2 ; JUMP TO LABLE L2 IF AL IS GREATER THAN
MOV AL,BL ; MOVE THE CONTENT OF BL TO AL
L2:
LOOP L1 ; CONTINUE IN THE LOOP LI UNTIL COUNT
REGISTER IS ZERO
INT 3
CODE ENDS
END

Input:-
At location 2100H, 07H
2101H, 03H
2102H, 09H
2103H, 04H
2104H, 02H
2105H,01H
Output: Result is in BL i.e., the maximum number BL = 09H
3b. SORTING OF GIVEN NUMBERS
Aim: - Write an ALP in 8086 to perform sorting operation with given numbers.

Program:-

OUTPUT 2500AD
ASSUME CS:CODE
ORG 2000H
MOV SI,2100H ; INTIALISE THE ADDRESS 2100 AS THE OFFSET
ADDRESS OF STACK REGISTER
MOV AX,0000H ; MOVE THE COUNT VALUE TO COUNT REGISTER
MOV CX,0005H ; MOVE THE COUNT VALUE TO COUNT REGISTER
L1:
PUSH CX ; PUSH COUNT VALUE IN NO STACK
MOV SI,2100H ; INTIALISE THE ADDRESS 2100 AS THE OFFSET
; ADDRESS OF STACK INDEX REGISTER
MOV CX,05H ; MOVE THE COUNT VALUE TO COUNT REGISTER
L2:
MOV AL,[SI] ; MOVE THE CONTENT OF SI TO AL
INC SI ; INCREMENT SI
MOV AH,[SI] ; MOVE THE CONTENT OF SI TO AH
CMP AL,AH ; COMPARE AL AND AH
JB L3 ; JUMP TO LABLE LOOP3 IF AL IS BELOW AH
MOV [SI],AL ; MOVE THE CONTENT OF AH TO SI
DEC SI ; DECREMENT SI
MOV [SI],AH ; MOVE THE CONTENT OF AH TO SI
INC SI ; INCREMENT SI
L3:
LOOP L2 ; CONTINUE IN THE LOOP2 UNTIL COUNT REGISTER
IS ZERO
POP CX ; POP VALUE OF CX FROM STACK
LOOP L1 ; CONTINUE IN THE LOOP1 UNTIL COUNT REGISTER
IS ZERO
INT 3
CODE ENDS
END

Input:-
At location 2100, 05H
2101, 07H
2102, 01H
2103, 03H
2104, 04H
2105, 09H

Output:-
At 2100, 01H
2101, 03H
2102, 04H
2103, 05H
2104, 07H
2104, 09H

4a. EVALUATION OF EXPRESSION


C
Aim: Write an ALP IN 8086 to evaluate the expression “”. A  B  E
D
Program:
OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
MOV SI,2100H ; INITIALIZE THE OFFSET ADDRESS OF SI AS 2100H
MOV AX,0000H ; CLEAR THE ACCUMULATOR
MOV DX,0000H ; CLEAR THE D REGISTER
MOV AL,[SI] ; MOVE THE CONTENT OF SI TO AL
INC SI ; INCREMENT SI
MOV BL,[SI] ; MOVE THE CONTENT OF SI TO BL
MUL BL ; MULTIPLY ACCUMULATOR WITH BL
MOV DX,AX ; MOVE THE CONTENTS OF AX TO DX REGISTER
INC SI ; INCREMENT SI
MOV AL,[SI] ; MOVE THE CONTENTS OF SI TO AL
INC SI ; INCREMENT SI
MOV BL,[SI] ; MOVE THE CONTENT OF SI TO BL
DIV BL ; DIVIDE ACCUMULATOR CONTENTS WITH BL
MOV AH,00H ; CLEAR THE AH REGISTER
SUB DX,AX ; SUBTRACT THE CONTENTS OF DX WITH AX
INC SI ; INCREMENT SI
MOV AL,[SI] ; MOVE THE CONTENT OF SI TO AL
ADD AX,DX ; ADD THE CONTENTS OF DX TO THE AX.
INT 3
CODE ENDS
END
Input : At location 2100 – 01H
2101 – 02H
2102 – 06H
2103 – 03H
2104 – 05H.

Output : The result is stored in AX = 0005H


4b. EVALUATION OF SUMMATION OF SERIES
n
Aim: Write an ALP in 8086 to evaluate the Expression I =  X iYi .
i 1

Program:
OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
MOV SI,2100H ;INITIALIZE THE ADDRESS 2100 AS THE OFFSET
ADDRESS OF STACK INDEX REGISTER.
MOV DX,0000H ; CLEAR THE DATA INDEX REGISTER
MOV CX,000H ; CLEAR THE COUNT REGISTER
MOV CL,[SI] ; MOVE THE CONTENT OF SI TO CL
MOV AX,0000H ; CLEAR THE ACCUMULATOR
MOV SI,2200H ; NITIALIZE THE ADDRESS 2200 TO SI
MOV DI,2300H ; INITIALIZE THE ADDRESS 2300 AS THE OFFSET
ADDRESS OF DATA INDEX REGISTER
LOOP1:
MOV AL,[SI] ; MOVE THE CONTENT OF SI TO AL
MOV BL,[DI] ; MOVE THE CONTENT OF DI TO BL
MUL BL ; MULTIPLY AL WITH BL
ADD DX,AX ; ADD THE D REGISTER TO ACCUMULATOR
MOV AH,00H ; CLEAR AH REGISTER
INC SI ; INCREMENT SI
INC DI ; INCREMENT DI
LOOP LOOP1 ; CONTINUE IN LOOP1 UNTIL CX REGISTER IS ZERO
INT 3
CODE ENDS
END
Input : At location 2100 – 03H
At location 2200 – 01H
2201 – 02H
2202 – 04H
At location 2300 – 02H
2301 – 03H
2302 – 05H.
Output : Result of SUM of Series in DX = 1C.

5a. HEXA-DECIMAL to BCD CONVERSION

Aim: - Write an 8086 ALP to convert from Hexadecimal digit to BCD digit.

Program:-

OUTPUT 2500AD ; SEE THE OUTPUT AT ADDRESS 2500


CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
MOV AX,0000H ; CLEAR THE ACUMULATOR
MOV SI,2100H ; INTIALISE THE ADDRESS 2100 AS THE OFFSET
ADDRESS OF STACK INDEX REGISTER
MOV CL,[SI] ; MOVE THE CONTENT OF SI TO COUNT REGISTER
CL
L1:
ADD AL,01H ; INCREMENT THE ACCUMULATOR
DAA ; ADJUST THE RESULT TO DECIMAL VALUE
LOOP L1 ; CONTINUE IN THE LOOP UNTIL COUNT REGISTER
IS ZERO
INT 3
CODE ENDS ; END OF THE CODE SEGMENT
END

Input:-
2100 : 0AH

Output:-
AX : 10
5c. HEXA-DECIMAL to ASCII CONVERSION

Aim: - Write an ALP in 8086 to convert the given Hexadecimal number in to ASCII
format.

Program:-
OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
MOV SI,2100H ; INTIALISE THE ADDRESS 2100 AS THE
; OFFSET ADDRESS OF STACK INDEX
REGISTER.
MOV AL,[SI] ; MOVE THE CONTENT OF SI TO AL
ADD AL,30H ; ADD 30H TO AL
CMP AL,3AH ; COMPARE AL WITH 3AH
JB L1 ; JUMP TO L1 IF AL VALUE IS BELOW 3AH
ADD AL,07H ; ADD 07H TO AL
L1:
INT 3
CODE ENDS
END

Input:-
2100 : 0AH

Output:-
AX : 41
5b. BCD to HEXA-DECIMAL CONVERSION

Aim: - Write an ALP to convert the given number in BCD to Hexadecimal format.

Program:-
OUTPUT 2500AD ;DISPLAY THE OUTPUT AT ADDRESS 2500
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
MOV AX,0000H ; CLEAR THE ACCUMULATOR
MOV SI,2100H ; INTIALIZE THE OFFSET ADDRESS OF SI AS 2100
MOV AL,[SI] ; MOVE THE CONTENT OF SI IN TO AL
MOV AH,AL ; MOVE AL VALUE TO AH
AND AH,OFH ; STORE LOWER NIBBLE VALUE
MOV BL,AH ; MOVE THE NIBBLE VALUE TO BL
AND AL,FOH ; STORE UPPER NIBBLE VALUE
MOV CL,04H ; MOVE THE COUNT VALUE 04H IN TO CL
ROR AL,CL ; ROTATE RIGHT ACCUMULATOR 04H TIMES
MOV BH,0AH ; MOVE THE CONTENT OAH IN TO BH
MUL BH ; MULTIPLY BH WITH ACCUMULATOR
ADD AL, BL ; ADD THE AL AND BL REGISTERS
MOV AH,00H ; CLEAR AH REGISTER
INT 3
CODE ENDS
END

Input:-
2100 : 14

Output:-
AX : 000E(H)
5d. ASCII to HEXA-DECIMAL CONVERSION
Aim: - Write an ALP to convert the given number in ASCII to Hexadecimal digit.

Program:-
OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
MOV AX,0000H ; CLEAR THE ACCUMULATOR
MOV SI,2100H ; INTIALISE THE ADDRESS 2100 AS THE OFFSET
ADDRESS OF STACK INDEX REGISTER
MOV AL,[SI] ; MOVE THE CONTENT OF SI TO AL
SUB AL,30H ; SUBSTACT 30H FROM AL
CMP AL,0AH ; COMPARE AL WITH OAH
JB OUT ; JUMP TO OUT IF VALUE OF AL IS BELOW THAT
OF OAH
SUB AL,07H ; SUBSTACK 07H FROM AL
OUT:
INT 3 ; END OD THE PROGRAM (OUT)
CODE ENDS
END

Input:-
2100 : 46

Output:-
AX : 000F(H)
6. LOGIC CONTROLLER
Aim: Write an ALP in 8086 to design the logical expression (3 to 8 Decoder) using Logic
controller interface module
Program:
OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
PTA EQU FFE0H ; PORT-A ADDRESS IS FFE1H
PTB EQU FFE2H ; PORT-B ADDRESS IS FFE3H
CWR EQU FFE6H ; CONTROL REGISTER ADDRESS IS FFE5H
ORG 2000H
XOR AX,AX
MOV AL,82H ; SETTING PORT-B AS INPUT, PORT-A AS OUTPUT
PORTS
MOV DX,CWR
OUT DX,AL ; DUMPING AL CONTROL INFORMATION TO CWR
L1:
MOV DX,PTB ; ASSIGN INPUT ADDRESS TO DX
IN AL,DX ; SEND DATA IN PORT-B TO AL
AND AL,07H ; ACCESS ONLY FIRST 3-BITS VALUE
MOV BL,01H
MOV CL,AL
CMP CL,00H
JE LAB2
MOV CH,00H
L2:
SHL BL,01H ; SHIFT BL BY CL TIMES TO FIND OUT EQUIVALENT
DECIMAL VALUE TO INPUT BINARY CODE
LOOP L2
LAB2:
MOV AL,BL ; FOR DISPLAYING SEND BL TO AL
MOV DX,PTA
OUT DX,AL ; EQUIVALENT NUMBER IS DISPLAYED AT PORT-A
JMP L1
INT 3
CODE ENDS
END
Input Switches Output on LED display
A B C D0 D1 D2 D3 D4 D5 D6 D7
0 0 0 1 0 0 0 0 0 0 0
0 0 1 0 1 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0 0 0
0 1 1 0 0 0 1 0 0 0 0
1 0 0 0 0 0 0 1 0 0 0
1 1 0 0 0 0 0 0 0 1 0
1 1 1 0 0 0 0 0 0 0 1

LOGIC CONTROLLER INTERFACE

+5v +5v
Port - A Port - B

7
16 8
6
15 7
5
18 10
4
17 9
3
20 12
2
19 11

1
22 14
0
21 15

25 +5V

26
8. SERIAL INPUT DISPLAY UNIT (SIDU)
Aim: Write an ALP in 8086 to display the desired word in the display of serial input
display unit interface module.
Program:
OUTPUT 2500AD
CODE SEGMENT
PTA EQU FFE0H ; FFE1H IS PORT-A ADDRESS
PTB EQU FFE2H ; FFE3H IS PORT-B ADDRESS
PTC EQU FFE4H ; FFE5H IS PORT-C ADDRESS
CWR EQU FFE6H ; FFE7H IS CONTROL REGISTER ADDRESS
ASSUME CS:CODE
ORG 2000H
START:
MOV SI,2100H ; INITIALIZE THE OFFSET ADDRESS OF SI AS 2100H
MOV AL,80H ; MAKING PORT-A AS OUTPUT PORT
MOV DX,CWR ; PASS CONTROL ADDRESS TO DX
OUT DX,AL ; MOVE AL TO CONTROL REGISTER UP
MOV BX,0004H ; SET OUTER LOOP A20 RUN 4 TIMES
A20:
MOV CX,0008H ; LOOP INNER LOOP A10 FOR 8 TIMES[8 BITS]
MOV AL,[SI] ; SET AL ≤ FIRST LETTER FROM LAST
A10:
MOV DX,PTB ; INITIALIZE DX ≤ PORT-B ADDRESS
OUT DX,AL ; PASS FIRST LETTER TO DX
CALL CLOCK ; CALL CLOCK PROCEDURE
SHR AL,01H ; SHIFT AL CONTENTS RIGHT ONE POSITION
LOOP A10
CALL DELAY ; CALL DELAY PROCEDURE
INC SI
DEC BX
JNZ A20 ; IF 4 DIGITS ARE OVER MOVE TO NEXT INSTRUCTION
CMP BL,00H
JE LAST
CLOCK:
PUSH AX
MOV DX,PTC ; INITIALIZE DX ≤ PORT-C ADDRESS
MOV AL,00H
OUT DX,AL ; MAKE PORT-C REGISTER CONTAIN ALL 0’S
NOP
NOP
MOV AL,FFH
OUT DX,AL ; MAKE PORT-C CONTAINS ALL 1’S
POP AX
RET ; RETURN TO CALLING PROCEDURE
DELAY:
PUSH CX
MOV CX,FF00H
A30:
NOP
NOP
NOP
NOP
LOOP A30
POP CX
RET
LAST:
INT 3
CODE ENDS
END
Output: By keeping 60, 60, 60, F3 in display board we get the output IEEE.

a
Whether we want to display E here negative logic is
taken b,c is not glowing other than that glowing(i.e.,
f b a,d,e,f)

g a b c d e f g h

0 1 1 0 0 0 0 060
e c

8 8 8 8
I E E E
9. PARALLEL INPUT DISPLAY UNIT (PIDU)
Aim: Write an ALP in 8086 to display the value from 0000 to9999 using 7-segment
LED display.

Program:
OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
PTA EQU FFE0H ; FFE1H IS PORT A ADDRESS
PTB EQU FFE2H ; FFE3H IS PORT B ADDRESS
CWR EQU FFE6H ; FFE7H IS CONTROL WORLD ADDRESS
ORG 3000H
MOV AL,80H ; MAKING PORT A AS OUTPUT REGISTER
MOV DX,CWR ; INTIALIZING PORTS
OUT DX,AL
MOV BL,00H
REPEAT:
MOV DX,PTA ; DX CONTAINING PORT A ADDRESS
MOV AL,00H ; UP COUNTER STARTS AT ‘00’ & ENDS AT ‘99’
MOV CX,64H
LOOP1:
OUT DX,AL ; SENDING AL CONTENTS TO PORT A
CALL DELAY
ADD AL,01H ; INCREMENT AL CONTENTS
DAA
LOOP LOOP1
MOV AL,00H
MOV DX,PTB ; PORT B FOR DOWN COUNTER
MOV AL,BL
ADD AL,01H
DAA
MOV BL,AL
OUT DX,AL
CMP BL,99H ; DOEN COUNTER STARTS AT 00 AND ENDS AT 99
JE SKIP
JMP REPEAT
DELAY:
PUSH CX
MOV CX,00EEH
LOOP3:
NOP ; NO OPERATION
NOP
NOP
LOOP LOOP3
POP CX ; RESTORE THE CX VALUE
RET
SKIP:
INT 3 ; BREAK POINT INTERRUPT
CODE ENDS 0 3 2 7
END

OUTPUT: - Output will be displayed on LED –display starting from 0000 to 9999.
9. PARALLEL INPUT DISPLAY UNIT (PIDU)
Aim: Write an ALP in 8086 to display the value from 9999 to 0000 using 7-segment
LED display.

Program:

OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
PTA EQU FFE0H ; FFE1H IS PORT A ADDRESS
PTB EQU FFE2H ; FFE3H IS PORT B ADDRESS
CWR EQU FFE6H ; FFE7H IS CONTROL WORLD ADDRESS
ORG 3000H
MOV AL,80H ; MAKING PORT A AS OUTPUT REGISTER
MOV DX,CWR ; INTIALIZING PORTS
OUT DX,AL
MOV BL,99H
REPEAT:
MOV DX,PTA ; DX CONTAINING PORT A ADDRESS
MOV AL,99H ; UP COUNTER STARTS AT ‘00’ & ENDS AT ‘99’
MOV CX,64H
LOOP1:
OUT DX,AL ; SENDING AL CONTENTS TO PORT A
CALL DELAY
SUB AL,01H ; INCREMENT AL CONTENTS
DAS
LOOP LOOP1
MOV AL,00H
MOV DX,PTB ; PORT B FOR DOWN COUNTER
MOV AL,BL
SUB AL,01H
DAS
MOV BL,AL
OUT DX,AL
CMP BL,00H ; DOEN COUNTER STARTS AT 00 AND ENDS AT 99
JE SKIP
JMP REPEAT
DELAY:
PUSH CX
MOV CX,00EEH
LOOP3:
NOP ; NO OPERATION
NOP
NOP
LOOP LOOP3
POP CX ; RESTORE THE CX VALUE
RET
SKIP:
INT 3 ; BREAK POINT INTERRUPT
CODE ENDS
END
10. DAC INTERFACE

Aim: Write an ALP in 8086 to generate the waveforms (triangular, square and complex
Waveforms) on CRO using DAC interface module.

Program:
TRIANGULAR WAVE
OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
MOV AL,80H ; PORT-A AS OUTPUT REGISTER
MOV DX,FFE6H ; DX CONTAINS CONTROL REGISTER ADDRESS
OUT DX,AL
MOV DX,FFE0H ; DX CONTAINS PORT-A ADDRESS
LOOP1:
MOV CX,00FFH
MOV AL,00H ; INITIALIZE AL TO LOW VALUE
LOOP2:
OUT DX,AL ; DUMP AL VALUE TO PORT-A
INC AL
LOOP LOOP2
MOV CX,FFH
MOV AL,FFH ; HIGH VALUE IN AL
LOOP3:
OUT DX,AL ; MOVE AL CONTENTS TO PORT-A
DEC AL
LOOP LOOP3
JMP LOOP1
INT 3
CODE ENDS
END

Triangular wave
Voltage

Time
SQUARE WAVE

OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 3000H
MOV AL,80H ; PORT-A AS OUTPUT REGISTER
MOV DX,FFE6H
OUT DX,AL ; DX CONTAINS PORT-A AS OUTPUT
MOV DX,FFE0H ; DX CONTAINS PORT-A ADDRESS
LOOP1:
MOV AL,00H ; FOR PRINTING LOW LEVEL
MOV CX,00FFH
LOOP2:
OUT DX,AL ; MOVE AL CONTENTS TO PORT-A
LOOP LOOP2
MOV AL,00FFH ; FOR PRINTING HIGH LEVEL
MOV CL,FFH
LOOP3:
OUT DX,AL ; MOVE AL CONTENTS TO PORT-A
LOOP LOOP3
JMP LOOP1
INT 3
CODE ENDS
END

Voltage
Square wave

Time
COMPLEX WAVE

OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 4000H
MOV AL,80H ; PORT-A AS OUTPUT PORT
MOV DX,FFE6H
OUT DX,AL ; DUMP AL TO DX
MOV DX,FFE0H
ITER:
MOV AL,00H ; IN ORDER TO PRINT LOW LEVEL
MOV CX,00FFH
LOOP1:
OUT DX,AL ; AL CONTENTS TO PORT-A
LOOP LOOP1
MOV AL,80H ; IN ORDER TO PRINT MIDDLE LEVEL
MOV CX,00FFH
LOOP2:
OUT DX,AL ; AL CONTENTS TO PORT-A
LOOP LOOP2
MOV AL,FFH ; IN ORDER TO PRINT HIGH LEVEL
MOV CX,00FFH
LOOP3:
OUT DX,AL ; AL CONTENTS TO PORT-A
LOOP LOOP3
MOV AL,80H ; IN ORDER TO PRINT MIDDLE LEVEL
MOV CX,00FFH
LOOP4:
OUT DX,AL ; AL CONTENT TO PORT-A
LOOP LOOP4
JMP ITER ; GO TO LOOP ITER FOR CONTINUOUS WAVE
INT 3
CODE ENDS
END

Complex wave
Voltage

Time
12v Y-out

R10 2k -12V
7
2 R92k R6 2K X-OUT
741 6
RS 2K

VR2 10K

12V

12v 12V -12V

PORTB (out) PORTA (OUT)


8 7 10 9 12 11
14 13 8 7 10 9 12 11
7 6 5 4 3 2 1
14 13
0 7 6 5 4 3 2 1 0 0
4
5 6 7 8 9 10 4
14 5
14 11 12 6 7 8 9 10
11 12
2
DAC 0808 2
15 DAC 0808
15

13 3 16 1 C3 C4

R 11 0.1F C6 C7 13 3 16 1
3K3 R
R12 7 R8 0.1F

0.1F

3K3
V5.5 +12V -12V V5.5 +12V -12V
7a. STEPPER MOTOR

Aim: Write an ALP in 8086 to interface the stepper motor using 8086’ s 8255 PPI and
rotate the motor in clockwise directions.

Program:
OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
PTA EQU FFE0H ; PORT-A ADDRESS IS FFE1H
PTB EQU FFE2H ; PORT-B ADDRESS IS FFE3H
PTC EQU FFE4H ; PORT-C ADDRESS IS FFE5H
CWR EQU FFE6H ; CONTROL REGISTER ADDESS IS FFE7H
ORG 2000H
XOR AX,AX ; SET AX TO 0000H
XOR DX,DX ; INITIALIZING DX TO 0000H
MOV DX,CWR ; PASS CONTROL ADDRESS TO DX
MOV AL,80H ; MAKING PORT-A AS OUTPUT PORT
OUT DX,AL ; MOVE AL TO CONTROL REGISTER
UP:
MOV CX,0032H ; SET CX TO VALUE 50 FOR CURRENT TO POLES ONCE
FOR 50 TIMES
LOOP4:
MOV BL,04H ; FOR PASSING CURRENT TO 4 STATOR POLES
MOV AL,01H ; PASS CURRENT TO 1 POLE
LOOP1:
MOV DX,PTA ; MOVE PORT-A ADDRESS TO CONTROL REGISTER
OUT DX,AL ; PASS AL CONTENTS TO PORT-A
CALL DELAY ; CALLING DELAY PROCEDURE
ROL AL,01H ; PASSING CURRENT NEXT POLE
DEC BL ; DECREMENT BL
JNZ LOOP1 ; JUMP TO LOOP1 IF NOT ONLY EQUAL TO ZERO
LOOP LOOP4
DELAY:
PUSH CX ; PUSH CX VALUE TO STACK
MOV CX,FFFEH ; SET CX TO FFFEH
L1:
NOP
NOP
LOOP L1
POP CX ; POP VALUE FROM STACK AND INITIALIZE TO CX
RET
INT 3 ; BREAK POINT
CODE ENDS
END
24V AT
RED
Lamp
R3 WINDING D1
PA 620 4001
2 R2

19 SL 100
R1=2K

2N3055

24V AT
Lamp
YELLOW
R5 WINDING D2
620 4001
PA R5
3

20 SL 100

R4=2K

2N3055

24 AT
LAMP
BLOCK
R9 WINDING D3
620 4001
PA R2
8

SL 100
21

R7=2K

2N3055

24V AT
Lamp
GREEN
R12 WINDING D4
PA 620 4001
1 R11

22 SL 100
R10=2K

2N3055

RED WINDING

YELLOW WINDING

WHITE COMMON

BLACK WINDING

GREEN WINDING

Output: Motor is rotated with one rotation clockwise direction with the given time
delay.
7b. STEPPER MOTOR

Aim: Write an ALP in 8086 to interface the stepper motor using 8086’ s 8255 PPI and
rotate the motor in anti-clockwise directions.

Program:

OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
PTA EQU FFE0H ; PORT-A ADDRESS IS FFE1H
PTB EQU FFE2H ; PORT-B ADDRESS IS FFE3H
PTC EQU FFE4H ; PORT-C ADDRESS IS FFE5H
CWR EQU FFE6H ; CONTROL REGISTER ADDESS IS FFE7H
ORG 2000H
XOR AX,AX ; SET AX TO 0000H
XOR DX,DX ; INITIALIZING DX TO 0000H
MOV DX,CWR ; PASS CONTROL ADDRESS TO DX
MOV AL,80H ; MAKING PORT-A AS OUTPUT PORT
OUT DX,AL ; MOVE AL TO CONTROL REGISTER
UP:
MOV CX,0032H ; SET CX TO VALUE 50 FOR CURRENT TO POLES ONCE
FOR 50 TIMES
LOOP4:
MOV BL,04H ; FOR PASSING CURRENT TO 4 STATOR POLES
MOV AL,08H ; PASS CURRENT TO 1 POLE
LOOP1:
MOV DX,PTA ; MOVE PORT-A ADDRESS TO CONTROL REGISTER
OUT DX,AL ; PASS AL CONTENTS TO PORT-A
CALL DELAY ; CALLING DELAY PROCEDURE
ROR AL,01H ; PASSING CURRENT NEXT POLE
DEC BL ; DECREMENT BL
JNZ LOOP1 ; JUMP TO LOOP1 IF NOT ONLY EQUAL TO ZERO
LOOP LOOP4
DELAY:
PUSH CX ; PUSH CX VALUE TO STACK
MOV CX,FFFEH ; SET CX TO FFFEH
L1:
NOP
NOP
LOOP L1
POP CX ; POP VALUE FROM STACK AND INITIALIZE TO CX
RET
INT 3 ; BREAK POINT
CODE ENDS
END

Output: Motor is rotated with one rotation anti-clockwise direction with the given time
delay.
FIBNACII SERIERS

OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
MOV AX,0000H
MOV CX,0000H
MOV SI,20FFH
MOV AL,00H
MOV [SI],AL
MOV SI,2100H
MOV AL,01H
MOV CX,000BH
MOV [SI],AL
INC SI
L1:
MOV [SI],AL
DEC SI
MOV BL,[SI]
ADD AL,BL
DAA
INC SI
INC SI
DEC CX
JNZ L1
INT 3
CODE ENDS
END

INPUT:-
At location S 20FF- 00H
S 2100- 01H
S 2101- 01H

OUTPUT:-
S 2100- 01H,
S 2101- 01H,
S 2102- 02H,
S 2103- 03H,
S 2104- 05H,
S 2105- 08H,
S 2106- 13H,
S 2107- 21H
PRIME NUMBER

OUT PUT 2500AD


ASSUME CS:CODE
CODE SEGMENT
ORG 2000H
MOV AX,0000H
MOV CX,0000H
MOV BX,0000H
MOV SI,2100H
MOV DX,0000H
MOV AL,[SI]
MOV BH,AL
MOV CL,AL
SUB CL,03H
MO BL,01H
L1:
INC BL
XOR AX,AX
MOV AL,BH
DIV BL
CMP AH,00H
JE L2
LOOP L1
MOV DL,BH
L2:
INT 3
CODE ENDS
END
LCM

OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
XOR AX,AX
XOR BX,BX
MOV SI,2100H
MOV DL,[SI]
INC SI
MOV DH,[SI]
MOV AL,DL
MUL DH
MOV CX,AX
MOV BL,02H
P1:
MOV AH,00H
MOV AL,BL
DIV DL
CMP AH,00H
JE P2
JMP P21
P2:
MO AH,00H
MOV AL,BL
DIV DH
CMP AH,00H
JE LAST
P21:
INC BL
LOOP P1
LAST:
MOV AX,BX
INT 3
CODE ENDS
END
SERCHING

OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
MOV AX,0000H
MOV BX,0000H
MOV DX,0000H
MOV SI,2100H
MOV CX,06H
MOV BL,21H
L1
MOV AL,[SI]
CMP AL,BL
JE L2
INC SI
LOOP L1
L2
INC DX
INT 3
CODE ENDS
END
EVEN AND ODD NUMBERS

OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
XOR BX,BX
XOR DX,DX
MOV AX,0000H
MOV CL,05H
MOV SI,2100H
AGAIN:
MOV AX,[SI]
ROR AX,01
JC ODD
INC BX
JMP NEXT
ODD:
INC DX
NEXT:
INC SI
DEC CL
JNZ AGAIN
INT 3
CODE ENDS
END
POSITIVE AND NEGATIVE

OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
XOR BX,BX
XOR DX,DX
MOV AX,0000H
MOV CL,05H
MOV SI,2100H
AGAIN:
MOV AX,[SI]
SHL AX,01
JC NEG
INC BX
JMP NEXT
NEG:
INC DX
NEXT:
INC SI
DEC CL
JNZ AGAIN
INT 3
CODE ENDS
END
MULTIBYTE ADDITION

OUTPUT 2500AD
CODE SEGMENT
ASSUME CS:CODE
ORG 2000H
MOV CX,06H
MOV SI,2100H
MOV DI, 2200H
MOV BX,2300H
XOR AX,AX
NEXT BYTE:
MOV AL,[SI]
ADC AL,[DI]
MOV [BX],AL
INC SI
INC DI
INC BX
DEC CX
JNZ NEXT BYTE
JNC NCARRY
NCARRY:
INT 3
CODE ENDS
END
4C. EVALUATION OF MULTIFICATION OF SERIES
n
Aim: Write an ALP in 8086 to evaluate the Expression I = ∏ (xi +yi)
I=1

OUTPUT 2500AD
CODE SEGMENT
ASSUME CS: CODE
ORG 2000H
MOV SI,2100H
MOV DX,0001H
MOV CX,0000H
MOV CL,[SI]
MOV AX,0000H
MOV SI,2200H
MOV DI,2300H
LOOP1:
MOV AL,[SI]
MOV BL,[DI]
ADD AL,BL
MUL DX
MOV DX,AX
INC SI
INC DI
LOOP LOOP1
INT 3
CODE ENDS
END

Input : At location 2100-03H


: At location 2200-02H
2201-04H
2202-04H
: At location 2300-02H
2301-04H
2302-04H

Output : Result of Multification of Series in DX=100

You might also like