0% found this document useful (0 votes)
246 views

4th Sem Microprocessor Lab Manual Using AFDEBUG 15ECL47

Microprocessor – LAB (15ECL47) For VI Semester B.E. Electronics and Communication Engineering(As per VTU Syllabus),Prepared By. Prof. Mallikarjuna GS, Prof. Vishvakiran RC, Prof. Ranganath SL Professors, E&C Dept.City Engineering College, Doddakallsandra, Kanakapura Main Road, Bangalore-560062.

Uploaded by

vishvakirana
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
246 views

4th Sem Microprocessor Lab Manual Using AFDEBUG 15ECL47

Microprocessor – LAB (15ECL47) For VI Semester B.E. Electronics and Communication Engineering(As per VTU Syllabus),Prepared By. Prof. Mallikarjuna GS, Prof. Vishvakiran RC, Prof. Ranganath SL Professors, E&C Dept.City Engineering College, Doddakallsandra, Kanakapura Main Road, Bangalore-560062.

Uploaded by

vishvakirana
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 55

2016-17

CITY ENGINEERING COLLEGE


Department of Electronics & Communication Engineering
Kanakapura Road, Doddakallasandra, Bengaluru - 560062

Formulated by
Prof. Mallikarjuna G S
HOD, Dept. of E&C, CEC

Prepared by
0
Mr. Ranganath SL and Mr. Vishvakiran RC
Assistant Professors, Dept. of E&C, CEC
MICROPROCESSOR LABORATORY
[As per Choice Based Credit System (CBCS) scheme]
SEMESTER IV (EC/TC)
Laboratory Code 15ECL47 IA Marks 20
Number of Lecture
Hours/Week 01Hr Tutorial (Instructions)+02 Hours Laboratory
Exam Marks 80 Exam Hours 03
CREDITS 02
Course objectives:
This course will enable students to:
Get familiarize with 8086 instructions and DOS 21H interrupts and function calls. Develop
and test assembly language programs to use instructions of 8086.Get familiarize with
interfacing of various peripheral devices with 8086 microprocessor for simple
applications.
Laboratory Experiments: Revised Blooms Taxonomy (RBT) Level
L1, L2, L3
1. Programs involving:
Data transfer instructions like:
i) Byte and word data transfer indifferent addressing Modes
ii) Block move (with and without overlap)
iii) Block interchange

2. Programs involving:
Arithmetic & logical operations like:
i) Addition and Subtraction of multi precision nos.
ii) Multiplication and Division of signed and unsigned Hexadecimal nos.
iii) ASCII adjustment instructions Code conversions

3. Programs involving:
Bit manipulation instructions like checking:
i) Whether given data is positive or negative
ii) Whether given data is odd or even
iii) Logical 1s and 0s in a given data
iv) 2 out 5 code
v) Bit wise and nibble wise palindrome

4. Programs involving:
Loop instructions like
i) Arrays: addition/subtraction of N nos., Finding largest and smallest nos.,
Ascending and descending order
ii) Two application programs using Procedures and Macros (Subroutines)

5. Programs involving
String manipulation like string transfer, string reversing, searching for a string

6. Programs involving
Programs to use DOS interrupt INT 21h Function calls for Reading a Character
from keyboard, Buffered Keyboard input, Display of character/ String on console

i
7. Interfacing Experiments:
Experiments on interfacing 8086 with the following interfacing modules through
DIO (Digital Input/Output - PCI bus compatible card / 8086 Trainer )
1) Matrix keyboard interfacing
2) Seven segment display interface
3) Logical controller interface
4) Stepper motor interface
5) ADC and DAC Interface (8 bit)
6) Light dependent resistor ( LDR ), Relay and Buzzer Interface to make light
operated switches

Course outcomes:
On the completion of this laboratory course, the students will be able to:
Program a microprocessor to perform arithmetic, logical and data transfer
applications.
Understand assembler directives, DOS Interrupts, branch and loop operations.
Interface a microprocessor to various devices for simple applications.
Effectively utilize microprocessor peripherals.
Utilize procedures and macros for modular programming.

Graduate Attributes (as per NBA)


Engineering Knowledge. Problem Analysis. Design/Development of solutions.

Conduct of Practical Examination:


All laboratory experiments are to be included for practical examination.
For examination, one question from software and one question from hardware
interfacing to be set.
Students are allowed to pick one experiment from the lot.
Change of experiment is allowed only once, in which case Procedure part
Marks to be made zero.

ii
CITY ENGINEERING COLLEGE
Department of Electronics & Communication Engineering
GENERAL INSTRUCTIONS
Dos:
1. Students should follow the dress code of the laboratory.
2. Students are required to enter components register related to the experiment an handle
the equipment smoothly.
3. Check the components properly before connecting.
4. Students should maintain discipline in laboratory and keep the laboratory clean and
tidy.
5. Observation book and record book should be complete in all respect and get it
corrected by the staff.

Donts:
1. Do not switch on the power supply before verification of the connected circuit.
2. Do not upload, delete or alter any software on the laboratory PC.
3. Do not mark or write on the equipments.
4. Uses of mobile phone are strictly prohibited.

iii
CONTENTS

1.1. Write an ALP to move block of data without overlap ........................................................ 1


1.2. Write an ALP to move block of data with overlap ............................................................. 3
1.3. Program to interchange a block of data ............................................................................ 4
2.1.A. Write an ALP to add 2 Multibyte no. ................................................................................. 5
2.1.B. Write an ALP to subtract two Multibyte numbers .............................................................. 6
2.2.A. Write an ALP to multiply two 16-bitnumbers ..................................................................... 7
2.2.B. Write an ALP to divide two numbers.................................................................................. 8
2.3.A. Write an ALP to multiply two ASCII no.s ........................................................................... 9
2.4.A. Develop and execute and assembly language program to perform the
conversion from BCD to binary...................................................................................... 10
2.4.B. Write an ALP to convert binary to BCD .......................................................................... 11
2.5.A. Write an ALP to find the square of a number................................................................... 12
2.5.B. Write an ALP to find the cube of a number ...................................................................... 13
2.5.C. Write an ALP to find the LCM of two 16bit numbers. ...................................................... 14
2.5.D. Write an ALP to find the GCD of two 16bit unsigned numbers ....................................... 15
2.5.E. Write an ALP to find the factorial of a given number using recursive procedure ........... 16
3.1. Write an ALP to separate odd and even numbers ............................................................ 17
3.2. Write an ALP to separate positive and negative numbers ............................................... 18
3.3. Write an ALP to find logical ones and zeros in a given data ........................................... 19
3.4. Write an ALP to find whether the given code belongs 2 out of 5 code or not .................. 20
3.5.A. Write an ALP to check bitwise palindrome or not ........................................................... 21
3.5.B. Write an ALP to check whether the given number is nibble wise palindrome or not ...... 22
4.1. Write an ALP to find largest no. from the given array..................................................... 23
4.2. Write an ALP to find smallest no from the given array.................................................... 24
4.3. Write an ALP to sort a given set of 16bit unsigned integers into ascending order
using bubble sort algorithm............................................................................................ 25
5.1. Write an ALP to transfer of a string in forward direction ............................................... 26
5.2. Write an ALP to reverse string ......................................................................................... 27
6.1. Write an ALP to search a character in a string ............................................................... 28
6.2. Write an ALP to given string is palindrome or not .......................................................... 29
7.1. Write an ALP to read a character from keyboard............................................................ 30
7.2. Write an ALP to read buffered input from the keyboard using dos interrupts ................. 30
7.3. Write an ALP to display single character ........................................................................ 31
7.4. Write an ALP to display string on console ....................................................................... 31
8.1. Scan 3*8 keyboard for key closure and display the corresponding key code .................. 32
8.2. Program for Seven segment LED display through 8255 (PCI based) ............................. 33
8.3. Program for logic controller interface and display on the same interface...................... 34
8.4.A. Program to rotate the Stepper motor in Anti-Clockwise direction .................................. 35
8.4.B. Program to rotate the Stepper motor in Clockwise direction .......................................... 36
8.5.A. Program for ADC Interface (8 bit) .................................................................................. 38
8.5.B.1. Program for DAC Interface (8 bit) RAMP Wave generation .......................................... 40
8.5.B.2. Program for DAC Interface (8 bit) SINE Wave generation............................................. 41
8.5.B.3. Program for DAC Interface (8 bit) SQUARE Wave generation ...................................... 42
8.5.B.4. Program for DAC Interface (8 bit) TRINANGLE Wave generation ................................ 43
8.6. Program for LDR-BUZZER-RELAY Interface ................................................................ 44

https://www.scribd.com/document/343913861/4th-sem-Microprocessor-Lab-Manual-using-AFDEBUG-15ECL47
iv
CREATING SOURCE CODE
The source code consists of 8086/8088 program memories, appropriate pseudo-opcodes and
assembler directives. The first is created with a text editor and is given an extension ASM. The text
editor may be any word processor (ex., EDLIN, NE) that can produce standard ASCII code.

Assembling the program


