0% found this document useful (0 votes)
134 views94 pages

8086 Microprocessor Notes v3.0

The document provides detailed notes on the 8086 microprocessor, covering its architecture, features, memory addressing, and assembly instruction set. It includes version updates, diagrams, and explanations of various components such as buffering, memory and I/O interfaces, and subroutines. The notes are intended for educational purposes and are not officially verified.

Uploaded by

FoFi
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)
134 views94 pages

8086 Microprocessor Notes v3.0

The document provides detailed notes on the 8086 microprocessor, covering its architecture, features, memory addressing, and assembly instruction set. It includes version updates, diagrams, and explanations of various components such as buffering, memory and I/O interfaces, and subroutines. The notes are intended for educational purposes and are not officially verified.

Uploaded by

FoFi
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

CONTENT

➢ General Diagram of
Microcomputer and CPU
➢ Architecture and Features
of 8086
➢ Memory Addressing
➢ Assembly Instruction Set of
8086
8086
➢ Buffering
➢ Memory Interface
➢ I/O Interface
MICROPROCESSOR
➢ Subroutines
➢ Delay Time
➢ Sheet 1
[NOTES] - VERSION
➢ Sheet 2
➢ 1st Term Midterm 3.0
2017/2018
➢ Sheet 3
➢ Sheet 4 Helwan University
➢ Sheet 5
Faculty of Engineering - Helwan Branch
➢ Sheet 6
3rd Computer Engineering
➢ 2nd Term Midterm
2017/2018

This is not an official


document, it’s just some
personal notes haven't been
verified officially.
8086 Microprocessor [Notes] - Version 3.0

Version Updates

➢ From Version 2.0 to Version 2.0.2:


