0% found this document useful (0 votes)
4 views55 pages

Microprocessor Lab Manual

The document is a lab manual for the Microprocessor 8086 course at Al Balqa Applied University, detailing various assembly language concepts and exercises. It covers topics such as assembly language fundamentals, data transfer, arithmetic operations, addressing modes, and debugging techniques. Each lab includes objectives, examples, and homework assignments to reinforce learning.

Uploaded by

rababdallah94
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)
4 views55 pages

Microprocessor Lab Manual

The document is a lab manual for the Microprocessor 8086 course at Al Balqa Applied University, detailing various assembly language concepts and exercises. It covers topics such as assembly language fundamentals, data transfer, arithmetic operations, addressing modes, and debugging techniques. Each lab includes objectives, examples, and homework assignments to reinforce learning.

Uploaded by

rababdallah94
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

Al Balqa Applied University

Al-Huson College University

Electrical Engineering Department

Microprocessor 8086 Lab Manual


Eng. Buthayna AL-Sharaa
Table of Contents
No Lab Title Page
1 Introduction to Assembly Language 3

2 Assembly Language Fundamentals 9

3 Data Transfer & Arithmetic 11

4 Loop Instruction 20

5 Addressing Modes 22

6 Boolean Instructions & Conditional Structured 25


7 Shift, Rotate, Multiplication and Division 31
Instructions
8 Stacks and Subroutines 38

9 Debug Program 43

10 Keyboard Input with int 16h & Macros 47

Appendix ASCII CODE Tables 50


A
Lab1
Introduction to Assembly Language
1. Objective:

To be familiar with Assembly Language.

2. Introduction