To assemble the program two assemblers are available for the IBM-PC. They are:
Microsoft Macro Assembler (MASM) and
Borland Turbo Assembler (TASM).
Besides doing the tedious task of producing the binary codes for the instruction statements, an
assembler also allows the user to refer to data items by name rather by numerical addresses. This
makes the program much more readable. In addition to program instructions, the source program
contains directives to the assembler.Pseudo instructions are assembler directives entered into the source
code along with the assembly language.
Once the program written completely, it can be assembled to obtain the OBJ file
by executing MASM. The assembly language program file name should be mentioned along
with the command.
MASM<file name.ASM>
The <file name.ASM> file that contains the assembly language program is assembled.
The assembler generates error messages if there are any error (Syntax errors).
These errors are listed along with the line number. If there are no errors then .OBJ file is
v
created. To obtain the .EXE file the user has to LINK the .OBJ file.
LINK <file name>; or TLINK <file name>;
If a file is smaller than 64K bytes it, can be converted from an execution file to a command file
(.COM). The command file is slightly different from an execution file (.EXE).
In a command file the program must be originated at location 100H before it can execute. This
means that the program must be no longer than (64K-100H) in length. The command file requires less
space in memory than the equivalent execution file. The system loads .COM file off the disk into the
computer memory more quickly than the execution file. To create a .COM file from a .EXE file, we
need the EXE2BIN converter EXE2BIN converts .EXE file to .COM or binary file.
Example: EXE2BIN <filename><file name.com>
The <filename> with an EXE extension is converted to <filename> with .com extension with
the above command.
Test and Debug
The executable program can be run under DOS or DUBUG. As a thumb rule a program under
DOS only when there is no error or it produces some not visible or audible result. If the program result
is stored in registers or in memory, the result is visible. Hence it should be run using DEBUG or TD
(Turbo Debugger) or code-view only. .EXE file can be loaded into memory using DEBUG.
Example: DEBUG<filename.EXE>
Using DEBUG it is possible to find the bugs in the program. After loading it into the memory it
is possible to check and correct the errors using different commands in DEBUG. Some of the
commands are as follows:
G-GO
Format: G [offset][, offset]
Action: Executes a program starting at the current location offset values are temporary
breakpoints. Upon encounter of a breakpoint instruction the processor stops and displays registers and
flag contents.
T TRACE
Format: T [Instruction count]
Action: Executes one or more instructions and displays register and flag values for each of
them.
Example: T: Executes only the next instructions
T5: Executes the next 5 instructions
P- PTRACE
Format: P [instruction count]
Action: Same as Trace, but treats subroutine calls, interrupts, loop instructions, and repeat
string instructions as a single instruction
Q-QUIT
Format: Q
Action: Exists to dos.

vi
D-DUMP
Format: D seg: offset [offset] D seg: offset L byte count
Action: Displays the numeric constants of memory locations and their characters
equivalents (if any)
N-Name the program
Format: N <filename>
Action: Name the program
W-Write the file to disk
Format: W
Action: Bytes the starting from the memory location whose address is provided by IP
addresses and written as a .COM file to the disk. The number of bytes that are to be stored is indicated
by the contents of the CX Register. The name of the file is to be specified by means of the N command
prior to executing the W command.
R-Register
Format: R <register file name>
Action: The contents of register are displayed additionally, the register content can
replace by the value entered by the user. If no register name is provided, the contents of all the register
are displayed
A-Assemble
Format: A<CS: offset>
Action: This command allows us to enter the assembler mnemonics directly.
U- Unassemble
Format: U<CS: offset>
Action: This command lists a program from the memory. The memory start location is
specified by CS: offset.
L-Load
Format: L[address][drive][first sector][number]
Action: Reads sectors from the disk into memory. The memory start address is
provided in the command
E-Enter
Format: E<address> [list]
Action: It enables us to change the contents of the specified memory location.
List is an optional data that has to be entered.
A program can be written and debugged using the following additional techniques.
1. Very carefully define them program to solve the problem in hand and work out the best
algorithm you can.
2. If the program consists of several parts, write, test and debug each part individually and
then include parts one at a time.
3. If a program or program section does not work, first recheck the algorithm to make sure
it really does what you want it to. You might have some one else look at it also.
4. If the algorithm seems correct, check to make sure that you have used the correct
instructions to implement the algorithm. Work out on paper the effect that a series of
vii
instructions will have on some sample data. These predictions on paper can later be
compared with the actual results producer when the program section runs.
5. If you dont find a problem in the algorithm or the program instruction use debugger to
help you localize the problem. Use single step or trace for short program sections. For
longer programs use breakpoints. This is often a faster technique to narrow the source of
the problem down to a small region.
Program Development
The first step to develop a program is to know What do I really want this program to do? As
you think about the problem, it is good idea to write down exactly what you want the program to do
and the order in which you want the program to do it. At this point, no program statement is written but
just the operation in general terms.
Flowcharts are graphic shapes to represent different types of program operations. The specific
operation desired is written by means of graphic symbols. Flowcharts are generally used for simple
programs or program sections.
Steps to convert an algorithm to assembly language:
1. Set up and declare the data structure for the algorithm you are working with.
2. Write down the instructions required for initialization at the start of the code section.
3. Determine the instructions required to implement the major actions taken in the
algorithm, and decide how dada must be positioned for these instructions.
4. Insert the instructions required to get the data in correct position.
Assembler Instruction Format
The general format of an assembler instruction is
Label: Opcode & Operand, Mnemonic Operand, Operand; comments
The inclusion of spaces between label opcode, operands, mnemonics and comments are
arbitrary, except that at least one space must be inserted if no space would lead to anambiguity (e.g..
between the mnemonic and first operand). There can be no spaces within a mnemonic or identifier and
spaces within string constants or comments will be included as space characters. Each statement in
program consists of fields.
Label: It is an identifier that is assigned the address of the first byte of the instruction in which
it appears. The presence of a label in an instruction is optional, but, if present, the label provides a
symbolic name that can be used in branch instruction to branch to the instruction. If there is no label,
then the colon must not be entered. All labels begin with a letter or one of the following special
character: @, $, or?. A label may be any length from 1 to 35 characters. A label appears in a
program to identify the name of memory location for storing data and for other purposes.
Opcode and Operands: The opcode field is designed to hold the instruction opcode. To the right
of opcode field is the operand field, which contains information used by the opcode.
Mnemonic: All instructions must contain a mnemonic. The mnemonic specifies the operation to
be executed.
Operand: The presence of the operands depends on the instruction. Some instructions have no
operands, some have one operand, and some two. If there are two operands, they are separated by a
comma.
Comments: The comment field is for commenting the program and may contain any
combination of characters. It is optional and if it is deleted the semicolon may also be deleted. A
comment may appear on a line by itself provided that the first character on the line is a semicolon.
Program Format and assembler Directives
The typical assembler program construct for 8086/8088:
viii
Line 1 MODEL SMALL ; Select small model
Line 3 Data ; Indicates data segment.

Data declaration
Line k .code ; indicates start of code segment
.
.. Program body
Line n End ; End of file

The MODEL directive selects a standard memory model for the assembly language program. A
memory model may be thought of a standard blue print or configuration, which determines the way
segments are linked together. Each memory model has a different set of restrictions as to the maximum
space available for code and data. But the most important thing to know about model is that they affect
the way that subroutines and data may be reached by program.
This table summarizes the different types of models.
Model Description (Memory Size)
Tiny Code and Data combined must be <=64K
Small Code <=64K; Data<=64K
Medium Data<=64K; Code any size
Compact Code<=64K; Data any size
Large Both code and data may be>64K
same as the large model, except that arrays
Huge
may be Large than 64k
A program running under DOS is divided into 3 primary segments (point to by CS) contains
program code; the data segment (pointed to by DS) contains the program variables, the stack segment
(pointed to by SS) contains the program stack.
" .DATA" directive (line 2) indicates the start of the data segment. It contains the program
variables.
" .CODE" directive (line k) indicates the start of the code segment. The end directive
(line n) indicates the end of the program file.
Another program construct for 8086/8088

DATA-HERE SEGMENT
......
...... Data declaration
DATA-HERE ENDS
CODE-HERE SEGMENT
ASSUME CS: CODE-HERE, DS: DATA-HERE
......
...... Body of the program
CODE-HERE ENDS
END

ix
User can use code view to debug the program by following the steps given below:
Write the program in a file with .ASM extension using an editor
[PRETEXT Editor which saves it in ASCII].
Ex: EDIT TEST1.ASM
Assemble the program using the command
MASM/ZI file name;
Ex: MASM TEST1.ASM
Link the program using the command
LINK/CO file name;
Ex: LINK TEST1.OBJ
To debug use
AFDEBUG file name;
Ex: AFDEBUG TEST1.EXE

AFDEBUG SCREEN
F1 Step by step, F2 Step by Procedure, F4 - Help
CMD > MO A ON
Switch between DOS screen and AFDEBUG screen using F6
Note: F1, F2, F4, F6 are Function Keys in Keyboard
All the command of debug can be used to display the program. You have an advantage to see
the result of the program typing the variable name, instead of using dump command. The variable
name is provided using "?".

x
4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;1.1. WRITE AN ALP TO MOVE BLOCK OF DATA WITHOUT OVERLAP

.MODEL SMALL
.DATA
BLK1 DB 01,02,03,04,05,06,07,08,09,0AH
BLK2 DB 10 DUP (?)
COUNT DW 0AH
.CODE
MOV AX, @DATA
MOV DS, AX
MOV ES, AX
MOV SI, OFFSET BLK1;
MOV DI, OFFSET BLK2
MOV CX, COUNT
CLD
AGAIN:
REP MOVSB
MOV AH, 4CH
INT 21H
END
=================================================================================
OUTPUT:
BEFORE EXECUTION
================

AX 159F SI 0000 CS 159E IP 0005 Stack +0 9FB8 FLAGS 3200


BX 0000 DI 0000 DS 159F +2 8E15
CX 002E BP 0000 ES 158E HS 158E +4 8ED8 OF DF IF SF ZF AF PF CF
DX 0000 SP 0000 SS 159E FS 158E +6 BEC0 0 0 1 0 0 0 0 0
+-------------------------------------------------------------------------------
CMD > 1 0 1 2 3 4 5 6 7
+------------------------------------------- DS:0000 00 FC F3 A4 B4 4C CD 21
0003 8ED8 MOV DS,AX DS:0008 01 02 03 04 05 06 07 08
0005 8EC0 MOV ES,AX DS:0010 09 0A 00 00 00 00 00 00
0007 BE0800 MOV SI,0008 DS:0018 00 00 00 00 0A 00 00 00
000A BF1200 MOV DI,0012 DS:0020 00 00 00 00 00 00 00 00
000D 8B0E1C00 MOV CX,[001C] DS:0028 00 00 00 00 00 00 00 00
0011 FC CLD DS:0030 00 00 00 00 00 00 00 00
0012 F3A4 REP MOVSB DS:0038 00 00 00 00 00 00 00 00
0014 B44C MOV AH,4C DS:0040 00 00 00 00 00 00 00 00
0016 CD21 INT 21 DS:0048 00 00 00 00 00 00 00 00
--------------------------------------------------------------------------------
2 0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 00 FC F3 A4 B4 4C CD 21 01 02 03 04 05 06 07 08 .....L.! ........
DS:0010 09 0A 00 00 00 00 00 00 00 00 00 00 0A 00 00 00 ........ ........
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
--------------------------------------------------------------------------------

