Professional Documents
Culture Documents
LAB
MANUAL
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
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
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
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.
Aim: - Write an 8086 ALP to convert from Hexadecimal digit to BCD digit.
Program:-
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
+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 060
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
13 3 16 1 C3 C4
R 11 0.1F C6 C7 13 3 16 1
3K3 R
R12 7 R8 0.1F
0.1F
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
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