• Correct the PPI control lines on the draw for Q.2 and Q.3 at Sheet 6.
From (MR & MW)
To (IOR & IOR)
• Correct part of program for Q.1 and Q.2 at Sheet 6.
From (SHR 01H /*\ JC EVEN)
To (MOV AH, AL /*\ SHR AH, 01H /*\ JNC EVEN)

➢ From Version 2.0.2 to Version 3.0:


• Refine Sheets (5,6) Solutions with:
- Obtaining the Concept of odd and even addresses of I/O ports.
- Adding second solution using Memory Full Decoding Approach for problems
that has memory mapped I/O Ports.
• Adding more explanation about Memory Interface and I/O Interface.
• Adding explanation about Subroutines and Delay Time.

Created By: M. El-Moughazy 1|Page


8086 Microprocessor [Notes] - Version 3.0

References

A. The Intel Microprocessors Architecture Programming And


Interfacing - 8th Edition
B. ]‫محمد ابراهيم العدوي‬.‫د‬.‫المعالجات الدقيقة [أ‬
C. 8086 Microprocessor [Tutorials Point]
D. “Intel 8086 16-BIT HMOS MICROPROCESSOR 8086/8086-2/8086-
1” Data Sheet
E. Memory Addressing of 8086(CS502)

Created By: M. El-Moughazy 2|Page


8086 Microprocessor [Notes] - Version 3.0

Table of Contents
Version Updates ........................................................................................................................................... 1
Table of Contents ......................................................................................................................................... 3
General Diagram of Microcomputer and CPU............................................................................................. 5
Architecture and Features of 8086 .............................................................................................................. 7
❖ Architecture of 8086......................................................................................................................... 7
❖ Features ............................................................................................................................................ 7
❖ General-Purpose Registers Vs Special-Purpose Registers............................................................... 8
❖ Functional Units of 8086 .................................................................................................................. 8
❖ Execution Unit (EU) ...................................................................................................................... 8
❖ Bus Interface Unit (BIU) ............................................................................................................... 9
Memory Addressing ................................................................................................................................... 11
❖ Addressing Modes .......................................................................................................................... 11
➢ Direct Addressing Mode............................................................................................................. 11
➢ Register Indirect Addressing Mode ........................................................................................... 11
➢ Based Addressing Mode ............................................................................................................. 11
➢ Indexed Addressing Mode ......................................................................................................... 11
➢ Base-Indexed Addressing Mode ................................................................................................ 11
➢ Base-Indexed with Displacement Addressing Mode ................................................................ 11
Assembly Instruction set of 8086 .............................................................................................................. 12
➢ Data Transfer Instructions: (MOV, PUSH, PUSHF, POP, POPF) ..................................................... 12
➢ Arithmetic Instructions: (ADD, ADC, SUB, SBB, CMP, INC, DEC, MUL, DIV) ................................. 12
➢ Logical Instructions: (AND, OR, XOR, NOT) ................................................................................... 13
➢ Execution Transfer Instructions: (JMP, CALL, RET, RETF) .............................................................. 14
➢ Iteration Instructions: (LOOP) ........................................................................................................ 15
➢ I/O Port Transfer Instructions: (IN, OUT) ...................................................................................... 15
➢ Shift Operations Instructions: (SAR, SAL, SHR, SHL) ..................................................................... 15
➢ Rotate Operations Instructions: (ROR, ROL, RCR, RCL) ................................................................. 16
❖ General Assembly Instructions Notes: (Due to Dr. Maher Mansour) .......................................... 17
Buffering ..................................................................................................................................................... 18
❖ Latch................................................................................................................................................ 18
❖ Buffers............................................................................................................................................. 18
➢ Normal Buffer (Single Input) ...................................................................................................... 18

Created By: M. El-Moughazy 3|Page


8086 Microprocessor [Notes] - Version 3.0

➢ Tri-State Buffer ........................................................................................................................... 19


➢ Bi-Directional Buffer ................................................................................................................... 20
❖ Buses Buffering of 8086 ................................................................................................................. 21
Memory Interface ...................................................................................................................................... 23
❖ Memory Types ................................................................................................................................ 23
❖ 8086 Memory Interface.................................................................................................................. 23
I/O Interface ............................................................................................................................................... 26
❖ I/P Port............................................................................................................................................ 26
❖ O/P Port .......................................................................................................................................... 26
❖ PPI ................................................................................................................................................... 26
❖ Generating Port CS (Chip Select): .................................................................................................. 28
❖ Mapping .......................................................................................................................................... 28
Subroutines ................................................................................................................................................ 29
Delay Time .................................................................................................................................................. 30
Sheet 1 [8086]: 8086 MCU Architecture .................................................................................................... 32
Sheet 2 [8086]: Assembly Language .......................................................................................................... 36
Task [8086] ................................................................................................................................................. 47
1st Term Midterm 2017/2018 ..................................................................................................................... 48
Sheet 3: Microprocessor Buffering ............................................................................................................ 51
Sheet 4: Memory Interfacing with the Intel 8086 CPU ............................................................................. 54
Sheet 5: I/O Interfacing with the Intel 8086 CPU ...................................................................................... 63
Sheet 6: Intel 8086 CPU Microcomputer ................................................................................................... 80
2nd Term Midterm 2017/2018 .................................................................................................................... 88

Created By: M. El-Moughazy 4|Page


8086 Microprocessor [Notes] - Version 3.0

General Diagram of Microcomputer and CPU

Created By: M. El-Moughazy 5|Page


8086 Microprocessor [Notes] - Version 3.0

❖ External Buses: used to control memory and I/O.


• Address Bus: used to request a memory location or I/O device.
• Data Bus: used to transfer data between the microprocessor and its
memory and I/O spaces.
• Control Bus: used to control memory and I/O spaces and requests reading
or writing of data.

❖ Memory locations:
Memory locations are actually 8-bits in width. So whenever 16-bit data is
accessed two consecutive 8-bit memory location. Using concept of Little-
Endian format.
• Little-Endian format: The least significant byte is always stored in the
lowest-numbered memory location, and the most significant byte is stored
in the highest.

❖ I/O Ports:
Like Memory, I/O ports are actually 8-bits in width. So whenever 16-bit port is
accessed two consecutive 8-bit ports are actually addressed.

Created By: M. El-Moughazy 6|Page


8086 Microprocessor [Notes] - Version 3.0

Architecture and Features of 8086


❖ Architecture of 8086

❖ Features
• Data Bus (Size): (16-bit Internal/External) Microprocessor.
• Address Bus: 20-bit.
• Memory: can access up to 1 MByte of memory.
General laws:
Memory Space(Size) = (2^Address Bus) [unit of memory location width(capacity)]
Memory Capacity = Memory Space * Memory Location Capacity [bit]
= (2^Address Bus) * Memory Location Capacity [bit]
• I/O: can access (2^16 = 64K) I/O’s.
• Pipelining: supports pipelined architecture, it uses 2 stages of pipelining
Fetch Stage and Execute Stage.
▪ Pipelining means fetching the next instruction while the current is
executed.
▪ Fetch Stage can prefetch up to 6 bytes of instructions and store them in
the queue (cache).

Created By: M. El-Moughazy 7|Page


8086 Microprocessor [Notes] - Version 3.0

❖ General-Purpose Registers Vs Special-Purpose Registers

• General-Purpose(Multipurpose) Registers:
Include AX, BX, CX, DX, BP, DI, and SI.
These registers hold various data sizes (bytes or words) and are used for
almost any purpose, as dictated by a program.
For some instructions maybe, a multipurpose register has a special
purpose, but is generally considered to be a multipurpose register.
• Special-Purpose Registers:
Include IP, SP, and FLAGS, and the segment registers include CS, DS, SS,
and ES.
These registers are used for a certain purpose only.

❖ Functional Units of 8086


8086 Microprocessor is divided into 2 functional units
• Execution Unit (EU)
• Bus Interface Unit (BIU)
❖ Execution Unit (EU)
• Its function is to control operations on data using the instruction decoder
and ALU.
• It gives instructions to BIU stating from where to fetch the data and then
decode and execute those instructions.
➢ ALU: handles all arithmetic and logic operations.
➢ General purpose registers (Ax, Bx, Cx, Dx):
▪ Each register is 16-bit and consist of 2 8-bit register like (AH, Al).
• AX (Accumulator register): used with I/O and arithmetic operations.
• BX (Base Index register): sometimes holds the offset address of a location
in the memory.
• CX (Counter register): holds the count for various instructions.
• DX (Data register): holds a part of data used in I/O and some arithmetic
(DIV & MUl) operations.
➢ SP (Stack Pointer register): point to the top of the stack.
➢ BP (Base Pointer register): point to somewhere in the stack.
➢ SI (Source Index register): used in addressing.
➢ DI (Destination Index register): used in addressing.

Created By: M. El-Moughazy 8|Page


8086 Microprocessor [Notes] - Version 3.0

➢ Flag Register (9 Flags): indicate the condition of the microprocessor and


control its operation.
o Conditional Flags: changes its status according to the result of the last
arithmetic or logical instruction executed.
• CF (Carry flag)
• AF (Auxiliary flag): (half-carry) carry given by D3 to D4 is AF flag.
• ZF (Zero flag)
• SF (Sign flag)
• PF (Parity flag): when the lowest 8-bit contains even number of 1’s the
flag is set. else the flag is reset.
• OF (Overflow flag): system capacity is exceeded.
o Control Flags:
• IF (Interrupt flag): interrupt enable/disable flag.
• TF (Trap flag): used for single step control allows to execute one instruction
at time for debugging.
• DF (Direction Flag): used in string operation. When it is set the string bytes
are accessed from the higher memory address to the lower and vice-a-versa.
(selects either the increment or decrement mode for the DI and/or SI registers
during string instructions)

❖ Bus Interface Unit (BIU)


• It takes care of all data and address transfers on the buses for EU like:
writing/reading data, fetching instructions and sending address.
➢ Instructions Queue(Cache): store up to 6 bytes of prefetched next
instructions.
➢ IP (Instruction Pointer register): point to the next instruction in a section of
memory defined as a code segment. That will be fetched to be executed by
the EU.
➢ Segment registers (CS, DS, SS, ES): used by the microprocessor to access
memory locations. [Note: our registers are 16-bit but the address bus is 20-
bit, so we have used segmentations]
• CS (Code Segment): for memory locations where the executable program
is stored. Works with [IP].
• DS (Data Segment): for memory locations that deals with data. Works with
[BX, SI, DI].
• SS (Stack Segment): for memory locations that related to the stack. Works
with [SP, BP].
Created By: M. El-Moughazy 9|Page
8086 Microprocessor [Notes] - Version 3.0

• ES (Extra Segment): for memory locations that deals with extra destination
data (Arrays, Strings). Works with [SI, DI].
▪ Calculating the absolute (actual) address:
SegmentRegisterValue:RegisterValue(OffsetAddressValue)
EX:
89AB:F012 ->89AB*10 -> 89AB0 (SegmentRegisterValue * 10Hex)
F012 -> 0F012
----- +
98AC2 (The Absolute Address [20-bit])

Created By: M. El-Moughazy 10 |


Page
8086 Microprocessor [Notes] - Version 3.0

✓ Before we get into the Assembly Instruction set let’s first know how
we can using and write address in our Instructions.
-----------------------------------------------------------------------------------------------
Memory Addressing
▪ To access the content of a memory location having its address we write
the instruction operand like that: [address]
▪ The address can be only consisting of any combination from (BX, BP, SI, DI,
or a direct displacement 8-bit/16-bit)
➢ Note we can’t use (BX) and (BP) together.
➢ Note we can’t use (SI) and (DI) together.
✓ Note: memory location is 8-bit so when we store or read a 16-bit data it use
two sequential locations the first for the lowest 8-bit and the second for the
highest 8-bit.
❖ Addressing Modes
➢ Direct Addressing Mode
• [displacement] like [1111H]
➢ Register Indirect Addressing Mode
• [BX] or [BP] or [SI] or [DI]
➢ Based Addressing Mode
• [BX/BP + displacement 8-bit/16-bit] like [BX + 082H]
➢ Indexed Addressing Mode
• [SI/DI + displacement 8-bit/16-bit] like [BX + 0082H]
➢ Base-Indexed Addressing Mode
• [BX/BP + SI/DI]
➢ Base-Indexed with Displacement Addressing Mode
• [BX/BP + SI/DI + displacement 8-bit/16-bit] like [BX + SI + 04H]

Created By: M. El-Moughazy 11 |


Page
8086 Microprocessor [Notes] - Version 3.0

Assembly Instruction set of 8086


✓ Notes:
- “Memory” word refer to: [address]
- “REG” word refer to: (AX, AL, AH), (BX, BL, BH), (CX, CL, CH), (DX, DL, DH),
SI, DI, SP, BP
- “SREG” word refer to: CS (read only), DS, SS, ES
- “immediate” word refer to an immediate data: 1111H
- We can’t use IP register.
- If we use chars as immediate data, it will be converted to its ASCII Code.
Like (‘A’) will be (41H)

➢ Data Transfer Instructions: (MOV, PUSH, PUSHF, POP, POPF)


• MOV operand1, operand2 ~ operand1 = operand2
Flags unchanged (C, Z, S, O, P, A)
Operand1 and Operand2 may be:
REG, memory SREG, memory
memory, REG memory, SREG
REG, REG REG, SREG SREG, REG
memory, immediate
REG, immediate
• PUSH operand1 ~ SP = SP – 2, SS:[SP] = operand (Push 16-bit into stack)
• POP operand1 ~ operand = SS:[SP], SP = SP + 2 (Pop 16-bit from stack)
Operand1 may be:
REG
SREG
memory
• PUSHF NO Operand ~ Push the flag register to stack
• POPF NO operand ~ Pop the flag register from stack

➢ Arithmetic Instructions: (ADD, ADC, SUB, SBB, CMP, INC, DEC, MUL, DIV)
• ADD operand1, operand2 ~ operand1 = operand1 + operand2
• ADC operand1, operand2 ~ operand1 = operand1 + operand2 + CF
• SUB operand1, operand2 ~ operand1 = operand1 - operand2
• SBB operand1, operand2 ~ operand1 = operand1 - operand2 - CF
• CMP operand1, operand2 ~ operand1 - operand2 (update flags only)
Conditional Flags changed (C, Z, S, O, P, A)
Operand1 and Operand2 may be:
Created By: M. El-Moughazy 12 |
Page
8086 Microprocessor [Notes] - Version 3.0

REG, memory
memory, REG
REG, REG
REG, immediate
memory, immediate
• INC operand1 ~ operand1 = operand1 + 1
• DEC operand1 ~ operand1 = operand1 – 1
Conditional Flags changed (Z, S, O, P, A)
Conditional Flags unchanged (C)
Operand1 may be:
REG
memory
• MUL operand1
(Unsigned Multiply)
If operand1 refer to 8-bit ~ AX = AL * operand1
If operand1 refer to 16-bit ~ (DXAX) = AX * operand1
Conditional Flags changed (C, O) CF=OF=0 if high section of result is zero.
Conditional Flags unchanged (Z, S, P, A)
Operand1 may be:
REG
memory
• DIV operand1
(Unsigned Divide)
If operand1 refer to 8-bit ~ AL = AX / operand1
AH = reminder
If operand1 refer to 16-bit ~ AX = (DXAX) / operand1
DX = reminder
Conditional Flags unchanged (C, Z, S, O, P, A)
Operand1 may be:
REG
memory

➢ Logical Instructions: (AND, OR, XOR, NOT)


• AND operand1, operand2 ~ operand1 = operand1 AND operand2
• OR operand1, operand2 ~ operand1 = operand1 OR operand2
• XOR operand1, operand2 ~ operand1 = operand1 XOR operand2
Conditional Flags changed (Z, S, P, A)

Created By: M. El-Moughazy 13 |


Page
8086 Microprocessor [Notes] - Version 3.0

Conditional Flags set to 0 (C, O)


Conditional Flags unchanged (A)
Operand1 and Operand2 may be:
REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
• NOT operand1 ~ operand1 = NOT operand1
Flags unchanged (C, Z, S, O, P, A)
Operand1 may be:
REG
Memory

➢ Execution Transfer Instructions: (JMP, CALL, RET, RETF)


• JMP operand1 ~ jump to label/address(operand1)
(Unconditional Jump)
Flags unchanged (C, Z, S, O, P, A)
Operand1 may be:
label
immediate 4-byte address segment:offset
(conditional Jump) JFlag/JCondition operand1
Flags unchanged (C, Z, S, O, P, A)
Operand1 may be only:
label
like: (JZ (jump if ZF=1), JNZ (jump if ZF=0)), (JS, JNS), (JC, JNC), (JA, JNA), (JO,
JNO), (JP (PF=1), JPE (even) (PF=1), JPO (odd) (PF=0) ), JNP (PF=0))
(JE, JNE), (JL, JNL), (JLE, JNLE), (JG, JNG), (JGE, JNGE)
• CALL operand1 ~ Push IP into stack then transfer to the called address
If it's a far call, then code segment is pushed to stack as well.
Operand1 may be:
label
immediate 4-byte address segment:offset
procedure name
• RET No operand ~ Pop IP from stack and use to return for caller
• RETF No operand ~ Pop IP&CS and use to return for caller (Return form far)
• IRET No operand ~ (Interrupt Return) Pop IP&CS&FR from stack

Created By: M. El-Moughazy 14 |


Page
8086 Microprocessor [Notes] - Version 3.0

➢ Iteration Instructions: (LOOP)


• LOOP operand1 ~ Decrease CX, jump to label if CX not zero
(Unconditional Loop)
Flags unchanged (C, Z, S, O, P, A)
Operand1 may be only:
Label

➢ I/O Port Transfer Instructions: (IN, OUT)


• IN operand1, operand2(Port Number)
~ Input from operand2(port) into operand1(AL/AX).
Flags unchanged (C, Z, S, O, P, A)
Operand1 and Operand2 may be:
AL, immediate 8-bit(byte)
AL, DX
AX, immediate 8-bit(byte)
AX, DX
• OUT operand1(Port Number), operand2
~ Output from operand2(AL/AX) into operand1(Port).
Flags unchanged (C, Z, S, O, P, A)
Operand1 and Operand2 may be:
immediate 8-bit(byte), AL
immediate 8-bit(byte), AX
DX, AL
DX, AX

➢ Shift Operations Instructions: (SAR, SAL, SHR, SHL)


• SAL operand1, operand2
• SHL operand1, operand2
~ shift arithmetic/logic operand1 left by number of shifts = operand2
Shift all bits left, the bit that goes off is set to CF
Zero bit is inserted to the right-most position
EX: 11100000b after 1 shift will be 11000000b, CF=1
• SAR operand1, operand2
~ shift logic operand1 right by number of shifts = operand2
Shift all bits right, the bit that goes off is set to CF
The Sign bit is inserted to the left-most position (has same value as
before shifting)
Created By: M. El-Moughazy 15 |
Page
8086 Microprocessor [Notes] - Version 3.0

EX: 11100000b after 1 shift will be 11110000b, CF=0


• SHR operand1, operand2
~ shift logic operand1 right by number of shifts = operand2
Shift all bits right, the bit that goes off is set to CF
Zero bit is inserted to the left-most position
EX: 11100000b after 1 shift will be 01110000b, CF=0
Flags changed (C, O), OF=0 if operand1 keeps its original sign.
Flags unchanged (Z, S, P, A)
Operand1 and Operand2 may be:
memory, immediate
REG, immediate
memory, CL
REG, CL

➢ Rotate Operations Instructions: (ROR, ROL, RCR, RCL)


• ROR operand1, operand2
~ Shift all bits right, the bit that goes off is set to CF
and the same bit is inserted to the left-most position
EX: 11100000b after 1 rotate will be 01110000b, CF=0
• ROL operand1, operand2
~ Shift all bits left, the bit that goes off is set to CF
and the same bit is inserted to the right-most position
EX: 11100000b after 1 rotate will be 11000001b, CF=1
• RCR operand1, operand2
~ Shift all bits right, the bit that goes off is set to CF
and the previous value of CF is inserted to the left-most position
EX: 11100000b, CF=1 after 1 rotate will be 11110000b, CF=0
• RCL operand1, operand2
~ Shift all bits left, the bit that goes off is set to CF
and the previous value of CF is inserted to the right-most position
EX: 11100000b, CF=1 after 1 rotate will be 11000001b, CF=1
Flags changed (C, O), OF=0 if operand1 keeps its original sign.
Flags unchanged (Z, S, P, A)
Operand1 and Operand2 may be:
memory, immediate
REG, immediate

Created By: M. El-Moughazy 16 |


Page
8086 Microprocessor [Notes] - Version 3.0

memory, CL
REG, CL
❖ General Assembly Instructions Notes: (Due to Dr. Maher Mansour)
• If an instruction that we know in 8086 needs two operands. It
may be given with only one operand and the other operand will
be Al or AX.
EX:
AND Al,05H ~ AND 05H
AND Ax,0506H ~ AND 0506H
• It’s preferred to write the immediate value of a port number like:
(immediate) instate of immediate
EX:
IN AL, (00H)
OUT (00H), AL

Created By: M. El-Moughazy 17 |


Page
8086 Microprocessor [Notes] - Version 3.0

Buffering
❖ Latch
Latch is an electronics component that works on coping the data form the
input at a certain moment and hold it on the output. Like: D-Flip Flop

LE Q
1 D
0 Q(t-1)

❖ Buffers
Buffer is an electronics component that works on coping the data form the
input and represent it on the output with isolation between I/P and O/P.

➢ Normal Buffer (Single Input)


has only one I/P as the data I/P without control Lines.

Non-Inverting Buffer Inverting Buffer


I/P O/P I/P O/P
0 0 1 0
1 1 0 1

Created By: M. El-Moughazy 18 |


Page
8086 Microprocessor [Notes] - Version 3.0

➢ Tri-State Buffer
has two inputs as a data input and a control input.
This control line controls the buffer to work on buffering the input data or to
make the O/P high impedance.

Active High Active Low


Control I/P Non- Inverting Non- Inverting
Line Inverting Buffer Inverting Buffer
Buffer Buffer
0 0 High High 0 1
Impedance Impedance
0 1 High High 1 0
Impedance Impedance
1 0 0 1 High High
Impedance Impedance
1 1 1 0 High High
Impedance Impedance

Created By: M. El-Moughazy 19 |


Page
8086 Microprocessor [Notes] - Version 3.0

➢ Bi-Directional Buffer
Using two Tri-State Buffers constructing one bi-directional buffer and
control the direction using a control line
Like Active High Non-Inverting Bi-directional Buffer:

DIR(AB/BA) OE
0 0 A&B High Impedance
0 1 A = B, (A  B)
1 0 A&B High Impedance
1 1 B = A, (B  A)
So, depending on the type of the two Tri-State buffers can construct:
Active High Non-Inverting Bi-directional Buffer
Active High Inverting Bi-directional Buffer
Active Low Non-Inverting Bi-directional Buffer
Active Low Inverting Bi-directional Buffer

Created By: M. El-Moughazy 20 |


Page
8086 Microprocessor [Notes] - Version 3.0

❖ Buses Buffering of 8086

▪ Latched Uni-Directional Buffer: the latch use to hold (save) last value and the
buffer to avoid short circuit on buses and to provide additional power to the
value transferred.
Has two pins:
- OE (O/P Enable): is active low allow the buffer to transfer the value else
its O/P will be high impedance.
- LE (Latch Enable): is active high allow the latch to get a new value to hold
it.
Created By: M. El-Moughazy 21 |
Page
8086 Microprocessor [Notes] - Version 3.0

▪ Bio-Directional Buffer: this buffer allows the value to transfer in two directions
using “DIR” pin to choose which direction will be active.
Has two pins:
- OE (O/P Enable): is active low allow the buffer to transfer the value else
its O/P will be high impedance.
- DIR (Direction): choose the direction for which the buffer works
according to its value.
▪ There is a time multiplexing between Data and Address buses (AD0 – AD15)
▪ DEN (Data Enable): is active low pin indicates that the multiplexing lines have
data at that moment.
▪ DT/R (Data Transmit/Receive): high value indicates that the data is
transmitting from the micro, low value indicates that the data is receiving to
the micro.
▪ ALE (Address Latch Enable): is active high indicates that the multiplexing lines
have address at that moment.
▪ BHE (Byte High Enable): is active low indicates that the higher byte of data
bus is used.
▪ A0 (Least Bit of Address Bus): is active low to indicates that the least byte
of data bus is used.
▪ IO (Input Out): is active low indicates that the Data bus is dealing with the IO
devices at that moment.
▪ RD (Read): is active low indicates the current operation is reading using data
bus.
▪ WR (Read): is active low indicates the current operation is writing using data
bus.
▪ Control Bus: (all are active low)
o MW: Memory write
o MR: Memory Read
o IOW: IO write
o IOR: IO read

Created By: M. El-Moughazy 22 |


Page
8086 Microprocessor [Notes] - Version 3.0

Memory Interface
❖ Memory Types
RAM ROM
Random Access Memory Random Only Memory
Volatile Non-Volatile
SRAM DRAM ROM PROM EPROM EEPROM UVEPROM
Static RAM Dynamic Programable Erasable Electrical Ultra-Violet
RAM ROM PROM EPROM EPROM
fabricated fabricated
using using
Latches Capacitors
Don’t need Need
Refreshment Refreshment
Circuit Circuit

❖ 8086 Memory Interface


Memory locations are actually 8-bits in width. So whenever 16-bit data is
accessed two consecutive 8-bit memory location. Using concept of Little-Endian
format.
The address space is physically connected to a 16-bit data bus by dividing the
address space into two 8-bit banks of up to 512K bytes.
o Even Bank: is connected to the lower half of the 16-bit data bus (D0 – D7)
and contains even address bytes. when A0 bit is low, the bank is selected.
o Odd Bank: is connected to the upper half of the 16-bit data bus (D8 – D15)
and contains odd address bytes. when BHE (Byte High Enable) is low, the
bank is selected.

Created By: M. El-Moughazy 23 |


Page
8086 Microprocessor [Notes] - Version 3.0

Data can be accessed from the memory in four different ways.


They are:
1. 8 - bit data from Lower (Even) address Bank.

2. 8 - bit data from Higher (Odd) address Bank.

3. 16 - bit data starting from Even Address.

Created By: M. El-Moughazy 24 |


Page
8086 Microprocessor [Notes] - Version 3.0

4. 16 - bit data starting from Odd Address.


Is accessed using two bus cycles.
During the first bus cycle the lower byte with the odd address is accessed.
(A0=1, BHE = 0)
During the second bus cycle the upper byte with the even address is
accessed. (A0 = 0, BHE = 1)

Full(Absolute) decoding VS Partial Decoding:


1. Full decoding: The decoding in which all available address line (20 lines)
are used for decoding to generate a unique address range.
2. Partial decoding: The decoding in which only minimum needed address
line are used for decoding to generate an addresses range. resulting
multiple addresses ranges refer to the same Locations range.

Created By: M. El-Moughazy 25 |


Page
8086 Microprocessor [Notes] - Version 3.0

I/O Interface
Like Memory, I/O ports are actually 8-bits in width. So whenever 16-bit port is
accessed two consecutive 8-bit ports are actually addressed. And divided into
Even and Odd banks.
❖ I/P Port

❖ O/P Port

❖ PPI
Refer to Peripheral Programmable Interface

Created By: M. El-Moughazy 26 |


Page
8086 Microprocessor [Notes] - Version 3.0

• Consist of 2 Groups: Group A (Port A + Port C Higher-nibble) and Group B


(Port B + Port C Lower-nibble)
• Consist of 3 Prots Programable as I/P or O/P Ports as dedicated by the
Configuration Word
• Has Configuration Word Register (CWR) that receive the CW to be
decoded with the PPI-Control Unit
• PPI-A0 and PPI-A1 two accessing selection lines
PPI-A1 PPI-A0 Access
0 0 Port A
0 1 Port B
1 0 Port C
1 1 CWR
Preferred to connect PPI-(A1, A0) to Address Bus-(A2, A1)
And connect PPI-(D7-D0) to Data Bus-(D7-D0) or Data Bus-(D15-D8) according to
the address (even or odd). [Can’t use Address Bus-(A0)]
• PPI Pregaming:
Send the control word to CWR.
1st mode of programing to configure ports
D7 D6 D5 D4 D3 D2 D1 D0
Mode Selection Port A Port C Mode Selection Port B Port C
of Group A 0→ Higher- of Group B 0→ Lower-
00 → Mode 0 Output nibble 0 → Mode 0 Output nibble
1 01 → Mode 1 1→ 0→ 1 → Mode 1 1→ 0→
1X → Mode 2 Input Output Input Output
1→ 1→
Input Input
Notes: (Due to Dr. Maher Mansour) [The Default Mode to Use
for Groups A & B is Mode 0]
2nd mode of programing (BSR) Bit Set Rest Mode
Used to set or rest the values of port C bits
D7 D6 D5 D4 D3 D2 D1 D0
0 X X X Used to Select the target bit 0 → Rest
1 → Set
Created By: M. El-Moughazy 27 |
Page
8086 Microprocessor [Notes] - Version 3.0

❖ Generating Port CS (Chip Select):


There are different ways to decode the address and control lines to generate
the Chip Select Line for an I/O Port. Like:
1. Using NAND Gate: [ Fixed Single Port Number]
2. Using Comparator: (Compare the Address Bus with a presented Port
Number) [ Changeable Sigle Port Number]
3. Using Decoder (DeMux): [may use to generate multiple chip select lines
for consecutive port numbers]

❖ Mapping

Isolated I/O [I/O Mapped I/O] Memory Mapped I/O


Use IN & OUT Instructions Use MOV Instruction
Use IOR & IOW Control Lines Use MR & MW Control Lines
Ports Addressing limited to 16-bit Ports Addressing can be 20-bit
(A15-A0) [and Address Bus-(A19- (A19-A0)
A16) forced to be zero’s]
64 K I/O Ports -
Port address can be the same Port address can’t be the same
address as a memory location address as a memory location
Memory addressing range doesn’t I/O addressing range is part from
affected by I/O addressing range Memory addressing range
Notes:

- If Port Address is larger than 16-bit. Memory mapped approach


must be used.
- Preferred to use Memory Full decoding approach, when using I/O
Memory Mapped I/O.

Created By: M. El-Moughazy 28 |


Page
8086 Microprocessor [Notes] - Version 3.0

Subroutines
A subroutine is a special program perform a specific task that can be
called for execution from any point in a program.

Proper Subroutine:

- Is only entered with a CALL and exited with an RTE


- Has a single Entry point.
- Has a single Exit point.

Elements of subroutine:

- Save Information to Stack if needed (PUSH, PUSHF)


- Body. Group of instructions perform the task.
- Restore Information from Stack if needed (POP, POPF)
- Return to Caller (RET, RETF)

Example:
; Main
MOV AL,05H
.
CALL XX
HLT
XX: PUSH AX
MOV AL, 04H
.
POP AX
RET

We can use nested subroutines but must be careful about going into
infinite loop of calls.

Created By: M. El-Moughazy 29 |


Page
8086 Microprocessor [Notes] - Version 3.0

Delay Time
Subroutines can be used to perform software delay function.

Instructions - Clock Numbers Table:


Instruction Number of Clocks
MOV REG, Immediate 4
LOOP Label 17/5
NOP 3
DEC REG 3
JNZ Label 16/4
JMP Label 15
CALL Label 19(near) OR 28(far)
RET 16(near) OR 26(far)
Delay Time = Total NO. of Clocks * Clock Cycle Time

Delay Time = Total NO. of Clocks * (1 / Rate)

Example:

; Main:
.
CALL DELAY ; 19 CLK
.
HLT

DELAY:
MOV CX, Immediate ; 4 CLK
LOOP0:
NOP ; 3 CLK
LOOP LOOP0 ; 17/5 CLK
RET ; 16 CLK

Delay Time = [19 + 4 + (3+17) * Immediate – (17-5) + 16] * (1 / Rate)

By neglecting the clocks of CALL & RET:

Created By: M. El-Moughazy 30 |


Page
8086 Microprocessor [Notes] - Version 3.0

Delay Time = [4 + (3+17) * Immediate – (17-5)] * (1 / Rate)

Created By: M. El-Moughazy 31 |


Page
8086 Microprocessor [Notes] - Version 3.0

Sheet 1 [8086]: 8086 MCU Architecture


1. Draw a block diagram for any microcomputer system containing a CPU, ROM,
RAM, an input port and an output port. (illustrate signal names and directions
on the diagram).
-

2. The 8086 CPU is a 16-bit Microprocessor, what does this mean?


- That means it has 16-bit Data Bus.

3. What is the relation between Number of address lines in the Address Bus and
Memory Space?
- Memory Space = (2^ Number of Address lines)

4. The 8086 CPU has 20-bit Address Bus, what is the maximum Memory capacity
that can be connected to the 8086 CPU?
- According to General laws:
(as we know that each memory location in 8086 is only 1 Byte)
Memory capacity = (2^Address Bus) * Memory Location Capacity
Memory capacity = (2^20) * 8 = 8 Mbit

5. How many address lines we need to address the whole range of the following
memories?
Created By: M. El-Moughazy 32 |
Page
8086 Microprocessor [Notes] - Version 3.0

a. 2 KB (KB: Kbytes).
- 2^ Number of Address lines = 2 * 1024 = 2^ 11
Number of Address lines = 11 line

b. 64 KB.
- 2^ Number of Address lines = 64 * 1024 = 2^ 16
Number of Address lines = 16 line

c. 1 MB.

- 2^ Number of Address lines = 1 * 1024 * 1024 = 2^ 20


Number of Address lines = 20 line

6. Explain briefly the function of the following registers:

a. IP.
- IP (Instruction Pointer register): point to the next instruction in a section
of memory defined as a code segment. That will be fetched to be executed
by the EU.

b. SP.

- SP (Stack Pointer register): point to the top of the stack.

c. FR.

- Flag Register (9 Flags): indicate the condition of the microprocessor and


control its operation.
Conditional Flags (C, Z, S, O, P, A): changes its status according to the result
of the last arithmetic or logical instruction executed.
Control Flags (I, T, D).

7. State names of the general-purpose registers available in the 8086 CPU.


- AX (AL, AH), BX (BL, BH), CX (CL, CH), DX (DL, DH), SI, DI, BP.

8. What are the Indexing Registers, and what are they used for?
- SI (Source Index register), DI (Destination Index register), BX (Base Index
register)

Created By: M. El-Moughazy 33 |


Page
8086 Microprocessor [Notes] - Version 3.0

Used for Addressing like:


Indexed Addressing Mode:
• [SI/DI + displacement 8-bit/16-bit] like [BX + 0082H]
Base-Indexed Addressing Mode:
• [BX/BP + SI/DI]
Base-Indexed with Displacement Addressing Mode:
• [BX/BP + SI/DI + displacement 8-bit/16-bit] like [BX + SI + 04H]

9. State functionality of the following flags:


Due to the result of the last arithmetic or logical instruction executed

a. CF (Carry Flag).
- CF = 0 if the result doesn’t send a carry
CF = 1 if the result sends a carry

b. PF (Parity Flag).
- PF = 0 if the result lowest 8-bit contains odd number of 1’s
PF = 1 if the result lowest 8-bit contains even number of 1’s

c. ZF (Zero Flag).
- ZF = 0 if the result doesn’t = 0
ZF = 1 if the result = 0

d. SF (Sign Flag).
- SF = 0 if the result is (+)
SF = 1 if the result is (-)

e. OF (Overflow Flag).

- OF = 0 if the system capacity doesn’t be exceeded


OF = 1 if the system capacity is exceeded

10. State names of the Segmentation Registers available in the 8086 CPU.
- CS (Code Segment), DS (Data Segment), SS (Stack Segment), ES (Extra Segment)

11. Find the actual memory addresses of the instructions having the following
CS:IP combinations:

a. CS = 1000H, IP = 2000H.
Created By: M. El-Moughazy 34 |
Page
8086 Microprocessor [Notes] - Version 3.0

- 10000H + 2000H = 12000H

b. CS = 1A00H, IP = B000H.

- 1A000H + B000H = 25000H

12. Find the actual memory addresses for these register values, Given that, CS =
0200H, DS = 1544H, SS = 5000H:

a. IP = 2350H.
- CS:IP → 0200H:2350H → 02000H + 2350H = 04350H
b. BX = 1300H.
- DS:BX → 1544H: 1300H → 15440H + 1300H = 16740H
c. SP = FFF0H.
- SS:SP → 5000H: FFF0H → 50000H + FFF0H = 5FFF0H

Created By: M. El-Moughazy 35 |


Page
8086 Microprocessor [Notes] - Version 3.0

Sheet 2 [8086]: Assembly Language


1. Write an 8086 assembly program to save the HEX numbers 01H, 02H, 03H,
04H, and 05H to memory locations 7101H, 7102H, 7103H, 7104H, and 7105H
respectively.
- ; THIS SOLUTION ~ N.3-B SOLUTION (SEE ALSO NO.3-A AND -C )
MOV CX,05H
MOV BX,7105H
L:
MOV [BX], CL
DEC BX
LOOP L
RET

2. Write an 8086 assembly program to add the value 05H to the contents of each
of the registers BL, CL, DL. Assuming BL=11H, CL=22H, DL=33H.
- MOV BL,11H
MOV CL,22H
MOV DL,33H
ADD BL,05H
ADD CL,05H
ADD DL,05H
RET

3. Repeat question 1 for memory locations 0100H, 0101H, and 0102H

a. Using direct addressing.


- MOV [0100H],00H
MOV [0101H],01H
MOV [0102H],02H
RET

b. Using indirect addressing.


- MOV CX,0002H
MOV BX,0102H
L:

Created By: M. El-Moughazy 36 |


Page
8086 Microprocessor [Notes] - Version 3.0

MOV [BX],CL
DEC BX
DEC CL
JGE L
RET

c. Using relative addressing.


- MOV BX,0002H
L:
MOV [BX+0100H],BL
DEC BX
JGE L
RET

4. Write an 8086 assembly program to add the two numbers 23F9H and 9A35H,
and save the result at memory locations 7100H, 7101H, and 7102H.
- MOV AX,23F9H
ADD AX,9A35H
MOV [7100H], AX; SAVING THE MAIN VALUE 16-BIT IN 7100H&7101H
MOV AX,0000H
ADC AX,0000H
MOV [7102H], AL; SAVING CARRY BECAUSE WE HAVE ONE EXTRE MEMORY “7102H”
RET

5. Write an 8086 assembly program to add the two numbers F3A56BH and
78B6A9H, and save the result at memory locations 7100H, 7101H, 7102H, and
7103H. *
- MOV AX, 0A56BH; SPLIT THE 24-BIT NUMBER ON TO (BLAX)
MOV BL,0F3H
ADD AX,0B6A9H
ADC BL,78H
MOV [7100H], AX; SAVING THE FIRST 16-BIT OF THE ANSWER TO 7100H&7101H
MOV [7102H], BL; SAVING THE NEXT 8-BIT OF THE ANSWER TO 7102H
MOV BL,00H
ADC BL,00H
MOV [7103H],BL ; SAVING CARRY BECAUSE WE HAVE ONE EXTRE MEMORY “7103H”
RET

6. Write an 8086 assembly program to calculate the summation of the contents


of each memory location from 7101H to 7105H, with its corresponding contents

Created By: M. El-Moughazy 37 |


Page
8086 Microprocessor [Notes] - Version 3.0

in memory locations 710AH to 710EH, then save the results in memory locations
7110H to 7114H, respectively. *
- MOV BX,0004H
L:
MOV AL,[BX+7101H]
ADD AL,[BX+710AH]
MOV [BX+7110H],AL
DEC BX
JGE L
RET

7. Write an 8086 assembly program to contentiously read content of memory


location 7100H, and check its content: - if it is zero, put 1 in register BL. - if it is
negative, put 2 in register BL. - if it is positive, put 4 in register BL.
- L:
MOV AL,[7100H]
CMP AL,00H
JZ LZERO
JS LNEGATIVE
MOV BL,04H ; IT’S POSITIVE
JMP L
RET
LZERO:
MOV BL,01H
JMP L
LNEGATIVE:
MOV BL,02H
JMP L
RET

8. Write an 8086 assembly program to perform a cyclic displacement on the


contents of registers AL, BL, and CL.
- MOV DL,CL
MOV CL,BL
MOV BL,AL
MOV AL,DL
RET

9. Repeat question 8 with the contents of memory locations FE50H to FE52H

Created By: M. El-Moughazy 38 |


Page
8086 Microprocessor [Notes] - Version 3.0

a. Using direct addressing.


- MOV AL,[0FE52H]
MOV AH,[0FE51H]
MOV [0FE52H],AH
MOV AH,[0FE50H]
MOV [0FE51H],AH
MOV [0FE50H],AL
RET

b. Using indirect addressing.


- MOV BX,0FE52H
MOV AL,[BX] ; BX = 0FE52H
L: ; FIRST LOOP ; SECOND LOOP
DEC BX
MOV AH,[BX] ; BX = 0FE51H ; BX = 0FE50H
INC BX
MOV [BX],AH ; BX = 0FE52H ; BX = 0FE51H
DEC BX ; BX = 0FE51H ; BX = 0FE50H
CMP BX,0FE50H ; LOOP ; OUT
JG L
MOV [BX],AL ; BX = 0FE50H
RET

c. Using relative addressing.


- MOV BX,0FE50H
MOV AL,[BX]
L:
MOV AH,[BX+01H] ;
MOV [BX],AH
INC BX
CMP BX,0FE52H
JL L
MOV [BX],AL
RET

d. Which addressing mode fits best? Why?

Created By: M. El-Moughazy 39 |


Page
8086 Microprocessor [Notes] - Version 3.0

- relative addressing special in the case of many locations because it has


less number of instruction

10. Write an 8086 assembly program to multiply the contents of register BL by


the contents of register BH, and save the result in AL. Don’t use the “MUL”
instruction.
- MOV AL,00H
CMP BH,00H
JG L
RET
L:
ADD AL,BL
DEC BH
JG L
RET

11. Draw a flowchart and write an 8086 assembly program to divide the contents
of register BL by the contents of register BH, save the result in AL, and the
remainder in AH. Don’t use the “DIV” instruction. (Assume that BL > BH, BH≠ 0)
- ;IF YOU NEED TO UNDERSTAND THE CONSEPT SEE :
; [Link]
; Assume that BL > BH, BH != 0
MOV AL,00H ; INTIAL RESULT = 0
MOV AH,BL ; INITIAL REMINDER = ALL THE BIG NUMBER
L:
SUB AH,BH
INC AL
CMP AH,BH ; IF THE REMINTER STILL CONTAIN VALUE MOR THAN THE LOW NUMBER
JGE L
RET

12. Write an 8086 assembly program to calculate the factorial of an integer in the
accumulator, assuming that the result can reside in one byte register. Send the
result to register BX.
- MOV CX,AX
MOV AX,01H
L:
MUL CL
LOOP L
MOV BX,AX
RET
Created By: M. El-Moughazy 40 |
Page
8086 Microprocessor [Notes] - Version 3.0

13. Within the address range 1900H 191FH. Determine the content of BL, BH,
and DL registers in which: BL = Number of Positive values. BH = Number of
Negative values. DL = Number of Zero values.
- MOV BL, 00H ; INITIALIZE THE COUNTER
MOV BH, 00H ; INITIALIZE THE COUNTER
MOV DL, 00H ; INITIALIZE THE COUNTER
MOV SI,191FH
L:
CMP [SI],00H
JZ LZERO
JS LNEGATIVE
INC BL ; IT’S POSITIVE
LX:
DEC SI
CMP SI,1900H
JGE L
RET
LZERO:
INC DL
JMP LX
LNEGATIVE:
INC BH
JMP LX
RET

14. Write an 8086 assembly program to always check the content of the input
port 35H. If the content is positive, put it in memory location 7200H. While if
negative, put it on output port 03H.
- L:
IN AL,(35H)
CMP AL,00H
JG LPOSITIVE
JS LNEGATIVE
JMP L
RET
Created By: M. El-Moughazy 41 |
Page
8086 Microprocessor [Notes] - Version 3.0

LPOSITIVE:
MOV [7200H],AL
JMP L
LNEGATIVE:
OUT )03H(,AL
JMP L
RET

15. On a production line system of one factory the products are conveyed using
moving belts. At the end of the belt, product packaging takes place. Each package
contains 12 products. There is a photo cell near the end of the belt (connected to
bit7 of port 55H) that generates a positive logic signal when a product passes in
front of it. Write an 8086 assembly program to control the belt-motor (bit 0 of
port 00H) so as to stop it when product count reaches 12 to allow for the packing
process. When packaging is completed a worker may restart the belt-motor
manually through a switch (connected to bit1 of port 00H).
- ; FIRST SOLUTIOUN (LIKE THE IDEA OF N.16-FIRST SOLUTION)
; USE (BL) TO STORE THE LAST READ OF I/P SENSOR
; USE (CL) AS OUR COUNTER
START:
MOV AL,01H
OUT )00H(,AL ; RUN THE BELT-MOTOR
MOV CL,00H
MOV BL,00H
L:
IN AL,(55H)
AND AL,80H
ROL AL,01H ; ROTATE TO AVOID THE OVERFLOW IN CALCULATION (signed numbers)
CMP AL,BL
MOV BL,AL
JNL L ; THE LAST ARITMATIC OPERATION WAS “CMP”
INC CL
CMP CL,0CH
JL L
MOV AL,00H
OUT (00H),AL
LSWITCH:
IN AL,(00H)
AND AL,02H
CMP AL,00H

Created By: M. El-Moughazy 42 |


Page
8086 Microprocessor [Notes] - Version 3.0

JZ LSWITCH
JMP START
RET
- ; SECOND SOLUTIOUN
; USE (CL) AS OUR COUNTER
START:
MOV AL,01H
OUT (00H),AL ; RUN THE BELT-MOTOR
MOV CL,00H
L:
IN AL,(55H)
SHL AL,01H
JNC L
STILLINPULSE:
IN AL,(55H)
SHL AL,01H
JC STILLINPULSE
INC CL
CMP CL,0CH
JL L
MOV AL,00H
OUT (00H),AL ; STOP THE BELT-MOTOR
LSWITCH:
IN AL,(00H)
AND AL,02H
CMP AL,00H
JZ LSWITCH
JMP START
RET

16. In mid-town there is a garage that can hold a maximum capacity of 200 cars.
There are two photo-cells, one at the entrance and the other at the exit point,
each of which generates a positive pulse signal when a car passes in-front of it.
Write an 8086 assembly program to control one big red light to show the driver
whether there is an empty place for his car, or the garage is full. Assuming that: -
Entrance photo-cell is connected to bit0 of input port 00H. - Exit photo-cell is
connected to bit1 of input port 00H. - The Red (Full) Light is connected to bit0 of
output port 00H.
- ; USE (CL) AS OUR COUNTER
; USE (BL) AND (BH) TO STORE THE CURRENT READ OF I/P SENSORS
; USE (DL) AND (DH) TO STORE THE LAST READ OF I/P SENSORS
;(AT THE PULSE END "CURRENT READ < LAST READ" )
Created By: M. El-Moughazy 43 |
Page
8086 Microprocessor [Notes] - Version 3.0

MOV CL,00H
MOV BX,00H
MOV DX,00H
MOV AL,00H
OUT (00H),AL
L:
MOV DL,BL
MOV DH,BH
IN AL,(00H)
MOV BL,AL
AND BL,01H
MOV BH,AL
AND BH,02H
CMP BL,DL
JL LENTRANCE
LENTRANCERET:
CMP BH,DH
JL LEXIT
JMP L
RET
LENTRANCE:
INC CL
CMP CL,0C8H
JZ LFULL
JMP LENTRANCERET
LFULL:
MOV AL,01H
OUT (00H),AL
JMP LENTRANCERET
LEXIT:
DEC CL
MOV AL,00H
OUT (00H),AL
JMP L
RET
- ;THE SECOND SOLUTION
; USE (CL) AS OUR COUNTER
; USE (BL) TO STORE THE LAST READ STATE OF I/P SENSORS
; LAST --> CURRENT
; 00 --> ** 0 --> * ~ ------
; 01 --> 00 1 --> 0 ~ IN
; 01 --> 10 1 --> 2 ~ IN
; 01 --> 11 1 --> 3 ~ ------

Created By: M. El-Moughazy 44 |


Page
8086 Microprocessor [Notes] - Version 3.0

; 10 --> 00 2 --> 0 ~ OUT


; 10 --> 01 2 --> 1 ~ OUT
; 10 --> 11 2 --> 3 ~ ------
; 11 --> 00 3 --> 0 ~ IN+OUT (CAN TAKE NO ACTION)
; 11 --> 01 3 --> 1 ~ OUT
; 11 --> 10 3 --> 2 ~ IN
; SO:
; 1 --> 0 ~ IN
; 2 --> 0 ~ OUT
; 2 --> 1 ~ OUT
; 1 --> 2 ~ IN
; 3 --> 2 ~ IN
MOV CL,00H
MOV BL,00H
MOV AL,00H
OUT (00H),AL
L:
MOV BL,AL
IN AL,(00H)
AND AL,03H
CMP AL,00H ; IF CURRENT STATE IS 0
JZ LX0
CMP AL,01H ; IF CURRENT STATE IS 1
JZ LX1
CMP AL,02H ; IF CURRENT STATE IS 2
JNZ L
CMP BL,01H ; IF 1 --> 2
JZ LENTRANCE
CMP BL,03H ; IF 3 --> 2
JZ LENTRANCE
JMP L
LX1:
CMP BL,02H ; IF 2 --> 1
JZ LEXIT
JMP L
LX0:
CMP BL,01H ; IF 1 --> 0
JZ LENTRANCE
CMP BL,02H ; IF 2 --> 0
JZ LEXIT
JMP L
RET
LENTRANCE:

Created By: M. El-Moughazy 45 |


Page
8086 Microprocessor [Notes] - Version 3.0

INC CL
CMP CL,0C8H
JZ LFULL
JMP L
LFULL:
MOV AL,01H
OUT (00H),AL
JMP L
LEXIT:
DEC CL
MOV AL,00H
OUT (00H),AL
JMP L
RET

17. Draw the schematic diagram and write an 8086 assembly program to
continuously read 8 input switches and control 8 output LEDs. So that if a switch
is LOW, then its corresponding LED is OFF, and if the switch is HIGH, then its
corresponding LED is ON, and so on. The 8 switches are on input port 00H The 8
LEDs are on output port 05H
- L:
IN AL,(00H)
OUT (05H),AL
JMP L
RET

Created By: M. El-Moughazy 46 |


Page
8086 Microprocessor [Notes] - Version 3.0

Task [8086]
1. In the range 1900H to 1A00H, Find the Max. & Min. Numbers and their
address. Store Min. value at AL and its address at SI, Max. value at AH and its
address at DI.
- MOV BX,1900H
MOV SI,1900H
MOV DI,1900H
MOV AL, [SI]
MOV AH, [DI]
L:
INC BX
CMP [BX], AL
JL MINFOUND
MINFOUNDRET:
CMP [BX], AH
JG MAXFOUND
MAXFOUNDRET:
CMP BX,1A00H
JL L
RET
MINFOUND:
MOV AL, [BX]
MOV SI, BX
JMP MINFOUNDRET
MAXFOUND:
MOV AH, [BX]
MOV DI, BX
JMP L MAXFOUNDRET
RET

Created By: M. El-Moughazy 47 |


Page
8086 Microprocessor [Notes] - Version 3.0

1st Term Midterm 2017/2018


1.
a) Compare between general-purpose and special-purpose registers in a
microprocessor.
- General-Purpose(Multipurpose) Registers:
Include AX, BX, CX, DX, BP, DI, and SI.
These registers hold various data sizes (bytes or words) and are used for
almost any purpose, as dictated by a program.
- Special-Purpose Registers:
Include IP, SP, and FLAGS, and the segment registers include CS, DS, SS, and
ES.
These registers are used for a certain purpose only.

b) What is the function of each of the following:


- IP.
- IP (Instruction Pointer register): point to the next instruction in a section of
memory defined as a code segment. That will be fetched to be executed by
the EU.
- SS.
- SS (Stack Segment): for memory locations that related to the stack. Works
with [SP, BP].
- DI.
- DI (Destination Index register)
Used for Addressing like:
Indexed Addressing Mode:
o [SI/DI + displacement 8-bit/16-bit] like [BX + 0082H]
Base-Indexed Addressing Mode:
o [BX/BP + SI/DI]
Base-Indexed with Displacement Addressing Mode:
o [BX/BP + SI/DI + displacement 8-bit/16-bit] like [BX + SI + 04H]
c) Explain:
I. The function of BIU.
- Bus Interface Unit (BIU): It takes care of all data and address transfers on
the buses for EU like: writing/reading data, fetching instructions and
sending address. Contains Instructions Queue(Cache), IP, CS, DS, SS, and ES.

Created By: M. El-Moughazy 48 |


Page
8086 Microprocessor [Notes] - Version 3.0

II. The MUL instruction.


- it’s an Arithmetic Instructions for Unsigned Multiply
MUL operand1
If operand1 refer to 8-bit ~ AX = AL * operand1
If operand1 refer to 16-bit ~ (DXAX) = AX * operand1
Conditional Flags changed (C, O) CF=OF=0 if high section of result is zero.
Conditional Flags unchanged (Z, S, P, A)
Operand1 may be:
REG
memory

2.
a. Write an assembly program:
I. To always invert the most two bits in the input port 25H.
- L:
IN AL,(25H)
XOR AL,11000000B
JMP L
RET
II. To put the maximum value of the data stored in memory locations
A2BC to A3AE in the output port 37H.
- MOV BX,0A2BCH
MOV AL,[BX]
L:
INC BX
CMP AL,[BX]
JL MAXFOUND
MAXFOUNDRET:
CMP BX,0A3AEH
JL L
OUT (37H),AL
RET
MAXFOUND:
MOV AL,[BX]
JMP MAXFOUNDRET
RET

Created By: M. El-Moughazy 49 |


Page
8086 Microprocessor [Notes] - Version 3.0

b. Determine the task of the following program:


XX: IN AL,(0F5H)
MOV BH,AL
AND 02H ~ AND AL,02H
JZ YY
MOV AL,BH
MOV [B102H],AL
JMP XX
YY: MOV AL,BH
OUT (0C3H),AL
JMP XX
- To always check the D1 (bit-1) in the read of the input port F5H, if it is 0
send the read of the port to the output port C3H, else save the read of the
port to the memory location B102.

Created By: M. El-Moughazy 50 |


Page
8086 Microprocessor [Notes] - Version 3.0

Sheet 3: Microprocessor Buffering


1. What is meant by buffering?
- Buffering means passing an input through to output with providing
additional power to the value transferred allows a signal to drive more
inputs than it would by itself.
2. When do we need to apply buffering to microprocessor lines?
- To avoid short circuit on buses (Data and Address) [To isolate address and data buses
from each other]and to provide additional power to the value transferred.
3. The input ports are built using tri-state buffers, why?
- To avoid short circuit on Data Bus with the outside environment and
control passing the values to data bus only when the port been accessed.
4. Discuss the types of tri-state buffers.
- Active High Tri-State Buffer
Active High Inverting Tri-State Buffer
Active Low Tri-State Buffer
Active Low Inverting Tri-State Buffer
5. Explain with sketching how address bus along with tri-state buffers are used
to prevent data collision on the data bus

6. Draw a logic circuit to get the Microprocessor 4 control lines (MEMR,


MEMW, IO𝑅 and IOW) out from the Intel 8086 CPU output lines (M/IO, RD
and WR).

Created By: M. El-Moughazy 51 |


Page
8086 Microprocessor [Notes] - Version 3.0

7. Draw a complete block diagram to show how the Intel 8086 CPU buffering is
done to prepare its buses for interfacing.

Created By: M. El-Moughazy 52 |


Page
8086 Microprocessor [Notes] - Version 3.0

8. Fill each empty field in the following table with the number of times the
corresponding control line in its column is asserted (activated) during
execution cycle.
Control Line MEMR MEMW IOR IOW BHE
Instruction
MOV AL, 89H 1 1 1 1 1
MOV [0E100H], AL 1 0 1 1 1
MOV AX, [E100H] 0 1 1 1 0
IN AL, (00H) 1 1 0 1 1
OUT (00H), AL 1 1 1 0 1

9. What is meant by time multiplexing between data and address buses in the
intel 8086 microprocessor? And why?
- There are 16 shared lines between Data and Address buses (AD0:AD15)
using time multiplexing and controlled by (ALE and DEN) to indicate the
lines carry data or address.
- To Minimize the number of pins and chip area.
10. What is the control line that the intel 8086 microprocessor provides to
isolate address and data buses from each other? Draw a block diagram to
show how this control line is used for this purpose.
- Address Latch Enable (ALE): Active High,
Data Enable (DEN): Active Low.
Diagram included in Question No.7 Answer

Created By: M. El-Moughazy 53 |


Page
8086 Microprocessor [Notes] - Version 3.0

Sheet 4: Memory Interfacing with the Intel 8086 CPU


1. Show how to connect 4 KB EEPROM Memory on 2 chips to the Intel 8086
CPU.
- Solution using Memory Partial Decoding Approach
2 Chips (1 Even and 1 Odd)
4 KB = 212 B → Total Used Address Lines = 12 Line (A11-A0)
4 KB / 2 = 2 KB = 211 B → 11 Address Lines (A1:A11) for each chip
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address (HEX)
4 KB X X 0 0 0 XX000
EEPROM X X F F F XXFFF

2. Show how to connect 64 KB EEPROM to the Intel 8086 CPU using memory
chips of 2 KB.
- Solution using Memory Partial Decoding Approach
64 KB / 2 KB = 32 Chips (16 Even and 16 Odd)
64 KB = 216 B → Total Used Address Lines = 16 Line (A15-A0)
2 KB = 211 B → 11 Address Lines (A1:A11) for each chip
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address (HEX)
X 0 0 0 0 X0000

Created By: M. El-Moughazy 54 |


Page
8086 Microprocessor [Notes] - Version 3.0

64 KB X F F F F XFFFF
EEPROM

3. Show how to connect 128 KB EEPROM to the Intel 8086 CPU using memory
chips of 4 KB. - Solution using Memory Partial Decoding Approach

Created By: M. El-Moughazy 55 |


Page
8086 Microprocessor [Notes] - Version 3.0

- 128 KB / 4 KB = 32 Chips (16 Even and 16 Odd)


128 KB = 217 B → Total Used Address Lines = 17 Line (A16-A0)
4 KB = 212 B → 12 Address Lines (A1:A12) for each chip
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address (BIN)
128 KB (XXX0) bin 0 0 0 0 XXX00000000000000000
EEPROM (XXX1) bin F F F F XXX11111111111111111

Created By: M. El-Moughazy 56 |


Page
8086 Microprocessor [Notes] - Version 3.0

4. Show how to connect 256 KB memory to the intel 8086 CPU by using
memory chips of 2 KB and 4 blocks.
- Solution using Memory Partial Decoding Approach
Block Size = 256 KB/4 Blocks = 64 KB/Block

Created By: M. El-Moughazy 57 |


Page
8086 Microprocessor [Notes] - Version 3.0

256 KB = 218 B → Total Used Address Lines = 18 Line (A17-A0)


64 KB = 216 B → 16 Address Lines (A0:A15) for each block
2 KB = 211 B → 11 Address Lines (A1:A11) for each chip
IN Each Block 64 KB/2 KB = 32 Chips → (16 Even and 16 Odd)
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address (BIN)
1st (XX00) bin 0 0 0 0 XX000000000000000000
Block (XX00) bin F F F F XX001111111111111111
2nd (XX01) bin 0 0 0 0 XX010000000000000000
Block (XX01) bin F F F F XX011111111111111111
3rd (XX10) bin 0 0 0 0 XX100000000000000000
Block (XX10) bin F F F F XX101111111111111111
4th (XX11) bin 0 0 0 0 XX110000000000000000
Block (XX11) bin F F F F XX111111111111111111

Created By: M. El-Moughazy 58 |


Page
8086 Microprocessor [Notes] - Version 3.0

5. Show how to connect 16 KB EEPROM and 16 KB RAM to the intel 8086 CPU,
using 8KB EEPROM chips and 8KB RAM chips. And draw the corresponding
memory map. - Solution using Memory Partial Decoding Approach
- 16 KB/8 KB = 2 Chips (1 Even and 1 Odd)
8 KB = 213 B → 13 Address Lines (A1:A13) for each chip
(16 KB + 16 KB) = 215 B → Total Used Address Lines = 15 Line (A14-A0)
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address (BIN)
X (X000) bin 0 0 0 XXXXX000000000000000

Created By: M. El-Moughazy 59 |


Page
8086 Microprocessor [Notes] - Version 3.0

16 KB X (X011) bin F F F XXXXX011111111111111


EEPROM
16 KB X (X100) bin 0 0 0 XXXXX100000000000000
RAM X (X111) bin F F F XXXXX111111111111111

Created By: M. El-Moughazy 60 |


Page
8086 Microprocessor [Notes] - Version 3.0

6. Show how to connect 16 KB EEPROM and 4 KB RAM to the intel 8086 CPU,
using 8KB EEPROM chips and 2KB RAM chips. And draw the corresponding
memory map.
- Solution using Memory Partial Decoding Approach
EEPROM:
16 KB/8 KB = 2 Chips (1 Even and 1 Odd)
8 KB = 213 B → 13 Address Lines (A1:A13) for each chip
RAM:
4 KB/2 KB = 2 Chips (1 Even and 1 Odd)
2 KB = 211 B → 11 Address Lines (A1:A11) for each chip
USE A14 to separate between EEPROM and RAM
(16 KB + 4KB) <= 215 B → Total Used Address Lines = 15 Line (A14-A0)
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address (BIN)
16 KB X (X000) bin 0 0 0 XXXXX000000000000000
EEPROM X (X011) bin F F F XXXXX011111111111111
4 KB X (X100) bin 0 0 0 XXXXX100000000000000
RAM X (X100) bin F F F XXXXX100111111111111

Created By: M. El-Moughazy 61 |


Page
8086 Microprocessor [Notes] - Version 3.0

Created By: M. El-Moughazy 62 |


Page
8086 Microprocessor [Notes] - Version 3.0

Sheet 5: I/O Interfacing with the Intel 8086 CPU


1. Show how to connect the intel 8086 CPU with the following:
a. 2KB EEPROM.
b. I/P port (00H).
c. O/P port (05H).
- Solution using Memory Partial Decoding Approach
2 KB EEPROM (1 KB Even and 1 KB Odd)
2 KB = 211 B → Total Used Address Lines = 11 Line (A10-A0)
1 KB = 210 B → 10 Address Lines (A1:A10) for each chip

Created By: M. El-Moughazy 63 |


Page
8086 Microprocessor [Notes] - Version 3.0

Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address (BIN)


2 KB X X (X000) bin 0 0 XXXXXXXXX00000000000
EEPROM X X (X111) bin F F XXXXXXXXX11111111111

2. Show how to connect the intel 8086 CPU with the following:
a. 2KB EEPROM.
b. 2KB RAM.
c. I/P port (F3H).
d. I/P port (E6H).
Created By: M. El-Moughazy 64 |
Page
8086 Microprocessor [Notes] - Version 3.0

- Solution using Memory Partial Decoding Approach


2 KB EPPROM (1 KB Even and 1 KB Odd)
2 KB RAM (1 KB Even and 1 KB Odd)
1 KB = 210 B → 10 Address Lines (A1:A10) for each chip
(2 KB + 2 KB) = 212 B → Total Used Address Lines = 12 Line (A11-A0)
I/P Port (F3H) → (11110011) BIN
O/P Port (E6H) → (11100110) BIN
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address
(HEX)
2 KB X X (0000) bin 0 0 XX000
EEPROM X X (0111) bin F F XX7FF
2 KB X X (1000) bin 0 0 XX800
RAM X X (1111) bin F F XXFFF

Created By: M. El-Moughazy 65 |


Page
8086 Microprocessor [Notes] - Version 3.0

Created By: M. El-Moughazy 66 |


Page
8086 Microprocessor [Notes] - Version 3.0

3. Show how to connect the intel 8086 CPU with the following:
a. 4KB EEPROM.
b. 4KB RAM.
c. I/P port (A327H), using I/O mapped approach.
d. O/P port (05H).
- Solution using Memory Partial Decoding Approach
4 KB EPPROM (2 KB Even and 2 KB Odd)
4 KB RAM (2 KB Even and 2 KB Odd)
2 KB = 211 B → 11 Address Lines (A1:A11) for each chip
(4 KB + 4 KB) = 213 B → Total Used Address Lines = 13 Line (A12-A0)
I/P Port (A327H) → (1010001100100111) BIN
O/P Port (05H) → (0101) BIN
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address (BIN)
4 KB X (XXX0) bin 0 0 0 XXXXXXX0000000000000
EEPROM X (XXX0) bin F F F XXXXXXX0111111111111
4 KB X (XXX1) bin 0 0 0 XXXXXXX1000000000000
RAM X (XXX1) bin F F F XXXXXXX1111111111111

Created By: M. El-Moughazy 67 |


Page
8086 Microprocessor [Notes] - Version 3.0

Created By: M. El-Moughazy 68 |


Page
8086 Microprocessor [Notes] - Version 3.0

4. Show how to connect the intel 8086 CPU with the following:
a. 4KB EEPROM.
b. 2KB RAM.
c. I/P port (1222H), using memory mapped approach.
d. O/P port (1223H), using memory mapped approach.
- 1st Solution using Memory Partial Decoding Approach
EEPROM:
4 KB (2 KB Even and 2KB Odd)
2 KB = 211 B → 11 Address Lines (A1:A11) for each chip
RAM:
2 KB (1 KB Even and 1 KB Odd)
1 KB = 210 B → 10 Address Lines (A1:A10) for each chip
USE A12 to separate between EEPROM and RAM
(4 KB + 2 KB) <= 213 B → Total Used Address Lines = 13 Line (A12-A0)
I/P Port (1222H) → (0001 0010 0010 0010) BIN
O/P Port (1223H) → (0001001000100011) BIN
USE A13 to separate between Memory and I/O Ports
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address (BIN)
4 KB X (XX10) bin 0 0 0 XXXXXX10000000000000
EEPROM X (XX10) bin F F F XXXXXX10111111111111
2 KB X (XX11) bin 0 0 0 XXXXXX11000000000000
RAM X (XX11) bin F F F XXXXXX11111111111111

Created By: M. El-Moughazy 69 |


Page
8086 Microprocessor [Notes] - Version 3.0

Created By: M. El-Moughazy 70 |


Page
8086 Microprocessor [Notes] - Version 3.0

- 2nd Solution using Memory Full Decoding Approach


EEPROM:
4 KB (2 KB Even and 2KB Odd)
2 KB = 211 B → 11 Address Lines (A1:A11) for each chip
RAM:
2 KB (1 KB Even and 1 KB Odd)
1 KB = 210 B → 10 Address Lines (A1:A10) for each chip
USE A12 to separate between EEPROM and RAM
(4 KB + 2 KB) <= 213 B → Total Used Address Lines = 13 Line (A12-A0)
I/P Port (1222H) → (0001 0010 0010 0010) BIN
O/P Port (1223H) → (0001001000100011) BIN
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address (HEX)
4 KB 0 (0000) bin 0 0 0 00000
EEPROM 0 (0000) bin F F F 00FFF
2 KB 0 (0001) bin 0 0 0 01000
RAM 0 (0001) bin F F F 01FFF

Created By: M. El-Moughazy 71 |


Page
8086 Microprocessor [Notes] - Version 3.0

Created By: M. El-Moughazy 72 |


Page
8086 Microprocessor [Notes] - Version 3.0

5. Show how to connect the intel 8086 CPU with the following:
a. 4KB EEPROM.
b. 4KB RAM.
c. PPI chip at base addresses 30H.
- Solution using Memory Partial Decoding Approach
4 KB EEPROM (2 KB Even and 2 KB Odd)
4 KB RAM (2 KB Even and 2 KB Odd)
2 KB = 211 B → 11 Address Lines (A1:A11) for each chip
USE A12 to separate between EEPROM and RAM
(4 KB + 4 KB) = 213 B → Total Used Address Lines = 13 Line (A12-A0)
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address (BIN)
4 KB X (XXX0) bin 0 0 0 XXXXXXX0000000000000
EEPROM X (XXX0) bin F F F XXXXXXX0111111111111
4 KB X (XXX1) bin 0 0 0 XXXXXXX1000000000000
RAM X (XXX1) bin F F F XXXXXXX1111111111111

PPI:
Base Address (30H) → (00110000) BIN
PPI-A1 → A2 PPI-A0 → A1 Address (Hex)
Port A 0 0 30
Port B 0 1 32
Port C 1 0 34
CWR 1 1 36

Created By: M. El-Moughazy 73 |


Page
8086 Microprocessor [Notes] - Version 3.0

Created By: M. El-Moughazy 74 |


Page
8086 Microprocessor [Notes] - Version 3.0

6. Show how to connect the intel 8086 CPU with the following:
a. 4KB EEPROM.
b. 4KB RAM.
c. Two PPI chips:
i. One PPI at base addresses 50H
ii. One PPI and base address 2100H, using memory mapped approach.
st
- 1 Solution using Memory Partial Decoding Approach
4 KB EEPROM (2 KB Even and 2 KB Odd)
4 KB RAM (2 KB Even and 2 KB Odd)
2 KB = 211 B → 11 Address Lines (A1:A11) for each chip
USE A12 to separate between EEPROM and RAM
(4 KB + 4 KB) = 213 B → Total Used Address Lines = 13 Line (A12-A0)
USE A13 to separate between Memory and I/O Ports
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address (BIN)
4 KB X (XX00) bin 0 0 0 XXXXXX00000000000000
EEPROM X (XX00) bin F F F XXXXXX00111111111111
4 KB X (XX01) bin 0 0 0 XXXXXX01000000000000
RAM X (XX01) bin F F F XXXXXX01111111111111

1st PPI:
Base Address (50H) → (01010000) BIN
PPI-A1 → A2 PPI-A0 → A1 Address (Hex)
Port A 0 0 50
Port B 0 1 52
Port C 1 0 54
CWR 1 1 56
2nd PPI:
Base Address (2100H) → (0010000100000000) BIN
PPI-A1 → A2 PPI-A0 → A1 Address (Hex)
Port A 0 0 2100
Port B 0 1 2102
Port C 1 0 2104

Created By: M. El-Moughazy 75 |


Page
8086 Microprocessor [Notes] - Version 3.0

CWR 1 1 2106

Created By: M. El-Moughazy 76 |


Page
8086 Microprocessor [Notes] - Version 3.0

Created By: M. El-Moughazy 77 |


Page
8086 Microprocessor [Notes] - Version 3.0

- 2nd Solution using Memory Full Decoding Approach


4 KB EEPROM (2 KB Even and 2 KB Odd)
4 KB RAM (2 KB Even and 2 KB Odd)
2 KB = 211 B → 11 Address Lines (A1:A11) for each chip
USE A12 to separate between EEPROM and RAM
(4 KB + 4 KB) = 213 B → Total Used Address Lines = 13 Line (A12-A0)
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address
(HEX)
4 KB 0 (0000) bin 0 0 0 00000
EEPROM 0 (0000) bin F F F 00FFF
4 KB 0 (0001) bin 0 0 0 01000
RAM 0 (0001) bin F F F 01FFF

1st PPI:
Base Address (50H) → (01010000) BIN
PPI-A1 → A2 PPI-A0 → A1 Address (Hex)
Port A 0 0 50
Port B 0 1 52
Port C 1 0 54
CWR 1 1 56
nd
2 PPI:
Base Address (2100H) → (0010000100000000) BIN
PPI-A1 → A2 PPI-A0 → A1 Address (Hex)
Port A 0 0 2100
Port B 0 1 2102
Port C 1 0 2104
CWR 1 1 2106

Created By: M. El-Moughazy 78 |


Page
8086 Microprocessor [Notes] - Version 3.0

Created By: M. El-Moughazy 79 |


Page
8086 Microprocessor [Notes] - Version 3.0

Sheet 6: Intel 8086 CPU Microcomputer


1.
a. Design a microcomputer has the following:
i. Intel 8086 CPU.
ii. 2KB EEPROM.
iii. 2KB RAM.
iv. I/P port (70H).
v. O/P port (33H).
b. Write an intel 8086 assembly program to read i/p port (70H) and check its
content. If the content is odd, put it on o/p port (33H). if the content is even,
put it in memory location 0100H.
- Solution using Memory Partial Decoding Approach
2 KB EPPROM (1 KB Even and 1 KB Odd)
2 KB RAM (1 KB Even and 1 KB Odd)
1 KB = 210 B → 10 Address Lines (A1:A10) for each chip
Use A11 to separate between EEPROM and RAM
(2 KB + 2 KB) = 212 B → Total Used Address Lines = 12 Line (A11-A0)
I/P Port (70H) → (01110000) BIN
O/P Port (33H) → (00110011) BIN
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address (HEX)
2 KB X X (0000) bin 0 0 XX000
EEPROM X X (0111) bin F F XX7FF
2 KB X X (1000) bin 0 0 XX800
RAM X X (1111) bin F F XXFFF
Program:
START:
IN AL, (70H)
MOV AH, AL
SHR AH, 01H
JNC EVEN
ODD:
OUT (33H), AL
RET
EVEN:
MOV [0100H], AL
RET
Created By: M. El-Moughazy 80 |
Page
8086 Microprocessor [Notes] - Version 3.0

Created By: M. El-Moughazy 81 |


Page
8086 Microprocessor [Notes] - Version 3.0

2.
a. Design a microcomputer has the following:
i. Intel 8086 CPU.
ii. 2KB EEPROM.
iii. 2KB RAM.
iv. PPI chip at base address 70H.
b. Write an intel 8086 assembly program to configure the PPI chip in part (a)
such that port A is input, while ports B and C are output. Then read port A forty
[40] times and check its content. If the content is odd, put it in port B. if the
content is even, put it in port C.
- Solution using Memory Partial Decoding Approach
2 KB EPPROM (1 KB Even and 1 KB Odd)
2 KB RAM (1 KB Even and 1 KB Odd)
1 KB = 210 B → 10 Address Lines (A1:A10) for each chip
Use A11 to separate between EEPROM and RAM
(2 KB + 2 KB) = 212 B → Total Used Address Lines = 12 Line (A11-A0)
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address
(HEX)
2 KB X X (0000) bin 0 0 XX000
EEPROM X X (0111) bin F F XX7FF
2 KB X X (1000) bin 0 0 XX800
RAM X X (1111) bin F F XXFFF

PPI:
Base Address (70H) → (01110000) BIN
PPI-A1 → A2 PPI-A0 → A1 Address (Hex)
Port A 0 0 70
Port B 0 1 72
Port C 1 0 74
CWR 1 1 76

Created By: M. El-Moughazy 82 |


Page
8086 Microprocessor [Notes] - Version 3.0

Created By: M. El-Moughazy 83 |


Page
8086 Microprocessor [Notes] - Version 3.0

Program:
START:
MOV AL, 90H; CWR → (10010000) BIN
OUT (76H), AL
MOV CX, 028H; 28H → 40 DEC
STARTOFLOOP:
IN AL, (70H)
MOV AH, AL
SHR AH, 01H
JNC EVEN
ODD:
OUT (72H), AL
EVEN:
OUT (74H), AL
LOOP STARTOFLOOP
RET

3.
a. Design a microcomputer has the following:
i. Intel 8086 CPU.
ii. 2KB EEPROM.
iii. 2KB RAM.
iv. PPI chip at base address BF20H.
b. Write an intel 8086 assembly program to configurated the PPI chip in part
(a) such that ports A and B are inputs, while port C is output. Then read the two
ports A and B and send the larger value to port C, while the smaller value to
memory location 2100H.
- Solution using Memory Partial Decoding Approach
2 KB EPPROM (1 KB Even and 1 KB Odd)
2 KB RAM (1 KB Even and 1 KB Odd)
1 KB = 210 B → 10 Address Lines (A1:A10) for each chip
Use A11 to separate between EEPROM and RAM
(2 KB + 2 KB) = 212 B → Total Used Address Lines = 12 Line (A11-A0)

Created By: M. El-Moughazy 84 |


Page
8086 Microprocessor [Notes] - Version 3.0

Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address


(HEX)
2 KB X X (0000) bin 0 0 XX000
EEPROM X X (0111) bin F F XX7FF
2 KB X X (1000) bin 0 0 XX800
RAM X X (1111) bin F F XXFFF

PPI:
Base Address (0BF20H) → (1011111100100000) BIN
PPI-A1 → A2 PPI-A0 → A1 Address (Hex)
Port A 0 0 BF20
Port B 0 1 BF22
Port C 1 0 BF24
CWR 1 1 BF26

Program:
START:
MOV AL, 92H; CWR → (10010010) BIN
MOV DX, 0BF26H; LOAD CWR ADDRESS
OUT DX, AL
MOV DX, 0BF22H; LOAD PORT B ADDRESS
IN AL, DX
MOV BL, AL; PORT B READ IN BL
MOV DX, 0BF20H; LOAD PORT A ADDRESS
IN AL, DX; PORT A READ IN AL
MOV DX, 0BF24H; LOAD PORT C ADDRESS
CMP AL, BL
JGE ALARGER
BLARGER:
MOV [2100H], AL
MOV AL, BL
OUT DX, AL
RET
ALARGER:
OUT DX, AL
MOV [2100H], BL
RET

Created By: M. El-Moughazy 85 |


Page
8086 Microprocessor [Notes] - Version 3.0

NOTE: TO SOLVE USING MEMORY MAPPED USE A12 TO SEPARATE BETWWEN MEMORY AND
I/O as Memory Partial Decoding Approach OR USE Memory Full Decoding Approach.

Created By: M. El-Moughazy 86 |


Page
8086 Microprocessor [Notes] - Version 3.0

- Created By: M. El-Moughazy 87 |


Page
8086 Microprocessor [Notes] - Version 3.0

2nd Term Midterm 2017/2018


1. Show how we can:
a. Buffer the 8086 microprocessor buses.

Created By: M. El-Moughazy 88 |


Page
8086 Microprocessor [Notes] - Version 3.0

b. Cover the 8086-memory range using 64 KB RAM chips.


- 1 MB / 64 KB = 16 Chips (8 Even and 8 Odd)
64 KB = 216 B → 16 Address Lines (A1:A16) for each chip
1 MB = 220 B → Total used address lines 20 (A19-A0)

Created By: M. El-Moughazy 89 |


Page
8086 Microprocessor [Notes] - Version 3.0

2. Show how we connect 8086 microprocessor with the following:


• Two 8 KB EPROM chips
• O/P Port (3D)
• I/P Port (A2DE0)
st
- 1 Solution using Memory Partial Decoding Approach
Chips (1 Even and 1 Odd)
8 KB = 213 B → 13 Address Lines (A1:A13) for each chip
(8 KB + 8KB) <= 214 B → Total used address lines 14 (A13-A0)
O/P Port (3D) → (00111101) BIN
I/P Port (A2DE0) → (1010 0010 1101 1110 0000) BIN
Use A14 to separate between Memory and I/O Ports
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address (BIN)
16 KB X (X100) bin 0 0 0 XXXXX100000000000000
EEPROM X (X111) bin F F F XXXXX111111111111111

- 2nd Solution using Memory Full Decoding Approach


Chips (1 Even and 1 Odd)
8 KB = 213 B → 13 Address Lines (A1:A13) for each chip
(8 KB + 8KB) <= 214 B → Total used address lines 14 (A13-A0)
O/P Port (3D) → (00111101) BIN
I/P Port (A2DE0) → (1010 0010 1101 1110 0000) BIN
Chips A19-A16 A15-A12 A11-A8 A7-A4 A3-A0 Address (HEX)
16 KB 0 (0000) bin 0 0 0 00000
EEPROM 0 (0011) bin F F F 03FFF

Created By: M. El-Moughazy 90 |


Page
8086 Microprocessor [Notes] - Version 3.0

Created By: M. El-Moughazy 91 |


Page
8086 Microprocessor [Notes] - Version 3.0

Created By: M. El-Moughazy 92 |


Page
8086 Microprocessor [Notes] - Version 3.0

3. Compare between:
• Microprocessor and Microcontroller
Microprocessor Microcontroller
Chip contains only the processor Chip contains processor and all the
components of a computer (Memory,
I/o, ...)
Need other components to make Stand alone
working system
More Flexibility Less Flexibility
More components count in system Less components count is system

• CISC and RISC Computers


RISC CISC
Stands For Reduced Instruction Set Complex Instruction Set
Execution one cycle multiple cycles
Time
Speed Faster Slower
Number of Minimum Instruction Large Number of Instructions
Instructions
Instruction Fixed Variable
Format

Created By: M. El-Moughazy 93 |


Page

You might also like