MICROPROCESSOR 1 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

AFTER EXECUTION
===============

AX 4C9F SI 0012 CS 159E IP 0016 Stack +0 9FB8 FLAGS 3200


BX 0000 DI 001C DS 159F +2 8E15
CX 0000 BP 0000 ES 159F HS 158E +4 8ED8 OF DF IF SF ZF AF PF CF
DX 0000 SP 0000 SS 159E FS 158E +6 BEC0 0 0 1 0 0 0 0 0
+-------------------------------------------------------------------------------
CMD > 1 0 1 2 3 4 5 6 7
+------------------------------------------- DS:0000 00 FC F3 A4 B4 4C CD 21
0014 B44C MOV AH,4C DS:0008 01 02 03 04 05 06 07 08
0016 CD21 INT 21 DS:0010 09 0A 01 02 03 04 05 06
0018 0102 ADD [BP+SI],AX DS:0018 07 08 09 0A 0A 00 00 00
001A 0304 ADD AX,[SI] DS:0020 00 00 00 00 00 00 00 00
001C 050607 ADD AX,0706 DS:0028 00 00 00 00 00 00 00 00
001F 0809 OR [BX+DI],CL DS:0030 00 00 00 00 00 00 00 00
0021 0A01 OR AL,[BX+DI] DS:0038 00 00 00 00 00 00 00 00
0023 0203 ADD AL,[BP+DI] DS:0040 00 00 00 00 00 00 00 00
0025 0405 ADD AL,05 DS:0048 00 00 00 00 00 00 00 00
--------------------------------------------------------------------------------
2 0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 00 FC F3 A4 B4 4C CD 21 01 02 03 04 05 06 07 08 .....L.! ........
DS:0010 09 0A 01 02 03 04 05 06 07 08 09 0A 0A 00 00 00 ........ ........
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
--------------------------------------------------------------------------------
=================================================================================

MICROPROCESSOR 2 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;1.2. WRITE AN ALP TO MOVE BLOCK OF DATA WITH OVERLAP

.MODEL SMALL
.DATA
BLK1 DB 01,02,03,04,05,06,07,08,09,0AH
BLK2 DB 10 DUP (?)
.CODE
MOV AX, @DATA ; MOV THE STARTING ADDRESS
MOV DS, AX
MOV ES, AX
MOV SI, OFFSET BLK1 ; SET POINTER REG TO BLK1
MOV DI, OFFSET BLK2 ; SET POINTER REG TO BLK2
MOV CX, 0AH ; SET COUNTER
ADD SI, 0009H
ADD DI, 0004H
AGAIN:
MOV AL, [SI]
MOV [DI], AL
DEC SI
DEC DI
DEC CL ; DECREMENT COUNTER
JNZ AGAIN ; TO END PROGRAM
MOV AH, 4CH
INT 21H
END
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 B4 4C CD 21 01 02 03 04 05 06 07 08 09 0A 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 B4 4C CD 21 01 02 03 04 05 01 02 03 04 05 06 07
DS:0010 08 09 0A 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 3 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;1.3. PROGRAM TO INTERCHANGE A BLOCK OF DATA

.MODEL SMALL
.DATA
SRC DB 10H,20H,30H,40H,50h
DST DB 06,07,08,09,0AH
COUNT EQU 05
.CODE
MOV AX, @DATA ; INITIALIZE THE DATA REGISTER
MOV DS, AX
LEA SI, SRC
LEA DI, DST
MOV CL, COUNT ; INITIALIZE THE COUNTER
BACK:
MOV AL, [SI]
MOV BL, [DI]
MOV [SI], BL ; INTERCHANGE THE DATA
MOV [DI], AL
INC SI
INC DI
DEC CL
JNZ BACK ; REPEAT UNTIL COUNTER BECOMES ZERO
MOV AH, 4CH
INT 21H
END
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 10 20 30 40 50 06 07 08 09 0A 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 06 07 08 09 0A 10 20 30 40 50 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 4 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;2.1.A. WRITE AN ALP TO ADD 2 MULTIBYTE NO.

.MODEL SMALL
.DATA
N1 DQ 122334455667788H ; FIRST NUMBER
N2 DQ 122334455667788H ; SECOND NUMBER
SUM DT ?
.CODE
MOV AX, @DATA ; INITIALIZE THE DATA REGISTER
MOV DS, AX
LEA SI, N1 ; POINTER TO FIRST NUMBER
LEA DI, N2 ; POINTER TO SECOND NUMBER
LEA BX, SUM
MOV CL, 04H ; COUNTER FOUR WORD
CLC
BACK:
MOV AX, [SI] ;MOVE FIRST WORD
ADC AX, [DI]
MOV [BX], AX
INC SI
INC SI
INC DI
INC DI
INC BX
INC BX
DEC CL
JNZ BACK ; REPEAT UNTIL COUNTER BECOMES ZERO
JNC OVER
MOV AX, 0001H
MOV [BX], AX
OVER:
MOV AH, 4CH
INT 21H
END
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 88 77 66 55 44 33 22 01 88 77 66 55 44 33 22 01
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 88 77 66 55 44 33 22 01 88 77 66 55 44 33 22 01
DS:0010 10 EF CC AA 88 66 44 02 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 5 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;2.1.B. WRITE AN ALP TO SUBTRACT TWO MULTIBYTE NUMBERS

.MODEL SMALL
.DATA
N1 DQ 122334455667788H ; FIRST NUMBER
N2 DQ 111111111111111H ; SECOND NUMBER
RESULT DT ?
.CODE
MOV AX, @DATA ; INITIALIZE THE DATA REGISTER
MOV DS, AX
LEA SI, N1 ; POINTER TO FIRST NUMBER
LEA DI, N2 ; POINTER TO SECOND NUMBER
LEA BX, RESULT
MOV CX, 04H ; COUNTER FOUR WORD
CLC
BACK:
MOV AX, [SI] ; MOVE FIRST WORD
SBB AX, [DI]
MOV [BX], AX
INC SI
INC SI ; MOVE SI, DI CONTENTS
INC DI
INC DI
INC BX ; INCREMENT BX TO STORE RESULTS
INC BX
LOOP BACK
MOV AH, 4CH
INT 21H
END
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 43 E2 F2 B4 4C CD 21 00 88 77 66 55 44 33 22 01
DS:0010 11 11 11 11 11 11 11 01 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 43 E2 F2 B4 4C CD 21 00 88 77 66 55 44 33 22 01
DS:0010 11 11 11 11 11 11 11 01 77 66 55 44 33 22 11 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 6 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;2.2.A-WRITE AN ALP TO MULTIPLY TWO 16-BIT NUMBERS

.MODEL SMALL
.STACK
.DATA

MULTIPLICAND DW 00FFH; FIRST WORD HERE


MULTIPLIER DW 00FFH; SECOND WORD HERE
PRODUCT DW 2 DUP(0); RESULT OF MULIPLICATION HERE
.CODE
START:
MOV AX, @DATA
MOV DS, AX
MOV AX, MULTIPLICAND
MUL MULTIPLIER
MOV PRODUCT, AX
MOV PRODUCT+2, DX
MOV AH, 4CH
INT 21H
END START
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 16 0E 00 B4 4C CD 21 00 FF 00 FF 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 16 0E 00 B4 4C CD 21 00 FF 00 FF 00 01 FE 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=================================================================================

MICROPROCESSOR 7 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;2.2.B. WRITE AN ALP TO DIVIDE TWO NUMBERS

.MODEL SMALL
.DATA
W1 DW 02222H
W2 DW 1111H
Q DW ?
R DW ?
.CODE
MOV AX, @DATA
MOV DS, AX ; INITIALIZE DATA SEGMENT
MOV AX, W1 ; GET DIVIDEND
MOV BX, W2 ; GET DIVISOR
DIV BX ; DIVIDE
MOV Q, AX ; STORE QUOIENT
MOV R, DX ; STORE REMAINDER
MOV AH, 4CH
INT 21H
END ; END PROGRAM
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 00 89 16 10 00 B4 4C CD 21 00 22 22 11 11 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 00 89 16 10 00 B4 4C CD 21 00 22 22 11 11 02 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=================================================================================

MICROPROCESSOR 8 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;2.3.A. WRITE AN ALP TO MULTIPLY TWO ASCII NO.S


.MODEL SMALL
.STACK 100
.DATA
NUM1 DB "4" ; NUMBER 1 (SINGLE DIGIT) NUM2 DB
"9" ; NUMBER 2 (SINGLE DIGIT) PRODUCT DB 00,
00 ; MEMORY FOR PRODUCT
.CODE
MOV AX, @DATA
MOV DS, AX ; INITIALIZE DATA SEGMENT
MOV DL, NUM1 ; GET NUMBER 1
AND DL, 0FH ; MASK THE HIGHER NIBBLE TO GET ONLY NUMBER
MOV AL, NUM2 ; GET NUMBER 2
AND AL, 0FH
MUL DL ; MULTIPLY TWO NUMBER
AAM ; CONVERT IT IN TO ASCII FORMAT
OR AL, 30H
MOV PRODUCT, AL ; SAVE THE LOWER DIGIT
OR AH, 30H
MOV PRODUCT+1, AH ; SAVE THE HIGHER
MOV AH, 4CH
INT 21H
END ; END PROGRAM
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 00 B4 4C CD 21 00 34 39 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 00 B4 4C CD 21 00 34 39 36 33 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 9 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;2.4.A. DEVELOP AND EXECUTE AND ASSEMBLY LANGUAGE PROGRAM TO PERFORM THE
CONVERSION FROM BCD TO BINARY