Machine language (computer's native language) is a system of impartible instructions


executed directly by a computer's central processing unit (CPU). Instructions consist of
binary code: 1s and 0s.

Machine language can be made directly from java code using interpreter.

Assembly Language is a programming language that is very similar to machine language,


but uses symbols instead of binary numbers. It is converted by the assembler (e.g. Tasm and
Masm) into executable machine-language programs.

The difference between compiling and interpreting is as follows. Compiling translates the
high-level code into a target language code as a single unit. Interpreting translates the
individual steps in a high-level program one at a time rather than the whole program as a
single unit. Each step is executed immediately after it is translated.
C, C++ code is executed faster than Java code, because they transferred to assembly
language before machine language.

Assembly language is machine-dependent; an assembly program can only be executed on a


particular machine.

In Our Lab we will learn the assembly language of the 8086intel Microprocessor.

To make programs in assembly language, you must know some information about the 8086
microprocessor. The 8086 contains 14 registers. Each register is 16 bits long. See Figure (1)

Each register has different usage as shown in Table (1) below. The general purpose registers
can be "split". AH contains the high byte of AX and AL contains the low byte. You also
have: BH, BL, CH, CL, DL, DH. So if for example, DX contains the value 1234h DH would
be 12h and DL would be 34h.
And a 16-bit FLAG Register. The FLAGS Register consists of 9 status bits. These bits are
also called flags, because they can either be SET (1) or NOT SET (0). All these flags have a
name and purpose.
op-code destination operand, source operand

Segments:
The 8086 microprocessor has a memory of size 1MB. This memory is divided into
segments, each segment has a size of 64KB. The segments are: Data Segment (DS), Code
Segment(CS), Stack Segment (SS), Extra Segment(ES).

❖ the address of any location within a segment consist of 2 parts:

a. segment address: 16-bit selector defining the beginning address of any 64KB (216)
memory segment

b. offset address: selecting any location within the 64KB (216) memory segment

3. Running your first example: Hello Program!


1. Click Start → All Programs → Emu8086

2. Click New → Com Template. Where a white page opens.


3. Enter the code shown in the following screen
4. Click Compile . If your program does not contain any errors → save program →

press . then click from the screen that shows.

- Note: is used to execute the program one instruction at a time.

Analysis of the Hello program:

Homework:
Write an assembly language program to print all letters as follows: AB......MN

Note: To print a character on the screen you have to use the int 21h with the service 2, the
character to be printed have to be in dL register.

For Example, the following code print A on the screen.

mov ah, 2

mov dl, 41h

int 21h

Note: Don’t use loop in your solution


Lab2
Assembly Language Fundamentals

Objective:
To be familiar with Assembly Language Fundamentals.

Our compiler supports two types of data types: Byte, Word

Variables
A variable is a memory location that has an address and a value.

The syntax for variable declaration is:

Varname DB value

Varname DW value

DB : stands for Define Byte

DW : stands for Define Word

Value: is the numerical value of variable in any of the supported number systems(
Hexadecimal, decimal, binary, octal). The letter ? can be used to leave the content of
variable not changed.
The characters used for each numeric system are :

h – hexadecimal

d – decimal

b – binary

o – octal

Examples: 30d, 6Ah, 42, 1101b, 777o

- Hexadecimal beginning with letter: 0A5h

- If no radix is given, the integer constant is decimal

- A hexadecimal beginning with a letter must have a leading

- the definition of an array is similar to variable definition , except that a list of values are
specified.

Example: defining array named list1 of 4 elements each element is a byte, with initial values
1,2,3,4

List1 db 1,2,3,4

Character Constants
A character constant is a single character enclosed in either single or double quotes. The
assembler converts it to the binary ASCII code matching the character.

Examples are:

'A'

"x"

ASCII character = 1 byte.

String Constants
String constant is a string of characters enclosed in either single or double quotes:

'ABC'

"xyz"

'Say "Goodnight," Gracie'


-Each character occupies a single byte.

-it is preferred to end String with the symbol $

Comments

All single line comments start with the symbol ;


Lab3
Data Transfer & Arithmetic
❖ Direct-Offset Operands:
a direct-offset operand: (also called Direct Addressing Mode ) is adding a displacement( a number ) to the
name of a variable or array. Let’s begin with an array of bytes named arrayB:

.data

arrayB db 10h,20h,30h,40h,50h

.code

; the following instruction with will move the first byte in the array into AL:

mov AL , arrayB ; AL = 10h

; the following instruction with will move the second byte in the array into AL:

Mov AL , [arrayB+1] ; AL = 20h

Note:

An expression such as arrayB+1 produces what is called an offset address by adding a


constant to the variable’s name. Surrounding an offset address with brackets indicates the
expression is used to obtain the contents of memory at that address.
Lab4
Loop Instruction

Example:

LEA BX, List ;Load the offset address of List into register Bx

Note: The operator Offset performs the same as LEA

Example:

Mov BX, OFFSET List ; this instruction is the same as the above.
This operator specifies the size to which an address points to in memory, as shown:

• WORD PTR : address or register points to a word


• BYTE PTR : address or register points to a Byte

Example:

INC WORD PTR var1 ; increment the content of the word in memory addressed by var1

Lab Work:
Exercise 1:
Write the code to print your name 5 times on screen

Exercise 2:
Write the code to find the square of the number 4

Exercise 3:
Lab5
Addressing Modes

Objective:
To know more about Assembly language, such as how CPU can access data in memory.

Addressing Modes:
The addressing modes are different ways to find the memory address (how CPU can access
data in memory). There are five addressing modes used in assembly programming with
80x86 family, these modes are:

1. Immediate addressing mode:


One of the operands is an immediate number
Ex mov al,5
2. Register addressing mode
Both operands exist in registers.
Ex add cl,bl

3. Direct Addressing : Mode In this mode the 16 bit Offset is taken directly from the
instruction.

Examples:

mov [START+1],CL ; copy CL into location START + 1

mov DX, [200] ; copy the word at address 200 into register DX

4. Register Indirect: [bx], [si], [di], [bp]


Addressing data at any location through an offset address held in BP, BX, DI, and SI.
Examples :
mov ax,[bx] ; copies the word in data segment memory location addressed by bx to ax

mov [BP],dl ; copies dl into stack segment memory at the address stored in BP

5. Relative register indirect: Register added to a constant to form the offset


MOV AX, [BX+5] ↔ MOV AX,5[BX] ↔ MOV AX, [BX]+5
6. Base-Plus-Index Addressing:
In this mode one base register (BP or BX) + 1 of index register (DI or SI)
– base register: hold beginning location of a memory array
– index register: hold relative position of an element in the array
-if base register BP is used➔ data addressed is in stack segment
- if base register BX is used➔ data addressed is in data segment

Examples:
MOV DX, [BX+DI] ; move data(16 Bit ) is data segment at address BX+DI to register DX

mov ax,[bp+bx] ; error , two base registers


mov ax,[si+di] ; error , two index registers

7. Base-Indexed with displacement (relative base plus index)


MOV AX, [bx+si+2]
Homework:

1. Write an assembly program that allows the user to enter two strings and
determines if they are equal or not. (Each string must end with $).

2. Write an assembly program that allows the user to enter 5-digits Number, and
then prints it in reversed-order digits.
Lab 6/Boolean Instructions & Conditional Structured
OTHER logical instructions: XOR,OR. They have the same syntax a the AND
instruction

Truth table OR

0 0 0

0 1 1

1 0 1

1 1 1

Example: mov al,0C5H

OR al, 0FH

Final value of al=0CFh

Truth table XOR

0 0 0 note 0 xor A = A

0 1 1 1 xor A = A’ (complement)

1 0 1

1 1 0

Example : write code to flip(complement) bit 0 in al and keep the other bits
unchanged

Xor al,1
Exercise 4
Lab 7/ Shift, Rotate, Multiplication and Division
Instructions
Lab 8
Stacks and Subroutines
Write a program that finds the largest unsigned number in an array of 5 numbers , each
number is of one byte. Use subroutines
Lab 9
Debug Program
Objective:
Debugging and writing assembly programs using Debug program under windows.
Debug is available on every Windows box through the DOS command prompt we will it to
explore the computer organization of the 80x86 machine.

To open the program: Click to open

Write debug then press enter


-enter ? then press enter. The following shows

This is a menu that contains the set of all commands that can performed in this program.

Some of the Debugger’s Commands:


1. Register ( r ) : to display the content of CPU registers.

To change the content of register AX


Old value of AX

new value of AX

2. Dump (d ): to display the content of data segment.


The following example dumps the content of data segment at offset 0000
address Content of memory in Content of memory in
hexadecimal
ASCII

1. Enter (e) : to fill or change the contents of the data segments.


Example: to change the content at ds:0000, enter

Old value at address New entered value at


0000 address 0000

- Press Enter to exit this command


- Intel uses Little Indian organization to store data in memory( where most significant
byte of operand is stored in highest address in memory

2. Assemble (a): to enter our code to the code segment


Example: to enter instructions at CS:100

3. Trace ( t ): to execute the code one instruction at a time. The instruction executed is the
one whose address is stored in register IP.
Enter :
-t
4. Go (g ): used to execute the set of instructions between two addresses.

The statement g=100 10b runs the instructions between these addresses.
5. HEX (H) : to find the length of our code
syntax:
H end address of code start address of code
The output of this command is:
Sum of two address difference between two addresses
6. Name (n): used to specify the name of file
7. Write (w ): to write our code to the file we specified using command ( n). the size of
code to write in bytes should be stored in register CX
Example:

Address of the string

To exit
Lab 10
Keyboard Input with int 16h & Macros
Example:
ORG 100h

MyMacro2 MACRO

LOCAL label1, label2

CMP AX, 2

JE label1

CMP AX, 3

JE label2

label1:

INC AX

label2:

ADD AX, 2

ENDM

;;;;;main program

ORG 100h

MyMacro2 ; first call to macro

MyMacro2 ;second call to macro

RET

Exercise 2.

Write a program that finds the largest unsigned number in an array of 5 numbers , each
number is of one byte. First Use subroutines. Second use macros

ASCII CODE Table

You might also like