.MODEL SMALL
.DATA
BCD_INPUT DB 61H ; BCD NUMBER
IN_VALUE DB (?)
.CODE
MOV AX, @DATA
MOV DS, AX ; INITIALIZE DATA SEGMENT
MOV AL, BCD_INPUT
MOV BL, AL ; MOVE NUMBER TO AL REGISTER
AND BL, 0FH
AND AL, 0F0H
MOV CL, 04H
ROR AL, CL
MOV BH, 0AH
MUL BH
ADD AL, BL
MOV IN_VALUE, AL ; STORE THE BINARY EQUIVALENT NUMBER
MOV AH, 4CH
INT 21H
END ; END PROGRAM

=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 61 3D 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 10 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;2.4.B. WRITE AN ALP TO CONVERT BINARY TO BCD

.MODEL SMALL
.DATA
BIN DB 0FFH ; BINARY INPUT
BCD DB 2 DUP (0) ; STORE BCD VALUE
.CODE
MOV AX, @DATA
MOV DS, AX ; INITIALIZE DATA SEGMENT
MOV AL, BIN ; MOVE BINARY NOMBER INTO AL REGISTER
MOV BL, AL ; MOVE NUMBER TO AL REGISTER
MOV CX, 0000H ; CLEAR CX REGISTER CONTENT
CMP AL, CL
JE NEXT1
MOV AL, 00H
BACK:
INC CL ; INCREMENT CL REGISTER CONTENT
ADD AL, 01H
DAA ; DECIMAL ADJUST AFTER ADDITION
JNC NEXT2
PUSH AX
MOV AL, 00H
ADC AL, 00H
DAA
ADD CH, AL
POP AX
NEXT2:
CMP BL, CL
JNZ BACK
NEXT1:
MOV BCD, AL ; STORE THE BCD INPUT VALUE
MOV BCD+1, CH
MOV AH, 4CH
INT 21H
END ; END PROGRAM
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 CD 21 FF 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 CD 21 FF 55 02 00 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 11 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;2.5.A. WRITE AN ALP TO FIND THE SQUARE OF A NUMBER

.MODEL SMALL
.STACK
.DATA
X DB 08H ; NUMBER TO BE SQUARED
SQR DW (?) ; LOCATION TO STORE NUMBER
.CODE
MOV AX, @DATA ; INITIALIZE DATA SEGMENT
MOV DS, AX
MOV AL, X
MUL AL
MOV SQR, AX ; SQUARE THE NUMBER
MOV AH, 4CH
INT 21H
END ; END PROGRAM
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 21 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 21 00 08 40 00 00 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 12 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;2.5.B. WRITE AN ALP TO FIND THE CUBE OF A NUMBER

.MODEL SMALL
.DATA
X DB 02H ; NUMBER TO BE SQUARED
CUB DW (?) ; LOCATION TO STORE NUMBER
.CODE
MOV AX, @DATA ; INITIALIZE DATA SEGMENT
MOV DS, AX
MOV AL, X ; STORE THE NUMBER IN AL REGISTER
MUL AL
MOV BL, AL
MOV AL, X
MUL BL
MOV CUB, AX ; SQUARE THE NUMBER
MOV CUB+2, Dx
MOV AH, 4CH
INT 21H
END ; END PROGRAM
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 E3 A3 0D 00 8C 1E 0F 00 B4 4C CD 21 02 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 E3 A3 0D 00 89 16 0F 00 B4 4C CD 21 02 08 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 13 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;2.5.C. WRITE AN ALP TO FIND THE LCM OF TWO 16BIT NUMBERS

.MODEL SMALL
.DATA
VALUE DW 0005H, 000FH ; INITIALIZE DATA MEMORY LOCATIONS FOR THE OPERANDS
LCM DW 2 DUP (?) ; AND THE CALCULATED RESULT
.CODE
MOV AX, @DATA ; INITIALIZE DATA SEGMENT
MOV DS, AX
MOV DX, 0000H ; CLEAR DX REGISTER
MOV AX, VALUE ; LOAD THE FIRST NUMBER
MOV BX, VALUE+2 ; LOAD THE SECOND NUMBER
AGAIN:
PUSH AX ; SAVE BOTH THE NUMBER ON TOP OF THE STACK
PUSH DX
DIV BX ; DIVIDE FIRST NUMBER BY THE SECOND
CMP DX, 0000H ; IS THERE A NUMBER?
JE EXIT ; NO, TERMINATE THE PROGRAM
POP DX ; YES, POP THE DATA STORED
POP AX
ADD AX, VALUE ; ADD THE FIRST NUMBER TO THE CONTENTS OF AX
JNC NOINCDX ; IF THE RESULT IS GREATER THAN 16-BITS INCREMENT
; DX REGISTER
INC DX
NOINCDX:
JMP AGAIN ; REPEAT TILL THE REMAINDER IS ZERO
EXIT:
POP LCM+2 ; POP THE LCM VALUE FROM THE TOP OF THE STACK
POP LCM
MOV AH, 4CH
INT 21H
END ; END PROGRAM
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 05 00 0F 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 05 00 0F 00 0F 00 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 14 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;2.5.D. WRITE AN ALP TO FIND THE GCD OF TWO 16BIT UNSIGNED NUMBERS

.MODEL SMALL
.DATA
NUM1 DW 0005H ; INITIALIZE DATA
NUM2 DW 000FH
GCD DW (?) ; INITIALIZE MEMORY FOR THE RESULT
.CODE
MOV AX, @DATA ; INITIALIZE DATA SEGMENT
MOV DS, AX
MOV AX, NUM1 ; LOAD THE FIRST NUMBER
MOV BX, NUM2 ; LOAD THE SECOND NUMBER
AGAIN:
CMP AX, BX ; ARE THEY EQUAL?
JE EXIT ; YES, SAVE THE GCD
JB EXCH ; NO, IS AX<BX? ELSE YES, EXCHANGE THE NUMBERS
BACK:
MOV DX, 0000H
DIV BX ; CHECK WHETHER AX IS DIVISIBLE BY BX
CMP DX, 0000H ; IS THERE A NUMBER?
JE EXIT ; YES, SAVE GCD
MOV AX, DX ; MOVE THE REMAINDER AS NUM1 DATA
JMP AGAIN ; REPEAT THE PROCEDURE TILL THERE IS NO REMAINDER
EXCH:
XCHG AX, BX ; LOAD HIGHER NUMBER IN AX AND
JMP BACK ; LOWER NUMBER IN DX AND CONTINUE
EXIT:
MOV GCD, BX ; SAVE THE GCD NUMBER
MOV AH, 4CH
INT 21H
END ; END PROGRAM
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 93 EB EF 89 1E 10 00 B4 4C CD 21 00 05 00 0F 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 93 EB EF 89 1E 10 00 B4 4C CD 21 00 05 00 0F 00
DS:0010 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 15 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;2.5.E. WRITE AN ALP TO FIND THE FACTORIAL OF A GIVEN NUMBER USING RECURSIVE
PROCEDURE

.MODEL SMALL
.DATA
NUM DW 8
RESULT DW (?) ; INITIALIZE MEMORY FOR THE RESULT
.CODE
MAIN PROC
MOV AX, @DATA ; INITIALIZE DATA SEGMENT
MOV DS, AX
MOV AX, 01 ; INITIALIZE RESULT AS 01 IF THE NUMBER IS 0
MOV CX, NUM ; INITIALIZE NUMBER
CMP CX, 00 ; CHECK WHETHER NUMBER IS 0
JE LOOP1 ; YES, TERMINATE PROGRAM
MOV BX, CX ; SAVE THE NUMBER IN BX
CALL FACT ; CALL FACTORIAL PROCEDURE
LOOP1:
MOV RESULT, AX ; SAVE FACTORIAL RESULT
MOV AH, 4CH
INT 21H
MAIN ENDP ; END MAIN PROCEDURE

FACT PROC
CMP BX, 01
JZ LOOP2
PUSH BX
DEC BX
CALL FACT ; CALL FACTORIAL PROCEDURE
POP BX
MUL BX
RET ; RETURN CALLED PROGRAM
LOOP2:
MOV AX, 01 ; INITIALIZE AX REGISTER TO 01
RET ; RETURN CALLED PROGRAM
FACT ENDP ; END FACTORIAL PROCEDURE

END ; END PROGRAM


=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 08 00 80 9D 00 00 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 16 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;3.1. WRITE AN ALP TO SEPARATE ODD AND EVEN NUMBERS

.MODEL SMALL
.DATA
ARRAY DB 12H, 98H, 45H, 83H, 28H, 67H, 92H, 54H, 63H, 76H
ARR_EVEN DB 10 DUP (?)
ARR_ODD DB 10 DUP (?)
.CODE
MOV AX, @DATA ; INITIALIZE THE DATA SEGMENT
MOV DS, AX
MOV CL, 0AH ; INITIALIZE THE COUNTER
XOR DI, DI ; INITIALIZE THE ODD POINTER
XOR SI, SI ; INITIALIZE THE EVEN POINTER
LEA BP, ARRAY
BACK:
MOV AL, DS:[BP] ; GET THE NUMBER
TEST AL, 01H ; MASK ALL BITS EXCEPT LSB
JZ NEXT ; IF LSB = 0 GOT TO NEXT

LEA BX, ARR_ODD


MOV [BX+DI], AL
INC DI ; INCREMENT THE ODD POINTER
JMP SKIP
NEXT:
LEA BX, ARR_EVEN
MOV [BX+SI], AL
INC SI ; INCREMENT THE EVEN POINTER
SKIP:
INC BP ; INCREMENT ARRAY BASE POINTER
LOOP BACK ; DECREMENT THE COUNTER
MOV AH, 4CH
INT 21H
END ; END PROGRAM
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 12 98 45 83 28 67 92 54 63 76 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 12 98 45 83 28 67 92 54 63 76 12 98 28 92 54 76
DS:0010 00 00 00 00 45 83 67 63 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 17 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;3.2. WRITE AN ALP TO SEPARATE POSITIVE AND NEGATIVE NUMBERS

.MODEL SMALL
.DATA
ARRAY DB 12H, -98H,-45H,83H,-28H, 67H, 92H, -54H, -63H, 76H
NEGI DB 10 DUP (?)
POSI DB 10 DUP (?)
.CODE
MOV AX, @DATA ; INITIALIZE THE DATA SEGMENT
MOV DS, AX
MOV CL, 0AH ; INITIALIZE THE COUNTER
XOR DI, DI ; INITIALIZE THE POINTER FOR NEGATIVE NUMBER XOR SI,
SI ; INITIALIZE THE POINTER FOR POSITIVE NUMBER LEA BP, ARRAY

BACK: MOV AL, DS:[BP] ; GET THE NUMBER


TEST AL, 80H ; MASK ALL BITS EXCEPT MSB
JZ NEXT ; IF LSB = 0 GOT TO NEXT
LEA BX, NEGI
MOV [BX+DI], AL
INC DI ; INCREMENT THE NEGATIVE POINTER
JMP SKIP

NEXT: LEA BX, POSI


MOV [BX+SI], AL
INC SI ; INCREMENT THE POSITIVE POINTER

SKIP: INC BP ; INCREMENT ARRAY BASE POINTER


LOOP BACK ; DECREMENT THE COUNTER
MOV AH, 4CH
INT 21H
END ; END PROGRAM
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 12 68 BB 83 D8 67 92 AC 9D 76 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 12 68 BB 83 D8 67 92 AC 9D 76 BB 83 D8 92 AC 9D
DS:0010 00 00 00 00 12 68 67 76 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 18 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;3.3. WRITE AN ALP TO FIND LOGICAL ONES AND ZEROS IN A GIVEN DATA

.MODEL SMALL
.DATA
NUM DB 0FAH
ONES DB 0
ZEROS DB 0
.CODE
START:
MOV AX, @DATA ; INITIALIZE THE DATA SEGMENT
MOV DS, AX
MOV AL, NUM ; GET BYTE
MOV CX, 08H ; SET COUNTER
BACK:
ROR AL, 1 ; MOVE MSB IN CARRY
JNC ZERINC ; CHECK BYTE FOR 0 AND 1
INC ONES ; IF 1, INCREMENT ONE COUNT
JMP NEXT
ZERINC:
INC ZEROS ; IF 0, INCREMENT ZERO COUNTER
NEXT:
DEC CX ; REPEAT UNIT CX = 0
JNZ BACK
MOV AH, 4CH
INT 21H
END START
END ; END PROGRAM
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 21 00 FA 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 21 00 FA 06 02 00 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 19 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;3.4. WRITE AN ALP TO FIND WHETHER THE GIVEN CODE BELONGS 2 OUT OF 5 CODE OR NOT

.MODEL SMALL
.DATA
N DB 03H
MSG2 DB 'YOUR CODE IS 2 OUT OF 5 CODE $', 0AH, 0DH
MSG3 DB 'YOUR CODE IS NOT 2 OUT OF 5 CODE $', 0AH, 0DH
.CODE
MOV AX, @DATA ; INITIALIZE THE DATA SEGMENT
MOV DS, AX
MOV AL, N
MOV BL, AL
AND AL, 0E0H
JNZ NOT_CODE
MOV BL, 00H
MOV AL, N
MOV CX, 0005H
BACK:
ROR AL, 1
JNC SKIP
INC BL
SKIP:
DEC CX JNZ
BACK CMP
BL, 02
JNZ NOT_CODE
MOV DX, OFFSET MSG2
MOV AH, 09
INT 21H
JMP EXIT
NOT_CODE:
MOV DX, OFFSET MSG3
MOV AH, 09
INT 21H
EXIT:
MOV AH, 4CH
INT 21H
END ; END PROGRAM

=================================================================================
OUTPUT:

;C:\8086> ENTER THE FILE NAME

; YOUR CODE IS 2 OUT OF 5 CODE

=================================================================================

MICROPROCESSOR 20 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

3.5.A. WRITE AN ALP TO CHECK BITWISE PALINDROME OR NOT

.MODEL SMALL
.STACK 100
PRINTSTRING MACRO MSG
MOV AH, 09H ; MACRO TO DISPLAY THE MESSAGE
MOV DX, OFFSET MSG
INT 21H
ENDM
.DATA
NUM DB 0FFH
TABLE DB 81H, 42H, 24H, 18H
MSG1 DB 'THE NUMBER EXHIBITS BITWISE PALINDROME:$'
MSG2 DB 'THE NUMBER DOESNOT EXHIBITS BITWISE PALINDROM:$'
.CODE
MOV AX, @DATA ; INITIALIZE THE DATA SEGMENT
MOV DS, AX
LEA SI, TABLE
MOV CX, 0004H ; SET COUNTER
XOR AX, CX ; CLEAR AX REGISTER
L1:
MOV AL, NUM
AND AL, [SI]
JPE NEXT
PRINTSTRING MSG2 ; DISPLAY MESSAGE 2
JMP SKIP
NEXT:
INC SI ; INCREMENT POINTER DEC
CX ; DECREMENT COUNTER JNZ L1
PRINTSTRING MSG1 ; DISPLAY MESSAGE 1

SKIP: MOV AH, 4CH


INT 21H
END ; END PROGRAM

=================================================================================
OUTPUT:

;C:\8086> ENTER THE FILE NAME

; THE NUMBER EXHIBITS BITWISE PALINDROME

=================================================================================

MICROPROCESSOR 21 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

3.5.B. WRITE AN ALP TO CHECK WHETHER THE GIVEN NUMBER IS NIBBLEWISE PALINDROME OR
NOT

.MODEL SMALL
.DATA
DAT DW 8989H
TEMP DW 0
MSG1 DB 10,13,'THE NUMBER IS NIBBLEWISE PALINDROME:$'
MSG2 DB 10,13,'THE NUMBER IS NOT A NIBBLEWISE PALINDROME:$'
.CODE
START:
MOV AX, @DATA ; INITIALIZE THE DATA SEGMENT
MOV DS, AX
MOV DX, DAT ; GET THE WORD
MOV BX, DX ; MAKE A COPY OF THE WORD
MOV CH, 02H ; INITIALISE ROATATION COUNTER
BACK:
MOV CL, 04H ; INITIALISE ITERATION COUNTER
ROL DX, CL
MOV TEMP, DX
AND DX, 0FH
MOV AX, BX
AND BX, 0FH
CMP BX, DX
JNZ TER ; IF NO CARRY SKIP TOTHE NEXT INSTRUCTION
MOV BX, AX ; RESTORE THE CONTENTS OF BX
MOV DX, TEMP
ROR BX, CL ; ROTATE THE CONTENTS OF BX RIGHT BY 4
DEC CH ; DECREMENT ITERATION COUNTER
JNZ BACK
MOV AH, 09H ; FUNCTION TO DISPLAY MESSAGE 1
LEA DX, MSG1
INT 21H
JMP LAST
TER:
MOV AH, 09H
LEA DX, MSG2 ; SET POINTER TO MESSAGE 2
INT 21H
LAST:
MOV AH, 4CH
INT 21H
END START
END ; END PROGRAM

=================================================================================
OUTPUT:

;C:\8086> ENTER THE FILE NAME

;THE NUMBER IS NOT A NIBBLEWISE PALINDROME

=================================================================================

MICROPROCESSOR 22 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;4.2. WRITE AN ALP TO FIND LARGEST NO FROM THE GIVEN ARRAY

.MODEL SMALL
.STACK 100
.DATA
NUM DB 12H, 37H, 01H, 36H, 76H ; INITIALISE DATA
SMALL DB (?) ; TO STORE LARGEST NUM
.CODE
MOV AX, @DATA ; INITIALIZE THE DATA SEGMENT
MOV DS, AX
MOV CL, 05H ; SET COUNTER
MOV AL, 00H
LEA SI, NUM ; POINTER TO NUMBER
LOOP1:
CMP AL, [SI] ; COMPARE 1ST AND 2ND NUMBER
JNC LOOP2
MOV AL, [SI]
LOOP2:
INC SI
DEC CL
JNZ LOOP1
MOV SMALL, AL
MOV AH, 4CH
INT 21H
END ; END PROGRAM
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 12 37 01 36 76 00 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 12 37 01 36 76 76 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 23 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;4.2. WRITE AN ALP TO FIND SMALLEST NO FROM THE GIVEN ARRAY

.MODEL SMALL
.STACK 100
.DATA
NUM DB 12H, 37H, 01H, 36H, 76H ; INITIALISE DATA
SMALL DB (?) ; TO STORE SMALLEST NUM
.CODE
MOV AX, @DATA ; INITIALIZE THE DATA SEGMENT
MOV DS, AX
MOV CL, 05H ; SET COUNTER
MOV AL, 0FFH
LEA SI, NUM ; POINTER TO NUMBER
LOOP1:
CMP AL, [SI] ; COMPARE 1ST AND 2ND NUMBER
JC LOOP2
MOV AL, [SI]
LOOP2:
INC SI
DEC CL
JNZ LOOP1
MOV SMALL, AL
MOV AH, 4CH
INT 21H
END ; END PROGRAM
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 12 37 01 36 76 00 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 12 37 01 36 76 01 00 00 00 00 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 24 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;4.3. WRITE AN ALP TO SORT A GIVEN SET OF 16BIT UNSIGNED INTEGERS INTO ASCENDING
ORDER USING BUBBLE SORT ALGORITHM

.MODEL SMALL
.DATA
A DB 23H, 45H, 55H, 22H, 64H ; INITIALISE DATA
SIZE1 DW ($-A) ; CALCULATE SIZE OF NUMBERS
.CODE
MOV AX, @DATA ; INITIALIZE THE DATA SEGMENT
MOV DS, AX
MOV BX, SIZE1 ; THE NO. OF DATA BYTES IS INITIALIZE IN BX

DEC BX
OUTLOOP:
MOV CX, BX ; SAVE COUNTER IN CX REGISTER
MOV SI, 00 ; INITIALISE POINTER
INLOOP:
MOV AL, A[SI] ; LOAD THE DATA INTO AL POINTED BY SI
INC SI ; INCREMENT THE POINTER
CMP AL, A[SI] ; IS CONTENT OF AL<SI POINTED
JB NEXT ; YES, GO NEXT
XCHG AL, A[SI] ; NO, EXCHANGE TWO DATA
MOV A[SI-1], AL ; MOVE TILL END OF MEMORY
NEXT:
LOOP INLOOP
DEC BX
JNZ OUTLOOP
MOV AH, 4CH
INT 21H
END ; END PROGRAM
=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 B4 4C CD 21 23 45 55 22 64 05 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 B4 4C CD 21 22 23 45 55 64 05 00 00 00 00 00 00
DS:0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

=================================================================================

MICROPROCESSOR 25 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;5.1. WRITE AN ALP TO TRANSFER OF A STRING IN FORWARD DIRECTION

.MODEL SMALL
.DATA
SRC DB ">CITY ENGINEERING COLLEGE"
DST DB 25 DUP(?)
.CODE
MOV AX, @DATA ; INITIALIZE THE DATA SEGMENT
MOV DS, AX
MOV ES, AX
LEA SI, SRC
LEA DI, DST
MOV CX, 19H
CLD ; CLEAR THE DIRECTION FLAG
REP MOVSB ; TRANSFER THE STING BYTE TILL CX=0
MOV AH, 4CH ; TERMINATE THE PROGRAM
INT 21H
END ; END PROGRAM

=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 19 00 FC F3 A4 B4 4C CD 21 00 3E 43 49 54 59 20 ......L. !.>CITY
DS:0010 45 4E 47 49 4E 45 45 52 49 4E 47 20 43 4F 4C 4C ENGINEER ING COLL
DS:0020 45 47 45 00 00 00 00 00 00 00 00 00 00 00 00 00 EGE..... ........
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 19 00 FC F3 A4 B4 4C CD 21 00 3E 43 49 54 59 20 ......L. !.>CITY
DS:0010 45 4E 47 49 4E 45 45 52 49 4E 47 20 43 4F 4C 4C ENGINEER ING COLL
DS:0020 45 47 45 3E 43 49 54 59 20 45 4E 47 49 4E 45 45 EGE>CITY ENGINEE
DS:0030 52 49 4E 47 20 43 4F 4C 4C 45 47 45 00 00 00 00 RING COL LEGE....
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........

=================================================================================

MICROPROCESSOR 26 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;5.2. WRITE AN ALP TO REVERSE STRING

.MODEL SMALL
.DATA
X DB "AKANAK" ; GIVEN STRING
Z DW (Z-X) ; STRING LENGTH
Y DB (Z-X) DUP (?),'$' ; REVISED STRING
.CODE
MOV AX, @DATA ; INITIALIZE THE DATA SEGMENT
MOV DS, AX
LEA SI, Z-1 ; POINTER TO LAST CHARACTER
LEA DI, Y ; POINTER TO REVERSE CHARACTER
MOV CX, Z
L1:
MOV AL, [SI]
MOV [DI], AL
DEC SI
INC DI
DEC CX
JNZ L1
LEA DX, Y ; DISPLAY THE REVERSED STRING ON THE SCREEN
MOV AH, 4CH ; TERMINATE THE PROGRAM
INT 21H
END ; END PROGRAM

=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 CD 21 41 4B 41 4E 41 4B 06 00 00 00 00 00 00 00 .!AKANAK ........
DS:0010 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 $....... ........
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 CD 21 41 4B 41 4E 41 4B 06 00 4B 41 4E 41 4B 41 .!AKANAK ..KANAKA
DS:0010 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 $....... ........
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........

=================================================================================

MICROPROCESSOR 27 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;6.1. WRITE AN ALP TO SEARCH A CHARACTER IN A STRING

.MODEL SMALL
.STACK 100
.DATA
STRING DB "COLLEGE"
CHARACTER DB 'E'
RESULT DB (?)
COUNT EQU 07H
.CODE
MOV AX, @DATA ; INITIALIZE THE DATA SEGMENT
MOV DS, AX
MOV CX, COUNT ; INITIALIZE COUNTER
LEA SI, STRING
MOV AL, CHARACTER ; LOAD THE CHARACTER TO BE SEARCHED
BACK:
CMP AL, [SI] ; COMPARE EACH CHARACTER OF STRING TO THE CHARACTER
; TO BE SEARCHED
JE STROBE1
INC SI
DEC CX
JNZ BACK
JMP STROBE
STROBE1:
MOV AL, 01H
MOV RESULT, AL
JMP LAST
STROBE:
MOV AL, 00H
MOV RESULT, AL
LAST:
MOV AH, 4CH ; TERMINATE THE PROGRAM
INT 21H
END ; END PROGRAM

=================================================================================
OUTPUT:
BEFORE EXECUTION
================
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 06 90 B0 00 A2 14 00 B4 4C CD 21 00 43 4F 4C 4C ........ L.!.COLL
DS:0010 45 47 45 45 00 00 00 00 00 00 00 00 00 00 00 00 EGEE.... ........
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........

AFTER EXECUTION
===============
0 1 2 3 4 5 6 7 8 9 A B C D E F
DS:0000 06 90 B0 00 A2 14 00 B4 4C CD 21 00 43 4F 4C 4C ........ L.!.COLL
DS:0010 45 47 45 45 01 00 00 00 00 00 00 00 00 00 00 00 EGEE.... ........
DS:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
DS:0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........
DS:0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........

=================================================================================

MICROPROCESSOR 28 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;6.2. WRITE AN ALP TO GIVEN STRING IS PALINDROME OR NOT

.MODEL SMALL
.DATA
X DB "RACECAR" ; GIVEN STRING
Z DW (Z-X) ; LENGTH OF STRING
Y DB (Z-X) DUP (?) ; STORE REVERSED STRING
M1 DB "NOT PALINDROME",'$'
M2 DB "PALINDROME",'$'
.CODE
MOV AX, @DATA ; INITIALIZE THE DATA SEGMENT
MOV DS, AX
MOV ES, AX
LEA SI, Z-1 ; POINTER TO LAST CHARACTER IN
STRING:
LEA DI, Y ; POINTER TO REVERSED STRING
MOV CX, Z ; COUNTER
LOC1:
MOV AL, [SI] ; MOV A FIRST CHARACTER
MOV [DI], AL
DEC SI
INC DI
DEC CX
JNZ LOC1
LEA DX, Y
JNZ LOC2
LEA SI, X
LEA DI, Y
MOV CX, Z
CLD ; CLEAR THE DIRECTION FLAG
REPE CMPSB ; COMPARE THE STRING BYTE
JE PALIN
LEA DX, M1
LOC2:
MOV AH, 09H
INT 21H
MOV AH, 4CH
INT 21H
PALIN:
LEA DX, M2
JMP LOC2
END
=================================================================================
OUTPUT:

;C:\8086> ENTER THE FILE NAME

;PALINDROME

=================================================================================

MICROPROCESSOR 29 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

;7.1. WRITE AN ALP TO READ A CHARACTER FROM KEYBOARD

.MODEL SMALL
.CODE
MOV AX, @DATA ; INITIALIZE THE ADDRESS OF DATA
MOV DS, AX ; SEGMENT IN DS
BACK:
MOV AH, 01H ; LOAD FUNCTION NUMBER
INT 21H ; CALL DOS INTERRUPT
CMP AL,'0'
JZ LAST ; DISPLAY THE KEYS UNTIL 0 KEY IS PRESSED
JMP BACK
LAST:
MOV AH, 4CH ; TERMINATE THE PROGRAM
INT 21H
END ; END PROGRAM

=================================================================================
OUTPUT:

;C:\TEST>ENTER THE FILE NAME AND TYPE KEYS, PRESS ZERO TO EXIT THE PROGRAM

=================================================================================

7.2. WRITE AN ALP TO READ BUFFERED INPUT FROM THE KEYBOARD USING DOS INTERRUPTS

.MODEL SMALL
.DATA
MSG DB "KEYBOARD WITH BUFFER:",'$' ; MESSAGE FOR THE INPUT
BUFF DB 25
DB 00
DB 25 DUP (?)
.CODE
MOV AX, @DATA ; INITIALIZE THE ADDRESS OF DATA
MOV DS, AX ; SEGMENT IN DS
MOV AH, 09H
MOV DX, OFFSET MSG ; FUNCTION TO DISPLAY
INT 21H
MOV AH, 0AH
MOV DX, OFFSET BUFF ; FUNCTION TO TAKE BUFFERED DATA
INT21H
MOV AH, 4CH ; TERMINATE THE PROGRAM
INT 21H
END ; END PROGRAM

=================================================================================
OUTPUT:

;C:\8086> ENTER THE FILE NAME

;KEYBOARD WITH BUFFER: CITY ENGINEERING COLLEGE

=================================================================================

MICROPROCESSOR 30 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

7.3. WRITE AN ALP TO DISPLAY SINGLE CHARACTER

.MODEL SMALL
.CODE
MOV AH, 02H ; CALL DISPLAY CHARACTER FUNCTION
MOV DL, 'S' ; MOVE THE CHARACTER TO DL REGISTER
INT 21H
MOV AH, 4CH ; TERMINATE THE PROGRAM
INT 21H
END ; END PROGRAM

=================================================================================
OUTPUT:

;C:\8086> ENTER THE FILE NAME DIRECTLY

; S

=================================================================================

7.4. WRITE AN ALP TO DISPLAY STRING ON CONSOLE

.MODEL SMALL
.DATA
MSG DB 10, 13, "CITY ENGINEERING COLLEGE", '$'
.CODE
MOV AX, @DATA ; INITIALISE DS REGISTER
MOV DS, AX
LEA DX, MSG ; LOAD EFFECTIVE ADDRESS
MOV AH, 09H
INT 21H
MOV AH, 4CH ; TERMINATE THE PROGRAM
INT 21H
END ; END PROGRAM

=================================================================================
OUTPUT:

;C:\8086> ENTER THE FILE NAME

;CITY ENGINEERING COLLEGE

=================================================================================

MICROPROCESSOR 31 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru
===================================================================================
8.1. Scan 3*8 keyboard for key closure and display the corresponding key code
;8.1.Matrix keyboard interfacing
.OUTPUT 2500AD
;EQUA
PORT_A EQU FFC0H
PORT_B EQU FFC2H
PORT_C EQU FFC4H
CNTL_PORT EQU FFC6H
DISP EQU F800: 4F1FH
DSEG SEGMENT AT 0
ORG 4000h
KEY_COD DB 0
FLG_LOC DB 0
DSEG ENDS
CSEG SEGMENT
ASSUME CS: CSEG, DS: DSEG
ORG 5000H
ST: MOV AL, 90H ;8255 CONFIGURATION
MOV DX, CNTL_PORT ;PORT A, PORT C=I/P PORT B=O/P
OUT DX, AL ;SET OE
START: CALL SCAN ;SCAN THE KEYBOARD & GETKEY CODE IN ACC
MOV AH, 0
MOV SI, AX
CALL FAR DISP ;DISPLAY IT
JMP START
SCAN: MOV AL, 07 ;ENABLE ALL THE ROWS
MOV DX, PORT_C
OUT DX, AL
BK: MOV DX, PORT_A
IN AL, DX
OR AL, AL ;IS ANY KEY CLOSED?
JZ BK
MOV CX, 586H ;DELAY OF 10MS
L1: LOOP L1 ;DEBOUNCE
MOV DX, PORT_A
IN AL, DX
OR AL, AL
JZ BK
MOV AL, 01 ;ENABLE FIRST ROW
MOV CH, AL
MOV CL, 0
REV: MOV DX, PORT_C
OUT DX, AL
MOV DX, PORT_A
IN AL, DX
OR AL, AL ;IS KEY CLOSED
JNZ NEXT ;YES - FIND KEY
ADD CL, 08 ;NO - CHECK NEXT ROW
ROL CH, 1
MOV AL, CH
CMP CH, 08
JNZ REV
JMP SCAN
NEXT: ROR AL, 1
JC FND
INC CL
JMP NEXT
FND: MOV AL, CL ;GET KEY CODE IN ACCR.
RET
CSEG ENDS
END

MICROPROCESSOR 32 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

8.2. Program for Seven segment LED display through 8255 (PCI based)
;8.2.Seven segment display interface
.OUTPUT 2500AD
DSEG SEGMENT
ORG 0:4000H
CONTROL EQU FFC6H ;control port address for 8255
PORTA EQU FFC0H ;portb address for 8255
PORTB EQU FFC2H ;portb address for 8255
PORTC EQU FFC4H
DSP_TBL DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH
DSEG ENDS
CSEG SEGMENT
ASSUME CS: CSEG, DS: DSEG
ORG 0:5000H
MOV AL, 80H ;PORT A - PORTC LOWER O/P
MOV DX, CONTROL ;PORT B - PORTC UPPER I/P
OUT DX, AL
DISP05: MOV DX, PORTC ;DISPABLE ALL DIDIGTS
MOV AL, 07H
OUT DX, AL
MOV CX, 06H
MOV BL, 00
MOV SI, OFFSET DSP_TBL
DISP00: MOV AL, BL ;SELECT DEIGIT 0
MOV DX, PORTC
OUT DX, AL
MOV DX, PORTA
LODSB
OUT DX, AL
CALL DELAY
INC BL
CMP BL, 05
JLE DISP20
MOV BL, 00
DISP20: LOOP DISP00
JMP DISP05
DELAY: PUSH CX
MOV CX, FFH
LP: LOOP LP
POP CX
RET
END
===================================================================================

MICROPROCESSOR 33 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru
===================================================================================
8.3. Program for logic controller interface and display on the same interface
;8.3.Logical controller interface
.OUTPUT 2500AD
;NIFC05 WITH 86 TRAINER KITS
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;PROGRAM FOR LOGIC CONTROL INTERFACE
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;EQUATES
PORT_A: EQU 0FFC0H
PORT_B: EQU 0FFC2H
PORT_C: EQU 0FFC4H
CTL_PORT: EQU 0FFC6H
CSEG SEGMENT
ASSUME CS: CSEG DS: CSEG
ORG 0:5000H
START1:
MOV AL, 8AH
MOV DX, CTL_PORT
OUT DX, AL ;INITIALIZE 8255, PORTS A & C LOWER
MOV AL, 00H ;AS OUT AND PORT B & C HIGHER AS INPUT

MOV DX, PORT_A ;BLANK OUT PORT A


OUT DX, AL ;AND PORTC
MOV DX, PORT_C ;AND PORTC
OUT DX, AL
READ_PORTB:
MOV DX, PORT_B
IN AL, DX
MOV DX, PORT_A
OUT DX, AL
READ_PORTC:
MOV DX, PORT_C
IN AL, DX
ROR AL, 1
ROR AL, 1
ROR AL, 1
ROR AL, 1
AND AL, 0FH
MOV DX, PORT_C
OUT DX, AL
JMP READ_PORTB
INT 3
CSEG ENDS
END
===================================================================================

MICROPROCESSOR 34 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru
===================================================================================
8.4.A. Program to rotate the Stepper motor in Anti-Clockwise direction
;8.4.A.Stepper motor interface two-phase(anti-clockwise)
.OUTPUT 2500AD
;EQUATES
PORTA EQU FFC0H ;PORT A ADDRESS
PORTB EQU FFC2H ;PORT B ADDRESS
PORTC EQU FFC4H ;PORT C ADDRESS
CTL EQU FFC6H ;CONTROL PORT ADDRESS

PHASEA EQU 09H


PHASEB EQU 06H
PHASEC EQU 03H
PHASED EQU 0DH
;ii. In a two-phase on scheme (anti clockwise) the ON phase sequence

;is C, B ON B, D ON;D, A ON;& A, C ON


CSEG SEGMENT
ASSUME CS: CSEG
ORG 0:5000H

MOV AL, 80H


MOV DX, CTL
OUT DX, AL

MOV AL, PHASEC


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH
L: LOOP L

MOV AL, PHASEB


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH
L9: LOOP L9

MOV AL, PHASEB


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH
L10: LOOP L10

MOV AL, PHASED


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH
L11: LOOP L11

MOV AL, PHASED


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH
L12: LOOP L12

MOV AL, PHASEA


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH
L13: LOOP L13

MOV AL, PHASEA


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH
L14: LOOP L14
MICROPROCESSOR 35 RSL, RCVK
4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

MOV AL, PHASEC


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH
L15: LOOP L15
INT 3

CSEG ENDS
.END
-----------------------------------------------------------------------------------

8.4.B. Program to rotate the Stepper motor in Clockwise direction

;8.4.B.Stepper motor interface two-phase(clockwise)


.OUTPUT 2500AD
;EQUATES
PORTA EQU FFC0H ;PORT A ADDRESS
PORTB EQU FFC2H ;PORT B ADDRESS
PORTC EQU FFC4H ;PORT C ADDRESS
CTL EQU FFC6H ;CONTROL PORT ADDRESS

PHASEA EQU 09H


PHASEB EQU 06H
PHASEC EQU 03H
PHASED EQU 0DH
;i. In a two-phase on scheme (clockwise) the ON phase sequence

;is C, A ONL A, D ON;D, B ON;& B, C ON


CSEG SEGMENT
ASSUME CS: CSEG
ORG 0:5000H

MOV AL, 80H


MOV DX, CTL
OUT DX, AL

MOV AL, PHASEC


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH
L1: LOOP L1

MOV AL, PHASEA


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH
L2: LOOP L2

MOV AL, PHASEA


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH
L3: LOOP L3

MOV AL, PHASED


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH
L4: LOOP L4

MOV AL, PHASED


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH

MICROPROCESSOR 36 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru
L5: LOOP L5

MOV AL, PHASEB


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH
L6: LOOP L6

MOV AL, PHASEB


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH
L7: LOOP L7

MOV AL, PHASEC


MOV DX, PORTC
OUT DX, AL
MOV CX, 0FFFFH
L8: LOOP L8
INT 3

CSEG ENDS
.END
===================================================================================

MICROPROCESSOR 37 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

===================================================================================
8.5.A. Program for ADC Interface (8 bit)
;8.5.A.ADC Interface (8 bit)
.OUTPUT 2500AD
;NIFC-07A
;-------
;86 - MEL
;********************************************
;PROGRAM TO STUDY ADC-0809 IN INTERRUPT MODE
;********************************************
CONTROL EQU FFC6H ;control port address for 8255
PORTA EQU FFC0H ;porta address for 8255
PORTB EQU FFC2H ;portb address for 8255
PORTC EQU FFC4H ;portc address for 8255
DBDTA EQU F800: 4F1FH
CMD59 EQU FFD8H
DATA59 EQU FFDAH

DSEG SEGMENT
ORG 0:4000H
IBYTE DB 0
DSEG ENDS

CSEG SEGMENT
ORG 0:5000H
ASSUME CS: CSEG, DS: DSEG

START:
MOV AX, 00H ;initialisation of stack pointer
MOV SS, AX

CLI
CLD

MOV BX, 202H ;initalisation of interrupt vector


PUSH CS
POP AX
MOV [BX], AX
MOV BX, 200H
LEA AX, CS: ISS
MOV [BX], AX

MOV DX, CMD59 ;ICW1


MOV AL, 13H
OUT DX, AL

MOV DX, DATA59 ;ICW2(interrupt vector address)


MOV AL, 80H
OUT DX, AL

MOV AL, 0FH


OUT DX, AL ;ICW4

MOV AL, 0FEH


OUT DX, AL ;OCW1(IR0 mask reset)
MOV AL, IBYTE
MOV CL, AL
MOV BL, 00H
MOV DX, CONTROL
MOV AL, 90H ;control word for PPI, portA is
OUT DX, AL ;set as input port & portB, portC
;are set as output ports.
STI

MICROPROCESSOR 38 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru
AD00:
MOV AL, IBYTE ;output channel number
MOV DX, PORTC
OUT DX, AL
;start conversion
MOV DX, CONTROL
MOV AL, 0FH ;PC7 (START/ALE) set
OUT DX, AL
PUSH CX
MOV CX, FFH
WAT:
LOOP WAT
POP CX
MOV DX, CONTROL
MOV AL, 0EH ;PC7 reset
OUT DX, AL
;wait for interrupt to come
AD05: ;look for flag, flag will
CMP BL, 00H ;set in ISR, if it is set again
JZ AD05 ;read the channel and display
MOV BL, 00H ;digital value
JMP AD00
;INTERRUPT SERVICE ROUTINE
;--------------------------
;EOC line is connected to IR0 line of PIC
;through D F/F, hence EOC interrupts CPU.
;In ISR, read the specified channel and display
;the read value in data field.
ISS:
MOV DX, CONTROL
MOV AL, 0DH ;PC6 (OE) set
OUT DX, AL
;before reading data from ADC set PC6 line
MOV DX, PORTA
IN AL, DX ;read digital value
MOV AH, 00H
MOV SI, AX
PUSH CX
CALL FAR DBDTA ;display digital value
POP CX
MOV AL, IBYTE
MOV AH, 0
MOV SI, AX
;CALL FAR DBDTA ;display digital value
MOV BL, FFH
STI
IRET

CSEG ENDS
END
-----------------------------------------------------------------------------------

MICROPROCESSOR 39 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru
-----------------------------------------------------------------------------------
8.5.B.1. Program for DAC Interface (8 bit) RAMP Wave generation

;8.5.B.1.DAC Interface (8 bit) RAMP


.OUTPUT 2500AD
;NIFC - 06A
;-------
;86 - ME
;Program to test nifc06A (Dual dac interface) using sda 8086 UNI kit.

;Enter the program as per the listing given in the manual at


;address 0:00 3000
;Execute the program as per the following key sequence GO 0:00 4000h

;observe the waveform


;the interface, pin 2 & 3 are the ground points.
;Step waveform is observed first and after a delay ramp waveform
;is observed and the cycle repeats.

CNTL EQU 0FFC6H


PORTA EQU 0FFC0H
PORTB EQU 0FFC2H
DLCNT EQU 118

DSEG SEGMENT AT 0
ORG 0:4000h
W1: DW 0H
DSEG ENDS

CSEG SEGMENT AT 0

ORG 0:5000h

ASSUME CS: CSEG, DS: DSEG


DDAC: MOV AL, 88H ;8255 INITIALISED TO PORTA
MOV DX, CNTL ;PORTB ANDS PORTC
OUT DX, AL
B01: MOV W1, 03FFH
BACK: MOV AL, 0 ;INITIALISE D/A I/P TO 00H
CALL SUB
MOV AL, 0FFH ;D/A WITH MAX
CALL SUB
MOV AL, 07FH ;D/A MIDDLE VALUE
CALL SUB
DEC W1
JNZ BACK
;RAMP OUTPUT
MOV W1, 0FFFH
L05: MOV BL, 0
LP: MOV AL, BL
MOV DX, PORTA
OUT DX, AL
MOV DX, PORTB
OUT DX, AL
INC BL
INC BL
INC BL
INC BL
MOV CX, 040H
L10: LOOP L10
DEC W1
JNZ LP
JMP B01

SUB: MOV DX, PORTA


OUT DX, AL
MICROPROCESSOR 40 RSL, RCVK
4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru
MOV DX, PORTB
OUT DX, AL
MOV CX, DLCNT
L2: LOOP L2
RET
MOV BH, 0FH
DL1: MOV CX, 02FFFH
DLY: LOOP DLY
DEC BH
JNZ DL1
CSEG ENDS
END
-----------------------------------------------------------------------------------
8.5.B.2. Program for DAC Interface (8 bit) SINE Wave generation
;8.5.B.2.DAC Interface (8 bit) SINE
.OUTPUT 2500AD
DSEG SEGMENT
ORG 0:4000H
BASE_ADDRESS EQU 0FFC0H
CONTROL EQU BASE_ADDRESS+06H
PORTA EQU BASE_ADDRESS+00H
PORTB EQU BASE_ADDRESS+02H
PORTC EQU BASE_ADDRESS+04H

LOOK_UP_TBL DB 80H, 90H, 0A1H, 0B1H, 0C0H, 0CDH, 0DAH, 0E5H, 0EEH, 0F6H,
0FBH, 0FEH, 0FFH , 0FEH, 0FBH, 0F6H, 0EEH, 0E5H, 0DAH, 0CDH, 0C0H, 0B1H, 0A1H, 90H,
80H, 70H, 5FH, 4FH, 40H, 33H, 26H, 1BH, 12H, 0AH, 05H, 02H, 00H, 02H, 05H, 0AH,
12H, 1BH, 26H, 33H, 40H, 4FH, 5FH, 70H
DSEG ENDS

CSEG SEGMENT
ASSUME CS: CSEG, DS: DSEG
ORG 0:5000H
ST0:
MOV DX, CONTROL
MOV AL, 88H ;initialise all ports as output
OUT DX, AL ;ports
RPT:
MOV CX, 24 ;48 ;NO. OF VALUES IN LOOKUP TBL
MOV BX, OFFSET LOOK_UP_TBL
DA00: MOV AL, [BX]
;CALL OUTPUT
MOV DX, PORTA
OUT DX, AL
MOV DX, PORTB
OUT DX, AL
;CALL DELAY
INC BX
INC BX
LOOP DA00
NOP
NOP
NOP
JMP RPT
;OUTPUT:
;RET

DELAY: PUSH CX
MOV CX, 0FFFFH
HERE: LOOP HERE

RET

CSEG ENDS
END
-----------------------------------------------------------------------------------
MICROPROCESSOR 41 RSL, RCVK
4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru
8.5.B.3. Program for DAC Interface (8 bit) SQUARE Wave generation

;8.5.B.3.DAC Interface (8 bit) SQR


.OUTPUT 2500AD
;NIFC-06A
;86 - ME

CONTROL EQU FFC6H ;control port address for 8255


PORTA EQU FFC0H ;porta address for 8255
PORTB EQU FFC2H ;portb address for 8255

DSEG SEGMENT
ORG 0:4000H

DSEG ENDS

CSEG SEGMENT
ORG 0:5000H
ASSUME CS: CSEG, DS: DSEG
START:

MOV DX, CONTROL


MOV AL, 88H ;initialise all ports as output
OUT DX, AL ;ports

;step waveform generation


;-----------------------------
DA00:
MOV AL, 00H ;outport 0 for 0V level
CALL OUTPUT
MOV AL, 0FFH
CALL OUTPUT

JMP DA00

;routine to output digital value


;-------------------------------

OUTPUT:
MOV DX, PORTA
OUT DX, AL
MOV DX, PORTB
OUT DX, AL
CALL DELAY
RET

DELAY:
MOV CX, 0FFH ;to vary the frequency alter the delay count
LUP1: LOOP LUP1
RET

CSEG ENDS

END

MICROPROCESSOR 42 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru

8.5.B.4. Program for DAC Interface (8 bit) TRINANGLE Wave generation

;8.5.B.4.DAC Interface (8 bit) TRIN


.OUTPUT 2500AD
;NIFC - 06A
;-------
;86 #NAME?
;*******************************************************
;PROGRAM TO STUDY DIGITAL TO ANALOG CONVERTOR (DAC-0800)
;*******************************************************

CONTROL EQU FFC6H ;control port address for 8255


PORTA EQU FFC0H ;porta address for 8255
PORTB EQU FFC2H ;portb address for 8255
PORTC EQU FFC4H ;portc address for 8255

DSEG SEGMENT
ORG 0:4000H

DSEG ENDS

CSEG SEGMENT
ORG 0:5000H
ASSUME CS: CSEG, DS: DSEG
START:

MOV DX, CONTROL


MOV AL, 88H ;initialise all ports as output
OUT DX, AL ;ports
;displaying message on LCD
;------------------------------------------
DA00:
MOV AL, 00H ;outport 0 for 0V level
UP: CALL OUTPUT
INC AL
CMP AL, 00H
JNZ UP

MOV AL, 0FFH ;to change amplitude change count


UP1: CALL OUTPUT
DEC AL
CMP AL, 0FFH
JNZ UP1

JMP DA00

;routine to output digital value


;-------------------------------
OUTPUT:
MOV DX, PORTA
OUT DX, AL
MOV DX, PORTB
OUT DX, AL
CALL DELAY
RET

DELAY:
MOV CX, 06H ;to vary the frequency alter the delay count
LUP1: LOOP LUP1
RET
CSEG ENDS
END
===================================================================================

MICROPROCESSOR 43 RSL, RCVK


4TH SEM, P LAB MANUAL, 15ECL47 2016-17 E&C DEPT., CEC, Bengaluru
===================================================================================

8.6. Program for LDR-BUZZER-RELAY Interface


;8.6.LDR-BUZZER-RELAY
;PROGRAM FOR LDR-BUZZER-RELAY OPERATION
;PC1 CONNECTED TO LDR I/P
;PC4 CONNECTED TO BUZZER-RELAY
.OUTPUT 2500AD
CSEG SEGMENT
ORG 0:6000H
PORTA EQU 0FFC0H
PORTB EQU 0FFC2H
PORTC EQU 0FFC4H
CNTRL EQU 0FFC6H

ST:
;CONFIGURE PORTCL AS I/P & OTHER PORTS AS O/P
MOV DX, CNTRL
MOV AL, 81H
OUT DX, AL

MOV DX, CNTRL


MOV AL, 08H ;BZR RLY OFF
OUT DX, AL

CHKLDR:
MOV DX, PORTC
IN AL, DX
AND AL, 02H
JNZ BZRLYON

MOV DX, CNTRL


MOV AL, 08H ;BZR RLY OFF
OUT DX, AL
JMP CHKLDR

BZRLYON:
MOV DX, CNTRL
MOV AL, 09H ;BZR RLY ON
OUT DX, AL

;DELAY

MOV CX, FFFFH


DLY: LOOP DLY

JMP CHKLDR
CSEG ENDS
END
===================================================================================

MICROPROCESSOR 44 RSL, RCVK

You might also like