210912 001 I APX 86 88 186 188 Users Manual 1985

210912-001_iAPX_86_88_186_188_Users_Manual_1985 210912-001_iAPX_86_88_186_188_Users_Manual_1985

User Manual: manual pdf -FilePursuit

Open the PDF directly: View PDF PDF.
Page Count: 353

Download210912-001 I APX 86 88 186 188 Users Manual 1985
Open PDF In BrowserView PDF
-------_._---

.------

.~~--~~'

LITERATURE
In addition to the product line handbooks listed below, the INTEL PRODUCT GUIDE (no charge,
Order No. 210846--003) provides an overview of Intel's complete product lines and customer services.
Consult the INTEL LITERATURE GUIDE (Order No. 210620) for a listing of Intel literature. TO
ORDER literature in the U.S" write or caIl the INTEL LITERATURE DEPARTM ENT, 3065 Bowers
Avenue, Santa Clara, CA 95051, (800) 538-1876, or (800) 672-1833 (California only). TO ORDER
literature from international locations, contact the nearest I ntel sales office or distributor(see listings in
the back of most any Intel literature).
Use the order blank on the facing page or caIl our TOLL FREE number listed above to order literature.
Remember to add your local sales tax.

1985 HANDBOOKS
Product line handbooks contain data sheets, application notes, article reprints and other design
information.

*U.S. PRICE
QUALITY/RELIABILITY HANDBOOK (Order No. 210997-001)
Contains technical details of both quality and reliability programs and principles.

$15.00

CHMOS HANDBOOK (Order No. 290005-001)
Contains data sheets only on all microprocessor, peripheral. microcontroller and
memory CHMOS components.

$12.00

MEMORY COMPONENTS HANDBOOK (Order No. 210830-004)

$18.00

TELECOMMUNICATION PRODUCTS HANDBOOK (Order No. 230730-003)

$12.00

MICRO CONTROLLER HANDBOOK (Order No. 210918-003)

$18.00

MICROSYSTEM COMPONENTS HANDBOOK (Order No. 230843-002)
Microprocessors and peripherals-2 Volume Set

$25.00

DEVELOPMENT SYSTEMS HANDBOOK (Order No. 210940-003)

$15.00

OEM SYSTEMS HANDBOOK (Order No. 210941-003)

$18.00

SOFTWARE HANDBOOK (Order No. 230786-002)

$12.00

MILITARY HANDBOOK (Order No. 210461-003)
Not available until June.

$15.00

COMPLETE SET OF HANDBOOKS (Order No. 231003-002)
Get a 25% discount off the retail plice of $160.

*V.S. Price Only

$120.00

iAPX 86/88, 186/188 User's Manual
Hardware Reference

1985

Intel Corporation makes no warranty for the use of its products and assumes no responsibility for any errors which may appear
in this document nor does it make a commitment to update the information contained herein.
Intel retains the right to make changes to these specifications at any time, without notice.
Contact your local sales office to obtain the latest specifications before placing your order.
The following are trademarks of Intel Corporation and may only be used to identify Intel Products:

do

BITBUS, COMMputer, CREDIT, Data Pipeline, GENIUS,
ICE, iCS,
iDBp, iDIS, 121CE, iLBX, im , iMDDX, iMMX, Insite, Intel, intel, intelBOS,
Intelevision, int~igent Identifier, int~igent Programming, Intellec,
Intellink, iOSP, iPDS, iRMX, iSBC, iSBX, iSDM, iSXM, KEPROM,
Library Manager, MCS, Megachassis, MICROMAINFRAME,
MULTIBUS, MULTICHANNEL, MULTIMODULE, OpenNET,
Plug-A-Bubble, PROMPT, Promware, QUEST, QueX, Ripplemode,
RMXlSO, RUPI, Seamless, SLD, and UPI, and the combination of ICE,
iCS, iRMX, iSBC, iSBX, MCS, or UPI and a numerical suffix.
MDS is an ordering code only and is not used as a product name or trademark. MDS® is a registered trademark of Mohawk
Data Sciences Corporation .
• MULTIBUS is a patented Intel bus.
Additional copies of this manual or other Intel literature may be obtained from:
Intel Corporation
Literature Department
Mail Stop SC6-714
3065 Bowers Avenue
Santa Clara, CA 95051

©JNTELCORPORATJON 1985

Table of Contents
Chapter 1
8086/8088 CPU
1.1 Introduction................................................................. 1-1
1.2 Component Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1-1
1.2.1 Architectural Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1-2
1.2.2 Software Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1-12
1.3 Device Pin Definitions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1-42
1.3.1 Functional Description of All Signals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1-43
1.3.2 Electrical Description of Pins .................................................. 1-43
1.3.3 Operating Modes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1-43
1.3.4 Minimum Mode System Overview/Description .............. , ..................... 1-44
1.3.5 Maximum Mode System Overview/Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1-52
1.3.6 General Design Considerations ................................................ 1-64
1.4 Bus Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1-64
1.4.1 Multiplexed Address and Data Bus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1-64
1.4.2 Bus Cycle Definition ........................................................ 1-65
1.4.3 Address and Data Bus Concepts ............................................... 1-66
1.4.4 Memory and 110 Peripherals Interface ........................................... 1-71
1.4.5 System DeSign Alternatives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1-92
1.4.6 Multiprocessor/Coprocessor Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1-97
1.4.7 Interpreting The 8086/8088 Bus Timing Diagrams ................................. 1-98
1.4.8 Wait State Insertion .........................................................1-107
1.4.9 8086/8088 Instruction Sequence ............................................ , .. 1-109
1.5 Bus Exchange Mechanisms ....................................................1-110
1.5.1 Minimum Mode (HOLD/HLDA) ................................................1-110
1.5.2 Maximum Mode (RQ*/GT*) ...................................................1-113
1.6 RESET ....................................................................1-118
1.6.1 Reset Bus Conditioning ......................................................1-118
1.6.2 Multiple Processor Considerations .............................................1-119
1.7 Interrupts ...................................................................1-120
1.7.1 Classes of Interrupts ........................................................1-120
1.7.2 Divide Error-Type 0 ........................................................1-121
1.7.3 Single Step-Type 1 ........................................................1-121
1.7.4 Non-Maskable Interrupt-Type 2 ...............................................1-121
1.7.5 One Byte Interrupt-Type 3 ...................................................1-121
1.7.6 Interrupt on Overflow-Type 4 ........................................ '......... 1-121
1.7.7 User-Defined Software Interrupts ..............................................1-122
1.7.8 User-Defined Hardware Interrupts ..............................................1-122
1.7.9 Interrupt Acknowledge .......................................................1-122
1.8 Support Components .........................................................1-125
1.8.1 8284A Clock Generator and Driver .............................................1-125
1.8.2 8288 Bus Controller .........................................................1-130
1.8.3 8289 Bus Arbiter ...........................................................1-133
1.8.4 8259A Programmable Interrupt Controller ....................................... 1-134
1.8.5 8237A Programmable DMA Controller .......................................... 1-142

Chapter 2
80186/80188 CPU
2.1 Introduction-The High Integration Concept. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-1
2.2 Component Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-1
2.2.1 Architectural Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-1
2.2.2 Software Overview ....'. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-4
2.3 Device Pin Definitions ......................................................... 2-12
2.3.1 Functional Description of All Signals ............................................ 2-12
2.3.2 Electrical Description of Pins .................................................. 2-12

iii

TABLE OF CONTENTS

2.4 Operating Modes ............................................................
2.4.1 8086/88·80186/188 Operating Mode Comparisons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
2.4.2 Queue Status Mode of Operation ............................................. ,
2.4.3 Interrupt Controller Operating Modes ...........................................
2.5 Bus Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
2.5.1 HALT Bus Cycle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
2.5.2 8086/80186 Bus Operation Differences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
2.5.3 Multiplexed Address/Data Bus (186,188) ........................................
2.5.4 Data Transfer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
2.5.5 Memory and I/O Peripherals Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
2.5.6 Interpreting the 80186/80188 Bus Timing Diagrams ................................
2.5.7 Wait State Generator ........................................................
2.5.8 80186 Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
2.6 Bus Exchange Mechanisms ....................................................
2.6.1 HOLD Response ...........................................................
2.6.2 HOLD/HLDA Timing and Bus Latency ..........................................
2.6.3 End of HOLD Timing ........................................................
2.7 Interrupts ...................................................................
2.8 Support Circuits .............................................................
2.8.1 Direct Memory Access (DMA) Unit .............................................
2.8.2 Timer Unit ................................................................
2.8.3 Interrupt Controller .........................................................
2.8.4 Chip Select/Wait State Generation Unit .........................................
2.8.5 Clock Generator/Reset/Ready .................................................

2·12
2·12
2·12
2·19
2·19
2·23
2·24
2·29
2·34
2·34
2·41
2·44
2·46
2·47
2·47
2·48
2·48
2·50
2·51
2·51
2·56
2·59
2·74
2·79

Chapter 3
8087 Numeric Processor Extension
3.1 Introduction.................................................................
3.1.1 iAPX86,88,186,188Base ...................................................
3.1.2 8087 Mobility In Any iAPX 86, 88, 186 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
3.2 Component Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
3.2.1 Architecture Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . ..
3.2.2 Software Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
3.3 Device Pin Assignments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
3.4 Operating Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
3.4.1 8087/8086(88) Interface ......................................................
3.4.2 8087/80186(88) Interface .....................................................
3.5 8086 (80186)/8087 Operation ...................................................
3.5.1 Decoding Escape Instructions .................................................
3.5.2 Concurrent Execution of Host and Coprocessor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
3.5.3 Instruction Synchronization ...................................................
3.6 Bus Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
3.6.1 iAPX86/20 Bus Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.2 iAPX186/20 Bus Operation ...................................................
3.7 Bus Exchange Mechanism. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
3.7.1 8087 RQ/GT Function .......................................................
3.7.2 Delay Effects of the 8087 .....................................................
3.7.3 Reducing 8087 Delay Effects .................................................
3.8 Interrupts...................................................................
3.8.1 Recommended Interrupt Configurations .........................................

3·1
3·1
3·2
3·3
3·3
3·7
3·8
3·8
3·11
3·11
3·12
3·12
3·13
3·13
3·15
3·15
3·15
3·16
3·16
3·17
3·19
3·22
3·22

Chapter 4
8089 Input/Output Processor
4.1 Introduction.................................................................
4.2 Component Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
iv

4·1
4·1

TABLE OF CONTENTS

4.2.1 Architectural Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
4.2.2 Software Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
4.3 Device Pin Assignments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
4.4 Operating Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
4.4.1 Interfacing the SOS9 to the SOS6 and S01S6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
4.4.2 lOP Initialization ............................................................
4.4.3 Channel Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
4.4.4 Direct Memory Access Transfers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
4.4.5 DMA Termination. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
4.4.6 Peripheral Interfacing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
4.4.7 Status Lines ...............................................................
4.5 Bus Operation ...............................................................
4.6 Bus Exchange Mechanism. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
4.6.1 Bus Arbitration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
4.6.2 Bus Load Limit. . . . . . . . . . . . . . . . . . . . . . . . .. ..................................
4.6.3 Bus Lock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
4.7 Interrupts ...................................................................

4-1
4-3
4-20
4-20
4-24
4-26
4-27
4-30
4-32
4-33
4-34
4-34
4-36
4-37
4-39
4-39
4-40

Chapter 5
80130 Operating System Firmware
5.1 General Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
5.2 S0130 Architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
5.3 Device Pin Assignments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
5.4 Operating System Primitives Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
5.5 Interfacing With the SOS6/SS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
5.5.1 Programming The S0130 OSP's Onchip Peripherals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
5.6 OSP Memory Usage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
5.7 Interrupt Controller. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.7.1 Level-Triggered Mode .......................................................
5.7.2 Edge-Triggered Mode .......................................................
5.7.3 Local Interrupt Requests .....................................................
5.7.4 Interrupt Sequence .........................................................
5.S Timing .....................................................................

5-1
5-1
5-1
5-1
5-1
5-1
5-11
5-12
5-12
5-12
5-13
5-13
5-13

Tables
1-1
Implicit Use of General Registers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1-7
Logical Addresses Sources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1-10
1-2
1-3
Data Transfer Instructions ......................................................... 1-13
1-4
Arithmetic Instructions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1-14
1-5
Arithmetic Interpretation of S-Bit Numbers ............................................ 1-14
1-6
Bit Manipulation Instructions ....................................................... 1-15
String Instructions ............................................................... 1-15
1-7
1-S
String Instruction Register and Flag Use .............................................. 1-15
1-9
Program Transfer Instructions ...................................................... 1-16
1-10 Interpretation of Conditional Transfers ................................................ 1-17
1-11 Processor Control Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1-17
1-12 Key to Instruction Coding Formats .................................................. 1-22
1-13 Key to Flag Effects ............................................................... 1-23
1-14 Key to Operand Types ............................................................ 1-23
1-15 Effective Address Calculation Time .................................................. 1-24
1-16 Instruction Set Reference Data ..................................................... 1-24
1-17 Single-Bit Field Encoding ......................................................... 1-42
1-1S Mode (MOD) Field Encoding ....................................................... 1-42
1-19 REG (Register) Field Encoding ..................................................... 1-42

v

TABLE OF CONTENTS

1·20
1·21
1·22
1·23
1·24
1·25
1·26
1·27
1·28
1·29
1·30
1·31
1·32
1·33
1·34
1·35
1·36
1·37
1·38
1·39
1·40
1-41
1·42
1·43
1-44
1·45
2·1
2·2
2·3
2·4
2·5
2.6
2·7
2·8
2·9
2·10
2·11
2·12
2·13
2·14
2·15
2·16
2·17
2·18
2·19
2·20
2·21
2·22
2·23
2·24
2·25
2·26
2·27
2·28
2·29
2·30

Register/Memory Field Encoding ................................................... 1·43
Key to Machine Instruction Encoding and Decoding ..................................... 1-45
8086/88 Instruction Encoding ................................. : .................... 1·46
Machine Instruction Decoding Guide ................................................ 1·52
8086/8088 Device Pin Descriptions .................................................. 1·61
D.C. Characteristics ............................................................. , 1·66
A.C. Timing Requirements for Minimum .............................................. 1·67
A.C. Timing Requirements for Maximum Complexity System .............................. 1·69
Minimum/Maximum Mode Pin Assignments ........................................... 1·71
Status Bit Decoding .............................................................. 1·71
Status Line Decoders ............................................................ 1·71
Status Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1·82
EPROM/ROM Parameters ......................................................... 1·82
Typical Static RAM Write Timing Parameters .......................................... 1·84
Cycle Dependent Write Parameters for RAM Memories. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 1·84
Peripheral Compatibility Parameters ................................................. 1·89
Peripherals Cycle Dependent Parameter Requirements .................................. 1·89
Compatible Peripherals for a 5 MHz 8086/88 .......................................... 1·90
Peripheral Requirements for Full Speed Operation with a 5MHz 8086/88 .................... 1·91
Queue Status Bit Decoding ........................................................ 1·99
Condition of 8086/88 Bus and Output Signal Pins During Reset ........................... 1·119
8288 Outputs During Passive Modes ...................... , ......................... 1·119
Interrupt Processing Timing .......................................................1·121
Status Line Decode Chart .......... , ..............................................1·131
8237A Internal Registers ..........................................................1·146
Definition of Register Codes .......................................................1·147
Data Transfer Instructions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2·8
Arithmetic Instructions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2·8
Arithmetic Interpretation of 8·Bit Numbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2·9
Bit Manipulation Instructions ................................ , ........... , . . . . . . . . .. 2·9
String Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . .. 2·10
Program Transfer Instructions ............................................ , ......... 2·10
Interpretation of Conditional Transfers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2·11
Processor Control Instructions .................................................... , 2·11
Instruction Set Summary .......................................................... 2·13
80186/80188 Device Pin Descriptions ................................................ 2·20
D.C. Characteristics ............................................................. , 2·23
A.C. Characteristics Timing Requirements ........................................
2·24
A.C. Characteristics Master Interface Timing Responses.
2·25
A.C. Characteristics Chip·Select Timing Requirements.
2·25
A.Co Characteristics CLKIN Requirements
2·26
A.C. Characteristics CLKOUT Requirements ...........
2·26
80186 Queue Status.
2·28
2·32
80186 Status Line Interpretation
Bank Selection Decoding and Word Expansion ....................
2·41
80186 Bus Signals .................
o' 2·42
80186/188 Interrupt Vectors ............
2·50
DMA Request Inactive Timing.
o' 2·57
Timer Control Block Format ....
2·57
2·65
Internal Source Priority Level ...........
80186 Interrupt Vector Types .........................
2·73
UMCS Programming Values ....
2·76
LMCS Programming Values .
2·77
MPCS Programming Values.
2·77
80186WAIT State Programming ..........
2·78
80186 Initial Register State After RESET ............................................. 2·81
0

0

0

•••••

0

••

0

0

••••

0

••

0

0

••••

0

0

0

•••••

•••••••••••••

0

•••

0

0

•••••••••

0

•••

0

0

0

0

•

0

0

0

0

0

0

0

0

0

00.0000000000.

0

0

••

0

•

0

•

0

0

0

0

••••••

0

0

0

••••••••

0

••••••••••••••

0

•

0

0

••••••

•

0

••••

•••••

••••••

0

••

0

••••

0

•

0

0

•••

0

0

•••

0

0

0

••••

0

••••

••

0

•

••••••••••••••

0

••••

•

0

••••

0

0

•••••••

0

0

0

0

0

0

••••••••

0

••

0

0

0

••••••••

•

0

•

0

0

0

0

••••••

•••

0

0

0

•••

0

••

0

•••••

0

•••

••••

0

0

•••

•

•••

0

0

0

••••••••••

0

••••

0

•••

0

0

••••

0

•

0

•••

0

vi

0

0

•••

0

••••••

0

•••

0

••

••••••••••

0

0

0

••••••

•••

0

•

0

••••••••

0

0

,

0

•

•••••••

0

•

0

0

••

0

••

•••••••••••••••••••••••

•••••

••••••••••••••

•

0

••••••••••••••••••

0

0

••••••

0

••

••••••

0

0

0

0

0

0

••

•••

•••••••••

••••••••••••••••••••••••

0

0

••••

0

0

•

0

0

00'

•••••

••

0

0

•••

••••••••••••••

•••

•

0

0

0

••••••••••••

0

0

•

•••

••

0

•••••

•

0

0

0

;

0

••

•••••

0

•••••

••••••••••••••

0

0

•••

0

••••

••

•••••••••

••••

0

0

0

••••••

0

0

••••••

••••

0

0

0

••

0

•

0

•

,

0

••••••••••

••••••••••••••••••••••••••

TABLE OF CONTENTS

3-1
3-2
4-1
4-2
4-3
4-4
4-5
4-6
4-7
4-8
4-9
4-10
4-11
4-12
4-13
4-14
4-15
4-16
4-17
4-18
4-19
4-20
4-21
5-1
5-2
5-3
5-4
5-5

8087 Device Pin Descriptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Worst Case Local Bus Request Wait Times In Clocks ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Physical/Logical Bus Combinations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Channel Register Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . ..
Instruction Set Reference Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Operand Identifiers Definitions .....................................................
Operand Type Definitions ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Instruction Fetch Timings (Clock Periods) .............................................
8089 Instruction Encoding .........................................................
8089 Machine Instruction Decoding Guide. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
R/B/P Field Encoding .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
WB Field Encoding ..............................................................
AA Field Encoding ...............................................................
MM Field Encoding ..............................................................
8089 DIP Pin Assignments ........................................................
DMA Assembly Register Operation ..................................................
DMA Transfer Cycles .............................................................
Status Signals SO-S2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Status Signals S3-S6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Data Bus Usage .................................................................
Bus Cycle Decoding ...... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Type of Cycle Decoding ......................................................... ;.
Bus Arbitration Requirements and Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
80130 Pin Descriptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
OSP Primitives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Data Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . ..
Mnemonic Codes for Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Baud Rate Counter Values (16X). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..

3-9
3-19
4-2
4-4
4-7
4-14
4-14
4-15
4-15
4-21
4-21
4-21
4-22
4-22
4-23
4-31
4-32
4-34
4-34
4-37
4-37
4-37
4-39
5-4
5-6
5-8
5-9
5-11

Figures
1-1
1-2
1-3
1-4
1-5
1-6
1-7
1-8
1-9
1-10
1-11
1-12
1-13
1-14
1-15
1-16
1-17
1-18
1-19
1-20
1-21
1-22
1-23
1-24
1-25

Small 8088-Based System. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
8086/8088/8089 Multiprocessing System. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
8086 Simplified Functional Block Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
8088 Simplified Functional Block Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Overlapped Instruction Fetch and Execution .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
General Registers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Segment Registers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Status Flags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Segment Locations in Physical Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Currently Addressable Segments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Logical and Physical Addresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Physical Address Generation ......................................................
Dynamic Code Relocation ........................................................ ,
Stack Operation ............................................... ; .................
Reserved Memory and I/O Locations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Flag Storage Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . ..
Memory Address Computation .....................................................
Direct Addressing .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Register Indirect Addressing .......................................................
Based Addressing ...............................................................
Accessing A Structure With Based Addressing .........................................
Indexed Addressing ..............................................................
Accessing an Array with Indexed Addressing ..........................................
Based Index Addressing ............................................... ; . . . . . . . . ..
Accessing a Stacked Array with Based Index Addressing ................................
vii

1-2
1-3
1-4
1-5
1-6
1-7
1-7
1-7
1-8
1-8
1-9
1-10
1-11
1-12
1-12
1-13
1-19
1-19
1-19
1-19
1-20
1-20
1-20
1-20
1-21

TABLE OF CONTENTS

1-26
1-27
1-28
1-29
1-30
1-31
1-32
1-33
1-34
1-35
1-36
1-37
1-38
1-39
1-40
1-41
1-42
1-43
1-44
1-45
1-46
1-47
1-48
1-49
1-50
1-51
1-52
1-53
1-54
1-55
1-56
1-57
1-58
1-59
1-60
1-61
1-62
1-63
1-64
1-65
1-66
1-67
1-68
1-69
1-70
1-71
1-72
1-73
1-74
1-75
1-76
1-77
1-78
1-79
1-80
1-81

String Operand Addressing .......................... ; ......... , ..... : ; ........... ,
110 Port Addressing ................................................. " ...........
Typical 8086/88 Machine Instruction Format. ...................... , ...................
Machine Instruction Encoding Matrix ................................................
8086/8088 DIP Pin Assignments ....................................................
Minimum Mode Waveforms ........................................................
Maximum Mode Waveforms .......................................................
Elementary Maximum Mode System .................................................
8086/88 Minimum Mode System ................................................ : ...
8086/88 Maximum Mode System ...................................................
8086/88 Queue Tracking Circuit ....................................................
8086/88 Lock Activity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Decoding Memory and 110 RD" and WR" Commands ...................................
Linear Select for 110 . .............................................................
Basic 8086/88 Bus Cycles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
8086 Memory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Memory Even and Odd Data Byte Transfers .......................................... ,
Memory Even and Odd Data Word Transfers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
8086/8088 Memory Organization ............................. , .....................
Reserved Memory Locations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
8086/8088 Memory Array .........................................................
EPROMIROM Bus Interface .......................................................
Chip Select Generation for Devices Without Output Enables. . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Chip Selection for Devices With Output Enables .......................................
Sample Compatibility Analysis Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
5 MHz 8086 System USing an 8202 Dynamic RAM Controller .............................
8202 Timing Information ............................................. , ............
2118 Family Timing ..............................................................
110 Device Chip Select Techniques ..................................................
16-bit to 8-bit Bus Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Bipolar PROM Decoder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
16-bit I/O Decode ................................................................
8086 System Configurations ...................................................... ,
Device Assignment ..................................... ; . . . . . . . . . . . . . . . . . . . . . . ..
110 Input Request Code Example ................................ , ................. ,
Block Transfer to 16-bit 110 Using 8086/88 String Primitives ...............................
Block Transfer to 8-bit 110 USing 8086/88 String Primitives. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. ..
Code For Block Transfers ..........................................................
Multiplexed Data Bus .............................................................
Buffered Data Bus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . ..
Devices With Output Enable on the Multiplexed Bus ....................................
Relationship of ALE to READ ......................................................
Devices Without Output Enable on the Multiplexed Bus ..................................
Access Time: CS Gated with AO"twR" ..............................................
CE TO WR" Setup and Hold ...................................................... ,
Bus Transceiver Control. ..........................................................
Devices With Output Enable on the System Bus .......................................
CS"/Bus Driving Device Timing ....................................................
De-multiplexing Address and Data From the Processor Bus ..............................
Multiplexed Bus With Local Address Oemultiplexing ................................... ,
Fully Buffered System ...................................................•.........
ContrOlling System Transceivers with DEN and OT/R" ...................................
Buffering Devices with OE"/RO" ......................................... " ..... " ..
Buffering Devices Without OE"/RO" and With Common or Separate Input/Output. ............
Buffering Devices Without OE"/RO" and With Common or Separate Input/Output .............
Buffering Devices Without OE"/RO" and With Separate Input/Output. ......................
viii

1-21
1-21
1-41
1-44
1-65
1-72
1-74
1-76
1-77
1-77
1-78
1-78
1-79
1-79
1-80
1-80
1-81
1-82
1-82
1-82
1-83
1-83
1-83
1-84
1-84
1-85
1-86
1-87
1-88
1-88
1-88
1-88
1-90
1-91
1-92
1-92
1-92
1-93
1-93
1-93
1-93
1-94
1-94
1-94
1-94
1-95
1-95
1-95
1-96
1-96
1-97
1-97
1-97
1-97
1-97
1-98

TABLE OF CONTENTS

1-82
1-83
1-84
1-85
1-86
1-87
1-88
1-89
1-90
1-91
1-92
1-93
1-94
1-95
1-96
1-97
1-98
1-99
1-100
1-101
1-102
1-103
1-104
1-105
1-106
1-107
1-108
1-109
1-110
1-111
1-112
1-113
1-114
1-115
1-116
1-117
1-118
1-119
1-120
1-121
1-122
1-123
1-124
1-125
1-126
1-127
1-128
1-129
1-130
1-131
1-132
1-133
1-134
1-135
1-136
1-137

8086 Family Multiprocessor System ................................................. 1-98
8086 Bus Timing-Minimum Mode System ........................................... 1-100
8086 Bus Timing-Maximum Mode System Using 8288) .................................1-102
Max Mode 8086 with Master 8259A on the local Bus and Slave 8259A's on the System Bus ..... 1-107
Normally Ready System Inserting a Wait State .........................................1-108
Normally Not Ready System Avoiding a Wait State ...................................... 1-108
Ready Inputs to the 8284 and Output to the 8086/88 .................................... 1-108
8284 With 8086/88 Ready Timing ................................................... 1-110
Using RDY1/RDY2 to Generate Ready ...............................................1-110
Using AEN1'/AEN2' to Generate Ready .............................................1-110
Representative Instruction Execution Sequence .......................................1-111
Instruction loop Sequence ........................................................1-111
HOlD/HlDA Sequence Timing Diagram .............................................1-112
DMA Using the 8237-2 ............................................................1-114
8086/88 Minimum System, 8257 on System Bus 16-Bit Transfers .......................... 1-115
HOlD/HlDA-to/from-RQ '/GT' Conversion Circuit. ..................................... 1-116
HOlD/HlDA-to/from-RQ'/GT' Conversion Timing .....................................1-116
Request/Grant Sequence Timing ...................................................1-117
Channel Transfer Delay Timing .....................................................1-117
Circuit to Translate HOLD into AEN Disable for Maximum Mode 8086/88 .................... 1-118
8086/88 Bus Conditioning on Reset Timing Diagram .................................... 1-119
Reset Disable for Max Mode 8086/8088 Bus Interface ................................... 1-119
Reset Disable for Max Mode 8086/88 Bus Interface in Multi-CPU System .................... 1-120
Interrupt Vector Table .............................................................1-120
Interrupt Acknowledge Timing ......................................................1-123
NMI During Single Stepping and Normal Single Step Operation ........................... 1-125
NMI, INTR, Single Step and Divide Error Simultaneous Interrupts .......................... 1-126
8284A Clock Generator/Driver Block Diagram ......................................... 1-127
8086/88 Clock Waveform ..........................................................1-127
Recommended Crystal Clock Configuration ...........................................1-127
8284A Interfaced to an 8086/88 .....................................................1-127
External Frequency for Multiple 8284's ...............................................1-128
Oscillator to ClK and ClK to PClK Timing Relationships ................................1-128
Synchronizing CSYNC With EFI ....................................................1-128
CSYNC Setup and Hold to EFI .....................................................1-128
EFI From 8284A Oscillator .........................................................1-129
Synchronizing Multiple 8284As .....................................................1-129
Buffering the 8284 ClK Output .....................................................1-129
8086 and Coprocessor on the local Bus Share a Common 8284 ........................... 1-129
8284A Reset Circuit. .............................................................1-130
Constant Current Power Up Reset Circuit. ............................................ 1-130
8086/88 Reset and System Reset. ..................................................1-130
8288 Bus Controller Block Diagram .................................................1-131
Status Line Activation and Termination ...............................................1-132
Maximum and Minimum Mode Command Timing .................•.....................1-132
8289 Bus Arbiter Block Diagram ......................................... , .......... 1-133
Parallel Priority Resolving Technique ................................................ 1-135
Higher Priority Arbiter Obtaining the Bus From a lower Priority Arbiter ...................... 1-135
Serial Priority Resolvi ng ..........................................................1-136
Typical Medium Complexity CPU Circuit ..............................................1-136
Min Mode 8086 with Master 8259A on the local Bus and Slave 8259A's on the System Bus ..... 1-137
Max Mode 8086 with Master 8259A on the local Bus and Slave 8259A's on the System Bus ..... 1-138
MCE Timing to Gate 8259A CAS Address onto the 8086 local Bus ......................... 1-138
Interrupt Vector Byte .............................................................1-139
Priority Structure Variations-Fully Nested Mode ....................................... 1-139
IR Triggering Timing Requirements ..................................................1-141
ix

TABLE OF CONTENTS

1-138
1-139
1-140
1-141
1-142
1-143
1-144
1-145
1-146
1-147
1-148
1-149
2-1
2-2
2-3
2-4
2-5
2-6
2-7
2-8
2-9
2-10
2-11
2-12
2-13
2-14
2-15
2-16
2-17
2-18
2-19
2-20
2-21
2-22
2-23
2-24
2-25
2-26
2-27
2-28
2-29
2-30
2-31
2-32
2-33
2-34
2-35
2c36
2-37
2-38
2-39
2-40
2-41
2-42
2-43
2-44

Cascaded 8259A's22 Interrupt Levels ....................................... , ....... 1-141
Cascade-Buffered Mode Example ...................................................1-143
8237A DMA Controller Block Diagram ...............................................1-143
Cascaded 8237As ...............................................................1-145
Memory-To-Memory Transfer Timing .................................................1-146
Command Register ..............................................................1-147
Software Command Codes ........................................................1-147
Mode Register ..................................................................1-147
Request Register ................................................................1-147
Mask Bits ......................................................................1-148
Mask Register ..................................................................1-148
Status Register .................................................................1-148
80186/80188 Functional Block Diagrams. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-2
ENTER Instruction Stack Frame. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-7
Flag Store Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-8
80186/80188 DIP Pin Assignments .................................................. 2-19
Major Cycle Timing Waveforms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-27
Generating Queue Status Information ................................................ 2-28
80186 and 8086 Queue Status Generation ............................................ 2-29
Example 80186 Buffered/Unbuffered Data Bus ........................................ 2"30
Read Cycle Timing .............................................................. 2-30
Generating 1/0 and Memory Read Signals ............................................ 2-31
Write Cycle Timing ............................................................... 2-31
Synthesizing Delayed Write from the 80186 ........................................... 2-32
Active-Inactive Status Transitions ................................................... 2-32
80186/8288 Bus Controller Interconnection ........................................... 2-32
Circuit Holding LOCK' Active Until Ready Is Returned .................................. 2-33
80186/8288/8289 Interconnection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-34
Physical Memory BytelWord Addressing .............................................. 2-35
80186/External Chip SelectlDevice Chip Select Generation .............................. 2-35
Example 2764/80186 Interface ..................................................... 2-35
Example 2186/80186 Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-37
Example 8203/DRAM/80186 Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... 2-38
8203/2164A-15 Access Time Calculation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-39
8208 Dynamic RAM Controller Interfaces ............................................. 2-40
8208 Processor Address Interfaces .................................................. 2-41
8208 Differentiated Reset Circuit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-42
Single T-State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-42
Example 80186 Bus Cycle ......................................................... 2-43
80186 Address Generation Timing .................................................. 2-43
Demultiplexing the 80186 Address Bus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-44
Valid/lnvalid ARDY Transitions ...................................................... 2-45
Asynchronous Ready Circuits for the 80186 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-46
Valid SRDY Transitions on the 80186 ............. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-46
Valid & Invalid Latch Input Transitions & Responses ..................................... 2-47
Signal FloatlHLDA Timing ......................................................... 2-47
80186 Idle Bus HOLD/HLDA Timing ............................................... " 2-48
HOLD/HLDA Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-49
End of HOLD Timing Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-49
80186 CPUlDMA Channel Internal Model ............................................. 2-51
80186 DMA Register Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-52
DMA Control Register .............. ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-52
Example DMA Transfer Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. 2-53
DMA Request Timing ............................................................. 2-55
DMA Request Logic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-55
DMA Acknowledge Synthesis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-55

x

TABLE OF CONTENTS

2-45
2-46
2-47
2-48
2-49
2-50
2-51
2-52
2-53
2-54
2-55
2-56
2-57
2-58
2-59
2-60
2-61
2-62
2-63
2-64
2-65
2-66
2-67
2-68
2-69
2-70
2-71
2-72
2-73
2-74
2-75
2-76
2-77
2-78
3-1
3-2
3-3
3-4
3-5
3-6
3-7
3-8
3-9
3-10
3-11
3-12
3-13
3-14
3-15
3-16
3-17
3-18
3-19
3-20
4-1
4-2

Source & Destination Synchronized DMA Request Timing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-56
Timer Block Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-57
80186 Timer Out Signal ........................................................... 2-59
Example Timer Interface Code ..................................................... 2-60
80186 Real Time Clock. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-64
80186 Baud Rate Generator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-64
80186 Event Counter ............................................................. 2-65
Interrupt Controller Block Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 2-65
iRMXTM 86 Interrupt Controller Interconnection ........................................ 2-66
80186 Interrupt Controller Registers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-66
INTO/INT1 Control Register Formats ................................................. 2-66
INT2/INT3 Control Register Format .................................................. 2-67
80186 Interrupt Sequencing ....................................................... 2-67
Interrupt Controller Control Register ................................................. 2-68
80186 Non-Cascaded Interrupt Connection ........................................... 2-69
Cascade and Special Fully Nested Mode Interface ...................................... 2-69
80186/8258A Interrupt Cascading ................................................... 2-70
Example Interrupt Controller Interface Code ........................................... 2-71
80186 iRMXTM 86 Mode Interface ................................................... 2-72
80186/80130 iRMXTM 86 Mode Interface ............................................. 2-72
80186 iRMXTM 86 Mode Interrupt Acknowledge Timing .................................. 2-74
80186 Cascaded Interrupt Acknowledge Timing ........................................ 2-75
80186 Memory Areas and Chip Selects .............................................. 2-75
80186 Chip Select Control Registers ................................................. 2-76
UMCS Register ................................................................. 2-77
LMCS Register. ................................................................. 2-77
MPCS Register ................................................................. 2-77
MMCS Register ................................................................. 2-78
Clock In/Clock Out Timing ......................................................... 2-79
80186 Clock Generator Block Diagram ............................................... 2-79
Recommended iAPX 186 Crystal Configuration ........................................ 2-80
80186 Crystal Connection ......................................................... 2-80
80186 Clock Generator Reset ...................................................... 2-81
Coming out of Reset ............................................................. 2-81
Submit file Example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3-2
8087 Numeric Data Processor Pin Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3-3
Typical iAPX 86/2X Family System Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3-4
Typical iAPX 186/2X Family System Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3-5
Test for the Existence of an 8087. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3-6
iSBC 337 MULTIMODULE Mounting Scheme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3-6
8087 Numeric Processor Extension Block Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3-6
Non-Memory Reference Escape Instruction Form
......................................3-7
Memory Reference Escape Instruction Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3-8
ESCAPE Instructions Not Used By the 8087 NPX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3-8
8087 NPX-8086/88 CPU System Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3-11
8087 NPX-80186/188 CPU System Configuration ..................................... 3-12
Synchronizing Execution With WAIT ................................................. 3-15
Three Processor System Bus Signal Connections ...................................... 3-17
iAPX 88/21 System Configuration ................................................... 3-18
iAPX 86/22 System . . . . . . . . . . . . . . . . .. . . . . . . .. . . . . . . . . . . . . . . . . .. . . . . . . . . . .. . . . . . . . 3-20
SMALLBLOCK-NP)LSAVE ..................................................... 3-21
SMALLBLOCK-NP)LRESTORE ................................................. 3-21
NP)LCLEAN Code Example ...................................................... 3-22
Inhibit/Enable 8087 Interrupts ...................................................... 3-23
8089 Simplified Functional Block Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 4-2
Channel Register Set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 4-3
xi

TABLE OF CONTENTS

4-3
4-4
4-5
4-6
4-7
4-8
4-9
4-10
4-11
4-12
4-13
4-14
4-15
4-16
4-17
4-18
4-19
4-20
4-21
4-22
5-1
5-2
5-3
5-4
5-5

Register Operands in MOV Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 4-5
Register Operands in Arithmetic Instructions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4-5
Register Operands in Logical Instructions............................... , . . . . . . . . . . . .. .4-6
Typical 8089 Machine Instruction Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-21
80891/0 Processor Pinout Diagram ................................................. 4-22
Command Communication Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 4-24
CPU/lOP Communications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . .. 4-24
iAPX 86/11,88/11 Configuration with 8089 in Local Mode .......... " .................... 4-25
Typical 8089 Remote Configuration ................................................ " 4-26
RESET-CA Initialization Timing ..............................•...................... 4-27
Channel Attention Decoding Circuit ................................................. 4-28
Channel Command Word Encoding ................................................. 4-28
Channel Commands ............................................................. 4-29
Channel State Save Area. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . • . . . . . . . . . . . . .. 4-30
Source Synchronized Transfer Cycle ..................... : ........................... 4-31
Destination Synchronized Transfer Cycle ............................................. 4-32
Read Bus Cycle (8-bit Bus) ........................................................ 4-35
Write Bus Cycle (16-bit Bus) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 4-36
Wait State Timing ................................................................ 4-38
Program Status Word ....................... . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . .. 4-40
80130 Simplified Functional Block Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . .. . .. 5-2
80130 OSP Pinout Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 5-3
OSP Typical Configuration With An 8086 .. . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . . . . . . . . .. 5-10
80130 OSP Timing Diagram ....................................................... 5-14
High-Speed Address Decoding Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . .. 5-15

xii

808618088 CPU

1

CHAPTER 1
8086/8088 CPU
In the "minimum mode," the CPU is configured for
small, single-processor systems. In this configuration all
control signals are provided by the CPU and the dual
function pins transfer signals directly to memory and
input/output devices.

1.1 INTRODUCTION
This chapter contains specific hardware design information on the operation and functions of INTEL's 8086/8088
Central Processing Units (CPUs). This information consists of a component overview of the 8086/88 microprocessors presenting architectural and software
considerations, individual device pin functional and electrical signal definitions, a detailed description of the minimum and maximum operating modes, detailed
descriptions of the operation of the address and data
buses, an explanation of the protocols supported for local
bus transfers to other devices, and a detailed description
of interrupt operation. In addition, descriptions of the various 8086/88 family support circuits and their circuit
functions appear at the end of the chapter. For more specific information of any of the 8086 family support circuits, refer to the Microsystem Components Handbook
(Order Number: 230843-002).

In the "maximum mode" these same pins take on different functions that are helpful in medium to large systems,
especially systems with multiple processors. An Intel
8288 Bus Controller is used to provide the control signal
outputs. This allows several of the device pins previously
delegated to these control functions to be redefined in order to support multiprocessing applications. A detailed
description of this feature is presented later in the chapter.
The 8086 and 8088 Microprocessors are designed to operate with the 8089 Input/Output Processor (lOP) and
other processors in multiprocessing and distributed processing systems. When used in conjunction with one or
more 8089s, the 8086 and 8088 expand the applicability
of microprocessors into lIO-intensive data processing systems. Built-in coordinating signals and instructions, and
electrical compatibility with Intel's MULTIBUS® shared
bus architecture, simplify and reduce the cost of developing multiple-processor designs.

1.2 COMPONENT OVERVIEW
The 8086 and 8088 are closely related third-generation
microprocessors. Both CPU's contain a 20-bit address
bus (1 mega-byte of address space) and utilize an identical
instruction/function format. Differences between the two
devices consist essentially of their respective data bus
widths. The 8088 is designed with an 8-bit external data
path to memory and lIO, while the 8086 can transfer 16
bits at a time. In almost every other respect the processors
are identical; software written for one CPU will execute
on the other without alteration. Both chips are contained
in standard 40-pin dual in-line packages and operate from
a single + 5V power source. Except where expressly
noted, the descriptions contained in this chapter are applicable to both microprocessors.

Both the 8086 and 8088 are substantually more powerful
than any microprocessor previously offered by Intel. Actual performance, of course, varies from application to
application, but comparisons to the industry standard
2-MHz 8080A are instructive. The 8088 is from four to
six times more powerful than the 8080A; the 8086 provides seven to ten times the 8080Xs performance.
The 8086's advantage over the 8088 is the result of the
8086's 16-bit external data bus. In applications that manipulate 8-bit quantities extensively, or that are
execution-bound, the 8088 can approach to within 10%
of the 8086's processing throughput.

The 8086 and 8088 Microprocessors can be used for a
wide spectrum of microcomputer applications. This flexibility is one of their most outstanding characteristics. Systems can range from small uniprocessor minimal-memory
designs implemented with a few chips (see Figure 1-1), to
multiprocessor systems with up to a megabyte of memory
(see Figure 1-2).

The improved performance of the 8086 and 8088 is accomplished by combining a l6-bit internal data path with
a pipelined architecture that allows instructions to be prefetched during spare bus cycles. In addition, a compact
instruction format that enables more instructions to be
fetched in a given amount of time contributes to this high
performance.

Both the 8086 and 8088 microprocessors use a combined,
or "time-multiplexed", address and data bus that permits
several of the device pins to serve dual functions. Some
microprocessor control pins also serve dual functions.
These pins are defined according to the strapping of a
single input pin (the MN/MX* pin). This feature provides
configuration of the CPU's in either "minimum mode" or
"maximum mode" circuits.

Software for 8086 and 8088 systems does not need to be
written in assembly language. The CPUs are designed to
provide direct hardware support for programs written in
high-level languages such as Intel's PLlM-86. Most
high-level languages store variables in memory; the
8086/8088 symmetrical instruction set supports direct operation on memory operands, including operands on the
1-1

210912·001

8086/8088 CPU

..

...

...

l..t

.1..
8155

4

•

RAM
I/O

TIMER

•
ADDRESS

8088

~

CPU

CONTROl.

•

.

4ADDRESS/DATA

,...

~
~

PORT B

PORTe

-______
} C l OTIMER
CK

,.

..

•
•

I>

•
•

~

PORT A

I~

r

8755A
EPROM

~

PORT A

~

PORTS

I/O

•

•

I>

r-- '--

r

4

8284
CLOCK

•

GEN.

,..

'---

8185
1K XB

RAM

•

...

... ""

""

Figure 1·1 Small8088·8ased System
the 8086 the BID incorporates a 16-bit data bus and a
6-byte instruction queue. In the 8088 the BID incorporates an 8-bit data bus and a 4-byte instruction queue.

stack. The hardware addressing modes provide efficient,
straightforward implementations of based variables, arrays, arrays of structures and other high-level language
data constructs. A powerful set of memory-to-memory
string operations is available for efficient character data
manipulation. Finally, routines with critical performance
requirements that cannot be met with PLlM-86 may be
written in ASM-86 (the 8086/8088 assembly language)
and linked with PLlM-86 code.

The EU executes instructions and the BIU fetches instructions, reads operands and writes results. The two units can
operate independently of one another and are able, under
most circumstances, to extensively overlap instruction
fetch with execution. The result is that, in most cases, the
time normally required to fetch instructions "disappears"
because the EU executes instructions that have already
been fetched by the BID. Figure 1-5 illustrates this overlap and compares it with traditional microprocessor operation. In the example, overlapping reduces the elapsed
time required to execute three instructions, and allows two
additional instructions to be prefetched as well.

Although the 8086 and 8088 Microprocessors are totally
new designs, they make the most of user's existing investments in systems designed around the 8080/8085 microprocessors. Many of the standard Intel memory,
peripheral control and communication chips are compatible with the 8086 and the 8088. Software is developed in
the familiar Intellec Microcomputer Development System
environment, and most existing programs, whether written in ASM-80 or PLlM-80, can be directly converted to
run on the 8086 and 8088.

In the 8086 CPU, when two or more bytes of the 6-byte
instruction queue are empty and the EU does not require
the BIU to perform a bus cycle, the BIU executes instruction fetch cycles to refill the queue. In the 8088 CPU,
when one byte of the 4-byte instruction queue is err-pty.
the BID executes an instruction fetCh cycle. Note that
since the 8086 CPU has a 16-bit data bus, it can access
two instruction object code bytes in a single bus cycle.
Since the 8088 CPU has an 8-bit data bus, it accesses one
instruction object code byte per bus cycle. If the EU

1.2.1 Architectural Overview
Both the 8086 and 8088 microprocessors incorporate two
separate processing units (see Figures 1-3 and 1-4). These
are the Execution Unit (EU) and the Bus Interface Unit
(BID). Both microprocessors contain identical EU's. In
1-2

210912'()01

8086/8088 CPU

Figure 1·2 8086/8088/8089 Multiprocessing System

empty when the EU is ready to fetch an instruction byte,
the EU waits for the instruction byte to be fetched. If a
memory location or I/O port must be accessed during the
execution of an instruction, the EU requests the BIU to
perform the required bus cycle.

issues a request for bus access while the BIU is in the
process of an instruction fetch bus cycle, the BIU completes the cycle before honoring the EU's request.

EXECUTION UNIT

The execution units (EU's) of the 8086 and 8088 are identical (see Figures 1-3 and 1-4). The EU is responsible for
the execution of all instructions, for providing data and
addresses to the BIU, and for manipulating the general
registers and the flag register. A 16-bit arithmetic/logic
unit (ALU) in the EU maintains the CPU status and control flags, and manipulates the general registers and instruction operands. All registers and data paths in the EU
are 16 bits wide for fast internal transfers.

BUS INTERFACE UNIT

The 8086 and 8088 BIU's are functionally identical, but
are implemented differently to match the structure and
performance characteristics of their respective buses.
Data is transferred between the CPU and memory or I/O
devices upon demand from the EU. The BIU executes all
external bus cycles. This unit consists of the segment and
communications registers, the instruction pointer and the
instruction object code queue. The BIU combines segment and offset values in a dedicated adder to derive
20-bit addresses, transfers data to and from the EU on the
AL U data bus and loads or "prefetches" instructions into
the queue. These "prefetched" instructions can then be
fetched by the EU with a minimum of wait.

The EU has no connection to the system bus, the "outside
world." It obtains instructions from a queue maintained
by the BIU. Likewise, when an instruction requires access to memory or to a peripheral device, the EU requests
the BIU to obtain and store the data. All addresses manipulated by the EU are 16 bits wide. The BIU, however,
performs an address relocation that gives the EU access to
the full megabyte of memory space.

During periods when the EU is busy executing instructions, the BIU "looks ahead" and fetches more instructions from memory. These instructions are stored in an
internal RAM array called the instruction stream queu-:.
The 8088 instruction queue holds up to four bytes of the
instruction stream, while the 8086 queue can store up to

When the EU is ready to execute an instruction, it fetches
the instruction object code byte from the BIU's instruction
queue and then executes the instruction. If the queue is
1-3

210912·001

8086/8088 CPU

AH

Al

CH

Cl

Bl

GENERAL

REGISTERS

DATA BUS

SP

(16 BITS)

BP
CS
SI
OS

INTERNAL
ALU DATA BUS

COMMUNICATIONS
REGISTERS

BUS
CONTROL

LOGIC

(1& BITSI

EXECUTION UNIT

(EUI

808&

BUS

BUS INTERFACE UNIT
(Btu)

Figure 1-3 8086 Simplified Functional Block Diagram
requests a memory or 110 read or write (except that a
fetch already in progress is completed before executing
the EU's bus request).

six instruction bytes. These queue sizes allow the BIU to
keep the EU supplied with pre fetched instructions under
most conditions without monopolizing the system bus.
The 8088 BIU fetches another instruction byte whenever
one byte in its queue is empty and there is no active request for bus access from the EU. The 8086 BIU operates
similarly except that it does not initiate a fetch until there
are two empty bytes in its queue. The 8086 BIU normally
obtains two instruction bytes per fetch. If a program
transfer forces fetching from an odd address, the 8086
automatically reads one byte from the odd address and
then resumes fetching two-byte words from the subsequent even addresses.

GENERAL REGISTERS

Both CPU's have the same complement of eight 16-bit
general registers (see Figure 1-6). The general registers
are subdivided into two sets of four registers each. These
are the data registers (sometimes called the H & L group
for "high" and "low"), and the pointer and index registers (sometimes called the P & I group).
The data registers are unique in that their upper (high) and
lower halves are separately addressable. This means that
each data register can be used interchangeably as a 16-bit
register, or as a two 8-bit registers. The other CPU registers are always accessed as 16-bit only. The data registers
can be· used without constraint in most arithmetic and
logic operations. In addition, some instructions use cere
tain registers implicitly (see Table 1-1), therefore allowing compact yet powerful encoding.

In most circumstances the queues contain at least one byte
of the instruction stream and the EU does not have to wait
for instructions to be fetched. The instructions in the
queue are those stored in memory locations immediately
adjacent to and higher than the instruction currently being
executed. That is, they are the next logical instructions so
long as execution proceeds serially. If the EU executes an
instruction that transfers control to another location, the
BIU resets the queue, fetches the instruction from the new
address, passes it immediately to the EU, and then begins
refilling the queue from the new location. In addition, the
BIU suspends instruction fetching whenever the EU

The pointer and index registers can also be used in most
arithmetic and logic operations. All eight general registers fit the definition of an "accumulator" as defined in
1-4

210912-001

8086/8088 CPU

AH

AL

BL
CH

GENERAL
REGISTERS

OH

OL
DATA SUS
(6 BITS)

BP

01

CS

51

os
ss
ES

INTERNAL
COMMUNICATIONS
REGISTERS

BUS

CONTROL
LOGIC

sus INTERFACE

8088
BUS

UNIT

(BIU)

Figure 1-4 8088 Simplified Functional Block Diagram
INSTRUCTION POINTER

first and second generation microprocessors. The P & I
registers (except for BP) are also used implicitly in some
instructions (see Table I-I).

The 16-bit instruction pointer (IP) is similar to the program counter (PC) in the 8080/8085 CPUs. The instruction pointer is updated by the BIU so that it contains the
offset (distance in bytes) of the next instruction from the
beginning of the current code segment; i.e., IP points to
the next instruction. During normal execution, IP contains the offset of the next instruction to be fetched by the
BIU. Whenever IP is saved on the stack, however, it is
first automatically adjusted to point to the next instruction
to be executed. Programs do not have direct access to the
instruction pointer, but instructions cause it to change and
to be saved on and restored from the stack.

SEGMENT REGISTERS

The 8086 and 8088 memory space (up to one megabyte) is
divided into logical segments of up to 64k bytes each. The
CPU has direct access to four segments at a time. The
base addresses (starting locations) of these memory segments are contained in the segment registers (see Figure
1-7). The CS register points to the current code segment.
Instructions are fetched from the CS segment. The SS
register points to the current stack segment. Stack operations are performed on locations in the SS segment. The
DS register points to the current data segment. The DS
register generally contains program variables. The ES
register points to the current extra segment, which also is
typically used for data storage.

FLAGS
The 8086 and 8088 have six I-bit status flags (see Figure
1-8) that the EU posts to reflect certain properties of the
result of an arithmetic or logic operation. A group of instructions is available that allows a program to alter its
execution depending on the state of these flags, i.e., on
the result of a prior operation. Different instructions affect the status flags differently; in general, however, the
flags reflect the following conditions:

The segment registers are accessable to programs and can
be manipulated with several instructions. Good programming practice and consideration of compatibility with future Intel hardware and software products dictate that the
segment registers be used in a disciplined fashion.
1-5

210912-001

8086/8088 CPU

~------------------------ELASPEDTIME------------------------~.~

{ "" l\~J~'&'(~

SECOND
GENERATION
MICROPROCESSOR

BUS:

EU:

~~~~1J~~

t~1~~ ~ft9}] ~~~§fJj 1\:~!~i~:~\\1

lEI

1\~~~R:~~~il

a a

a a

I :~~ff8~~~: il

EffX?YX~~

8086/8088
MICROPROCESSOR

-

INSTRUCTION STREAM
1st INSTRUCTION (ALREADY FETCHED):
EXECUTE AND WRITE RESULT

I II
III

2nd INSTRUCTION:
EXECUTE ONLY

III

4th INSTRUCTION:
(UNDEFINED)

III

5th INSTRUCTION:
(UNDEFINED)

3.d INSTRUCTION:
READ OPERAND AND EXECUTE

Figure 1-5 Overlapped Instruction Fetch and Execution
1. If AF (the auxiliary flag) is set, there has been a carry
out of the low nibble into the high nibble or a borrow
from the high from the high nibble into the low nibble
of an 8-bit quantity (low-order byte of a 16-bit
quantity). This flag is used by decimal arithmetic instructions.

its destination location. An Interrupt On Overflow instruction is available that will generate an interrupt in
this situation.
4. If SF (the sign flag) is set, the high-order bit of the
result is a 1. Since negative binary numbers are represented in the 8086 and 8088 in standard two's complement notation, SF indicates the sign of the result
(0 =positive, 1 =negative).

2. If CF (the carry flag) is set, there has been a carry out
of, or a borrow into, the high-order bit of the result
(8-or 16- bit). The flag is used by instructions that add
and subtract multibyte numbers. Rotate instructions
can also isolate a bit in memory or a register by placing it in the carry flag.

5. If the PF (the parity flag) is set, the result has even
parity, an even number of I-bits. This flag can be used
to check for data transmission errors.
6. If ZF (the zero flag) is set, the result of the operation
is O.

3. If OF (the overflow flag) is set, an arithmetic overflow
has occurred; that is, a significant digit has been lost
because the size of the result exceeded the capacity of

Three additional control flags (see Figure 1-8) can be set
and cleared by programs to alter processor operations:
1-6

210912-001

8086/8088 CPU

I

15

H

I - - AH

-

~ -Ai: - BX

I- - B H DATA {
GROUP

m

I

8 7

-r -

IiL. - -

ACCUMULATOR

I----~---CH
CL

COUNT

1--6H-~-DL--

DATA

15

F

BASE

AUXILIARY CARRY

' - - - - - - - ZERO

' - - - - - - - - - SIGN

0

POINTER {
AND
INDEX
GROUP

'----------OVERFLOW

SP

STACK
POINTER

BP

BASE
POINTER

SI

SOURCE
I NDEX

01

DESTINATION
INDEX

'-----------INTERRUPT-ENABLE

'--------------OIRECTlON

'---------------TRAP

Figure 1-8 Status Flags
1. Setting DF (the direction flag) causes string instructions to auto-decrement; that is, to process strings
from the high address to the low address, or from
"right to left." Clearing DF causes string instructions
to auto-increment, or process strings from "left to
right."

Figure 1-6 General Registers

15
CS

CODE
SEGMENT

OS

DATA
SEGMENT

SS

STACK
SEGMENT

ES

EXTRA
SEGMENT

2. Setting IF (the interrupt-enable flag) allows the CPU
to recognize external (maskable) interrupt requests.
Clearing IF disables these interrupts. IF has no affect
on either non- maskable external or internally generated interrupts.
3. Setting TF (the trap flag) puts the processor into
single-step mode for debugging. In this mode, the
CPU automatically generates an internal interrupt after each instruction, allowing a program to be inspected as it executes instruction by instruction.

Figure 1-7 Segment Registers
Table 1-1 Implicit Use of General Registers

MODE SELECTION
Each of the processors has a strap pin (MN/MX*) that
defines the function of eight CPU pins in the 8086 and
nine pins in the 8088. Connecting MN/MX* to + 5V
places the CPU in minimum mode. This configuration is
designed for small systems (roughly one or two boards)
and the CPU provides bus control signals needed by
memory and peripherals. When MN/MX* is strapped to
ground, the CPU is configured in maximum mode. In this
configuration the CPU encodes control signals on three
lines. An 8288 Bus Controller is added to decode the signals for the rest of the system. The CPU uses the remaining free lines for a new set of signals designed to help
coordinate the activities of other processors in the system.

OPERATIONS

REGISTER

B~CARRY
~PARITY

AX

Word Multiply, Word Divide,
Word 1/0

AL

Byte Multiply, Byte Divide, Byte
1/0, Translate, Decimal Arithmetic

AH

Byte Multiply, Byte Divide

BX

Translate

CX

String Operations, Loops

CL

Variable Shift and Rotate

OX

Word Multiply, Word Divide,
Indirect 1/0

SP

Stack Operations

SI

String Operations

01

String Operations

SEGMENTATION
Programs for the 8086 and 8088 "view" the memory
space (one megabyte) as a group of segments that are defined by application. A segment is a logical unit of memory that may be up to 64k bytes long. Each segment is
made up of contiguous memory locations and is an independent, separately-addressable unit. Every segment is
1-7

210912-001

8086/8088 CPU

FULLY

OVERLAPP~D1SEGMENT 0
PARTLY

•

OVERLAP~I

CONTIGUOUS~~

-!

SEGMENTC

1- j
I

I

1 SEGMENTB

SEGMENT A

I

I

DISJOINT
LOGICAL
SEGMENTS

SEGMENT E

I

-+1___-+-1___-+1___--..17 }~~S~~~L

""1_ _ _

t

t

OH

10000H

t

t

20000H

30000H

Figure 1·9 Segment Locations in Physical memory

assigned (by software) a base address, which is its starting
location in the memory space. All segments begin on
16-byte memory boundaries. There are no other restrictions on segment locations. Segments may be adjacent,
disjoint, partially overlapped, or fully overlapped (see
Figure 1-9). A physical memory location may be mapped
into (contained in) one or more logical segments.

Every application will define and use segments differently. The currently addressable segments provide a generous work space; 64k bytes for code, a 64k byte stack
and 128k bytes of data storage. Many applications can be
written to simply initialize the segment registers and then
forget them. Larger applications should be designed with
careful consideration given to segment definition.

The segment registers point to (contain the base address
values of) the four currently addressable segments (see
Figure 1-10). Programs obtain access to code and data in
other segments by changing the segment registers to point
to the desired segments.

The segment structure of the 8086/8088 memory space
supports modular software design by discouraging huge,
monolithic programs. The segments also can be used to
advantage in many programming situation. Thke, for example, the case of an editor for several on-line terminals.
A 64k test buffer (probably an extra segment) could be
assigned to each terminal. A single program could maintain all the buffers by simply changing register ES to point
to the buffer of the terminal requiring service.

FFFFFH

PHYSICAL ADDRESS GENERATION
DATA:

os:

CODE:

CS:

I
I

STACK: SS:

I

EXTRA: ES:

I

B

H

/--1---,
1-, I

I I
I
I II
I
I L
I

h

In theory, it is useful to think of every memory location as
having two kinds of addresses, physical and logical. A
physical address is the 20-bit value that uniquely identifies each byte location in the megabyte memory space.
Physical addresses range from OR to FFFFFH. All exchanges between the CPU and memory components use
this physical address.

D

-: 8

Programs deal with logical, rather than physical addresses and allow code to be developed without prior
knowledge of where the code is to be located in memory
an facilitate dynamic management of memory resources.
A logical address consists of a segment base value and an
offset value. For any given memory location, the segment
base value locates the first byte of the containing segment
and the offset value is the distance, in bytes, of the target
location from the beginning of the segment. Segment base
and offset values are unsigned 16-bit quantities. The
lowest-addressed byte in a segment has an offset of O.
Many different logical addresses can map to the same

L_

OH

Figure 1·10 Currently Addressable Segments

1·8

210912·001

8086/8088 CPU

r
PHYSICAL
ADDRESS

2 C4H

.

t
OFFSET

r

2 C3H
2 C2H

(3H)

SEGMENT
BASE

'r

2 C1H

.. I

2 COH
2 BFH
2 BEH
2 BDH
2 BCH
2 BBH

LOGICAL
ADDRESSES

...

2 BAH

OFFSET
(13H)

2 B9H
2 B8H
2 B7H
2 B6H
2 B5H
2 B4H
2 B3H
2 B2H
2 B1H

'- SEGMENT
BASE

2 BOH

"

"

Figure 1-11 Logical and Physical Addresses

physical location. In the example (see Figure 1-11) physical memory location 2C3H is contained in two different
overlapping segments, one beginning at 2BOH and the
other at 2COH.

a memory variable is calculated by the EU. This calculation is based on the addressing mode specified in the instruction; the result is called the operand's effective
address (EA).

Whenever the BIU accesses memory -to fetch an instruction or to obtain or store a variable -it generates a physical
address from a logical address. This is done by shifting
the segment base value four bit positions and adding the
offset as illustrated in Figure 1-12. Note that this addition
process provides for modulo 64k addressing (addresses
wrap around from the end of a segment to the beginning
of the same segment).

Strings are addressed differently than other variables. The
source operand of a string instruction is assumed to lie in
the current data segment, but another currently addressable segment may be specified. Its offset is taken from
register SI, the source index register. The destination operand of a string instruction always resides in the current
extra segment; its offset is taken from 01, the destination
index register. The string instructions automatically adjust SI and DI as they process the strings one byte or word
at a time.

The BIU obtains the logical address of a memory location
from different sources, depending on the type of reference that is being made (see Table 1-2). Instructions are
always fetched from the current code segment; IP contains the offset of the target instruction from the beginning of the segment. Stack instructions always operate on
the current stack segment; SP contains the offset of the
top of the stack. Most variables (memory operands) are
assumed to reside in the current data segment, although a
program can instruct the BIU to access a variable in one
of the other currently addressable segments. The offset of

When register BP, the base pointer register, is designated
as a base register in an instruction, the variable is assumed
to reside in the current stack segment. Therefore, register
BP provides a convenient way to address data on the
stack. However, BP can also be used to access data in any
of the other currently addressable segments.
The BIU's segment assumptions are a convenience to programmers in most cases. However, it is possible for a programmer to explicitly direct the BIU to access a variable
in any of the currently addressable segments. (The only

1-9

210912-001

8086/8088 CPU

rlFTLEFT 4 BITS

·,-1------~-4~!~0~1
~;9~------t,..........· ~O

I

+

0

o

2

2

2

0 0 2 2

II....------l

,OFFSET

0

o

I~19:-----r+---!0I
1

1 2 3 4

15

t

15

I
U~~~ENT}
~15~--------~0
~~g~E~~
I

6

2

PHYSICAL ADDRESS

TO MEMORY

Figure 1·12 Physical Address Generation

other words, all offsets in the program must be relative to
fixed values contained in the segment registers. This allows the program to be moved anywhere in memory as
long as the segment registers are updated to point to the
new base addresses.

exception is the destination operand of a string instruction
which must be an extra segment.) This is done by preceding an instruction with a segment override prefix. This
one-byte machine instruction tells the BID which segment
register to use to access a variable referenced in the following instruction.

STACK IMPLEMENTATION
DYNAMICALLY RELOCATABLE CODE

Stacks in the 8086 and 8088 are implemented in memory
and are located by the stack segment register (SS) and the
stack pointer (SP). A system may have an unlimited number of stacks, and a stack may be up to 64k bytes long, the
maximum length of a segment. (An attempt to expand a
stack beyond 64k bytes overwrites the beginning of the
segment.) One stack is directly addressable at a time; this
is the current stack, often referred to simply as "the"
stack. SS contains the base address of the current stack
and SP points to the top of stack (IDS). In other words,
SP contains the offset of the top of the stack from the
stack segment's base address. However, the stack's base
address (contained in SS) is not the "bottom" of the stack.

The segmented memory structure of the 8086 and 8088
makes it possible to write programs that are
position-independent, or dynamically relocatable. Dynamic relocation allows a multiprogramming or multitasking system to make particularly effective use of
available memory. Inactive programs can be written to
disk and the space they occupied allocated programs. If a
disk-resident program is needed later, it can be read back
into any available memory location and restarted. Similarly, if a program needs a large contiguous block of storage, and the total amount is only available in non-adjacent
fragments, other program segments can be compacted to
free up a continuous space. This process is illustrated
graphically in Figure 1-13.

Stacks in the 8086 and 8088 are 16 bits wide; instructions
that operate on a stack add and remove stack items one
word at a time. An item is pushed onto the stack (see
Figure 1-14) by decrementing SP by 2 and writing the
item at a new IDS. An item is popped off the stack by

To be dynamically relocatable, a program must not load
or alter its segment registers and must not transfer directly to a location outside the current code segment. In

Table 1·2 Logical Addresses Sources

TYPE OF MEMORY REFERENCE

Instruction Fetch
Stack Operation
Variable (except following)
String Source
String Destination
BP Used As Base Register

DEFAULT
SEGMENT
BASE

ALTERNATE
SEGMENT
BASE

OFFSET

CS
SS
DS
DS
ES
SS

NONE
NONE
CS,ES,SS
CS,ES,SS
NONE
CS,DS,ES

IP
SP
Effective Address
SI
DI
Effective Address

1-10

210912-001

8086/8088 CPU

AFTER RELOCATION

BEFORE RELOCATION

CODE
SEGMENT

I
STACK
SEGMENT

CS

CS

J

-

,.....

SS

SS

DS

DS

ES

ES

CODE
SEGMENT
STACK
SEGMENT
DATA
SEGMENT
EXTRA
SEGMENT

DATA
SEGMENT

EXTRA
SEGEMENT

r::::::J

FREE SPACE

Figure 1-13 Dynamic Code Relocation

copying it from 'IDS and the incrementing SP by 2. In
other words, the stack goes down in memory toward its
base address. Stack operations never move items on the
stack, nor do they erase them. The top of the stack
changes only as a result of updating the stack pointer.

accesses the complete word in one bus cycle. If the word
is located at an odd-numbered address, the 8086 accesses
the word one byte at a time in two consecutive bus cycles.
To maximize throughput in 8086-based systems, 16-bit
data should be stored at even addresses (should be
word-aligned). This is particularly true of stacks. Unaligned stacks can slow a system's response to interrupts.
Nevertheless, except for the performance penalty,
word alignment is totally transparent to software. This
allows maximum data packing where memory space is
constrained.

RESERVED MEMORY

Two areas in extreme low and high memory (see Figure
1-15) are dedicated to specific processor functions or are
reserved by Intel Corporation for use by Intel hardware
and software products. The locations are OH through 7FH
(128 bytes) and FFFFOH through FFFFFH (16 bytes).
These areas are used for interrupt and system reset processing. 8086 and 8088 application systems do not use
these areas for any other purpose. Doing so may make
these systems incompatible with future Intel products.

The 8086 always fetches the instruction stream in words
from even addresses except that the first fetch after a program transfer to an odd address obtains a byte. The instruction stream is disassembled inside the processor and
instruction alignment will not materially affect the performance of most systems.

8086/8088 MEMORY ACCESS DIFFERENCES

The 8088 always accesses memory in bytes. Word operands are accessed in two bus cycles regardless of their
alignment. Instructions are also fetched one byte at a
time. Although alignment of word operands does not

The 8086 can access either 8 or 16 bits of memory at a
time. If an instruction refers to a word variable and that
variable is located at an even-numbered address, the 8086
1-11

210912-001

8086/8088 CPU

POPAX
POPBX
PUSH AX
EXISTING
STACK

AX'12134

~

1062

00

11

1060

22

33

105E

44

55

105B

66

77

105A

88

99

TOS
:...::..::-. 1058 AA BB
1056

r

01

23

1054 45

67

1052 89

AB

1050; CD; EF

I'"

00

11

1060

22

33

105E

44

55

~(I)

105B

66

77

0'"
0>0

105A

88

99

:1;0
~~

r
~O

~~
ffl(l)

1058

AA

BB

~1056

34

12

1054

45

67

1052

89

AB

r

a:w
a..:I:

~~

1-1
I
I

1062

0«

I 34 1-,
I
BX' BB IAA
I

AX '12

I
I

11

1060

22

33

lOSE

44

55

105C 66

~105A

r

1050; CD; EF

00

1062

f.J

'-1

77

88

99

105B AA

BB

1056

12

34

I
I
I
I

1054

45

67

1052

89

AB

J

I
I
I
I
I
I

_--1

1050; CD; EF

10

50 , SS

10

50 'SS

10

50 , SS

00

I 08 I SP

00

061 SP

00

I OA I SP

STACK OPERATION FOR CODE SEQUENCE
PUSH AX
POPAX
POPBX

Figure 1·14 Stack Operation
affect the performance of 8088, locating 16-bit data on
even addresses will insure maximum throughput if the
system is ever transferred to an 8086.

1.2.2 Software Overview
The 8086 and 8088 execute exactly the same instructions.
This instruction set includes equivalents to the instructions typically found in previous microprocessors, such as
the 8080/8085. Significant new operations include:

FFFFFH
RESERVED
FFFFCH
FFFFBH
DEDICATED

•

multiplication and division of signed and unsigned binary numbers as well as unpacked decimal numbers,

•

move, scan and compare operations for strings up to
64k bytes in length,

•

non-destructive bit testing,

•

byte translation from one code to another,

•

software generated interrupts,

FFFFOH
FFFEFH

OPEN

.,

I
,

[FFH

OPEN

• a group of instructions that can help coordinate the
activities of multiprocessing systems.

BOH
7FH
RESERVED
14H
13H

RESERVED

The following paragraphs provide a description of the instructions by category and a detailed discussion of the
various operand addressing modes. In addition, a complete instruction set summary is provided in tabular form
which recaps each device instruction by category, and
provides timing cycles for each instruction. Information
is also described on how to encode and decode machine
instructions for any given assembly code instructioh.

OPEN

DEDICATED

OH

OH
MEMORY

100H
FFH
FBH
F7H

liD

Figure 1·15 Reserved Memory and 110 Locations
1-12

210912·001

8086/8088 CPU

Table 1-3 Data Transfer Instructions

8086/8088 INSTRUCTION SET
The 8086/8088 instructions treat different types of operands uniformly. Nearly every instruction can operate on
either byte or word data. Register, memory and immediate operands may be specified interchangeably in most
instructions. The exception to this is that immediate values serve as "source" and not "destination" operands. In
particular, memory variables may be added to, subtracted
from, shifted, compared, and so on, in place, without
moving them in and out of registers. This saves instructions, registers, and execution time in assembly language
programs. In high-level languages, where most variables
are memory based, compilers can produce faster and
shorter object programs.

GENERAL PURPOSE
MOV
PUSH
POP
XCHG
XLAT

Move byte or word
Push word onto stack
Pop word off stack
Exchange byte or word
Translate byte
INPUT /OUTPUT

IN
OUT

Input byte or word
Output byte or word
ADDRESS OBJECT

The 8086/8088 instruction set can be viewed as existing
on two levels. One is the assembly level and the other is
the machine level. To the assembly language programmer, the 8086/8088 appear to have a repertoire of about
100 instructions. One MOV (move) instruction, for example, transfers a byte or a word from a register or a memory location or an immediate value to either a register or a
memory location. The 8086/8088 CPU's, however, recognize 28 different MOV machine instructions ("move
byte register to memory," move word immediate to register," etc.).

LEA
LDS
LES

Load effective address
Load pointer using DS
Load pointer using ES
FLAG TRANSFER

LAHF
SAHF
PUSHF
POPF

The two levels of instruction set address two different requirements: efficiency and simplicity. The approximately
300 forms of machine-level instructions make very efficient use of storage. For example, the machine instructions that increments a memory operand is three or four
bytes long because the address of the operand must be
encoded in the instruction. To increment a register, however, does not require as much information, so the instruction can be shorter. The 8086/88 have eight different
machine-level instructions that increment a different
16-bit register. Each of these instructions are only one
byte long.

Load AH register from flags
Store AH register in flags
Push flags onto stack
Pop flags off stack

Data transfer instructions are categorized into four types:
1) general purpose; 2) input/output; 3) address object;
and 4) flag transfer. The stack manipulation instructions,
which are used for transferring flag contents, and the instructions for loading segment registers are also included
in this group. Figure 1-16 shows the flag storage formats.
These formats are used primarily by the LAHF instruction

~:~~'

The assembly level instructions simplify the programmers
view of the instruction set. The programmer writes one
form of an INC (increment) instruction and the ASM-86
assembler examines the operand to determine which machine level instruction to generate. The following paragraphs provide a functional description of the
assembly-level instructions.

I

Z ! U !A! U ! P! U!C
1765432101

Is!

1_8080/8085 FLAGS_I

1

1

I

~g~~F, I u , U

I

U , U ,0,0

I

I

I , T , S

15 14 13 12 11 10 9

8

7

I

Z

6

I

U

5

I

A

I

4

U , P, U

3

2

1

,c

I

0

=
=

U UNDEFINED; VALUE IS INDETERMINATE
D
OVERFLOW FLAG
D = DIRECTION FLAG
I = INTERRUPT ENABLE FLAG
T = TRAP FLAG
S = SIGN FLAG
Z = ZERO FLAG
A = AUXILIARY CARRY FLAG
P = PARITY FLAG
C = CARRY FLAG

Data Transfer Instructions
The 8086/8088 instruction set contains 14 data transfer
instructions. These instructions move single bytes and
words between memory and registers, and also move single bytes and words between the AL or AX registers and
110 ports. Table 1-3 lists the four types of data transfer
instructions and their functions.

Figure 1-16 Flag Storage Formats
1-13

210912-001

8086/8088 CPU

Table 1-4 Arithmetic Instructions

ADD
ADC
INC
AAA
DAA
SUB
SBB
DEC
NEG
CMP
AAS
DAS
MUL
IMUL
AAM
DIV
IDIV
AAD
CBW
CWO

always assumes that the operands specified in arithmetic
instructions contain data that represents valid numbers for
the type of instruction being performed. Invalid data may
produce unpredictable results.

ADDITION
Add byte or word
Add byte or word with carry
Increment byte or word by 1
ASCII adjust for addition
Decimal adjust for addition
SUBTRACTION

Arithmetic instructions post certain characteristics of the
result of an operation to six flags. Refer to Chapter 3 in
the iAPX 86/88,186/188 User's Manual Programmers
Reference for a detailed description of the arithmetic instructions and flags.

Subtract byte or word
Subtract byte or word with
borrow
Decrement byte or word by 1
Negate byte or word
Compare byte or word
ASCII adjust for subtraction
Decimal adjust for subtraction

Bit Manipulation Instructions
The 8086 and 8088 CPU's provide three groups of instructions for manipulating bits within both bytes and
word. These three groups are logicals, shifts and rotates.
Thble 1-6 lists these three groups of bit manipulation instructions with their functions.

MULTIPLICATION
Multiply byte or word unsigned
Integer multiply byte or word
ASCII adjust for multiply
DIVISION
Divide byte or word unsigned
Integer divide byte or word
ASCII adjust for division
Convert byte to word
Convert word to doubleword

a. Logical
The logical instructions include the boolean operators

"not", "and", "inclusive or", and "exclusive or". A
TEST instruction that sets the flags as a result of a boolean "and" operation, but does not alter either of its operands, is also included.

b. Shifts
when converting 8080/8085 assembly language programs
to run on the 8086 or 8088. The address object instructions manipulate the addresses of variables instead of the
contents of values of the variables. This is useful for list
processing, based variable and string operations.

The bits in bytes and words may be shifted arithmetically
or logically. Up to 255 shifts may be performed, according to the value of the count operand coded in the instruction. The count may be specified as a constant 1, or
register CL, allowing the shift count to be a variable supplied at execution time. Arithmetic shifts may be used to
multiply and divide binary numbers by powers of two.
Logical shifts can be used to isolate bits in bytes or words.

Arithmetic Instructions
The arithmetic instructions (see Table 1-4) perform operations on four types of numbers: 1) unsigned binary; 2)
signed binary (integers); 3) unsigned packed decimal; and
4) unsigned unpacked decimal. See Table 1-5. Binary
numbers may be 8 or 16 bits long. Decimal numbers are
stored in bytes, two digits per byte for packed decimal and
one digit per byte for unpacked decimal. The processor

c. Rotates
Bits in bytes and words can also be rotated. Bits rotated
out of an operand are not lost as in a shift, but are "circled" back into the other "end" of the operand. As in the
shift instructions, the number of bits to be rotated is taken

Table 1-5 Arithmetic Interpretation of 8-Bit Numbers
HEX

BIT PATTERN

UNSIGNED
BINARY

SIGNED
BINARY

UNPACKED
DECIMAL

PACKED
DECIMAL

+7

7

7

07

00000111

7

89

1 0001001

137

-119

invalid

89

C5

1 1000101

197

-59

invalid

invalid

1-14

210912-001

8086/8088 CPU

Table 1-7 String Instructions

Table 1-6 Bit Manipulation Instructions
LOGICALS

NOT
AND
OR
XOR
TEST

"Not" byte or word
"And" byteorword
"Inclusive or" byte or word
"Exclusive or" byte or word
"Test" byte or word

SHLISAL

Shift logical! arithmetic left
byte or word
Shift logical right byte or word
Shift arithmetic right byte or
word

SHIFTS

SHR
SAR

REP

Repeat

REPE/REPZ

Repeat while equal/zero

REPNE/REPNZ

Repeat while not
equal/not zero

MOVS

Move byte or word string

MOVSB/MOVSW

Move byte or word string

CMPS

Compare byte or word
string

SCAS

Scan byte or word string

LODS

Load by.te or word string

STOS

Store byte or word string

ROTATES

ROL
ROR
RCL
RCR

Rotate left byte or word
Rotate right byte or word
Rotate through carry left byte
or word
Rotate through carry right byte
or word

from the count operand, which may specify either a constant of 1, or the CL register. The carry flag may act as an
extension of the operand in two of the rotate instructions,
allowing a bit to be isolated in CF and then tested by a JC
(jump if carry) or JNC (jump if not carry) instruction.

contents of register DI (destination index) is taken as the
offset of the current destination string element. These
registers must be initialized to point to the
source/destination strings before executing the string instructions. The LDS, LES and LEA instructions are useful in performing this function.

String Instructions

String instructions automatically update SI and/or DI in
anticipation of processing the next string element. Setting
DF (direction flag) determines whether the index registers
are auto-incremented (DF =0) or auto-decremented
(DF = 1). Ifbyte strings are being processed, SI and/or DI
is adjusted by 1. The adjustment is 2 for word strings.

Five basic string operations, called primitives, allow
strings of bytes or words to be operated on, one element
(byte or word) at a time. Strings of up to 64k bytes may be
manipulated with these instructions. Instructions are
available to move, compare and scan for a value, as well
as moving string elements to and from the accumulator.
Table 1-7 lists the string instructions. These basic operations may be preceded by a special one-byte prefix that
causes the instruction to be repeated by the hardware, allowing long strings to be processed much faster than
would be possible with a software loop. The repetitions
can be terminated by a variety of conditions, and a repeated operation may be interrupted and resumed.

Table 1-8 String Instruction Register
and Flag Use

The string instructions operate similarly in many respects
(refer to Table 1-8). A string instruction may have a
source operand, a destination operand, or both. The harde
ware assumes that a source string resides in the current
data segment. A segment prefix may be used to override
this assumption. A destination string must be in the current extra segment. The assembler checks the attributes of
the operands to determine if the elements of the strings
are bytes or words. However, the assembler does not use
the operand names to address strings. Instead, the contents of register SI (source index) is used as an offset to
address the current element of the source string. Also, the
1-15

SI

Index (offset) for source string

01

Index (offset) for destination
string

CX

Repetition counter

ALiAX

Scan value
Destination for LODS
Source for STOS

OF

0= auto-increment SI, 01
1 = auto-decrement SI, 01

ZF

Scan / compare terminator

210912-001

8086/8088 CPU

If a repeat prefix has been coded, then register CX (count
register) is decremented by 1 after each repetition of the
string instruction. CX must be initialized to the number of
repetitions desired before the string instruction is executed. If CX is 0, the string instruction is not executed,
and control goes to the following instruction.

Table 1·9 Program Transfer Instructions
UNCONDITIONAL TRANSFERS

CALL
RET
JMP

Program Transfer Instructions
The sequence in which instructions are executed in the
8086/8088 is determined by the content of the code segment register (CS) and the instruction pointer (lP). The
CS register contains the base address of the current code
segment, the 64k portion of memory from which instructions are currently being fetched. The IP points to the
memory location from which the next instruction is to be
fetched. In most operating conditions, the next instruction
to be executed will have already been fetched and is waiting in the CPU instruction queue. The program transfer
instructions operate on the instruction pointer and on the
CS register; changing the content of these causes normal
sequential operation to be altered. When a program transfer occurs, the queue no longer contains the correct instruction. When the BIU obtains the next instruction from
memory using the new IP and CS values, it passes the
instruction directly to the EU and then begins refilling the
queue from the new location.
Four groups of program transfers are available with the
8086/8088 CPU's. See Table 1-9. These are unconditional
transfers, conditional transfers, iteration control instructions, and interrupt-related instructions.

a. Unconditional Transfers
The unconditional transfer instructions may transfer control to a target instruction within the current code segment
(intrasegment transfer) or to a different code segment (intersegment transfer). The ASM-86 Assembler terms an
intrasegment transfer SHORT or NEAR and an intersegment transfer FAR. The transfer is made unconditionally
any time the instruction is executed.

b. Conditional Transfers
The conditional transfer instructions are jumps that may
or may not transfer control depending on the state of the
CPU flags at the time the instruction is executed. These
18 instructions (see Thble 1-10) each test a different combination of flags for a condition. If the condition is "true"
then control is transferred to the target specified in the
instruction. If the condition is "false" then control passes
to the instruction that follows the conditional jump. All
conditional jumps are SHORT, that is, the target must be
in the current code segment and within -128 to + 127
bytes of the first byte of the next instruction (IMP OOH
jumps to the first byte of the next instruction). Since

Call procedure
Return. from procedure
Jump
CONDITIONAL TRANSFERS

JA/JNBE
JAE/JNB
JB/JNAE
JBE/JNA
JC
JE/JZ
JG/JNLE
JGE/JNL
JLlJNGE
JLE/JNG
JNC
JNE/JNZ
JNO
JNP/JPO
JNS
JO
JP/JPE
JS

Jump if above/not below
nor equal
Jump if above or
equal/not below
Jump if below/not above
nor equal
Jump if below or
equal/ not above
Jump if carry
Jump if equal/zero
Jump if greater/not less
nor equal
Jump if greater or
equal/not less
Jump if less/not greater
nor equal
Jump if less or equal/not
greater
Jump if not carry
Jump if not equal/not
zero
Jump if not overflow
Jump if not parity/parity
odd
Jump if not sign
Jump if overflow
Jump if parity / parity
even
Jump if sign
ITERATION CONTROLS

LOOP
Loop
LOOPE/LOOPZ
Loop if equal/zero
LOOPNE/LOOPNZ Loop if not equal/not
zero
JCXZ
Jump if register CX = 0
INTERRUPTS

INT
INTO
IRET

Interrupt
Interrupt if overflow
Interrupt return

210912·001

8086/8088 CPU

Table 1·10 Interpretation of Conditional Transfers
MNEMONIC

CONDITION TESTED

"JUMP IF .....

JA/JNBE
JAE/JNB
JB/JNAE
JBE/JNA
JC
JE/JZ
JG/JNLE
JGE/JNL
JLIJNGE
JLE/JNG
JNC
JNE/JNZ
JNO
JNPIJPO
JNS
JO
JP/JPE
JS

(CF OR ZF)=O
CF=O
CF=1
(CF OR ZF)=1
CF=1
ZF=1
((SF XOR OF) OR ZF)=O
(SF XOR OF)=O
(SF XOR OF)=1
((SF XOR OF) OR ZF)=1
CF=O
ZF=O
OF=O
PF=O
SF=O
OF=1
PF=1
SF=1

above/not below nor equal
above or equal/not below
below Inot above nor equal
below or equal I not above
carry
equal/zero
greater I not less nor equal
greater or equal/not less
less/not greater nor equal
less or equal I not greater
not carry
not equal I not zero
not overflow
not parity I parity odd
not sign
overflow
parity I parity equal
sign

Note: "above" and "below" refer to the relationship of two unsigned values;
"greater" and "less" refer to the relationship of two signed values.

OPERAND ADDRESSING MODES

jumps are made by adding the relative displacement of the
target to the instruction pointer, all conditional jumps are
self-relative and are appropriate for position-independent
routines.

The 8086 and 8088 access instruction operands in many
different ways. Operands may be contained in registers,
within the instruction itself, in memory, or at I/O ports.
Also, the addresses of memory and I/O port operands can
be calculated in several different ways. These addressing

c. Iteration Control
The iteration control instructions can be used to regulate
the repetition of software loops. These instructions use the
CX register as a counter. Like the conditional transfers,
the iteration control instructions are self-relative and may
only transfer to targets that are within -128 to + 127
bytes of themselves, i.e., they are SHORT transfers.

Table 1·11 Processor Control Instructions
FLAG OPERATIONS
STC
CLC
CMC
STO
CLO
STI
CLI

d. Interrupt Instructions
The interrupt instructions allow interrupt service routines
to be activated by programs as well as by external hardware devices. The effect of software interrupts is similar
to hardware-initiated interrupts. However, the processor
does not execute an interrupt acknowledge bus cycle if the
interrupt originates in software or with an NMI.

Set carry flag
Clear carry flag
Complement carry flag
Set direction flag
Clear direction flag
Set interrupt enable flag
Clear interrupt enable flag
EXTERNAL SYNCHRONIZATION

HLT
WAIT
ESC
LOCK

Processor Control Instructions
The processor control instructions (see Table 1-11) allow
programs to control various CPU functions. One group of
instructions updates flags, and another group is used primarily for synchronizing the 8086 or 8088 to external
events. A final instruction causes the CPU to do nothing.
Except for the flag operations, none of the processor control instructions affect the flags.

Halt until interrupt or reset
Wait for TEST pin active
Escape to external processor
Lock bus during next
instruction
NO OPERATION

NOP

1-17

No operation

210912-001

8086/8088 CPU

modes greatly extend the flexibility and convenience of
the instruction set. The following paragraphs briefly describe the register and immediate modes of operand addressing, and then provide a detailed description of the
memory and I/O addressing modes.

The displacement element is an 8-or 16-bit number that is
contained in the instruction. The displacement generally
is derived from the position oftheoperand name (a variable or label) in the program. The programmer can also
modify this value or explicitly specify the displacement.

Register and Immediate Operands

A programmer may specify that either BX or BP is to
serve as a base register whose content is to be used in the
EA computation.

Instructions that specify only register operands are generally the most compact and fastest executing of the operand
addressing forms. This is because the register operand
addresses are encoded in instructions in just a few bits,
and because these operands are performed entirely within
the CPU (no bus cycles are run). Registers may serve as
source operands, destination operands, or both.

Similarly, either SI or DI may be specified as the index
register. The displacement value is a constant. The contents of the base and index registers may change during
execution. This allows one instruction to access different
memory locations as determined by the current values in
the base and/or index registers. Effective address calculations with the BP are made using the SS register, by default, Although either the DS or the ES registers may be
specified instead.

Immediate operands are constant data contained in an instruction. The data may be either 8 or 16 bits in length.
Immediate operands can be accessed quickly because they
are available directly from the instruction queue. Like the
register operand, no bus cycles need to be run to obtain an
immediate operand. The limitations on immediate operands are that they may only serve as source operands and
that they are constant value i

b. Direct Addressing
Direct addressing is the simplest memory addressing
mode (see Figure 1-18). No registers are involved and the
EA is taken directly from the displacement of the instruction. Direct addressing is typically to access simple variables (scalars).

Memory Addressing Modes

Although the EU has direct access to register and immediate operands, memory operands must be transferred to
and from the CPU over the bus. When the EU needs to
read or write a memory operand, it must pass an offset
value to the BIU. The BIU adds the offset to the (shifted)
content of a segment register producing a 20Cbit physical
.address and then executes the bus cycle or cycles. needed
to access the operand.

c. Register Indirect Addressing
The effective address of a memory operand may be.taken
directly from one of the base or index registers (see Figure 1-19). One instruction can operate on many different
memory locations if the value in the base or index register
is updated appropriately. Any 16-bit general register may
be used for register indirect addressing with the JMP or
CALL instructions.

a. The Effective Address
The offset that the EU calculates for a memory operand is
called the operand's effective address or EA. This address
is an unsigned l6-bit number that expresses the operand's
distance in bytes from the beginning of the segment in
which it resides. The EU can calculate the effective address in several different ways. Information encoded in
the second byte of the instruction tells the EU how to calculate the effective address of each memory operand. A
compiler or assembler derives this information from the
statement or instruction written by the programmer. Assembly language programmers have access to all addressing modes.

d. Based Addressing
In based addressing (see Figure 1-20), the effective address is the sum of a displacement value and the content of
register BX or BP. Specifying register BP as a base register directs the BIU to obtain the operand from the current
stack segment (unless a segment override prefix is
present). This makes based addressing with BP a very
convenient way to access stack data.
Based addressing also provides a simple way to address
structures which may be located at different places in
memory (see Figure 1-21). A base register can be pointed
at the base of the structure and elements of the structure
can be addressed by their displacement from the structure
base. Different copies of the same structure can be accessed by simply changing the base register.

The EU calculates the EA by summing a displacement,
the content of a base register and the content of an index
register (see Figure 1-17). Any combination of these
three components may be present in a given instruction.
This allows a variety of memory addressing modes.
1-18

210912-001

8086/8088 CPU

SINGLE INDEX

DOUBLE INDEX

OR

OR

ENCODED
INTHE
INSTRUCTION
EU

{
EXPLICIT
INTHE
INSTRUCTION

l

ASSUMED
UNLESS
OVERRIDDEN
BY PREFIX

BIU

Figure 1-17 Memory Address Computation

e. Indexed Addressing

-..,
CEM!N: .-J

r----,.----r---~-

I

OPCODE

I MOD RIM 1

DISPLA

The effective address is calculated from the sum of a displacement plus the content of an index register (SI or DI)
in index addressing (see Figure 1-22). Indexed address is
often used to access elements in an array (see Figure
1-23). The displacement locates the beginning of the array, and the value of the index register selects one element

EA

Figure 1-18 Direct Addressing

II

OPCODE

I MOD RIM I

E~+i

BX

I--g~OR

SI

1--%7-

I

EA

I

I

EA

Figure 1-20 Based Addressing

Figure 1-19 Register Indirect Addressing
1-19

210912-001

8086/8088 CPU

cr
DISPLACEMENT

r1

,

BASE REGISTERj

I

HIGH ADDRESS

cr
Fi
DISPLACEMENT

,.

AGE

STATUS

RATE
VAe

i

DEPT

I
I

SICK
DIV

[BASE REGISTER

EMPLOYEE

L _____t---.JI
EA

ISTATUS

AGE

RATE
VAe

SICK

DePT

DIV

EMPLOYEE

J-,

Ei~=+i
I

:

I

EA

I

_-----.J

Figure 1-24 Based Index Addressing

LOW ADDRESS

f. Based Index Addressing

Based index addressing generates an effective address that
is the sum of a base register, an index register and a displacement (see Figure 1-24). This mode of addressing is
very flexible because two address components can be varied at execution time.

Figure 1-21 Accessing A Structure
With Based Addressing
( the first element is selected if the index register contains
0). Since all array elements are the same length, simple
arithmetic on the index register may select any element.

Based index addressing provides a convenient way for a
procedure to address an array allocated on a stack (see
Figure 1-25). Register BP can contain the offset of a reference point on the stack, typically the top of the stack
after the procedure has saved registers and allocated local
storage. The offset of the beginning of the array from the
reference point can be expressed by a displacement value,
and the index register can be used to access individual
array elements. Arrays contained in structures and matrices (two-dimensional arrays) can also be accessed with
based indexed addressing.
g. String Addressing
String instructions do not use the normal memory addressing modes to access operands. Instead, the index
registers are used implicitly (see Figure 1-26). When a
string instruction is executed, SI is assumed to point to the
first byte or word of the source string. DI is assumed to
point at the first byte or word of the destination string. In
a repeated string operation, the CPU's automatically adjust SI and DI to obtain subsequent bytes or words. Note
that for string instructions DS is the default segment register to SI and ES is the default segment register for DI.
This allows string instructions to easily operate on data
located anywhere within the one megabyte address space.

Figure 1-22 Indexed Addressing

HIGH ADDRESS

ARRAY (8)

r 'I.

DISPLACEMENT

I

I
I

INDEX

~GISTER

r-

"i I
t-L ------- .....
I

I

I

EA

A-RRAY (7)

ARRAY (6)

&':;':::;~=:..Il

ARRAY (5)
ARRAY (4)

ARRAY (3)
ARRAY (2)
ARRAY (1)
ARRAY (0)

--I

t
EA

I

I
I
I
I
I

_-------J

1/0 Port Addressing
Any of the memory operand addressing modes may be
used to access an I/O port if the port is memory mapped,
For example, a group of terminals can be accessed as an
"array". String instructions can also be used to transfer
data to memory-mapped ports with an appropriate hardware interface.

.... lWORO .....
LOW ADDRESS

Figure 1-23 Accessing an Array
With Indexed Addressing
1-20

210912-001

8086/8088 CPU

HIGH ADDRESS
DISPLACEMENT

I

6

J

~

r-

1

1

I

12

1

i

1

EA

1
1

1

OLD

1
INDEX !GISTER

2

PARM
IP

I BASE REGISTERJIBPI

1

. PARM

BP
IBPI

1

OLD

BX

OLD

AX

1

ARRAY (61

I
1

ARRAY 151

I

4

ARRAY (4)

ARRAY 131

t-

ARRAY 121

.------1

+ ______ 1_
L

ARRAY 111

---I

i
EA

1
1
1

ARRAY 101
COUNT
TEMP
STATUS

..... 1 WORD .....

LOWER ADDRESS

Figure 1-25 Accessing a Stacked Array with Based Index Addressing
Instruction timings are presented as the number of clock
periods required to execute a particular form of the instruction (register-to-register, immediate-to-memory,
etc.). If the system is running with a 5 MHz maximum
clock, the maximum clock period is 2oons; at 8MHz, the
clock period is 125ns. When memory operands are used,
" + EA" indicates a variable number of additional clock
periods needed to calculate the operand's effective address. Table 1-15 lists all effective address calculation
times.

Two different addressing modes can be used to access
ports located in the 110 space (see Figure 1-27). The port
number is an 8-bit immediate operand for direct addressing. This allow fixed access to ports numbered 0-255.
Indirect 110 port addressing is similar to register indirect
addressing of memory operands. The port number is
taken from register DX and can range from 0 to 65,535.
By previously adjusting the content of register DX, one
instruction can access any port in the 110 space. A group
of adjacent ports can be accessed using a simple software
loop that adjusts the value of DX.

INSTRUCTION SET SUMMARY
The following paragraphs, and tables, provide detailed information for the 8086/8088 instruction set. Tables 1-12,
1-13 and 1-14 explain the symbols that are used in Table
1-16, the instruction set reference data table. Machine
language instruction encoding and decoding information
is provided in the paragraphs immediately following the
instruction set summary.

IOPCODE

DIRECT PORT ADDRESSING

~

I

~___S~I____~~I

~1~P~O~R~T~A~D~D~R'=ES~s~1

SOURCEEA

____D_I____...J - - - I DESTINATION EA

INDIRECT PORT ADDRESSING

I

Figure 1-27 1/0 Port Addressing
Figure 1-26 String Operand Addressing
1-21

210912-001

8086/8088 CPU

Table 1·12 Key to Instruction Coding Formats
IDENTIFIER

USEDIN

destination

data transfer,
bit manipulation

A register or memory location that may contain data
operated on by the instruction, and which receives (is
replaced by) the result of the operation.

source

data transfer,
arithmetic,
bit manipulation

A register, memory location or immediate value that is
used in the operation, but is not altered by the instruction.

source-table

XLAT

Name of memory translation table addressed by register

EXPLANATION

BX.
target

JMP, CALL

A label to which control is to be transferred directly, or a
register or memory location whose content is the
address of the location to which control is to be transferred indirectly.

short-label

cond. transfer,
iteration control

A label to which control is to be conditionally
transferred; must lie within -128 to +127 bytes of the first
byte of the next instruction.

accumulator

IN,OUT

Register AX for word transfers, AL for bytes.

port

IN,OUT

An I/O port number; specified as an immediate value of
0-255, or register DX (which contains port number in
range 0-64k).

source-string

string ops.

Name of a string in memory that is addressed by register
SI; used only to identify string as byte or word and
specify segment override, if any. This string is used in
the operation, but is not altered.

dest-string

string ops.

Name of string in memory that is addressed by register
DI; used only to identify string as byte or word. This
string receives (is replaced by) the result of the operation.

count

shifts, rotates

Specifies number of bits to shift or rotate; written as
immediate value 1 or register CL (which contains the
count in the range 0-255).

interrupt-type

INT

Immediate value of 0-255 identifying interrupt pOinter
number.

optional-pop-value

RET

Number of bytes (0-64k, ordinarily an even number) to
discard from stack.

external-opcode

ESC

Immediate value (0-63) that is encoded in the instruction
for use by an external processor.

1-22

210912-001

8086/8088 CPU

Table 1-14 Key to Operand Types

Table 1-13 Key to Flag Effects
IDENTIFIER

IDENTIFIER

EXPLANATION

(blank)

not altered

0

cleared to 0

1

set to 1

X

set or cleared according
to result

U

undefined-contains no
reliable value

R

restored from previouslysaved value

(no operands) No operands are written
register
An 8- or 16-bit general register
reg 16
A 16-bit general register
seg-reg

Register AX or AL

immediate

A constant
O-FFFFH

For instructions which repeat a specified number of times,
the values m and n each consist of two parts in the relation
"x + y/rep", where x is the initial number of clocks required to start the instruction, and y is the number of
clocks corresponding to the number of iterations specified. For 16-bit repeated instructions on the 8088 and
80188, when the expression "(4 * transfers)" has to be
added to m or n, it should be added to the y part of the
expression before it is multiplied by the number of
repetitions.

in

the

range

immed8

A constant in the range O-FFH

memory

An 8- or 16-bit memory
location(1)
An 8-bit memory location(1)
A 16-bit memory location(1)

source-table

Name
table

source-string

Name of string addressed by
register SI
Name of string addressed by
register 01

dest-string

All of the instruction times given are of the form "n(m)" ,
where"n" is the number of clocks required for the 8086
to execute the given instruction, and "m" is the number of
clocks required by the 80186 for the same instruction.
The number of clocks required for the 8088 will be n for
8-bit operations and n + (4 * transfers) for 16-bit operations. For the 80188, the number of clocks will be m for
8-bit operations and m + (4 * transfers) for 16 bit
operations.

A segment register

accumulator

mem8
mem16

The timings given for control transfer instructions include
any additional clocks required to reinitialize the instruction queue as well as the time required to fetch the target
instructions. For instructions executing on an 8086, four
clocks should be added for each instruction reference to a
word operand located at an odd memory address to reflect
any additional operand bus cycles required. Also, for instructions executing on an 8088, four clocks should be
added to each instruction reference to a 16-bit memory
operand. This includes stack operations. The required
number of data references is listed for each instruction in
Table 1-16 to aid in this calculation.

Several additional factors can alter the actual execution
time from the figures shown in Table 1-16. The time provided assumes that the instruction has already been prefetched and that it is waiting in the instruction queue. This
assumption is valid under most, but not all, operating conditions. A series of fast executing (fewer than two clocks
per opcode byte) instructions can drain the queue and increase execution time. Execution time is also slightly

EXPLANATION

of

256-byte

translate

OX

Register OX

short-label

A label within -128 to +127
bytes of the end of the instruction

near-label

A label
segment

in

current

code

far-label

A label
segment

in

another

code

near-proc

A procedure in current code
segment

far-proc

A procedure in another code
segment

memptr16

A word containing the offset of
the location in the current code
segment to which control is to
be transferred(1)

memptr32

A doubleword containing the
offset and the segment base
address of the location in
another code segment to which
control is to be transferred(1)
A 16-bit general register
containing the offset of the
location in the current code
segment to which control is to
be transferred

regptr16

repeat

A string
prefix

instruction

repeat

(1)Any addreSSing mode-direct, register indirect, based, indexed, or based
indexed-may be used

1-23

210912·001

8086/8088 CPU

Table 1·15 Effective Address Calculation Time

EA COMPONENTS
Displacement Only
Base or Index Only
Displacement
+
Base or Index
Base
+
Index
Displacement
+
Base
+
Index

for this operand to avoid waiting a full 4-clock bus cycle).
If the queue is full the EU does not have to wait because
the BIU is idle. (This assumes the BIU can obtain the bus
on demand and no other processors are competing for the
.
bus).

CLOCKS'

6
(BX,BP,SI,DI)

5
With typical instruction mixes, the time actually required
to execute a sequence of instructions will be within
5 - 10% of the sum of the individual timings provided in
Table 1-16. Cases can be constructed, however, in which
execution time may be much higher than the sum of the
figures provided in the table. The execution time for a
given sequence of instructions is always repeatable, assmning .comparable external conditions (interrupts, coprocessor activity, etc.). Ifthe execution time for a given
series of instructions must be determined exactly, the instructions should be run on an execution vehicle such as
the iSBC 88/25 or 86/30 board.

9

(BX,BP,SI,DI)
BP + 01, BX + SI
BP+SI, BX+DI
BP+DI+DISP
BX+SI+DISP
BP+SI+DISP
BX+ 01+ DISP

7

8
11

12

• Add 2 clocks for segment override

effected by the interaction of the EU and BIU when memory operands must be read or written. If the EU needs
access to memory, it may have to wait for up to one clock
if the BIU has already started an instruction fetch bus cycle. (The EU can detect the need for a memory operand
and post a bus request far enough in advance of its need

MACHINE INSTRUCTION ENCODING AND
DECODING
Machine instruction encoding and decoding is primarily
the concern of the programmer. It is presented here for
the hardware designer since such encoding and decoding

Table 1·16 Instruction Set Reference Data

IAAA (no operands)

AAA

FIODITSZAPC
ags U
U UX UX

ASCII adjust for addition

Operands

(no operands)

Clocks

Transfers'

Bytes

8(8)

-

1

IAAD (no operands)

AAD
(no operands)

Clocks

Transfers'

Bytes

60(15)

-

2

IAAM (no operands)

AAM

AAA
FIODITSZAPC
ags U
XXUXU

ASCII adjust for division

Operands

Coding Example

Coding Example

ADD
FI

ASCII adjust for multiply

Operands

(no operands)

Clocks

Transfers'

Bytes

83(19)

-

2

IAAS (no operands)

AAS
Operands

(no operands)

Clocks

Transfers'
-

8(7)

AAM

0 0 ITS ZAP C

ags U

UUXUX

Coding Example

Bytes
1

XXUXU

Coding Example

FI

ASCII adjust for subtraction

0 0 ITS ZAP C

ags U

AAS

• For the 8086 (80t 86) add. four clocks for each 16·M word transfer With an odd address. For the 8088 (80188) add four clocks for each 16·M wora
transfer.

1-24

210912·001

8086/8088 CPU

Table 1·16 Instruction Set Reference Data (continued)

I

ADC destination, source
Add with carry

ADC
Operands
register, register
register, memory
memory, register
register, immediate
memory, immediate
accumulator, immediate

I

FIODITSZAPC
ags
XXX XX

x

Clocks

Transfers·

Bytes

3(3)
9(10)+EA
16(10)+EA
4(4)
17(16)+EA
4(3-4)

-

2
2-4
2-4
3-4
3-6
2-3

1
2

2

-

ADD destination, source
Addition

ADD
Operands
register, register
register, memory
memory, register
register, immediate
memory, immediate
accumulator, immediate

I

FIODITSZAPC
ags X
XXXXX

Clocks

Transfers·

Bytes

3(3)
9(10)+EA
16(10)+EA
4(4)
17(16)+EA
4(3-4)

-

2
2-4
2-4
3-4
3-6
2-3

1
2

2

-

Operands
register, register
register, memory
memory, register
register, immediate
memory, immediate
accumulator, immediate

I

Operands
register, memory

CALL

I

Clocks

Transfers·

Bytes

3(3)
9(10)+EA
16(10)+EA
4(4)
17(16)+EA
4(3-4)

-

2
2-4
2-4
3-4
3-6
2-3

1
2

2

-

near-proc
far-proc
memptr 16
regptr 16
memptr32

I

CBW

Clocks

Transfers·

Bytes

(35)

2

2

(no operands)

ANDAL, BL
AND CX, FLAB WORD
AND ASCII [DI), AL
AND CX, OFOH
AND BETA, 01 H
AND AX, 01 01 OOOOB

Coding Example
BOUND AX, ALPHA
FIODITSZAPC
ags
XXXXX

x

Clocks

Transfers·

Bytes

19(14)
28(23)
21(19)+EA
16(13)
37(38)+EA

1
2
2
1
4

3
5
2-4
2
2-4

CBW (no operands)
Convert byte to word

Operands

XXUXO

Coding Example

Flags 0 D ITS ZAP C

CALL target
Call a procedure

Operands

0 D I TSZAPC

Flags 0

BOUND destination, source
Array bounds check

BOUND

Coding Example
ADDCX, DX
ADD DI, [BX),ALPHA
ADD TEMP, CL
ADDCL,2
ADDALPHA,2
ADD AX, 200

.

AND destination, source
Logical and

AND

Coding Example
ADCAX,SI
ADC CX, BETA [SI)
ADC ALPHA [BX) [SI), DI
ADC BX, 256
ADC GAMMA, 30H
ADCAL,5

Coding Example
CALL NEAR_PROC
CALL FOR_PROC
CALL PROC_TABLE [SI)
CALL AX
CALL [BX).TASK [SI)
FIODITSZAPC
ags u
UUXUX

Clocks

Transfers·

Bytes

2(2)

-

1

Coding Example
CBW

"For the 8086 (80186) add four clocks for each 16·bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 16-bit word
transfer.

1-25

210912'()01

8086/8088 CPU

Table 1-16 Instruction Set Reference Data (continued)

I

CLC (no operands)
Clear carry flag

CLC
Operands
(no operands)

I

Flags

Clocks

Transfers·

Bytes

2(2)

-

1

CLD (no operands)
Clear direction flag

CLO
Operands
(no operands)

Transfers·

Bytes

2(2)

-

1

I

Cli (no operands)
Clear interrupt flag

CLI
Operands
(no operands)

I

Operands
(no operands)

I

Clocks

Transfers·

Bytes

2(2)

-

1

Clocks

Transfers·

Bytes

2(2)

-

1

Operands
register, register
register, memory
memory, register
register, immediate
memory, immediate
accumulator, immediate

I

Operands
dest-string, source-string
(repeat) dest-string, source-string

I
Operands

ODITSZAPC
X
XXX XX

3(3)
9(10)+EA
9(10)+EA
4(3)+EA
10(10)+EA
4(3-4)

-

2
2-4
2-4
3-4
3-6
2-3

CMP BX, CX
CMP DH, ALPHA
CMP [BP + 21, SI
CMP BL, 02H
CMP [BXI.RADAR [01), 3420H
CMP AL; 000100008

1
1

1

-

FI

Clocks

Transfers'

Bytes

22(22)
9+22/rep
(5 + 22/rep)

2
2/rep

1
1

Clocks
4(4)

Transfers·

Bytes

-

1

Coding Example
CMPS BUSS1, BUFF2
REPE CMPS 10, KEY

00 I TSZAPC

Coding Example
CWO
ODITSZAPC
Flags X
XXXXX

Transfers·

Bytes

-

1

.

0 0 ITS ZAP C
ags X
XXXXX

Flags

DAA (no operands)
Decimal adjust for addition

(no operands)

Coding Example
CMC

Coding Example

I
Operands

ODITSZAPC
X

Bytes

5(4) .

OAA

Coding Example
CLI

Transfers·

Clocks

(no operands)

ODITSZAPC
0

Clocks

CWD(no operands)
Convert word to doubleword

CWO

CLD

Flags

CMPS des-string, source-string
Compare string

CMPS

ODITSZAPC
0

Coding Example

Flags

CMP destination, source
Compare destination to source

CMP

CLC

Flags

CMC (no operands)
Complement carry flag

CMC

Coding Example

Flags

Clocks

ODITSZAPC
0

Coding e:xample
DAA

"For the 8086 (80186) add four clocks for each 16·bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 16'bit word
transfer.

1-26

210912-001

8086/8088 CPU

Table 1-16 Instruction Set Reference Data (continued)

I

DAS (no operands)
Decimal adjust for subtraction

DAS
Operands

FI

Clocks

Transfers'

Bytes

4(4)

-

1

(no operands)

IDEC destination

DEC
reg 16
reg8
memory

Clocks

Transfers'

Bytes

3(3)
3(3)
15(15)+EA

-

1
2
2-4

-

2

IDIV source

DIV
reg 8
reg 16
mem8
mem 16

locals, level

I
Operands

immediate, memory
immediate, register

1

2
2
2-4

DIVCL
DIVBX
DIVALPHA

1

2-4

DIV TABLE [SI]

(no operands)

Coding Example

Flags

Clocks

Transfers'

Bytes

L=0(15)
L=1(25)
L>1
(22+
16(n-1))

-

4

Clocks

Transfers'

Bytes

8(6)+EA
2(2)

1
-

2-4
2

ENTER 28, 3

Transfers'

Bytes

2(2)

-

1

ODITSZAPC

Coding Example

ESC 6.ARRAY [SI]
ESC 20, AL
Flags

Clocks

ODITSZAPC

Coding Example

Flags

Halt

Operands

DEC AX
DECAL
DEC ARRAY [SI]

80-90(29)
144-162(38)
86-96+EA
(35)
150-168+
EA(94)

IHLT (no operands)

HLT

Coding Example

Bytes

ESC external-opcode, source
Escape

ESC

ODITSZAPC
X
XXXX

Transfers'

ENTER
Procedure entry

Operands

XXXXX

Coding Example

Clocks

I

ENTER

U

FIODITSZAPC
ags U
UUUUU

Division, unsigned

Operands

0 D ITS ZAP C

DAS
Flags

Decrement by 1

Operands

ags

OD ITSZAPC

Coding Example

HLT

"For the 8086 (80186) add four clocks for each 16·bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 16·bit word
transfer.

1-27

210912·001

8086/8088 CPU

Table 1-16 Instruction Set Reference Data (continued)
FI

IIDIV source
Integer division

IDIV
Operands
reg 8
reg 16
mem8
mem 16

Clocks

Transfers·

Bytes

101-112
(44-52)
165-184
(53-61)
107-118+
EA(50-58)
171-190+
EA(58-67)

-

2

IDIVBL

-

2

IDIVCX

Operands
immed8
immed 16
reg 8
reg 16
mem8
mem 16

Operands
accumulator, immed 8
accumulator, OX

IDIV DIVISOR_BYTE [SI)

1

2-4

IDIV [BX].DIVISOR_WORD

FI

Operands
reg 16
reg 8
memory

Operands
dest·string, port
(repeat) dest-string, port

UUUUX

Transfers·

Bytes

(22-24)
(29-32)
80-98
(25-28)
128-154
(34-37)
86-104+
EA(31-34)
134-160+
EA(40-43)

-

3
4
2

IMUL6
IMUL20
IMULCL

-

2

IMULBX

1

2-4

IMUL RATE_BYTE

1

2-4

IMUL RATE_WORD [BP) (01)

Coding Example

Flags

Clocks

Transfers·

Bytes

10(10)
8(8)

1
1

2
1

Clocks

Transfers·

Bytes

3(3)
3(3)
15(15)+EA

-

1
2
2-4

2

ODITSZAPC

Coding Example
IN AL, OFFEAH
IN AX, OX
Flags

IINS source-string, port
Input string

INS

0 0 ITS ZAP C

ags X

Clocks

IINC destination
Increment by 1

INC

Coding Example

2-4

liN accumulator, port
Input byte or word

IN

U U U U U

1

IIMUL source
Integer multiplication

IMUL

0 01 T S ZAP C

ags U

~0

I

TSZAPC
XXXX

Coding Example
iNCCX
INCBL
INC ALPHA [01) [BX)
Flags 0 0 ITS ZAP C

Clocks

"TI'ansfers·

Bytes

(14)
(9 +8/rep)

2
2/rep

1
1

Coding Example
INS BUFF1, USART D
REP INS BUFF1, USART D

'For the 8086 (80186) add four clocks for each 16·bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 16-bit word
transfer.

1-28

210912-001

8086/8088 CPU

Table 1-16 Instruction Set Reference Data (continued)

~

INT

INT interrupt-type
Interrupt

Operands
mmed 8 (type = 3)
immed 8 (type"* 3)

Clocks

Transfers·

Bytes

52(45)
52(47)

5
5

1
2

IINTR (external maskable interrupt)
Interrupt if INTER and IF = 1

INTRt
Operands
(no operands)

Clocks

Transfers·

Bytes

61

7

N/A

Operands
(no operands)

Transfers·

Bytes

53 or
4(48 or 4)

5

1

Operands
(no operands)

JA/JNBE
Operands
Short-label

JAE/JNB
Operands
short-label

JB/JNAE
Operands
short-label

JBE/JNA
Operands

I

OOITSZAPC
00

Coding Example
N/A
OOITSZAPC
00

Coding Example
INTO

00 I TSZAPC
Flags R R R R R R R R R

IIRET (no operands)
Interrupt Return

IRET

INT3
INT67

Flags

Clocks

OOITSZAPC
00

Coding Example

Flags

I INTO (no operands)
Interrupt if overflow

INTO

short-label

Flags

Clocks

Transfers·

Bytes

32(28)

3

1

JA/JNBE short-label
Jump if above/Jump if not below nor equal
Clocks

Transfers·

Bytes

16 or
4(13 or 4)

-

2

I JAE/JNB short-label
Jump if above or equal/Jump if not below
Clocks

Transfers·

Bytes

16 or
4(13 or 4)

-

2

I JB/JNAE
Jump if below/Jump if not above nor equal
Clocks

Ti'ansfers·

Bytes

16 or
4(13 or 4)

-

2

I JBE/JNA short-label
Jump if below or equal/Jump if not above
Clocks

Transfers·

Bytes

16 or
4(13 or 4)

-

2

Coding Example
IRET
Flags

OOITSZAPC

Coding Example
JAABOVE

Flags

00 I TSZAPC

Coding Example
JAE ABOVE_EQUAL

Flags

00 I TSZAPC

Coding Example
JB BELOW

Flags

OOITSZAPC

Coding Example
JNA NOT-ABOVE

'For the 8086 (80186) add four clocks for each 16-bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 16-bit word
transfer.
tlNTR is not an instruction, it is included in table 1-16 only for timing information.

1-29

210912-001

8086/8088 CPU

Table 1-16 Instruction Set Reference Data (continued)

I

Operands
short-label

1

Clocks

Transfers·

Bytes

16 or
4(13 or 4)

-

2

JCXZ short-label
Jump if CX is zero

JCXZ
Operands
short-label

I
Operands

short-label

JG/JNLE

I

Clocks

Transfers·

Bytes

16 or
4(16 or 5)

-

2

short-label

I

Clocks

Transfers·

Bytes

16 or
4(13 or 4)

-

2

Clocks

Transfers·

Bytes

16 or
4(13 or 4)

-

2

JGE/JNL short-label
Jump if greater or equal/Jump if not less

JGE/JNL
Operands
short-label

JLlJNGE

I

Clocks

Transfers·

Bytes

16 or
4(13 or 4)

-

2

JL/JNGE short-label
Jump if less/Jump if not greater nor equal

Operands
short-label

I

Clocks

Transfers·

Bytes

16 or
4(13 or 4)

-

2

JLElJNG short-label
Jump if less or equal/Jump if not greater

JLE/JNG
Operands

Coding Example
JCXZ COUNT_DONE

Flags

JG/JNLE short-label
Jump if greater/Jump if not less nor equal

Operands

Coding Example
JC CARRY_SET

FIODITSZAPC
ags

JE/JZ short-label
Jump if equal/Jump if zero

JE/JZ

short-label

FIODITSZAPC
ags

JC short-label
Jump if carry

JC

Clocks

Transfers·

Bytes

16 or
4(13 or 4)

-

2

00 I TSZAPC

Coding Example
JZZERO

Flags

ODITSZAPC

Coding Example
JG GREATER

Flags 0 0 ITS ZAP C
Coding Example
JGE GREATER_EQUAL

Flags

00 I TSZAPC

Coding Example
JL LESS

Flags

00 I TSZAPC

Coding Example
JNG NOT_GREATER

'For the 8086 (80186) add four clocks for each 16-bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 16-bit word
transfer.

1-30

210912-001

8086/8088 CPU

Table 1-16 Instruction Set Reference Data (continued)

I

JMP target
Jump

JMP
Operands
short-label
near-label
far-label
memptr 16
regptr 16
memptr32

I

Clocks

Transfers·

Bytes

15(13)
15(13)
15(13)
18(17)+EA
11 (11)
24(26)+EA

-

2
3
5
2-4
2
2-4

-

1

2

JNC short-label
Jump if not carry

JNC
Operands
short-label

I

Operands
short-label

I

Clocks

Transfers·

Bytes

16 or
4(13 or 4)

-

2

Operands
short-label

JNP/JPO

I

Clocks

Transfers·

Bytes

16 or
4(13 or 4)

-

2

short-label

I

Clocks

Transfers·

Bytes

16 or
4(13 or 4)

-

2

Operands
short-label

I

Clocks

Transfers·

Bytes

16 or
4(13 or 4)

-

2

Operands

Coding Example
JNO NO_OVERLOW

Coding Example
JPO ODD_PARITY

Flags 0 D ITS ZAP C

Clocks

Transfers·

Bytes

16 or
4(13 or 4)

-

2

JO'short-label
Jump if overflow

JO

Coding Example
JNE NOT_EQUAL

Flags 0 D ITS ZAP C

JNS short-label
Jump if not sign

JNS

JNC NOT_CARRY

Flags OD I TSZAPC

JNP/JPO short-label
Jump if not parity/Jump if parity odd

Operands

Coding Example

Flags OD I TSZAPC

JNO short-label
Jump if not overflow

JNO

Coding Example
JMPSHORT
JMP WITHIN_SEGMENT
JMP FAR_LABEL
JMP [BX).TARGET
JMPCX
JMP OTHER.SEG [SI)
Flags 0 D ITS ZAP C

JNE/JNZ short-label
Jump if not equal/Jump if not zero

JNE/JNZ

short-label

Flags 0 D ITS ZAP C

Coding Example
JNS POSITIVE

Flags OD I TSZAPC

Clocks

Transfers·

Bytes

16 or
4(13 or 4)

-

2

Coding Example
JO SIGNED_OVRFLW

'Forthe 8086 (80186) add four clocks for each HI·bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 16·bit word
transfer.

1-31

210912·001

8086/8088 CPU

Table 1·16 Instruction SetReference Data (continued)

I

JP/JPE short-label
Jump if parity/Jump if parity even

JP/JPE
Operands
short-label

I

Flags 0 D ITS ZAP C

Clocks

Transfers"

Bytes

16 or
4(13 or 4)

-

2

JS short-label
Jump if sign

JS
Operands
short-label

I
Operands

(no operands)

Clocks

Transfers"

Bytes

16 or
4(13 or 4)

-

2

I

I

Clocks

I

4(2)

Operands
reg 16, tnem 16

1 Clocks

I Transfers· I Bytes
I

-

I

1

I

I Transfers· I Bytes

116(18)+EAI

I

Operands
reg 16, mem 16

I

Clocks

I 2(6)+EA

2

1 2-4

I Transfers·
1

-

Operands
(no operands)

I

I

Clocks

I

(8)

I

Operands
reg 16, mem 32

I

Clocks

I

I

1

Operands

I Transfers" I Bytes

116(18)+EAI

(no operands)

I
I

Clocks
2(2)

ags

2

12-4

Coding Example

ODITSZAPC

Coding Example
LES DI, [BX), TXT_BUFF
Flags 0 D ITS ZAP C

I Transfers· I Bytes
I

0 D I T SZ A P C
U UX U X

LEAVE
Flags

LOCK (no operands)
Lock bus

LOCK

LEA BX, [BP) [DI)

I Transfers· I Bytes
1

OD I TSZAPC

Coding Example

FI

LES destination, source
Load pOinter using ES

LES

LDS SI, DATA, SEG [DI)

1 Bytes

r 2-4

ODITSZAPC

Coding Example

Flags

LEAVE (no operand)
Restore stack for procedure exit

LEAVE

Coding Example
LAHF
Flags

LEA destination, source
Load effective address

LEA

Coding Example
JS NEGATIVE

Flags 0 D ITS Z A P·C

LOS destination, source
Load pointer using DS

LOS

JPE EVEN_PARITY

Flags 0 D ITS ZAP C

LAHF (no operands)
Load AH from flags

LAHF

Coding Example

-

I

1

Coding Example
LOCKXCHG FLAG, AL

• For the 8086 (80186) .add four clocks for each 16-bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 16-bit word
transfer.

1-32

210912-001

8086/8088 CPU

Table 1-16 Instruction Set Reference Data (continued)

I

LODS source-string
Load string

LODS
Operands
source-string
(repeat) source-string

Flags a D ITS ZAP C

Clocks

Transfers·

Bytes

12(10)
9+ 13/rep
(6+ 11/rep)

1
1/rep

1
1

I

LOOP short-label
Loop

LOOP
Operands
short label

LOOPE/LOOPZ

I

short label

LOOPNE/LOOPNZ

Clocks

Transfers·

Bytes

17/5(15/5)

-

2

Clocks

Transfers·

Bytes

18 or
6(16 or 6)

-

2

LOOPNE/LOOPNZ short label
Loop if not equal/Loop if not zero

short label

I

Clocks

Transfers·

Bytes

19 or
5(16 or 5)

-

2

Operands
(no operands)

I

Clocks

Transfers·

Bytes

50

5

N/A

MOV destination, source
Move

MOV
Operands
memory, accumulator
accumulator, memory
register, register
register, memory
memory, register
register, immediate
memory, immediate
seg-reg, reg 16
seg-reg, mem 16
reg 16, seg-reg
memory, seg-reg

00 ITSZAPC

Coding Example
LOOPEAGAIN

Flags

NMI (external nonmaskable interrupt)
Interrupt if NMI = 1

NMlt

Coding Example
LOOP AGAIN
Flags

I

Operands

LODS CUSTOMER_NAME
REP LaDS NAME

Flags a D ITS ZAP C

LOOPE/LOOPZ short label
Loop if equal/Loop if zero

Operands

Coding Example

ODITSZAPC

Coding Example
LOOPNE AGAIN

Flags

00 I TSZAPC
00

Coding Example
N/A
Flags

ODITSZAPC

Coding Example

Clocks

Transfers·

Bytes

10(9)
10(8)
2(2)
8(12)+EA
9(9)+EA
4(3-4)
10(12-13)
+EA
2(2)
8(9)+EA
2(2)
9(11)+EA

1
1

3
3
2
2-4
2-4
2-3
3-6

MOV ARRAY [SI], AL
MOV AX, TEMP_RESULT
MOVAX,CX
MOV Sp, STACK-TOP
MOV COUNT [DI], CX
MOVCL,2
MOV MASK [SX] [SI], 2CH

2
2-4
2
2-4

MOVES,CX
MOV DS, SEGMENT_SASE
MOV Sp, SS
MOV [SX], SEG~SAVE, CS

1
1

1

1

1

-For the 8086 (80186) add four clocks for each 16-bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 16-bit word
transfer.

tNMI is not an instruction, it is included in table 1-16 only for timing information.

1-33

210912-001

8086/8088 CPU

Table 1-16 Instruction Set Refere"ce Data (continued)

I

MOVS dest-string, source-string
Move string

MOVS
Operands

dest-string, source-string
(repeat) dest-string, source-string

MOVSB/MOVSW

I

Clocks

Transfers·

Bytes

Coding Example

18(9)
9+ 17/rep
(8+8/rep)

2
2/rep

1
1

MOV5 LINE EDIT_DATA
REP MOV5 5CREEN, BUFFER

MOVSB/MOVSW (no operands)
Move string (byte/word)
Clocks

Operands

Transfers·

18(9)
9 + 17/rep
(8+8/rep)

(no operands)
(repeat) (no operands)

2
2/rep

Flags 0 D I T 5 ZAP C

1
1

Operands

reg 16
mem8
mem 16

I
Operands

register
memory
o if destination is 0

I
Operands

UUUUX

Bytes

-

2

MULBL

-

2

MULCX

1

2-4

MUL MONTH [51)

1

2-4

MUL BAUD_RATE

Coding Example

Flags 0 D I T 5 ZAP C

Clocks

Transfers·

Bytes

3(3)
16(3)+EA

-

2
2-4

2

Coding Example
NEGAL
NEG MULTIPLIER

Flags

Clocks

Transfers·

Bytes

3(3)

-

1

NOT destination
Logical not

NOT

x

Transfers·

I

Operands
(no operands)

0 D I .T S ZAP C

70-77
(26-28)
118-133
(35-37)
76-83+
EA(32-34)
124-139+
EA(41-43)

NOP (no operands)
No Operation

NOP

ags

Clocks

NEG destination
.
Negate

NEG

MOV5B
REP MOV5W

FI

MULsource
Multiplication, unsigned

reg 8

Coding Example

Bytes

I

MUL

register
memory

Flags 0 D I T 5 ZAP C

Transfers·

Bytes

3(3)
16(3)+EA

-

2
2-4

2

D I T 5 ZAP C

Coding Example
NOP
Flags

Clocks

°

oD

I T 5 Z A.P C
.

Coding Example
NOT AX
NOT CHARACTER

'For the 8086 (80186) add four clocks for each 16-bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 16-bit word
.
transfer.

1-34

210912-001

8086/8088 CPU

Table 1-16 Instruction Set Reference Data (continued)

I

OR destination, source
Logical inclusive or

OR
Operands
register, register
register, memory
memory, register
accumulator, immediate
register, immediate
memory, immediate

FIODITSZAPC
ags 0
XXUXO

Clocks

Transfers·

Bytes

Coding Example

3(3)
9(10)+EA
16(10)+EA
4(3-4)
4(4)
17(16)+EA

-

2
2-4
2-4
2-3
3-4
3-6

ORAL, BL
OR DX, PORT_ID [DI]
OR FLAG_BYTE, CL
OR AL, 011011008
ORCX,01H
OR [BX], CMD_WORD, OCFH

1
2

2

lOUT port, accumulator
Output byte or word

OUT
Operands
immed 8, accumulator
DX, accumulator

Flags

Clocks

Transfers·

Bytes

10(9)
8(7)

1
1

2
1

lOUTS port, source-string
Output string

OUTS
Operands
port, source-string
(repeat) port, source-string

POP

I

Transfers·

Bytes

(14)
(8) + 8/rep)

2
2/rep

1
1

POP destination
Pop word off stack

Operands
register
seg-reg (CS illegal)
memory

POPA

I

(no operands)

POPF

I

Clocks

Transfers·

Bytes

8(10)
8(8)
17(20)+EA

1
1
2

1
1
2-4

Operands

PUSH

I

Clocks

Transfers·

Bytes

(51)

8

1

Operands

Coding Example
OUTS PORT2, BUFF2
REP OUTS PORT2, BUFF2
OOITSZAPC

Coding Example
POP OX
POP OS
POP PARAMETER

Coding Example
POPA
Flags

Clocks

Transfers·

Bytes

8(8)

1

1

PUSH source
Push word onto stack

register
seg-reg (CS legal)
memory

ODITSZAPC

Flags 0 D ITS ZAP C

POPF (no operands)
Pop all registers

(no operands)

OUT 44,AX
OUTDX, AL

Flags

POPA (no operands)
Pop all registers

Operands

Coding Example

Flags

Clocks

ODITSZAPC

OOITSZAPC
RRRRRRRRR

Coding Example
POPF
Flags

OOITSZAPC

Clocks

Transfers·

Bytes

Coding Example

11 (1 0)
10(9)
16(16)+ EA

1
1
2

1
1
2-4

PUSH SI
PUSH ES
PUSH DRETURN_CODE [SI]

'For the 8086 (80186) add four clocks for each 16-bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 16-bit word
transfer.

1-35

210912-001

8086/8088. CPU

Table 1·16 Instruction Set Reference Data (continued)

I

FI ags ODITSZAPC

PUSHA (no operands)
Push all registers

PUSHA
Operands
(no operands)

I

Clocks

I

(36)

I Transfers· I Bytes
I

8

I

4

I

pUSHF (no operands)
Push flags onto stack

PUSHF

I
I

Operands
(no operands)

Flags

I Transfers· I Bytes
I 1 I 1

Clocks
10(9)

I

RCL destination, count
Rotate left through carry

ReL

register, n
memory, n

Bytes

2(2)

2

8+41

2

bit(5 + 1/bit)
15(15)+EA

memory, 1
memoryCL

20+41

2
2

2·4
2·4

bit(17 +
1/bit)+EA
(5+ 1/bit)
(17 + 1/bit)

2

3-5

3

I

RCR destination, count
Rotate right through carry

RCR
Operands

Clocks

register, 1
register, CL
memory, 1
memoryCL

register, n
memory, n

Transfers·

Bytes
2

8+41

2

20+41

2
2

2-4
2-4

bit(17 +
1/bit)+EA
(5 + 1/bit)
(17 + 1/bit)

2

3-5

3

I

REP (no operands)
Repeat string operation

REP
Operands
(no operands)

REPE/REPZ
Operands
(no operands)

Transfers·

2(2)

-

Bytes

I

2(2)

RCLCX,1
RCLAL, CL
RCLALPHA,1
RCL [BP), PARM, CL

RCLCX,5
RCLALPHA,5

Coding Example
RCR BX, 1
RCR BL, CL
RCR [BX), STATUS, 1
RCR ARRAY, [DI), CL

RCR BX, 5
RCRALPHA,5

-

Coding Example

Flags 0 D ITS ZAP C

I Transfers· I Bytes
I

Coding Example

REP MOVS DEST, SRCE

REPE/REPZ (no operands)
Repeat string operation while equal!
while zero
Clocks

PUSHF

Flags 0 D ITS ZAP C

Clocks

I

Coding Example

ODITSZAPC
Flags X
C

2(2)

bit(5 + 1/bit)
15(15)+EA

ODITSZAPC

FIODITSZAPC
ags X
C

Transfers·

Clocks

Operands
register, 1
register, CL

Coding Example
PUSHA

I

1

Coding Example
REPE CMPS DATA, KEY

'Forthe 8086 (80186) add four clocks for each 16-bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 16-bit word
transfer.

1-36

210912-001

8086/8088 CPU

Table 1-16 Instruction Set Reference Data (continued)

REPNE/REPNZ

REPNEIREPNZ (no operands)
Repeat string operation while
not equal/not zero

Operands
(no operands)

I

I
I

Clocks
2(2)

Flags

I Transfers· I Bytes
I I 1

RET optional-pop-value
Return from procedure

RET
Operands
(intra-segment,
(intra-segment,
(inter-segment,
(inter-segment,

no pop)
pop)
no pop)
pop)

I

Operands
register, 1
register, CL

Clocks

Transfers·

Bytes

16(16)
20(18)
26(22)
25(25)

1
1
2
2

1
3
1
3

J

Flags

-

2
2

2
2

2-4
2-4

ROL FLAG_BYTE [01),1
ROL ALPHA, CL

-

3
3-5

ROLBX,5
ROLBETA,5

bit(17 +
1/bit)+EA
(5+ 1/bit)
(17 + 1/bit)

2

Clocks

register, 1
register, CL

-

-

2
2

2
2

2-4
2-4

ROR PORT_STATUS, 1
ROR CMO_WORO, CL

-

3
3-5

ROR BX, 5
ROR BETA, 5

bit(5 + 1/bit)
15(15)+EA

20+41

I

FIOOITSZAPC
ags X
X
Bytes

2(2)

register, n
memory, n

bit(17+
1/bit)+EA
(5+ 1/bit)
(17 + 1lbit)

2

SAHF (no operands)
Store AH into flags

SAHF
Operands
(no operands)

Coding Example
ROL BX, 1
ROLOI,CL

'n'ansfers •

8+41

memory, 1
memoryCL

OOITSZAPC
X
X

Bytes

ROR destination, count
Rotate right

Operands

Coding Example
RET
RET4
RET
RET2

'n'ansfers·

20+41

ROR

Coding Example
REPNE SCAS INPUT_LINE

2(2)
bit(5 + 1lbit)
15(15)+EA

register, n
memory, n

TSZAPC
UUXUX

Clocks

8+41

memory, 1
memoryCL

0 I

Flags 0 0 ITS ZAP C

ROL destination, count
Rotate left

ROL

~

Coding Example
ROR BX, 1
ROR BX, CL

FI

Clocks

'n'ansfers •

Bytes

4(3)

-

1

ags

00 I TS ZAP C
RRRRR

Coding Example
SAHF

• For the 8088 (80186) add four clocks for each 16-blt word transfer with an odd address. For the 8086 (80188) add four clocks for each 16-bit word
transfer.

1-37

210912-001

8086/8088 CPU

Table 1·16 Instruction Set Reference Data (continued)

SALISHL

I

SAL/SHL destination
Shift arithmetic left/Shift logical left

Operands
register, 1
register, CL
memory, 1
memory, CL

register, n
memory, n

I

FIOOITSZAPC
ags X
·X

Clocks

Transfers·

Bytes

2(2)
8+4/
bit(5 + 1/bit)
15(15)+EA
20+41
bit(17 +
1/bit)+EA
(5+ 1/bit)
(17+ 1/bit)

-

2
2

Operands
register, 1
register, CL
memory, 1
memoryCL

register, n
memory, n

I

2-4
2-4

SAL [BX], OVERDRAW, 1
SAL STORLCOUNT, CL

-

3
3-5

SALAH,5
SAL ALPHA, 5

2

Flags

Operands
register, register
register, memory
memory, register
accumulator, immediate
register, immediate
memory, immediate

dest-string
(repeat) dest-string

TSZAPC
XXUXX

Bytes

2(2)
8+41
bit(5 + 1/bit)
15(15)+EA
20+41
bit(17+
1/bit)+EA
(5+ 1/bit)
(17 + 1/bit)

-

2
2

2
2

2-4
2-4

SAR N_BLOCKS, 1
SAR N_BLOCKS, CL

-

3
3-5

SAR OX, 5
SAR OGLTH, 5

-

2

Clocks

Transfers·

Bytes

3(3)
9(10)+EA
16(10)+EA
4(3-4)
4(4)
17(16)+EA

-

2
2-4
2-4
2-3
3-4
3-6

1
2

2

Coding Example
SAR OX, 1
SAR 01, CL

FI

SCAS dest-string
Scan string

Operands

0 I

Transfers·

I

SeAS

~

Clocks

SBB destination, source
.
Subtract with borrow

SBB

SALAL,1
SAL 01, CL

2
2

SAR destination, source
Shift arithmetic right

SAR

Coding Example

0 0 ITS ZAP C
ags X
XXXXX
Coding Example

SBBBX, CX
SBB 01, [BX), PAYMENT
SBB BALANCE, AX
SBBAX, 2
SBBCL,1
SBB COUNT, [SI), 10
FIOOITSZAPC
ags X
XXXXX

Clocks

li'ansfers·

15(15)
9+ 15/rep
(5+ 15/rep)

1
1/rep

Bytes
1 .
1

Coding Example
SCAS INPUT_LINE
REPNE SCAS BUFFER

'For the 8086 (80186) add four clocks for each 16-bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 16-bit word
transfer.·
.

1-38

210912-001

8086/8088 CPU

Table 1·16 Instruction Set Reference Data (continued)

SEGMENTt
Operands

(no operands)

ISEGMENT override prefix

Flags

Override to specified segment
Clocks

Transfers'

Bytes

2(2)

-

1

ISHR destination, count

SHR
register, 1
register, CL

Clocks

Transfers'

Bytes

2(2)

-

2
2

2
2

2·4
2-4

SHR ID_BYTE [SII [BX], 1
SHR INPUT_WORD, CL

-

3
3-5

SHR SI, 5
SHRALPHA,5

8+41
bit(5 + 1/bit)
15(15)+ EA
20+41
bit(17 +
1/bit)+EA
(5+ 1/bit)
(17 + 1/bit)

memory, 1
memoryCL

register, n
memory, n

SINGLE STEPt
Operands

(no operands)

2

ISINGLE STEP (Trap flag interrupt)
Interrupt if TF

Clocks

Transfers'

Bytes

50

5

N/A

Operands

Clocks

Transfers'

Bytes

2(2)

-

1

ISTD (no operands)

STO
Operands

Clocks

Transfers'

1

ISTI (no operands)

STI
Operands

(no operands)

Clocks

Transfers'

Bytes

2(2)

-

1

ODITSZAPC
C

Coding Example

STC
ODITSZAPC
1

Coding Example

STD
Flags

Set interrupt enable flag

00

N/A

Bytes

-

2(2)

ODITSZAPC

Coding Example

Flags

Set direction flag

(no operands)

SHR SI, 1
SHRSI, CL

Flags

Set carry flag

(no operands)

Coding Example

Flags

=1

ISTC (no operands)

STC

Coding Example

MOV SS:PARAMETER AX
FIODITSZAPC
ags X
X

Shift logical right

Operands

ODITSZAPC

ODITSZAPC
1

Coding Example

STI

"For the 8086 (80186) add four clocks for each 16-bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 16-bit word
transfer.
tASM-86 incorporates the segment override prefix into the operand specification and not as a separate instruction. SEGMENT is included in table
1-16 only for timing information.
tSINGLE STEP is not an instruction, it is included in table 1-16 only for timing information.

1-39

210912-001

8086/8088 CPU

Table 1-16 Instruction Set Reference Data (continued)

I

STOS dest-string
Store byte or word string

STOS
Operands
dest-string
(repeat) dest-string

I

Clocks

Transfers·

Bytes

11 (1 0)
9+ 10/rep)
(6 + 9/rep)

1
1/rep

1
1

SUB destination, source
Subtraction

SUB
Operands·
register, register
register, memory
memory, register
accumulator, immediate
register, immediate
memory, immediate

I

Operands
register, register
register, memory
accumulator, immediate
register, immediate
memory, immediate

I

Operands
(no operands)

Clocks

Transfers·

Bytes

3(3)
9(10)+EA
16(10)+EA
4(3-4)
4(4)
17(16)+EA

-

2
2-4
2-4
2-3
3-4
3-6

1
2

2

I

Operands
accumulator, reg 16
memory, register
register, register

I

Operands

Coding Example
SUBCX, BX
SUB DX, MATH_TOTAL [S1)
SUB [BP+2), CL
SUBAL,10
SUB SI, 5280
SUB [BP), BALANCE, 1000

Clocks

Transfers·

Bytes

Coding Example

3(3)
9(10)+EA
4(3-4)
5(4)
11(10)+EA

-

2
2-4
2-3
3·4
3·6

TESTSI,DI
TEST SI, END_COUNT
TEST AL, 001000008
TEST BX, OCC4H
TEST RETURN_COUNT, 01 H

1

-

-

-

Flags

Clocks

Transfers·

Bytes

4+5(6)n

-

1

Clocks

Transfers·

Bytes

3(3)
17(17)+EA
4(4)

-

1
2·4
2

2

-

ODITSZAPC

Coding Example
WAIT
Flags

XLAT source-table
Translate

XLAT

Coding Example
STOS PRINT_LINE
REP STOS DISPLAY

FIODITSZAPC
ags o
XXUXO

XCHG destination, source
Exchange

XCHG

0 D ITS ZAP C

x

WAIT (no operands)
Wait while TEST pin not asserted

WAIT

ags

FIODITSZAPC
ags
XXX XX

TEST destination, source
Test or non-destructive logical and

TEST

source-table

FI

ODITSZAPC

Coding Example
XCHGAX, BX
XCHG SEMAPHORE, AX
XCHGAL, BL
Flags 0 D ITS ZAP C

Clocks

Transfers·

Bytes

11 (11)

1

1

Coding Example
XLAT ASCII_TAB

'For the 8086 (80186) add four clocks for each 16-bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 16-bit word
.
transfer.

1·40

210912-001

8086/8088 CPU

Table 1-16 Instruction Set Reference Data (continued)

IXOR destination, source

XOR

FI

Logical exclusive or

Operands

register, register
register, memory
memory, register
accumulator, immediate
register, immediate
memory, immediate

0 D I T 5 ZAP C

ags 0

XXUXO

Clocks

Transfers·

Bytes

Coding Example

3(3)
9(10)+ EA
16(10)+EA
4(3-4)
4(4)
17(16)+EA

-

2
2-4
2-4
2-3
3-4
3-6

XORCX, BX
XOR CL, MA5LBYTE
XOR ALPHA [51], DX
XOR AL, 010000108
XOR 51, 00C2H
XOR RETURN_CODE, OD2H

1
2

2

• For the 8086 (80186) add four clocks for each 16-bit word transfer with an odd address. For the 8088 (80188) add four clocks for each 1S-bit word
transfer.

ADD, XOR, etc. The following bit, called the 0 field,
generally specifies the "direction" of the operation: 1 =
the REG field in the second byte identifies the destination
operand, 0 = the REG field identifies the source operand. The W field distinguishes between byte and word
operations: 0 = byte, 1 = word.

directly affects bus activity. As an example of the encoding and decoding process, consider writing a MOV instruction in ASM-86 in the form:
MOV destination ,source
This will cause the assembler to generate I of 28 possible
forms of the MOV machine instruction. A programmer
rarely needs to know the details of machine instruction
formats or encoding. An exception may occur during debugging when it may be necessary to monitor instructions
fetched on the bus, read unformatted memory dumps, etc.
This section provides the information necessary to translate or decode an 8086 or 8088 machine instruction.

One of three additional single-bit fields, S, V or Z, appears in some instruction formats (refer to Table 1-17). S,
in conjunction with W, indicates the sign extension of immediate fields in arithmetic instructions. V distinguishes
between single-and variable-bit shifts and rotates. Z is a
compare bit with the zero flag in conditional repeat and
loop instructions.
The second byte of the instruction usually identifies the
instruction's operands. The MOD (mode) field indicates
whether one of the operands is in memory or whether
both operands are registers (refer to Table 1-18). The
REG (register) field identifies a register that is one of the
instruction operands (refer to Table 1-19). In a number of
instructions, particularly the immediate-to-memory variety, REG is used as an extension of the opcode to identify
the type of operation. The encoding of the R/M
(register/memory) field (refer to Table 1-20) depends on
how the mode field is set. If MOD = 11

To pack instructions into memory as densely as possible,
the 8086 and 8088 CPUs utilize an efficient coding technique. Machine instructions vary from one to six bytes in
length. One-byte instructions, which generally operate on
single registers or flags, are simple to identify; the keys to
decoding longer instructions are in the first two bytes.
The format of these bytes can vary, but most instructions
follow the format shown in Figure 1-28.
The first six bits of a multibyte instruction generally contain an opcode that identifies the basic instruction type:

BYTE 1

II II
OPCODE

BYTE 3

BYTE 2

I II II
Dlw MOD REG

R/M

~

BYTE 4

BYTE 5

BYTE 6

------~-----r-----~------l

LOW DISP/DATA

I
I
I HIGH DISP/DATA I
I
I

LOW DATA

I
I
I

HIGH DATA

I
I
I

-----------~------~-----~
REGISTER OPERAND/REGISTERS TO USE IN EA CALCULATION
REGISTER OPERAND/EXTENSION OF OPCODE
REGISTER MODE/MEMORY MODE WITH DISPLACEMENT LENGTH
WORD/BYTE OPERATION
DIRECTION IS TO REGISTER/DIRECTION IS FROM REGISTER
OPERATION (INSTRUCTION) CODE

Figure 1-28 Typical 8086/88 Machine Instruction Format

1-41

210912-001

8086/8088 CPU

Table 1·17 Single·Bit Field Encoding
Field

Value

S

0
1

No sign extension
Sign extend 8·bit immediate data to 16 bits if W=1

W

0
1

Instruction operates on byte data
Instruction operates on word data

D

0
1

Instruction source is specified in REG field
Instruction destination is specified in REG field

V

0
1

Shift/ rotate count is one
Shift/rotate count is specified in CL register

Z

0
1

Repeatlloop while zero flag is clear
Repeatlloop while zero flag is set

Function

(register-to-register mode), then RIM identifies the second register operand. If MOD selects memory mode,
then R/M indicates how the effective address of the memory operand is to be calculated.

Bytes 3 through 6 of an instruction are optional fields that
usually contain the displacement value of a memory operand and/or the actual value of an immediate constant
operand.

Table 1·18 Mode (MOD) Field Encoding
CODE

EXPLANATION

00

Memory Mode, no displacement
follows*

01

Memory Mode, 8-bit
displacement follows

10

MemoryMode, 16-bit
displacement follows

11

Register Mode (no
displacement)

The displacement value may contain one or two bytes; the
language translators generate one byte whenever possible.
The MOD field indicates how many displacement bytes
are present. Following Intel convention, if the displacement is two bytes, the most-significant byte is stored second in the instruction. If the displacement is only a single
byte,the 8086 or 8088 automatically sign-extends this
quantity to l6-bits before using the information in further
address calculations. Immediate values always follow any
displacement values that may be present. The second byte
of a two-byte immediate value is the most significant.
Table 1-22 lists the instruction encodings for all
8086/8088 instructions. This table can be used to predict
the machine encoding of any ASM-86 instruction. Table
1-23 lists the 8086/8088 machine instructions in order by
the binary value of their first byte. This table can be used
to decode any machine instruction from its binary
representation. Table 1-21 is a key to the abbreviations
used in Tables 1-22 and 1-23. Figure 1-29 is a more compact instruction decoding guide.

*Except when RIM = 110, then 16-bit
displacement follows
Table 1·19 REG (Register) Field Encoding
REG

W=O

W=1

000
001
010
011
100
101
110
111

AL
CL
DL
BL
AH
CH
DH
BH

AX
CX
DX
BX
SP
BP
SI
DI

1.3 DEVICE PIN DEFINITIONS
The following paragraphs present functional descriptions
of all input/output signals and electrical descriptions of all
of the input/output pins on the 8086 and 8088 40-pin
DIP's.

1·42

210912-001

8086/8088 CPU

Table 1-20 Register/Memory Field Encoding
MOD=11

EFFECTIVE ADDRESS CALCULATION

RIM

W=O

W=1

RIM

000
001
010
011
100
101
110
111

AL
CL
OL
BL
AH
CH
OH
BH

AX
CX
OX
BX
SP
BP
SI
01

000
001
010
011
100
101
110
111

MOD=OO
(BX)+(SI)
(BX)+(OI)
(BP)+(SI)
(BP)+(OI)
(SI)
(01)
OIRECT AOORESS
(BX)

MOD=01
(BX)+(SI)+08
(BX)+(0I)+08
(BP)+(SI)+08
(BP) + (01) + 08
(SI)+08
(01)+08
(BP)+08
(BX)+08

MOD=1~

(BX)+(SI)+016
(BX)+(0I)+016
(BP)+(SI)+016
(BP) + (01) + 016
(SI)+016
(01)+ 016
(BP)+016
(BX)+016

1.3.1 Functional Description of All Signals

1.3.3 OPERATING MODES

Figure 1-30 shows the 8086/8088 DIP pin assignments
and Table 1-24 provides a complete functional description
of each device pin signal and correlates the description to
the pin number and associated signal symbol.

One of the unique features the 8086 and 8088 CPU's allow the user is the ability to select between two functional
definitions of a subset of the 8086/8088 outputs. This enables the user to tailor the intended CPU system environment. This "system tailoring" is accomplished by
strapping the CPU's MN/MX* (minimum/maximum) input pin. Table 1-28 defines the 8086 and 8088 pin assignments for both the minimum and maximum modes of
operation.

1.3.2 Electrical Description of Pins
The absolute maximum ratings for the 8086/8088 device
are as follows.

In the minimum mode, the CPU's support small systems
by strapping the MN/MX* pin to + SY. In this mode of
operation, the 8086/8088 CPU generates all bus control
signals (DT/R*, DEN*, ALE and either M/IO* or
IO/M*) and the command output signals (RD*, WR* or
INTA *). The CPU also provides a mechanism for requesting bus access (HOLDIHLDA) that is compa~ible
with bus master type controllers (e.g., the Intel 8237A
DMA Controller).

ABSOLUTE MAXIMUM RATINGS
Ambient Temperature Under Bias
Storage Temperature

OOC to 70°C
-65°C to
+ 150°C
-1.0to +7V

Voltage on Any Pin with Respect to
GND
Power Dissipation
2. S Watt
Stresses above those listed above may cause permanent
damage to the device. These values present stress ratings
only and functional operation of the device at these or
any other conditions above those indicated in the operational sections of the device specifications is not implied.
Exposure to absolute maximum conditions for extended
periods of time may affect the device reliability.

When a bus master requires bus access in the minimum
mode, it activates the HOLD input to the CPU through its
request logic. In response to the "hold" request, The
CPU activates HLDA as an acknowledgement to the bus
master, requesting the bus, and simultaneously floats the
system bus and control lines. Since a bus request is asynchronous, the CPU samples the HOLD input on the positive transition of each CLK signal and activates HLDA at
the end of either the current bus cycle (if a bus cycle is in
progress) or idle clock period. The CPU maintains the
hold state until the bus master inactivates the HOLD input. At that time the CPU regains control of the system
bus. Note that during a "hold" state, the CPU continues
to execute instructions until a bus cycle is required.

Table 1-25 presents the D. C. voltage characteristics of the
8086/8088 CPU's. Table 1-26 lists the A.C. characteristics timing requirements and timing responses for minimum complexity systems, and Table 1-27 lists the A.C.
characteristics timing requirements and timing responses
for maximum complexity systems (using 8288 bus
controller). Figure 1-31 and Figure 1-32 presents waveforms for the minimum mode and maximum mode
operation related to the preceding A. C. characteristics
tables.

In the minimum mode, the VO-memory control line for
the 8088 CPU is the reverse of the corresponding control
line for the 8086 CPU (M/IO* on the 8086 and IO/M* on
the 8088). Since the 8088 CPU is an 8-bit device, this
conditioning provides compatibility with existing
MCS® -85 systems specific MCS-85 family devices (e.g.,
the Intel 8155/56).
1-43

210912-001

8086/8088 CPU

Lo

Hi

0

I

2

ADD

ADD
b.l.r/m
ADC
b.tJ/m
AND

4

5

8

1

ADD

ADD

w.t.r/m

b, ia

AOC
w,t.r/rn
AND

PUSH
ES
PUSH
SS
SEG
cES

POP
ES
POP
SS

PUSH
BX

AOC
b,i
AND
b.i
XOR
b.1
INC
SP
PUSH
SP

ADD
w,la
AOC
W.I
AND
W,I
XOR
W,I
INC
BP
PUSH
BP

INC
SI
PUSH
SI

INC
01
PUSH
01

JNBI
JAE
Immed

JEI
JZ
TEST

b,r/m

is,r/m

b.r/m

JBEI
JNA
XCHG
b.r/m
XCHG
SI

JNBEI
JA
XCHG
w.r/m
XCHG
01

JNS

w.r/m

JNEI
JNZ
TEST
w.r/m
XCHG
BP

JS

Immed

JBI
JNAE
Immed

MOV
b,fJ/m

MOV
w,f.rfm

CBW

CWO

MOVS

CMPS

CMPS

TeST

TeST
w,l,a

MOV
i - CH

MOV
1- OH
MOV

MOV
MOV
I - BH I - AX
MOV

MOV
1- CX

b.i.r/m

w.i.r/rn

ADD
Mr/m
ADC
b.f,r/m
AND
b,fJ/m
XOR
b.fJ/m
INC
AX
PUSH
AX

ADC
w.f.r/m
AND
w.f.r/m
XOR
w,f.r/m
INC
CX
PUSH
CX

1

JO

JNO

8

Immed
b.r/m

0
I

2
3
4

5

w,fJ/m

b,t,r/m
XOR

b,t.r/m
INC
OX
PUSH
OX

3

w,Ulm
XOR
w.t.r/rn
INC

ax

OAA

SEG

AAA

~SS

9

8
OR
b.fJ/m
SBB
b,fJ/m
SUB
b,fJ/m
CMP
b,f.r/m
DEC
AX
POP
AX

0

E

OR
W.I
SBB
W.I
SUB
W.I
CMP
W,I
DEC
BP
POP
BP

PUSH
CS
PUSH
OS
SEG
CS
SEG
OS
DEC
SI
POP
SI

JlI
JNGE
MOV

JNlI
JGE
lEA

.r,t,r/m

JNlEI
JG
POP

w,l,r/m

.r,l,r/m

JlEI
JNG
MOV

WAIT

PUSHF

POPF

SAHF

lAHF

STOS

STOS

LOOS

LOOS

SCAS

SCAS

MOV
I - OX
RET.
1.(i·SP)
ESC
2
JMP
I,d

MOV
1- BX
RET
I
ESC
3
JMP

MOV
1- SP
INT
Type 3
ESC

MOV
I - BP
INT
(Any)

MOV
I - SI

MOV
1-01

INTO

IRET

ESC

5
IN
v,w

ESC
7
OUT

si,d

4
IN
v,b

ESC
6
OUT

Cli

STI

ClO

STO

Grp 2

Grp 2

b.rfm

w.r/m

A
OR
b.tJ/m
SBB
b.l.r/m
SUB

OR
w,f.r/m
SBB
w,f.r/m
SUB
w.f.r/rn
CMP

w.t,r/m
DEC
CX
POP
CX

8
OR
w,t,r/m

SBB
w,t.r/m
SUB

b.t.rlm

w,U/rn

CMP
b.t.r/m
DEC
OX
POP
OX

CMP
w.t.r/rn
DEC
BX
POP
BX

JPI
JPE
MOV
b.l.r/m
CAll
I,d

JNPI
JPO
MOV

C
OR
b.1
SBB
b.i
SUB
b.1
CMP
b,i

DEC
SP
POP
SP

F

POP
OS
OAS
AAS
DEC
01
POP
01

6

XCHG
XCHG
XCHG
XCHG
XCHG
AX
ex
OX
BX
SP
A
MOV
MOV
MOV
MOV
MOVS
m - Al m - AX Al - m AX - m
8
MOV
MOV
MOV
MOV
MOV
1_ Al i _ Cl 1- Ol I - Bl i - AH
C
RET,
RET
lES
(I.SP)
Shift
Shilt
Shift
Shift
0
AAM
b
w
b.Y
W.Y
E lOOPNZI lOOPZI
IN
lOOP
JCXZ
lOOPNE lOOPE
b
F
REP
lOCK
REP
HLT

9

z

lOS
AAO

b,I,.

XlAT

ESC

ESC
1
JMP
d
STC

0

IN
w

OUT

OUT

b

W

CAll
d

CMC

Grp 1
b.rlm

Grp 1
w.r/m

ClC

where
modOr/m
Immed
Shill
Grp1

Grp 2

000
ADD
AOl
TEST
INC

-

0'0
ADC
ACl
NOT

DEC

CALL

00'
DA
ADA

"

0"

saa
ACA
NEG
CALL
l.id

'00
AND
$HlISAL
MUl
JMP

"0
XOA

'0'

sua
SHA
IMUl

DIY

JMP

PUSH

Ud

"

b • byte operation
d • direct
f • from CPU reg
i = immediate

m = memory

ia "'" immed. to accurn,

t • to CPU reg
v '" variable

v,b

rim

v,w

",

CMP
SAA
IOIV

-

rIm • EA is second byte

SI = short intrasegment

sr '" segment ,.egister

id • indirect
is • immed. byte, sign ext.
I • long ie. intersegment

W

= word operation

z = zero

Figure 1·29 Machine instruction Encoding Matrix
In the maximum mode (MN/MX* pin strapped to
ground), the Intel 8288 Bus controller is added to provide
sophisticated bus control functions and compatibility with
the MULTIBUS architecture, (Combining an Intel 8289
Arbiter with the 8288 permits the CPU to support multiple processors on the system bus.) The bus controller, instead of the CPU (see Figure 1-33), provides all bus
control and command outputs, This allows the pins previ-

ously delegated to these functions to be redefined to support multiprocessing functions,

1.3.4 Minimum Mode System
Overview/Description
The minimum mode 8086 (see Figure 1-34) is optimized
1·44

210912·001

8086/8088 CPU

Table 1-21 Key to Machine Instruction Encoding and Decoding
IDENTIFIER

EXPLANATION

MOD

Mode field; described in this chapter.

REG

Register field; described in this chapter.

R/M

Register/Memory field; described in this chapter.

SR

Segment register code: OO=ES, 01=CS, 10=SS, 11 =OS.

W,S, 0, V,Z

Single-bit instruction fields; described in this chapter.

DATA-S

S-bit immediate constant.

DATA-SX

8-bit immediate value that is automatically sign-extended to 16-bits
before use.

DATA-LO

Low-order byte of 16-bit immediate constant.

DATA-HI

High-order byte of 16-bit immediate constant.

(OISP-LO)

Low-order byte of optional S- or 16-bit unsigned displacement; MOD
indicates if present.

(OISP-HI)

High-order byte of optional 16-bit unsigned displacement; MOD
indicates if present.

IP-LO

Low-order byte of new IP value.

IP-HI

High-order byte of new IP value

CS-LO

Low-order byte of new CS value.

CS-HI

High-order byte of new CS value.

IP-INCS

S-bit signed increment to instruction pointer.

IP-INC-LO

Low-order byte of signed 16-bit instruction pointer increment.

IP-INC-HI

High-order byte of signed 16-bit instruction pointer increment.

AOOR-LO

Low-order byte of direct address (offset) of memory operand; EA not
calculated.

AOOR-HI

High-order byte of direct address (offset) of memory operand; EA not
calculated.
Bits may contain any value.

xxx

First 3 bits of ESC opcode.

YYY

Second 3 bits of ESC opcode.

REGS

S-bit general register operand.

REG16

16-bit general register operand.

MEMS

S-bit memory operand (any addressing mode).

MEM16

16-bit memory operand (any addressing mode).

IMMEOS

S-bit immediate operand.

IMME016

16-bit immediate operand.

SEGREG

Segment register operand.

OEST-STRS

Byte string addressed by 01.

1-45

210912-001

8086/8088 CPU

Table 1-21 Key to Machine Instruction Encoding and Decoding (continued)
IDENTIFIER

EXPLANATION

SRC-STR8

Byte string addressed by SI.

DEST-STR16

Word string addressed by 01.

SRC-STR16

Word string addressed by SI.

SHORT-LABEL

Label within ±127 bytes of instruction.

NEAR-PROC

Procedure in current code segment.

FAR-PROC

Procedure in another code segment.

NEAR-LABEL

Label in current code segment but farther than -128 to +127 bytes
from instruction.

FAR-LABEL

Labei in another code segment.

SOURCE-TABLE

XLAT translation table addressed by BX.

OPCOOE

ESC opcode operand.

SOURCE

ESC register or memory operand.

the full megabyte memory space, 64K-byte 1/0 space and
16-bit data path. The CPU directly provides all bus control (DT/R*, DEN*, ALE, M/IO*) , commands (RD*,
WR *, INTA *) and a simple CPU preemption mechanism

for small to medium (one or two boards), single CPU systems. Minimum mode system architecture is directed at
satisfying requirements of the lower to middle segment of
high performance l6-bit applications. The CPU maintains

Table 1-22 8086/88 Instruction Encoding
DATA TRANSFER
MOV = Move:

78543210

78543210
reg

78543210

71543210

71543210

I

Register/memory to/from register

100010dw

mod

rim

(DISP·lO)

(DISP·HI)

Immediate to register/memory

1 1 0 0 0 1 1 w

mod 0 0 0 rim

(DISP·lO)

(DISP·HI)

I

Immediate to register

1 0 1 1 w reg

data

dataifw-1

I

Memory to accumulator

1010000w

addr·lo

addr-hl

Accumulator to memory

1 0 1 0 0 0 1 w

addr-!o

.ddr-hi

Register/memory to segment register

1 0 0 0 1 1 1 0

mod

o

SR rim

(DISP·lO)

(DISP·HI)

Segment register to register I memory

10001100

mod

o

SR rim

(DISp·lO)

(DISP·HI)

I

Register/memory

11111111

mod 1 1 o· rim

Register

01010reg

Segment register

OOOreg110

data

78543210

I

dataitw-1

I

PUSH.. Push:

POP

I

(DISP·lO)

I

(DISP·HI)

I

(DISP·lO)

I

(DISP-HI)

I

= Pop:

Register/memory

1 0 0 0 1 1 1 1

Register

o1

Segment register

OOOreg111

mod 0 0 0 r/l'!"

I

0 1 1 reg

1-46

210912-001

8086/8088 CPU

Table 1-22 8086/88 Instruction Encoding (continued)
DATA TRANSFER (Conl'd.)

= ElCchange:

18543210

78543210

Fixed port

1 1 1 0 0 1 1 w

OATA-8

Variable port

1 1 1 0 1 1 1 w

XCHG

76543210

76543210

76543210

78543210

Register Imemory with register
Register with accumulator

IN :: Input from:
Fixed port

Variable port

OUT

=Outputto:

XLAT

= Translate byte to AL

1 1 0 1 0 1 11

LEA = Load EA to register

1 0 0 0 1 1

a1

mod

reg

rim

(OISP-LO)

(OISP-H1)

LOS

= Load pointer to OS

1 ·1 0 0 0 1

a1

mod

reg

rim

(DISP-LO)

(DISP·HI)

LES

=Load pointer to ES

1 1 0 0 0 1

aa

mod

reg

rim

(DISP·LO)

(DISP·HI)

LAHF = load AH with flags
SAHF = Store AH into flags
PUSHF
POPF

= Push flags

= Pop lIags

1 0 0 1 1 111
1 0 0 1 1 1 1
1 0 0 1 1 1

a

aa

1 0 0 1 1 1 0 1

ARITHMETIC

ADO = Add:

I

Reg/memory with register to either

OOOOOOdw

mod

reg

rim

(DISP-LO)

(DISP-HI)

Immediate to register/memory

100000sw

mod

aaa

rim

(DISP-LO)

(DISP-HI)

I

Immediate to accumulator

0OOOO10w

I

data

I

data if s: w=Ol

I

data

I

data if s: w=Ol

I

data if w=l

data

ADC = Add with carry:
Reg/memory with register to either

0OO100dw

mod

Immediate to register/memory

100000sw

mod

Immediate to accumulator

0OO1010w

data

Register/memory

1 1 1 1 1 1 1 w

mod 0 0 0 rim

Register

01000reg

AAA :: ASCII adjust for add

aa1

reg

a

1

a

rim

(DISP-LO)

(DISP-HI)

rim

(DISP-LO)

(DISP-HI)

I

(DISP-HI)

I

data if w""l

INC ... Increment:

DAA

= Decimal adjust for add

a0

1

a1

I

(DISP-LO)

I

11

1 o 0 1 1 1

1-47

210912-001

808618088 CPU

Table 1·22 8086/88 Instruction Encoding (continued)
ARITHMETIC (Cont'd.)

SUB

= Subtract:

1,654321'07654321016$4321,078:.5'43210

Reg/memory and register to either

0Ol'010dw

mod

"0

Immediate from register/memory

100000sw

mod

,o,

Immediate from accumulator

0010110w

rim
rim

(D1SP·LO)

(DISp·HI)

(DlSP'LO)

(DISP-HI)

18543210

I
I

18543210

data

I

data if s: w=Ol

I

data

I

data if s: w=Ol

I

data

1

data if s: w=l

data ifw=l

data

see = Subtract with borrow:
Aegfmemoryand register 10 either

0OOl10dw

mod

Immediate from register/memory

100000sw

mod

Immediate from accumulator

0OOl110w

reg

o,

,

rim

(DISP-LO)

(DISP-HI)

rIm

(DISP-LO)

(DISP-HI)

I
I

data if w=l

data

DEC Decrement:
Register/memory

1 1 1 1 1 1 1 w

Register

01001reg

NEG Change sign

1 1 1 1 0 1 1

w

mod001

rim

mod 0 1 1 rim

i
I

(DISP·LO)

I

(DISP-HI)

I

(DISP·LO)

I

(DISP-HI)

I

CMP = Compare:

Register/memory and register

001110dw

Immediate with register/memory

100000sw

Immediate with accumulator

o0

1 1 1 lOw

AAS ASCII adjust lor subtract

o0

,
,

mod

reg

rim

(DISP·LO)

(DISP·HI)

mod

,,,

rim

(DISP·LO)

(DISP·HI)

0 rim

J

data

,," ,
o, , ,,

OAS Decimal adjust tor subtract

o0

MUl Multiply (unsigned,

1 1 1 1 0 1 1 w

mod

,o

IMUL Integer multiply (signed)

,,1 1 0 11 w

mod

,o,

AAM ASCII adjust for multiply

(DISP·LO)

(DISP·H1)

rim

(DISP·lO)

(DISp·HI)

(DISP-LO)

(DISP·HI)

(DISP-LO)

(DISP-HI)

rim

(DISP-LO)

(DISP·HI)

00001010

(DISP·lO)

(DISP·HI)

1 1

a

1 0 1 0 0

00001010

DIV Divide (unsign,ed)

"

,

, 0 , , w

mod

,,

mod

,,,

IDIV Integer divide (signed)

1 1 1 1 0 1 , w

AAD ASCII adjust for divide

1 1 0 1

caw Convert byte to word

1 0 0 1 1 0 0 0

CWD Convert word to double word

, 0 0 1 1 0 ,0 1

o1

0 1

0 rim

LOGIC

NOT Invert

1 1 1 1 0 1 1 w

mod

SHl/SAL Shift logical I arithmetic left

1 1 0 1 0 0

vw

mod

o, o

rim

(DISP·lO)

(DISP-Hl)

0 rim

(DISP-LO)

(DISP-HI)

rim

(DISP-LO)

(DISP·Hl)

rim

(DISP·lO)

(DISP·HI)

0 0 rim

(DISP·lO)

(DISP·HI)

SHR Shift logical right

1 1 0 1

o0 vw

mod

,o
,o,

SAR Shift arithmetic right

1 1 0 1

o0

W

mod

,,,

ROl Rotate left

110100vw

mod

o

Y

1·48

210912·001

8086/8088 CPU

Table 1-22 8086/88 Instruction Encoding (continued)
LOGIC IConl'd.)

76543210

76543210

ROR Rotate right

1101QOvw

mod

ACL Rotate through carry flag left

110100vw

RCA Rotate through carry right

1 1 0 1 0 0 v w

mod

Regl memory with register to either

001000dw

mod

Immediate to register/memory
Immediate to accumulator

76543210

76543210

0 1 <1m

(DISP-LO)

(OISP·HI)

mod 0 I

o rim

(DISP-LO)

(DISP-HI)

o1

1 <1m

(OISP-LO)

{D1SP-HI}

<1m

(DISP-lO)

(DISP-HI)

1000000w

mod 1 0 0 rim

IDISP-LOI

(OISP-HI)

Q010010w

data

data if w=l

o

76543210

78543210

AND == And:
reg

I
I

data

I

dataifw=l

I

data

I

data it w=l

I

data

I

data if w=l

I

data

I

data if w=l

I

TEST = And function to flaga no result:
Register/memory and register

0OO100dw

mod

Immediate data and register/memory

1 1 1 1 0' 1

w

mod

Immediate data and accumulator

1010100w

OR

rim

(DISP-lOI

0 0 <1m

(DISP-LO)

reg

o

I

I

(DISP-HI)

(DISP-HI)

I

j

data

=Or;

Reg/memory and register to either

0000lQdw

mod

Immediate to register/memory

1000000w

mod

Immediate to accumulator

OOOQ110w

XOR

rim

(D1SP-LO)

(OlSP·HI)

0 1 rim

IDISP-LO)

(DISP-HI)

reg

o

I
I

data if w=l

data

= Exclusive or:

Reg/memory and register to either

o0

1 1 0 0 d w

Immediate to register/memory

o0

1 1 0 lOw

Immediate to accumulator

o0

1 1 0 lOw

mod

IDISP-LOI

IDISP-HI)

data

reg

rim

IOISP-LO)

IOIS.P-HI)

data

data if w=l

I
I

STRING MANIPULATION

REP_Repeat

1 1 1 1 0 0 1 z

MOVS.Move byte/word

1010010w

eMPS == Compare byte I word

1 0 1 0 0 1 1 w

SCAS.Scan byte/word

1 0 1 0 1 11 w

LODS. Load byte/wd to ALI AX

1 0 1 0 1 1 0 w

STDS. Star byte/wd from ALI A

1 0 1 0 1 0 1 w

1·49

210912-001

8086/8088 CPU

Table 1-22 8086/88 Instruction Encoding (continued)
CONTROL TRANSFER
CALL

= Call:

76543210

765432'~O

76543210

o1

IP·INC-LO

IP·INC-HI

Direct within segment

111

Indirect within segment

1111 1111

Direct intersegmenl

1 0 0 1 1 0 1 0

Indirect intersegment

JMP

0 0 0

11111111

mod

mod

o

1 0 rim

IP·hi

CS-Io

CS·hi

1 1 rim

(DISP·LO)

76543210

IOISP·HI)

I

(DISP·HI)

I

(DISP·HI)

I

(DISP·HI)

I

78543210

= Uncondltlonll Jump:

Direct within segment

11 1 0 1

o0

1

Ip·INC·LO

Direct within segment-shorl

1 1 1 0 1

o1

1

IP·INC8

Indirect within segment

111 11 111

mod 1 0 0

Direct intersegment

11 1 0 1

Indirect intersegment

11111111

o1

0

Ip·INC·HI

rim

IP·lo

mod 1 0 1

(DISP·LO)

IP-hi
CS-hi

CS·lo

RET

IOISP·LO)

IP-Io

o

76543210

rim

(DISP-LO)

= Return from CALL:

o0

Within segment

11

Within seg adding immed to SP

11000010

0 0 1 1

Intersegmenl

1 1 0 0 1

o1

1

Intersegment adding immediate to SP

1 1 0 0 1

o1

JE/JZ=Jump on equallzero

o1

1 1 0 1

JL/JNGE =Jump on less/not greater or equal
JLE/JNG =Jump on less or equal/not greater

dala-Io

dala-hi

I

0

data-Io

dala-hi

I

o0

IP-INC8

o1

1 1 1 1 0 0

Ip·INC8

o1

1 1 1 1 1 0

IP-INC8

Jet JNAE = Jump on below I not above or equal

o1

1 1 0 0 1 0

Ip·INC8

JBEI JNA = Jump on below or equal I not above

o1

1 1 0 1 1 0

IP-INC8

JP I JPE = Jump on parity I parity even

o1

1 1 1 0 1 0

IP·INC8

JO=Jumpon overflow

o1

1 1 0 0 0 0

Ip·INCB

JS=Jump on sign

o1

1 1 1 0 0 0

Ip·INCB

JNEI JNZ., Jump on not equal I not zerO

o1

1 1 0 1

o1

Ip·INCB

JNL/JGE=Jumpon not less/greater or equal

o1

1 1 1 1 0 1

IP-INC8

JNLE/JG =Jump on not less or equal/greater

o1

11 11 11

IP-INC8

JNBI JAE. Jump on not below I above or equal

o1

1 1 0 0 1 1

IP·INCB

JN8E/JA=Jump on not below or equal/above

o1

1 1 0 1 1 1

IP~INCB

JNP/JPO_Jumpon not par/parodd

o

1 1 1 1 0 1 1

Ip·INC8

JNO =Jump on not overflow

o1

1 1 0 0 0 1

IP·INCB

1-50

210912-001

8086/8088 CPU

Table 1-22 8086/88 Instruction Encoding (continued)
CONTROL TRANSFER (Cont'd.)
RET = Return from CALL:

76543210

78543210

JNS=Jump on not slg"

0' , 11001

IP-INC8

LOOP = loop ex times

" ,o0 0 1 0

IP-INC8

LOOPZ/lOOPE= Loop while zero/equal

1 1 1 0 0 0 0 1

IP-1NC8

1 1 1 0 0 0 0 0

Ip·INC8

,,

1 0 0 0 1 1

IP-INC8

Type specified

1 1 0 0 1 1 0'

DATA·8

Type3

11001 , 0 0

INTO = Interrupt on overllow

1 1 0 0 1 , , 0

IRET = Interrupt return

1 1 0 0 1 1

LOOPNZlLOOPNE

=Loop while nol zero/equa I

JCXZ=Jump on ex zero

76543210

78543210

76543210

78543210

INT = Interrupt:

l

,,

PROCESSOR CONTROL

eLC =Clear carry

11111000

CMC =Complement carry

11110101

STC = Set carry

1111 1 0 0 1

etD =Clear direction

"

STD

=Set direction

,

1 1 1 0 0

1111 1101

eLi = Clear mterrupt

1111 1 0 1 0

STI = Set interrupt

"

HLT=Halt

"

WAIT=Wait

1 0 0 1 1 0 1 1

ESC = Escape (to extern,,1 device)

1 1 0 1 1 x x x

LOCK

=Bus lock prefix

SEGMENT = Override prefix

,
,

11011
1 0 1 0 0

modyyyr/m

I

(DISP·LO)

I

(DISP·HI)

I

1 1 1 1 0 0 0 0

o0

1 reg 1 1 0

1-51

210912-001

8086/8088 CPU

(HOLD, HLDA) compatible with existing DMA controllers (e.g., 8259A Interrupt Controller).
In the minimum mode the 8088 CPU provides an SSO
status output. This output is equivalent to SO in the maximum mode and can be decoded with DT/R*
and - IO/M*, which are equivalent to S 1* and S2 * respectively, to provide the same CPU cycle status information (see Table 1-29). This type of decoding could be used
in a minimum mode 8088-based system to allow dynamic
RAM refresh during passive CPU cycle.

1.3.5 Maximum Mode System
Overview/Description
The maximum mode (see Figure 1-35) extends the system
architecture to support multiprocessor configurations and
local instruction set extension processors (coprocessors).
By adding the 8288 bipolar bus controller, the 8086 outputs assigned to bus control and commands in the minimum mode are redefined to allow these extensions and
enhance general system performance. Specifically, (1)
two prioritized levels of processor preemption
(RQ*/GTO*, RQ*/GTl *) allow multiple processors to reside on the 8086's local bus and share its interface to the
system bus, (2) Queue status (QSO, QSI) is available to
allow external devices like ICETM-86 or special instruction set extension co-processors (such as the 8087 Numeric Co-processor) to track the CPU instruction
execution, (3) access control to shared resources in multiprocessor systems is supported by a hardware bus lock
mechanism and (4) system command and configuration
options are expanded via devices like the 8288 bus controller and 8289 bus arbiter.

QUEUE STATUS

The queue status indicates what information is being removed from the internal queue and when the queue is being reset due to a transfer of control (Thble 1-30). By
monitoring the SO*, S I *, S2 * status lines for instructions
entering the 8086 (1, 0, 0 indicates code access while AO

and BHE* indicate word or byte) and QSO, QSI for instructions leaving the 8086's internal queue, it is possible
to track the instruction execution. Since instructions are
executed from the 8086's internal queue, the queue status
is presented each CPU clock cycle and is not related to the
bus cycle activity. This mechanism (1) allows a
co-processor to detect execution of an ESCAPE instruction which directs the co-processor to perform a specific
task and (2) allows ICETM-86 to trap execution of a specific memory location.
An example of a circuit used by ICE is given in Figure
1-36. The first up down counter tracks the depth of the
queue while the second captures the queue depth on a
match. The second counter decrements on further fetches
from the queue until the queue is flushed or the count goes
to zero indicating execution of the match address. The
first counter decrements on fetch from the queue (QSO =
I) and increments on code fetches into the queue. Note
that a normal code fetch will transfer two bytes into the
queue so two clock increments are given to the counter
(T201 and T301) unless a single byte is loaded over the
upper half of the bus (AO-P is high). Since the execution
unit (EU) is not synchronized to the bus interface unit
(BIU), a fetch from the queue can occur simultaneously
with a transfer into the queue. The Exclusive-OR gate
driving the ENP input of the first counter allows these
simultaneous operations to cancel each other and not
modify the queue depth.

HARDWARE LOCK

To address the problem of controlling access to shared
resources, the maximum mode 8086 provides a hardware
LOCK* output. The LOCK* output is activated through
the instruction stream by execution of the LOCK prefix
instruction. The LOCK* output goes active in the first
CPU clock cycle following execution of the prefix and
remains active until the clock following the completion of
the instruction following the LOCK prefix. To provide
bus access control in multiprocessor systems, the LOCK*
signal should be incorporated into the system bus arbitration logic resident to the CPU.

Table 1·23 Machine Instruction Decoding Guide
1ST BYTE
BINARY
HEX
00
01
02
03
04
05
06
07

0000
0000
0000
0000
0000
0000
0000
0000

2ND BYTE

0000 MOD REG RIM
0001 MOD REG RIM
0010 MOD REG RIM
0011 MOD REG RIM
0100 DATA-S
0101 DATA-LO
0110
0111

BYTES 3, 4, 5, 6
(DISP-LO),(DISP-HI)
(DISP-LO).(DISP-HI)
(DISP-LO).(DISP-HI)
(DISP-LO).(DISP-HI)
DATA-HI

1-52

ASM·86 INSTRUCTION FORMAT
ADD
ADD
ADD
ADD
ADD
ADD
PUSH
POP

REGS/MEMS,REGS
REG16/MEM16.REG16
REGS.REGS/MEMS
REG16.REG161 M EM16
AL.IMMEDS
AX.IMMED16
ES
ES

210912-001

8086/8088 CPU

Table 1-23 Machine Instruction Decoding Guide (continued)
1ST BYTE
HEX
BINARY

2ND BYTE

08
09
OA
OB
OC
00
OE
OF
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
10
1E
1F
20
21
22
23
24
25
26

0000
0000
0000
0000
0000
0000
0000
0000
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0010
0010
0010
0010
0010
0010
0010

1000
1001
1010
1011
1100
1101
1110
1111
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0000
0001
0010
0011
0100
0101
0110

MOD REG
MOD REG
MOD REG
MOD REG
DATA-8
DATA-LO

RIM
RIM
RIM
RIM

MOD REG
MOD REG
MOD REG
MOD REG
DATA-8
DATA-LO

RIM
RIM
RIM
RIM

MOD REG
MOD REG
MOD REG
MOD REG
DATA-B
DATA-LO

RIM
RIM
RIM
RIM

MOD REG
MOD REG
MOD REG
MOD REG
DATA-B
DATA-LO

RIM
RIM
RIM
RIM

27
2B
29
2A
2B
2C
20
2E

0010
0010
0010
0010
0010
0010
0010
0010

0111
1000
1001
1010
1011
1100
1101
1110

MOD REG
MOD REG
MOD REG
MOD REG
DATA-B
DATA-LO

2F
30
31
32
33
34
35
36

0010
0011
0011
0011
0011
. 0011
0011
0011

1111
0000
0001
0010
0011
0100
0101
0110

MOD REG
MOD REG
MOD REG
MOD REG
DATA-B
DATA-LO

BYTES 3,4,5,6
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
DATA-HI

ASM-86 INSTRUCTION FORMAT
OR
OR
OR
OR
OR
OR
PUSH

REG81 MEM8,REG8
REG16/MEM16,REG16
REG8,REG8/MEM8
REG16, REG161 MEM16
AL,IMMED8
AX,IMMED16
CS

(not used)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
DATA-HI

(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
DATA-HI

(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
DATA-HI

RIM
RIM
RIM
RIM

(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO,(DISP-HI)
DATA-HI

RIM
RIM
RIM
RIM

(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
DATA-HI

1-53

ADC
ADC
ADC
ADC
ADC
ADC
PUSH
POP
SBB
SBB
SBB
SBB
SBB
SBB
PUSH
POP
AND
AND
AND
AND
AND
AND
ES:
DAA
SUB
SUB
SUB
SUB
SUB
SUB
CS:
DAS
XOR
XOR
XOR
XOR
XOR
XOR
SS:

REG81 M EM8, REG8
REG161 MEM16, REG16
REG8,REG8/MEM8
REG16, REG161 M EM16
AL,IMMED8
AX,IMMED16
SS
SS
REG81 MEM8, REG8
REG16/MEM16,REG16
REG8,REG8/MEMB
REG16, REG161 M EM16
AL,IMMEDB
AX,IMMED16
OS
OS
REGB/MEMB,REGB
REG16/MEM16,REG16
REGB,REGB/MEMB
REG16,REG16/MEM16
AL,IMMEDB
AX,IMMED16

(segment override
prefix)
REGSI M EMB, REGB
REG16/MEM16,REG16
REGB, REGBI MEMB
REG16,REG16/MEM16
AL,IMMEDB
AX,IMMED16

(segment override
prefix)
REGB/MEMB,REGB
REG16/MEM16,REG16
REGB,REGB/MEMB
REG16,REG161 MEM16
AL,IMMED8
AX,IMMED16

(segment override
prefix)

210912-001

8086/8088 CPU

Table 1-23 Machine Instruction Decoding Guide (continued)
1ST BYTE
HEX
BINARY

37
38
39
3A
3B
3C
3D
3E

0011
0011
0011
0011
0011
0011
0011
0011

0110
1000
1001
1010
1011
1100
1101
1110

3F
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
50
51
52
53
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F
60
61
62
63
64
65
66
67

0011
0100
0100
0100
0100
0100
0100
0100
0100
0100
0100
0100
0100
0100
0100
0100
0100
0101
0101
0101
0101
0101
0101
0101
0101
0101
0101
0101
0101
0101
0101
0101
0101
0110
0110
0110
0110
0110
0110
0110
0110

1111
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0000
0001
0010
0011
0100
0101
0110
0111

2ND BYTE

MOD REG
MOD REG
MOD REG
MOD REG
DATA-8
DATA-LO

RIM
RIM
RIM
RIM

BYTES 3,4,5,6

(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
DATA-HI

ASM-86 INSTRUCTION FORMAT
AAA
CMP
CMP
CMP
CMP
CMP
CMP
DS:
AAS
INC
INC
INC
INC
INC
INC
INC
INC
DEC
DEC
DEC
DEC
DEC
DEC
DEC
DEC
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
PUSH
POP
POP
POP
POP
POP
POP
POP
POP
(not used)
(not used)
(not used)
(not used)
(not used)
(not used)
(not used)
(not used)

1-54

REG8/MEM8,REG8
REG16/MEM16,REG16
REG8,REG8/MEM8
REG16,REG16/MEM16
AL,IMMED8
AX,IMMED16
(segment override
prefix)
AX
CX
DX
BX
SP
BP
SI
DI
AX
CX
DX
BX
SP
BP
SI
DI
AX
CX
DX
BX
SP
BP
SI
DI
AX
CX
DX
BX
SP
BP
SI
DI

210912-001

8086/8088 CPU

Table 1-23 Machine Instruction Decoding Guide (continued)
1ST BYTE
HEX
BINARY

2ND BYTE

68
69
6A
6B
6C
60
6E
6F
70
71
72

0110
0110
0110
0110
0110
0110
0110
0110
0111
0111
0111

1000
1001
1010
1011
1100
1101
1110
1111
0000 IP-INC8
0001 IP-INC8
0010 IP-INC8

73

0111

0011

IP-INC8

74
75
76
77
78
79
7A
7B
7C
70
7E
7F
80

0111
0111
0111
0111
0111
0111
0111
0111
0111
0111
0111
0111
1000

0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0000

IP-INC8
IP-INC8
IP-INC8
IP-INC8
IP-INC8
IP-INC8
IP-INC8
IP-INC8
IP-INC8
IP-INC8
IP-INC8
IP-INC8
MOD 000 RIM

80

1000

0000

MOD 001 RIM

80

1000

0000

MOD010 RIM

80

1000

0000

MOD011 RIM

80

1000

0000 MOD100R/M

80

1000

0000

MOD101 RIM

80

1000

0000

MOD110 RIM

80

1000

0000

MOD 111 RIM

81

1000

0001

MODOOOR/M

81

1000

0001

MOD 001 RIM

81

1000

0001

MOD010R/M

81

1000

0001

MOD011 RIM

BYTES 3,4,5,6

(DISP-LO),(DISP-HI),
DATA-8
(DISP-LO),(DISP-HI),
DATA-8
(DISP-LO),(DISP-HI),
DATA-8
(DISP-LO),(DISP-HI),
DATA-8
(DISP-LO),(DISP-HI),
DATA-8
(DISP-LO),(DISP-HI),
DATA-8
(DISP-LO),(DISP-HI),
DATA-8
(DISP-LO),(DISP-HI),
DATA-8
(DISP-LO),(DISP-HI),
DATA-LO,DATA-HI
(DISP-LO),(DISP-HI),
DATA-LO,DATA-HI
(DISP-LO),(DISP-HI),
DATA-LO,DATA-HI
(DISP-LO),(DISP-HI),
DATA-LO,DATA-HI

1-55

ASM-86 INSTRUCTION FORMAT

(not used)
(not used)
(not used)
(not used)
(not used)
(not used)
(not used)
(not used)
JO
JNO
JB/JNAEI
JC
JNB/JAEI
JNC
JE/JZ
JNE/JNZ
JBE/JNA
JNBE/JA
JS
JNS
JP/JPE
JNP/JPO
JLlJNGE
JNLlJGE
JLE/JNG
JNLE/JG
ADD

SHORT-LABEL
SHORT-LABEL
SHORT-LABEL
SHORT-LABEL
SHORT-LABEL
SHORT-LABEL
SHORT-LABEL
SHORT-LABEL
SHORT-LABEL
SHORT-LABEL
SHORT-LABEL
SHORT-LABEL
SHORT-LABEL
SHORT-LABEL
SHORT-LABEL
SHORT-LABEL
REG8/MEM8,IMMED8

OR

REG8/MEM8,IMMED8

ADC

REG8/MEM8,IMMED8

SBB

REG8/MEM8,IMMED8

AND

REG8/MEM8,IMMED8

SUB

REG8/MEM8,IMMED8

XOR

REG8/MEM8,IMMED8

CMP

REG8/MEM8,IMMED8

ADD

REG16/MEM16,IMMED16

OR

REG16/MEM16,IMMED16

ADC

REG16/MEM16,IMMED16

SBB

REG16/MEM16,IMMED16

210912-001

8086/8088 CPU

Table 1·23 Machine Instruction Decoding Guide (continued)
1ST BYTE
HEX
BINARY

2ND BYTE

81

1000

0001

MOD 100 RIM

81

1000

0001

MOD101 RIM

81

1000

0001

MOD110R/M

81

1000

0001

MOD 111 RIM

82

1000

0010

MOD 000 RIM

82
82

1000
1000

0010 MOD 001 RIM
0010 MOD010 RIM

82

1000

0010

82
82

1000
1000

0010 MOD100 RIM
0010 MOD 101 RIM

82
82

1000
1000

0010 MOD110R/M
0010 MOD 111 RIM

83

1000

0011

MODOOOR/M

83
83

1000
1000

0011
0011

MOD001 RIM
MOD010 RIM

83

1000

0011

MOD011 RIM

83
83

1000
1000

0011
0011

MOD 100 RIM
MOD101 RIM

83
83

1000
1000

0011
0011

MOD 110 RIM
MOD 111 RIM

84
85
86
87
88
89
8A
8B
8C
8C
8D
8E
8E
8F
8F
8F

1000
1000
1000
1000
1000
1000
1000
1000
1000
1000
1000
1000
1000
1000
1000
1000

0100
0101
0110
0111
1000
1001
1010
1011
1100
1100
1101
1110
1110
1111
1111
1111

MOD REG RIM
MOD REG RIM
MOD REG RIM
MOD REG RIM
MOD REG RIM
MOD REG RIM
MOD REG RIM
MOD REG RIM
MOD OSR RIM
MOD1--R/M
MOD REG RIM
MODOSR RIM
MOD 1-- RIM
MODOOO RIM
MOD 001 RIM
MOD010 RIM

MOD011 RIM

BYTES 3,4,5,6
(DISP-LO),(DISP-HI),
DATA-LO,DATA-HI
(DISP-LO),(DISP-HI),
DATA-LO,DATA-HI
(DISP-LO),(DISP-HI),
DATA-LO,DATA-HI
(DISP-LO),(DISP-HI),
DATA-LO,DATA-HI
(DISP-LO),(DISP-HI),
DATA-8

ASM-86 INSTRUCTION FORMAT
AND

REG16/MEM16,IMMED16

SUB

REG16/MEM16,IMMED16

XOR

REG16/MEM16,IMMED16

CMP

REG16/MEM16,IMMED16

ADD

REG8/MEM8,IMMED8

(not used)
(DISP-LO),(DISP-HI),
DATA-8
(DISP-LO),(DISP-HI),
DATA-8

ADC

REG8/MEM8,IMMED8

SBB

REG81 MEM8,IMMED8

(not used)
(DISP-LO),(DISP-HI),
DATA-8

SUB

REG8/MEM8,IMMED8

(not used)
(DISP-LO),(DISP-HI),
DATA-8
(DISP-LO),(DISP-HI),
DATA-SX

CMP

REG8/MEM8,IMMED8

ADD

REG16/MEM16,IMMED8

(DISP-LO), (DISP-HI),
DATA-SX
(DISP-LO),(DISP-HI),
DATA-SX

ADC

REG161 M EM16,IMMED8

SBB

REG16/MEM16,IMMED8

(not used)

(not used)
(DISP-LO),(DISP-HI),
DATA-SX

SUB

REG16/MEM16,IMMED8

(DISP-LO),(DISP-HI),
DATA-SX
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)

CMP

REG16/MEM16,IMMED8

TEST
TEST
XCHG
XCHG
MOV
MOV
MOV
MOV
MOV

REG8/MEM8,REG8
REG16/MEM16,REG16
REG8,REG8/MEM8
REG16,REG16/MEM16
REG8/MEM8,REG8
REG16/MEM16/REG16
REG8,REG8/MEM8
REG16,REG16/MEM16
REG16/MEM16,SEGREG

(not used)

(not used)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)

LEA
MOV

REG16,MEM16
SEGREG,REG16/MEM16

(not used)
(DISP-LO),(DISP-HI)

POP

REG16/MEM16

(not used)
(not used)

1-56

210912-001

8086/8088 CPU

Table 1·23 Machine Instruction Decoding Guide (continued)
1ST BYTE
HEX
BINARY
8F
8F
8F
8F
8F
90
91
92
93
94
95
96
97
98
99
9A

1000 1111
1000 1111
1000 1111
1000 1111
1000 1111
1001 0000
1001 0001
1001 0010
1001 0011
1001 0100
1001 0101
1001 0110
1001 0111
1001 1000
1001 1001
1001 1010

9B
9C
90
9E
9F
AO
A1
A2
A3
A4
A5
A6
A7
A8
A9
AA
AB
AC
AD
AE
AF
BO
B1
B2
B3
B4
B5
B6
B7
B8
B9
BA
BB

1001
1001
1001
1001
1001
1010
1010
1010
1010
1010
1010
1010
1010
1010
1010
1010
1010
1010
1010
1010
1010
1011
1011
1011
1011
1011
1011
1011
1011
1011
1011
1011
1011

1011
1100
1101
1110
1111
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0000
0001
0010
1011
0100
0101
0110
0111
1000
1001
1010
1011

2ND BYTE

BYTES 3,4,5,6

MOD011 RIM
MOD 100 RIM
MOD101 RIM
MOD110 RIM
MOD111 RIM

DISP-LO

DISP-HI,SEG-LO,
SEG-HI

ADDR-LO
ADDR-LO
ADDR-LO
ADDR-LO

ADDR-HI
ADDR-HI
ADDR-HI
ADDR-HI

DATA-8
DATA-LO

DATA-HI

DATA-8
DATA-8
DATA-8
DATA-8
DATA-8
DATA-8
DATA-8
DATA-8
DATA-LO
DATA-LO
DATA-LO
DATA-LO

DATA-HI
DATA-HI
DATA-HI
DATA-HI

ASM-86 INSTRUCTION FORMAT
(not used)
(not used)
(not used)
(not used)
(not used)
NOP
XCHG
XCHG
XCHG
XCHG
XCHG
XCHG
XCHG
CBW
CWO
CALL
WAIT
PUSHF
POPF
SAHF
LAHF
MOV
MOV
MOV
MOV
MOVS
MOVS
CMPS
CMPS
TEST
TEST
STOS
STOS
LODS
LODS
SCAS
SCAS
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV

1-57

(exchange AX, AX)
AX,CX
AX,DX
AX,BX
AX,SP
AX,BP
AX,SI
AX,DI

FAR_PROC

AL,MEM8
AX,MEM16
MEM8,AL
MEM16,AL
DEST -STR8, SRC-STR8
DEST-STA16,SRC-STR16
DEST -STR8,SRC-STA8
DEST-STR16,SRC-STR16
AL,IMMED8
AX,IMMED16
DEST-STR8
DEST-STR16
SRC-STR8
SRC-STR16
DEST-STR8
DEST-STA16
AL,IMMED8
CL,IMMED8
DL,IMMED8
BL,IMMED8
AH,IMMED8
CH,IMMED8
DH,IMMED8
BH,IMMED8
AX,IMMED16
CX,IMMED16
DX,IMMED16
BX,IMMED16

210912-001

8086/8088 CPU

Table 1-23 Machine Instruction Decoding Guide (continued)
1ST BYTE

HEX
BC
BD

BINARY

2ND BYTE

BF
CO
C1
C2
C3
C4
C5
C6

1011 1100 DATA-LO
1011 1101 DATA-LO
1011 1110 DATA-LO
1011 1111 DATA-LO
1100 0000
1100 0001
1100 0010 DATA-LO
1100 0011
1100 0100 MOD REG RIM
1100 0101 MOD REG RIM
1100 0110 MODOOOR/M

C6
C6
C6
C6
C6
C6
C6
C7

1100
1100
1100
1100
1100
1100
1100
1100

0110
0110
0110
0110
0110
0110
0110
0111

MOD 001 RIM
MOD010 RIM
MOD011 RIM
MOD 100 RIM
MOD101 RIM
MOD110 RIM
MOD 111 RIM
MOD 000 RIM

C7
C7
C7
C7
C7
C7
C7
C8
C9
CA
CB
CC
CD
CE
CF
DO
DO
DO
DO
DO
DO
DO
DO
D1
D1
D1
D1
D1

1100
1100
1100
1100
1100
1100
1100
1100
1100
1100
1100
1100
1100
1100
1100
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101

0111
0111
0111
0111
0111
0111
0111
1000
1001
1010
1011
1100
1101
1110
1111
0000
0000
0000
0000
0000
0000
0000
0000
0001
0001
0001
0001
0001

MOD 001 RIM
MOD010R/M
MOD011 RIM
MOD 100 RIM
MOD101 RIM
MOD110R/M
MOD 111 RIM

BE

DATA-LO

BYTES 3,4,5,6
DATA-HI
DATA-HI
DATA-HI
DATA-HI

MOV
MOV
MOV
MOV

SP,IMMED16
BP,IMMED16
SI,IMMED16
DI,IMMED16

(not used)
(not used)
DATA-HI
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI),
DATA-8

RET
RET
LES
LDS
MOV

IMMED16 (intraseg)

(intrasegment)
REG16,MEM16
REG16,MEM16
MEM8,IMMED8

(not used)
(not used)
(not used)
(not used)
(not used)
(not used)
(not used)
(DISP-LO),(DISP-HI),
DATA-LO,DATA-HI

MOV

MEM16,IMMED16

(not used)
(not used)
(not used)
(not used)
(not used)
(not used)
(not used
(not used)
(not used)
DATA-HI

DATA-8

MOD 000 RIM
MOD 001 RIM
MOD010 RIM
MOD011 RIM
MOD100R/M
MOD101 RIM
MOD110R/M
MOD 111 RIM
MOD 000 RIM
MOD 001 RIM
MOD010R/M
MOD011 RIM
MOD100R/M

ASM-86 INSTRUCTION FORMAT

(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)

RET
RET
INT
INT
INTO
IRET
ROL
ROR
RCL
RCR
SALISHL
SHR

IMMED16 (intersegment)
(intersegment)
3
IMMED8

REG8/MEM8,1
REG8/MEM8,1
REG8/MEM8,1
REG8/MEM8,1
REG8/MEM8,1
REG8/MEM8,1

(not used)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)

1-58

SAR
ROL
ROR
RCL
RCR
SALISHL

REG8/MEM8,1
REG16/MEM16,1
REG16/MEM16,1
REG161 MEM16, 1
REG16/MEM16,1
REG16/MEM16,1

210912-001

8086/8088 CPU

Table 1-23 Machine Instruction Decoding Guide (continued)
1ST BYTE
HEX
BINARY
01
01
01
02
02
02
02
02
02
02
02
03
03
03
03
03
03
03
03
04
05
06
07
08

1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101
1101

2ND BYTE
M00101 RIM
M00110 RIM
MOD 111 RIM
MOD 000 RIM
MOD 001 RIM
M00010 RIM
MOD 011 RIM
M00100 RIM
M00101 RIM
MOD 110 RIM
M00111 RIM
MOOOOO RIM
MOD 001 RIM
MOO010R/M
M00011 RIM
M00100 RIM
M00101 RIM
MOD 110 RIM
M00111 RIM
00001010
00001010

OF
EO

0001
0001
0001
0010
0010
0010
0010
0010
0010
0010
0010
0011
0011
0011
0011
0011
0011
0011
0011
0100
0101
0110
0111
1000
1XXX
1101 1111
1110 0000

MOD 000 RIM
MOOYYY RIM
M00111 RIM
IP-INC-8

E1

1110

0001

IP-INC-8

E2
E3
E4
E5
E6
E7
E8
E9
EA
EB
EC
ED
EE
EF
FO
F1
F2
F3
F4
F5

1110
1110
1110
1110
1110
1110
1110
1110
1110
1110
1110
1110
1110
1110
1111
1111
1111
1111
1111
1111

0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0000
0001
0010
0011
0100
0101

IP-INC-8
IP-INC-8
OATA.-8
OATA-8
OATA-8
OATA-8
IP-INC-LO
IP-INC-LO
IP-LO
IP-INC8

BYTES 3,4,5,6
(OISP-LO),(OISP-HI)
(OISP-LO),(OISP-HI)
(OISP-LO),(OISP-HI)
(OISP-LO),(OISP-HI)
(OISP-LO),(OISP-HI)
(OISP-LO),(OISP-HI)
(OISP-LO),(OISP-HI)
(OISP-LO),(OISP-HI)
(OISP-LO),(OISP-HI)
(OISP-LO),(OISP-HI)
(OISP-LO),(OISP-HI)
(OISP-LO),(OISP-HI)
(OISP-LO),(OISP-HI)
(OISP-LO),(OISP-HI)
(OISP-LO),(OISP-HI)
(OISP-LO),(OISP-HI)

(OISP-LO), (OISP-HI)

IP-INC-HI
IP-INC-HI
IP-HI,CS-LO,CS-HI

1-59

ASM-86 INSTRUCTION FORMAT
REG16/MEM16,1

SHR
(not used)
SAR
ROL
ROR
RCL
RCR
SALISHL
SHR
(not used)
SAR
ROL
ROR
RCL
RCR
SALISHL
SHR
(not used)
SAR
AAM
AAO
(not used)
XLAT

SOURCE-TABLE

ESC

OPCOOE,SOURCE

REG16/MEM16,1
REG8/MEM8,CL
REG8/MEM8,CL
REG8/MEM8,CL
REG8/MEM8,CL
REG8/MEM8,CL
REG8/MEM8,CL
REG8/MEM8,CL
REG16/MEM16,CL
REG16/MEM16,CL
REG16/MEM16,CL
REG16/MEM16,CL
REG16/MEM16,CL
REG16/MEM16,CL
REG16/MEM16,CL

LOOPNEI SHOR~LABEL
LOOPNZ
LOOPEI SHORT-LABEL
LOOPZ
SHORT-LABEL
LOOP
JCXZ
SHORT-LABEL
IN
AL,IMME08
IN
AX,IMME08
OUT
AL,IMME08
OUT
AX,IMME08
CALL
NEAR-PROC
JMP
NEAR-LABEL
JMP
FAR-LABEL
SHORT-LABEL
JMP
IN
AL,OX
IN
AX,OX
OUT
AL,OX
OUT
AX,OX
(prefix)
LOCK
(not used)
REPNE/REPNZ
REP/REPE/REPZ
HLT
CMC

210912-001

8086/8088 CPU

Table 1-23 Machine Instruction Decoding Guide (continued)
1ST BYTE
BINARY
HEX

2ND BYTE

BYTES 3,4,5,6
(DISP-LO),(DISP-HI),
DATA-8

F6

1111

0110

MOD 000 RIM

F6
F6
F6
F6
F6
F6
F6
F7

1111
1111
1111
1111
1111
1111
1111
1111

0110
0110
0110
0110
0110
0110
0110
0111

MOD 001 RIM
MOD010 RIM
MOD011 RIM
MOD100 RIM
MOD101 RIM
MOD 110 RIM
MOD 111 RIM
MOD 000 RIM

F7
F7
F7
F7
F7
F7
F7
F8
F9
FA
FB
FC
FD
FE
FE
FE
FE
FE
FE
FE
FE
FF
FF
FF
FF
FF
FF
FF
FF

1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111
1111

0111
0111
0111
0111
0111
0111
0111
1000
1001
1010
1011
1100
1101
1110
1110
1110
1110
1110
1110
1110
1110
1111
1111
1111
1111
1111
1111
1111
1111

MOD 001 RIM
MOD010 RIM
MOD011 RIM
MOD100 RIM
MOD101 RIM
MOD110 RIM
MOD 111 RIM

MOD 000 RIM
MOD 001 RIM
MOD010 RIM
MOD011 RIM
MOD100 RIM
MOD101 RIM
MOD110 RIM
MOD 111 RIM
MODOOOR/M
MOD001 RIM
MOD010 RIM
MOD011 RIM
MOD100 RIM
MOD101 RIM
MOD110 RIM
MOD 111 RIM

(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI),
DAT A-LO, DAT A-H I
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)

(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)

(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)
(DISP-LO),(DISP-HI)

1-60

ASM-86 INSTRUCTION FORMAT
TEST

REG8/MEM8,IMMED8

(not used)
NOT
NEG
MUL
IMUL
DIV
IDIV
TEST

REG8/MEM8
REG8/MEM8
REG8/MEM8
REG8/MEM8
REG8/MEM8
REG8/MEM8
REG16/MEM16,IMMED16

(not used)
NOT
NEG
MUL
IMUL
DIV
IDIV
CLC
STC
CLI
STI
CLD
STD
INC
DEC
(not used)
(not used)
(not used)
(not used)
(not used)
(not used)
INC
DEC
CALL
CALL
JMP
JMP
PUSH
(not used)

REG16/MEM16
REG16/MEM16
REG16/MEM16
REG16/MEM16
REG16/MEM16
REG16/MEM16

REG8/MEM8
REG8/MEM8

MEM16
MEM16
REG16/MEM16 (intra)
MEM16 (intersegment)
REG161 MEM16 (intra)
MEM16 (intersegment)
MEM16

210912-001

8086/8088 CPU

Table 1-24 8086/8088 Device Pin Descriptions
The following pin function descriptions are for iAPX 86 systems in either minimum or maximum mode. The "Local
Bus" in these descriptions is the direct multiplexed bus interface connection to the 8086 (without regard to additional
bus buffers).
Symbol

Pin No.

AD'S- AD o 2-16,39

A, g1Ss,
A , s1Ss,
A 17/S 4,
A , s1S3

35-38

Type

Name and Function

1/0

Address Data Bus: These lines constitute the time multiplexed memoryllO address (T 1)
and data (T 2, T3, Tw, T4) bus. Ao is analogous to SHE for the lower byte of the data bus,
pins DrDo. It is LOW during T, when a byte is to be transferred on the lower portion of
the bus in memory or 1/0 operations. Eight-bit oriented devices tied to the lower half
would normally use Ao to condition chip select functions. (See SHE.) These lines are
active HIGH and float to 3-state OFF during interrupt acknowledge and local bus "hold
acknowledge:'

0

Address/StatuI: During T1 these are the four most sign ificant address lines for memory operations. During 1/0
operations these lines are LOW. During memory and 110
operations, status information is available on these
lines during T 2, T3, Tw, and T 4. The status of the interrupt
enable FLAG bit (Ss) is updated at the beginning of each
CLK cycle. A'7/S4 and A,s1S3 are encoded as shown.
This information indicates which relocation register is
presently being used for data accessing.

A17'S4

A,oIS3

Characteristics

o (LOW)

0

Alternate Data
Stack
Code or None
Data

0

1

1 (HIGH)
1
s6 is 0
(LOW)

0
1

These lines float to 3-state OFF during local bus "hold
acknowledge."
SHE/S7

34

0

Bus High Enable/Status: During T, the bus high enable
signal (SHE) should be used to enable data onto the
most significant half of the data bus, pins D,s-D s. Eightbit oriented devices tied to the upper half of the bus
would normally use SHE to condition chip select functions. SHE is LOW during T, for read, write, and interrupt acknowledge cycles when a byte is to be transferred on the high portion of the bus. The S7 status information is available during T 2, T 3, and T4. The signal is active
LOW, and floats to 3-state OFF in "hold." It is LOW during T 1 for the first interrupt acknowledge cycle.

iRE

Ao

0

0

Whole word

0

1

Upper byte froml
to odd address

1

0

Lower byte froml
to even address

1

1

None

Characterlsllcs

AD

32

0

READY

22

I

READY: is the acknowledgement from the addressed memory or 110 device that it will
complete the data transfer. The READY signal from memory/IO is synchronized by the
8284A Clock Generator to form READY. This signal is active HIGH. The 8086 READY input is not synchronized. Correct operation is not guaranteed if the setup and hold
times are not met.

INTR

18

I

Interrupt Request: is a level triggered input which is sampled during the last clock cycle of each instruction to determine if the processor should enter into an interrupt
acknowledge operation. A subroutine is vectored to via an interrupt vector lookup table
located in system memory. It can be internally masked by software resetting the interrupt enable bit. INTR is internally synchronized. This signal is active HIGH.

TEST

23

I

TEST: input is examined by the "Wait" instruction. If the TEST input is LOW execution
continues, otherwise the processor waits in an "Idle" state. This input is synchronized
internally during each clock cycle on the leading edge of CLK.

Read: Read strobe indicates that the processor is performing a memory of 110 read cycle, depending on the state of the S2 pin. This signal is used to read devices which
reside on the 8086 local bus. RD is active LOW during T2, T3 and Tw of any read cycle,
and is guaranteed to remain HIGH in T2 until the 8086 local bus has floated.
This signal floats to 3-state OFF in "hold acknowledge."

1-61

210912-001

8086/8088 CPU

Table 1·24 8086/8088 Device Pin Descriptions (continued)
Symbol

Pin No.

Type

NMI

17

I

Non·maskable interrupt: an edge triggered input which causes a type 2 interrupt. A
subroutine is vectored to via an interrupt vector lookup table located in system
memory. NMI is not maskable internally by software. A transition from a lOW to HIGH
initiates the interrupt at the end of the current instruction. This input is internally syn·
chronized.

RESET

21

I

Reset: causes the processor to immediately terminate its present activity. The signal
must be active HIGH for at least four clock cycles. It restarts execution, as described in
the Instruction Set description, when RESET returns lOW. RESET is internally syn·
chronized.

ClK

19

I

Clock: provides the basic timing for the processor and bus controller. It is asymmetric
with a 33% duty cycle to provide optimized internal timing.

Vee

40

GND

1,20

MN/MX

33

Name and Function

Vcc: + 5V power supply pin.
Ground
I

Minimum/Maximum: indicates what mode the processor is to operate in. The two
modes are discussed in the following sections.

=

The fol/owing pin function descriptions are for the 808618288 system in maximum mode (i.e., MNIMX VssJ. Only the
pin functions which are unique to maximum mode are described; aI/ other pin functions are as described above.
S2, S" So

26-28

0

Status: active during T4, T" and T2 and is returned to the
passive state (1,1,1) during T3 or during Tw when READY
is HIGH. This status is used by the 8288 Bus Controller
to generate all memory and 1/0 access control signals.
Any change by 5;,5;, or
during T4 is used to indicate
the beginning of a bus cycle, and the return to the pas·
sive state in T3 or Tw is used to indicate the end of a bus
cycle.

So

These signals float to 3-state OFF in "hold acknowledge." These status lines are encoded as shown.

RO/GTo,
RCi/GT,

30,31

110

$2

$,

So

Characteristics

OILOW)

0

0

0
0
0

0

,

1
1

0

,

0
0

0

1
1

1
1

0

Interrupt
Acknowledge
Read 1/0 Port
Write 1/0 Port
Hall
Code Access
Read Memory
Write Memory
Passive

1 (HIGH)

1
1
1

Request/Grant: pins are used by other local bus masters to force the processor to
release the local bus at the end of the processor's current bus cycle. Each pin is
bidirectional with RO/GT o having higher priority than RO/GT,. RO/GT has an internal
pull-up resistor so may be left unconnected. The request/grant sequence is as follows
(see Figure 9):
1. A pulse of 1 ClK wide from another local bus master indicates a local bus request
("hold") to the 8086 (pulse 1).
2. During a T4 or T, clock cycle, a pulse 1 ClK wide from the 8086 to the requesting master
(pulse 2), indicates that the 8086 has allowed the local bus to float and that it will enter
the "hold acknowledge" state at the next ClK. The CPU's bus interface unit is disconnected logically from the local bus during "hold acknowledge."
3. A pulse 1 ClK wide from the requesting master indicates to the 8086 (pulse 3) that
the "hold" request is about to end and that the 8086 can reclaim the local bus at the
next CLK.
Each master-master exchange of the local bus is a sequence of 3 pulses. There must
be one dead CLK cycle after each bus exchange. Pulses are active lOW.
If the request is made while the CPU is performing a memory cycle, it will release the local
bus during T4 of tne cycle when all the following conditions are met:
1.
2.
3.
4.

Request occurs on or before T2 ·
Current cycle is not the low byte of a word (on an odd address).
Current cycle is not the first acknowledge of an interrupt acknowledge sequence.
A locked instruction is not currently executing.

1·62

210912-001

8086/8088 CPU

Table 1-24 8086/8088 Device Pin Descriptions (continued)
Symbol

Pin No.

Type

Name and Function
If the local bus is idle when the request is made the two possible events will follow:
1. local bus will be released during the next clock.
2. A memory cycle will start within 3 clocks. Now the four rules for a currently active
memory cycle apply with condition number 1 already satisfied.

~

QSh QSo

29

0

LOCK: output indicates that other system bus masters are not to gain control of the
system bus while lOCK is active lOW. The lOCK signal is activated by the "LOCK"
prefix instruction and remains active until the completion of the next instruction. This
signal is active lOW, and floats to 3·state OFF in "hold acknowledge."

24, 25

0

Queue StatuI: The queue status
QSo
CHARACTERISTICS
Q~
is valid during the ClK cycle
o
(LOW)
0 No Operation
after which the queue operation
1 First Byte of Op Code from Queue
is performed.
(HIGH) 0 Empty the Queue
QS, and QSo provide status to
1
1 Subsequent Byte from Queue
allow external tracking of the
internal 8086 instruction queue.

~

The fol/owing pin function descriptions are for the BOB6 in minimum mode (i.e., MN/MX = Vee!- Only the pin functions which
are unique to minimum mode are described; aI/ other pin functions are as described above.

M/iO

28

0

Status line: logically equivalent to S2 in the maximum mode. It is used to distinguish a
memory access from an I/O access. MIlO becomes valid in the T4 preceding.!. bus cycle
and remains valid until the final T4 of the cycle (M = HIGH, 10 = LOW). MilO floats to
3·state OFF in local bus "hold acknowledge."

WJ:f

29

0

Write: indicates that the processor is performing a write memory or write I/O cycle,
depending on the state of the M/iO signal. WR is active for T 2, T3 and Tw of any write cy·
cle. It is active LOW, and floats to 3·state OFF in local bus "hold acknowledge."

INTA

24

0

INTA is used as a read strobe for interrupt acknowledge cycles. It is active LOW during
T 2, T3 and Tw of each interrupt acknowledge cycle.

ALE

25

0

Address Latch Enable: provided by the processor to latch the address into the 82821
8283 address latch. It is a HIGH pulse active during Tl of any bus cycle. Note that ALE
is never floated.

OT/R

27

0

Data Transmit/Receive: needed in minimum system that desires to use an 8286/8287
data bus transceiver. It is used to control the direction of data flow through the
transceiver. Logically DT/R is equivalent to S"; in the maximum mode, and its timing is
the same as for M/iO. (T = HIGH, R = LOW.) This signal floats to 3·state OFF in local bus
"hold acknowledge."

DEN

26

0

Data Enable: provided as an output enable for the 8286/8287 in a minimum system
which uses the transceiver. DEN is active LOW during each memory and I/O access and
for INTA cycles. For a read or INTA cycle it is active from the middle of T2 until the mid·
die of T 4, while for a write cycle it is active from the beginning of T 2 until the middle of
floats to 3·state OFF in local bus "hold acknowledge."
T4 .

31,30

I/O

HOLD: indicates that another master is requesting a local bus "hold." To be acknowl·
edged, HOLD must be active HIGH. The processor receiving the "hold" request will
issue HLOA (HIGH) as an acknowledgement in the middle of a T, clock cycle. Simul·
taneous with the issuance of HLDA the processor will float the local bus and control
lines. After HOLD is detected as being LOW, the processor will LOWer the HLOA, and
when the processor needs to run another cycle, it will again drive the local bus and
control lines.

om

HOLD,
HLOA

The same rules as for RQlelT apply regarding when the local bus will be released.
HOLD is not an asynchronous input. External synchronization should be provided if the
system cannot otherwise guarantee the setup time.

1-63

210912·001

8086/8088 CPU

During normal multiprocessor system operation, priority
of the shared system bus is determined by the arbitration
circuits on a cycle by cycle basis. As each CPU requires a
transfer over the system bus, it request access to the bus
via its resident bus arbitration logic. When the CPU gains
priority (determined by the system bus arbitration scheme
and any associated logic), it takes control of the bus, performs its bus cycle and either maintains bus control, voluntarily releases the bus or is forced off the bus by the
loss of priority. The lock mechanism prevents the CPU
from losing bus control (either voluntarily or by force)
and guarantees a CPU the ability to execute multiple bus
cycles (during execution of the locked instruction) without intervention and possible corruption of the data by
another CPU. A classic use of the mechanism is the
'TEST and SET semaphore' during which a CPU must
read from a shared memory location and return data to the
location without allowing another CPU to reference the
same location between the TEST operation (read) and the
SET operation (write). In the 8086 this is accomplished
with a locked exchange instruction (see Figure 1-37).

1.3.6 General Design Considerations
Since the minimum mode 8086 has common read and
write commands for memory and 1/0, if the memory and
110 address spaces overlap, the chip selects must be qualified by M/IO* to determine which address space the devices are assigned. This restriction on chip select
decoding can be removed if the 1/0 and memory addresses in the system do not overlap and are properly decoded, all 1/0 is memory mapped, or RD*, WR * and
M/IO* are decoded to provide separate memory and 1/0
readlwrite commands (see Figure 1-38). The 8288 bus
controller in the maximum mode 8086 system generates
separate 1/0 and memory commands in place of a MilO'"
signal. An 110 device is assigned to the 1/0 space or
memory space (memory mapped 1/0) by connection of
either 1/0 or memory command lines to the command inputs of the device. To allow overlap of the memory and
110 address space, the device must not respond to chip
select alone but must require a combination of chip select
and a read or a write command.
Linear select techniques (see Figure 1-39) for 1/0 devices
can only be used with devices that either reside in the 110
address space or require more than one active chip select
(at least one low active and one high active). Devices with
a single chip select input cannot use linear select if they
are memory mapped because memory address space
FFFFOH-FFFFFH is aSSigned to reset startup and memory space OOOOOH-003FFH is assigned to interrupt
vectors.

LOCK XCHG reg, MEMORY; reg is any register
; MEMORY is the address
of the
; semaphore
Another application of LOCK* for multiprocessor systems consists of a locked block move which allows high
speed message transfer from one CPU's message buffer
to another.

1.4 BUS OPERATION

During the locked instruction, a request for processor
preemption (RQ*/GT*) is recorded but not acknowledged
until completion of the locked instruction. The LOCK*
has no direct affect on interrupts. As an example, a locked
HALT instruction will cause HOLD (or RQ*/GT*) requests to be ignored but will allow the CPU to exit the
HALT state on an interrupt. In general, prefix bytes are
considered extensions of the instructions they preceded.
Therefore, interrupts that occur during execution of a prefix are not acknowledged (assuming interrupts are enabled) until completion of the instruction following the
prefix (except for instructions which are servicing interrupts during their execution, i.e., HALT, WAIT and repeated string primitive). Note that multiple prefix bytes
may precede an instruction. Another example is a 'string
primitive' preceded by the repetition prefix (REP) which
is interruptible after each execution of the string primitive. This holds even if the REP prefix is combined with
the LOCK prefix. This prevents interrupts from being
locked out during a block move or other repeated string
operation. As long as the operation is not interrupted,
LOCK* remains active. Further information on the operation of an interrupted string operation with multiple prefixes is presented in the section dealing with the 8086
interrupt structure.

In order to understand the operation of a time-multiplexed
bus, the BIU's bus cycle must be understood. A bus cycle
is an asynchronous event that presents the address of an
1/0 peripheral or memory location. The address is followed by either a read control signal to capture or read
data from the addressed device, or a write control signal
and the associated data to transmit or write the data to the
addressed device. The selected device (memory or 1/0
peripheral) accepts the data on the bus during a write cycle or places the requested data on the bus during a read
cycle. On termination of the specified cycle, the device
latches the data written or removes the data read.

1.4.1 Multiplexed Address and Data Bus
The 8086/88 has a combined address and data bus commonly referred to as a time multiplexed bus. Time multiplexing makes the most efficient use of pins on the
processor while permitting the use of a standard 4O-pin
package. This "local bus" can be buffered directly and
used throughout the system with address latching provided on memory and 1/0 modules. In addition, the bus

1-64

210912·001

8086/8088 CPU

GND

VCC

AD14

AD15

AD13

GND

VCC

A14

A15

A16/S3

A13

A16/S3

AD12

A17/S4

A12

A17/S4

ADll

A18/S5

All

A18/S5

AD10

A19/S6

Al0

AD9

SHE/57

A9

AD8

MN/Mx

A8

AD7

Rii

8086

(RO/GTO)

AD6

AD5

HLDA

(RQ/GT1)

AD5

AD4

WR

(LOCK)

CPU

M/iO

AD3

(HIGH)

MN/Mx

iiii

AD7

HOLD

AD6

A19/S6
550

8088

HOLD

(RQ/GTO)

HLDA

(RO/GT1)

AD4

WR

(LOCK)

(52)

AD3

IO/M

(52)

CPU

AD2

DTIR

(51)

AD2

DTIR

(51)

ADl

DEN

(So)

ADl

DEN

(So)

(050)

ADO

ALE

(050)

NMI

INTA

(051)

INTR

TEST

CLK

READY

GND

RESET

ALE

ADO
NMI

INTA

INTR

TEST

(051)

READY

CLK

RESET

GND

MAXIMUM MODE PIN FUNCTIONS (e.g., LOCK)
ARE SHOWN IN PARENTHESES

Figure 1-30 8086/8088 DIP Pin Assignments

preparation for a ready cycle or asserts write data. Data
bus transceivers are enabled in either T 1 or T2 depending
on the 8086 system configuration and the direction of the
transfer (into or out of the CPU). Read, write or interrupt
acknowledge commands are always enabled in TZ. The
maximum mode 8086 configuration also provides a write
command enabled in T3 to guarantee time for data setup
prior to command activation.

can also be demultiplexed at the processor with a single
set of address latches if a standard non-multiplexed bus is
desired for the system,

1.4.2 Bus Cycle Definition
The 8086 is a true 16-bit microprocessor with 16-bit internal and .external data paths, one megabyte of memory
address space (220) and a separate 64K byte (2 16) 1/0 address space. The CPU communicates with its external environment via a twenty-bit time multiplexed address,
status and data bus and a command bus. To transfer data
or fetch instructions, the CPU executes a bus cycle (see
Figure 1-40). The minimum bus cycle consists of four
CPU clock cycles ("T") states. During the first T state
(Tl), the CPU asserts an address on the twenty-bit multiplexed addressldatal status bus. For the second T state
(TZ), the CPU removes the address from the bus and either tri-states its outputs on the lower sixteen bus lines in

During T2, the upper four multiplexed bus lines switch
from address (AI9-AI6) to bus cycle status (S6, S5, S4,
S3). The status information (see Table 1-31) is available
primarily for diagnostic monitoring. However, a decode
of S3 and S4 could be used to select one of four banks of
memory, one assigned to each segment register. This technique allows partitioning the memory by segment to expand the memory addressing beyond one megabyte. It
also provides a degree of protection by preventing erroneous write operations to one segment from overlapping
into, and destroying information, in another segment.
1-65

210912-001

8086/8088 CPU

Table 1·25 D.C. Characteristics
(8086: TA = O°C to 70°C. Vee = 5V :t 10"10)
(8086-1: TA = O°C to 70°C. Vee = 5V :t 5"10)
(8086-2: TA = O°C to 70°C. Vee = 5V :t 5"10)
Symbol

P.rameter

Min.

VIL

Input Low Voltage

-0.5

M••.

Units

+0.8

V

V IH

Input High Voltage

2.0

V ee + 0.5

V

VOL

Output Low Voltage

VOH

Output High Voltage

0.45

V

IOL=2.5 mA

V

Icc

Power Supply Current: 8086
8086-1
8086-2

340
360
350

10H= - 4oo,.A

mA

ILl

Input Leakage Current

± 10

,..A

OV", VIN '" VCC

ILO

Ol!tput Leakage Current

± 10

,..A

0.45V" VOUT " Vee

VCL

Clock Input Low Voltage

+0.6

V

2.4

-0.5

Tast Conditions

TA=25°C

VCH

Clock Input High Voltage

Vcc + 1.0

V

C IN

Capacitance 01 Input Buffer
(All input except
ADo - AD 15. RQ/GT)

15

pF

Ic= 1 MHz

C IO

Capacitance 01 110 Buffer
(ADo - AD 15.m:i/GT)

15

pF

Ic= 1 MHz

3.9

The CPU continues to provide status information on the
upper four bus lines during T3 and will either continue to
assert write data or sample read data on the lower sixteen
bus lines. If the selected memory or I/O device is not
capable of transferring data at the maximum CPU transfer
rate. the device must signal the CPU "not ready" and
force the CPU to insert additional clock cycles (Wait
states, TW) after T3. The 'not ready' indication must be
presented to the CPU by the start of T3. Bus activity during TW is the same as T3. In a "normally not ready"
system, when the selected device has had sufficient time
to complete the transfer, it aSserts "Ready" and allows the
CPU to continue from the TW states. The CPU will latch
the'data on the bus during the last wait state or during T3
if no wait states are requested: The bus cycle is terminated
in T4 (command lines are disabled and the selected external device releases the bus). To devices in the system, the
bus cycle appears as an asynchronous event consisting of
an address to select the device followed by a read strobe
or data and a write strobe. The selected device accepts
bus data during a write cycle and drives the desired data
onto the bus during a read cycle. On termination of the
command, the device latches write data or disables its bus
drives. The only way the device controls the bus cycle is
by inserting wait cycles.

interface executes idle cycles (T 1). During the idle cycles, the CPU continues to drive status information from
the previous bus cycle on the upper address lines. If the
previous bus cycle was a write, the CPU continues to
drive the write data onto the multiplexed bus until the start
of the next bus cycle. If the CPU executes idle cycles
following a ready cycle, the CPU will not drive the lower
16 bus lines until the next bus cycle is required.
Since the CPU prefetches up to six bytes of the instruction
stream for storage and execution from an internal instruction queue, the relationship may be skewed in time and
separated by additional instruction fetch bus cycles. In
general, if the BIU fetches an instruction into the 8086's
internal instruction queue, it may also fetch several additional instructions before the EU removes the instruction
from the queue and executes it. If the EU executes a jump
or other control transfer instruction from the queue, it
ignores any instructions remaining in the queue; the CPU
discards these instructions with no effect on operation.
The bus activity observed during execution of a specific
instruction depends on the preceding instructions; the activity, however, may always be determined within a specific sequence.

1.4.3 Address and Data Bus Concepts
The 8086 CPU only executes a bus cycle when.instructions or operands must be transferred to or from memory
or I/O devices. When not executing a,bus cycle, the bus

The programmer views the 8086 memory address space
as a sequence of one million bytes in which any byte may

1-66

210912-001

8086/8088 CPU

the data bus to participate in the transfer. Another 8086
signal, Bus High Enable (BHE*), disables the bank on the
upper half of the data bus to prevent its participation in the
transfer. This action prevents a write operation to the
lower bank from destroying data in the upper bank. Device pin 34 (refer to paragraph 1.3) is multiplexed between BHE* during Tl and S7 during T2 through T4.
The current implementation of the 8086 equates BHE* to
S7. That is, if BHE * is high during T I then S7 will likewise be high during T2 through T4. Since BHE* is a multiplexed signal with timing identical to the A19-A16
address lines, it also should be latched during Tl with
ALE to provide a stable signal during the bus cycle. To
perform byte transfers to odd addresses (see Figure 1-42),

contain an eight bit data element and any two consecutive
bytes may contain a 16-bit data element. There is no constraint on byte or word addresses (i.e., boundaries). The
address space is physically implemented on a 16-bit data
bus by dividing the address space into two banks of up to
512K bytes (see Figure 1-41). One bank connects to the
lower half of the 16-bit data bus (D7-0) and contains even
addressed bytes (AO = 0). The other bank connects to the
upper half of the data bus (DI5-8) and contains odd addressed bytes (AO = I). Address lines AI9-AI select a
specific byte within each bank. To perform byte transfers
to even addresses (Figure 1-42), the information is transferred over the lower half of the data bus (D7-0). AO (active low) enables the bank connected. to the lower half of

Table 1·26 A.C. Timing Requirements for Minimum Complexity System
(8086: TA ; O'G to 70'G, vec ; 5V ± 10%)
(8086-1: TA ; O'G to 70'G, Vee; 5V ± 5%)
(8086-2: TA ; O'G to 70'G, Vee; 5V ± 5%)

MINIMUM COMPLEXITY SYSTEM
TIMING REQUIREMENTS
Symbol

Parameter

8086-2

8086·1 (Preliminary)

8086

Units

Min.

Max.

Min.

Max.

Min.

Max.

TClCl

ClK Cycle Period

200

500

100

500

125

500

TClCH

ClK low Time

118

53

68

TCHCl

ClK High Time

69

39

44

TCH1CH2

elK Rise Time

10

Test
Conditions

ns
ns
ns

10

10

ns

From 1.0V to

3.5V
TCL2Cl1

ClK Fall Time

10

10

10

ns

TDVCl

Data in Setup Time

30

5

From 3.SV to

1.0V

-20

ns

TClDX

Data in Hold Time

10

10

10

ns

TR1VCl

ROY Setup Time
into 8284A (See
Notes 1. 2)

35

35

35

ns

TClR1X

ROY Hold Time

0

0

0

I

into 8284A (See
Notes 1. 2)

ns

TRYHCH

READY Setup
Time into 8086

118

53

68

ns

TCHRYX

READY Hold Time
into 8086

30

20

20

ns

TRYlCl

READY Inactive to
ClK (See Note 3)

-8

-10

-8

THVCH

HOLD Setup Time

35

20

20

ns

TINVCH

INTR. NMI. TEST
Setup Time (See
Note 2)

30

15

15

ns

TlllH

Input Rise Time
(Except ClK)

20

20

20

ns

TIHll

Input Fall Time
(Except ClK)

12

12

12

ns

,

ns

From O.8V to

2.0V

1-67

From 2.0V to
O.8V

210912-001

8086/8088 CPU

Table 1-26 A.C. Timing Requirements for Minimum Complexity System (continued)
TIMING RESPONSES
Symbol

Parameter

8086

8086·1 (Preliminary)

Unit.

8086-2

Min.

Max.

Min.

Max.

Min.

Max.

TCLAV

Address Valid Delay

10

110

'10

50

10

60

TCLAX

Address Hold Time

10

TCLAZ

Address Float
Delay

TCLAX

10

10

10

80

40

TCLAX

ns
ns

50

ns

TLHLL

ALE Width

TCLLH

ALE Active Delay

80

40

50

ns

TCHLL

ALE Inactive Delay

85

45

55

ns

TLLAX

Address Hold Time
to ALE Inactive

TCLDV

Data Valid Delay

10

TCHDX

Data Hold Time

10

10

10

ns

TWHDX

Data Hold Time
AfterWA

TCLCH-30

TCLCH-25

TCLCH-30

ns

TCVCTV

Control Active
Delay 1

10

110

10

50

10

70

ns

TCHCTV

Control Active
Delay 2

10

110

10

45

10

60

ns

TCVCTX

Control Inactive
Delay

10

110

10

50

10

70

ns

TAZAL

Address Float to
AEAD Active

0

TCLCH-20

TCLCH-l0

TCHCL-l0

TCLCH-l0

TCHCL-l0
110

10

ns

TCHCL-l0

50

10

T••t
Condition.

ns
60

ns

'CL

= 20-100 pF

for all 8086 Out-

puts (In addition to 8086 self-

load)

0

0

i

ns

TCLAL

AD Active Delay

10

165

10

70

10

100

TCLAH

RD Inactive Delay

10

150

10

60

10

80

TAHAV

RD Inactive to Next
Add ress Active

TCLHAV

HLDA Valid Delay

TALAH

AD Width

2TCLCL-75

2TCLCL-40

2TCLCL-50

ns

TWLWH

WAWidth

2TCLCL-60

2TCLCL-35

2TCLCL-4O

ns

TAVAL

Address Valid to
ALE Low

TCLCH-60

TCLCH-35

TClCH-4O

ns

TOLOH

Output Aise Time

20

20

20

ns

.From 0.8V to.
2.0V

Output Fall Time

12

12

12

ns

From 2.0V to
0.8V

I TOHOL

TCLCL-45
10

TCLCL-40

TCLCL-35
160

10

10

60

ns
ns
ns

100

ns

NOTES:
1. Signal at 8284A shown for ref.. rence only.
2. Setup requirement for asynchronous signal only to guarantee recognition at next elK.
3. Applies only to T2 state. (8 ns into T3).

the information is transferred over the upper half of the
data bus (DIS-D8). BHE* (active low) will enable the
upper bank and AO will disable the lower bank. Directing
the data transfer to the appropriate half of the data bus and
activation of S7 (BHE*) and AO is performed by the
8086, transparent to the programmer. For example, consider loading a byte of data into the ex register (lower
half of the ex register) from an odd addressed memory
location (referenced over the upper half of the 16-bit data

bus). The data is transferred into the 8086 over the upper
8 bits of the data bus, automatically redirected to the
lower half of the 8086 internal 16-bit data path and stored
in the ex register. This capability also allows byte I/O
transfers with the AL register to be directed to I/O devices
connected to either the upper or lower half of the 16-bit
data bus.

1-68

210912-001

8086/8088 CPU

To access even addressed l6-bit words (two consecutive
bytes with the least significant byte at an even byte address), A19-Al select the appJOpriate byte within each
bank and AO and BHE* (active low) enable both banks
simultaneously (see Figure 1-43). To access an odd addressed l6-bit word (see Figure 1-43), the least significant byte (addressed by A19-Al) is first transferred over
the upper half of the bus (odd addressed byte, upper bank,
BHE* low active and AO-l). The most significant byte is

accessed by incrementing the address (A19-AO) which allows A19-Al to address the next physical word location
(recall that AO was high which indicates a word referenced from an odd byte boundary). A second bus cycle is
then executed to perform the transfer of the most significant byte with the lower bank (AO is now low and BHE* is
high). The sequence is automatically executed by the
8086 whenever a word transfer is executed to an odd address. Directing the upper and lower bytes of the 8086 's

Table 1·27 A.C. Timing Requirements for Maximum Complexity System
MAX MODE SYSTEM (USING 8288 BUS CONTROLLER)
TIMING REQUIREMENTS
Symbol

Paramater

8088·1 (Preliminary)

8086

8088·2 (Preliminary)

Unit.

Min.

Max.

Min.

Max.

Min.

Max.

TClCl

ClK Cycle Period

200

500

100

500

125

500

TClCH

elK Low Time

118

53

68

ns

TCHCl

ClK High Time

69

39

44

ns

TCH1CH2

elK Rise Time

10

10

10

T..t
Condition.

ns

ns

From l.QVto
3.5V

TCl2Cll

ClK Fall Time

TDVCl

Data in Setup Time

30

5

20

TClDX

Data In Hold Time

10

10

to

ns

TR1VCl

ROY Setup Time
into 8284A (See
Notes I, 2)

35

35

35

ns

TClR1X

ROY Hold Time
into 8284A (See
Notes I, 2)

0

0

0

ns

TRYHCH

READY Setup Time
into 8086

118

53

68

ns

TCHRYX

READY Hold Time
into 8086

30

20

20

ns

TRYlCl

READY Inactive to
ClK (See Note 4)

-8

-10

-8

ns

TINVCH

Setup Time for
Recognition (INTR,
NMI, 'fEST) (See
Note 2)

30

15

15

ns

10

10

10

ns

From 3.5Vto
1.0V

ns

TGVCH

RO/GT Setup Time

30

12

15

ns

TCHGX

RO Hold Time into
8086

40

20

30

ns

TILIH

Input Rise Time
(Except ClK)

20

20

20

ns

From 0.8Vto
2.0V

TIHll

Input Fall Time
(Except ClK)

12

12

12

ns

From 2.0Vto
0.8V

NOTES:
1. Signal at 8284A or 8288 shown for reference only.
2. Setup requirement for asynchronous signal only to guarantee recognition at next elK.
3. Applies only to T3 and wait states.
4. Applies only to T2 state (8 ns into T3).

1-69

210912·001

8086/8088 CPU

Table 1-27 A.C. Timing Requirements for Maximum Complexity System (continued)
TIMING RESPONSES
Symbol

TCLMl

Parameter

Command Active

TI.'

8088

8088-1 (Prellmlnlry)

8088-2 (Prellmlnlry)

Unit.

Min.

Me•.

Min.

Mu.

Min.

Ma •.

10

35

10

35

10

35

ns

10

35

10

35

10

35

ns

65

ns

Condition.

Delay (See Note 1)
TClMH

Command Inactive
Delay (5. . Note 1)

TRYHSH

READY Active to

110

45

Status Passive (See
Note 3)
TCHSV

Status Active Delay

10

110

10

45

10

60

ns

TCLSH

Status Inactive

10

130

10

55

10

70'

ns

TCLAV

Address Valid
Delay

10

110

10

50

10

60

ns

TCLAX

Address Hold Time

10

TCLAZ

Address Float Delay

TCLAX

40

TCLAX

50

ns

TSVlH

Status Valid to ALE
High (See Note 1)

15

15

15

ns

Status Valid to

15

15

15

ns

Delay

TSVMCH

10

80

10

10

ns

MCE High (Soe
Notel)
TCLlH

ClK low to ALE
Valid (See Note 1)

15

15

15

ns

TCLMCH

ClK low to MCE
High (See Note 1)

15

15

15

ns

TCHll

ALE Inactive Delay
(SoeNotel)

15

15

15

ns

MCE Inactive Delay

15

15

15

ns

TCLMCl

(SooNotel)
TClOV

Data Valid Delay

10

TCHOX

Data Hold Time

10

TCVNV

Control Active

5

45

5

45

5

45

ns

45

10

45

10

45

ns

110

10

50

10

10

60

=

CL 20-100 pF
for an 8086 Outputs (In add ition to 8086 self·
load)

ns
ns

10

Delay (See Note 1)
TCVNX

Contrellnaetive
Delay (5. . Note 1)

10

TAZRL

Address Float to

0

0

0

ns

Read Active
TCLRl

RO Active Delay

10

165

10

70

10

100

ns

TCLRH

RD Inactive Delay

10

150

10

60

10

80

ns

TRHAV

RO Inactive to

TCLCl-45

TClCl-4O

TClCl-35

ns

Next Address Active
TCHOTl

Direction Control

50

50

50

ns

30

30

30

ns

ns

Active Delay (Soe
Note 1)
TCHOTH

Direction Control
Inactive Delay (See
Note 1)

TCLGL

GT Active Delay

0

85

0

45

0

50

TCLGH

GT Inactive Delay

0

85

0

45

0

50

TRLRH

ROWldth

TOLOH

Output Rise Time

20

20

20

ns

TOHOL

Output Fan Time

12

12

12

ns

2TCLCL-50

2TCLCL-4O

2TCLCL-75

ns
ns
From 0.8V to
2.0V
From2.0Vto

O.SV

1-70

210912-001

8086/8088 CPU

Table 1·28 Minimum/Maximum Mode Pin Assignments
8088

8086
Mode

Mode
Pin

Pin
Minimum

Maximum

HOLD
HLDA
WR
MIlO
DT/R
DEN
ALE
INTA

RO/GTO
RO/GT1
LOCK
52

31
30

29
28
27
26
25
24

31
30
29
28
27
26
25
24
34

51

50
OSO
OS1

Minimum

Maximum

HOLD
HLDA
WR
101M
DT/R
DEN
ALE
INTA
SSO

RO/GTO
RO/GT1
LOCK
52
51
SO
OSO
OS1
High State

Table 1·29 Status Bit Decoding
Status Inputs
S2

S1

SO

0
0
0
0
1
1
1
1

0
0
1
1
0
0
1
1

0
1
0
1
0
1
0
1

CPU Cycle

8288 Command

Interrupt Acknowledge
Read I/O Port
Write I/O Port
Halt
Instruction Fetch
Read Memory
Write Memory
Passive

INTA
10RC
10WC,AIOWC
None
MRDC
MRDC
MWTC,AMWC
None

data bus. The information on the half of the data bus not
transferring data is indeterminate. These concepts also
apply to the I/O address space. Specific examples of I/O
and memory interfacing are considered in the corresponding sections.

Table 1·30 Status Line Decoders

S2

Sl

So

o (LOW)

0
0

0

1
1

0

0
0

0

1
1

0

0
0
0
1 (HIGH)
1
1
1

1
1
1
1

Interrupt Acknowledge
Read I/O Port
Write I/O Port
Halt
Code Access
Read Memory
Write Memory
Passive

1.4.4 Memory and 1/0 Peripherals Interface
The 8086 and 8088 CPUs have a 20-bit address bus and
are capable of accessing one megabyte of memory address space. The memory is organized as a linear array of
up to 1 million bytes, addressed as OOOOO(H) to FFFFF(H). The memory is logically divided into code, data,
extra data, and stack segments of up to 64 K bytes each,
with each segment falling on 16-byte boundaries (see Figure 1-44).

internal 16-bit registers to the appropriate halves of the
data bus is also performed automatically by the 8086 and
is transparent to the programmer.
During a byte read, the CPU floats the entire 16-bit data
bus even though data is only expected on the upper or
lower half of the data bus. As will be demonstrated later,
this action simplifies the chip select decoding requirements for read only devices (ROM, EPROM). During a
byte write operation, the 8086 will drive the entire 16-bit

All memory references are made relative to base addresses contained in high speed segment registers. The
segment types were chosen based on the addressing needs
of programs. The segment register to be selected is auto-

1-71

210912-001

8086/8088 CPU

WAVEFORMS
MINIMUM MODE

T,
V

T2

f3

.vt..

eLK ('. .A OutpuQ

-

f

'---.j

TCHCTV

I--

-

f

~

TCLAX-

iRE. A1.-A,.

TCHDX-

57-53

I

I

_TLLAX

TLHLl-::::

I

I

ALE
_

TAL

TCHLL-I

_
-

V,H-

ROY ( ' _ InpuQ
SEE NOTE 4

VIL-

I
I

READY (1IOII1npuQ

I

II
I

TCLAV-

.- :r

RD

:::~TCHCTV

INOTE 1)

cWJt. iNTi. VOH)

-

----

-TCHRYX

-

,-- I

!-TCLAZ
!-TCLAX

TDVCL-- ,-TCLDX-

~

DATA IN
TCLRH-

FLO~~

--I t-TRHAV

"'-

,,,"L.t~r --

I

OTIR

TCVCTV- {

r--

-

TRYHCH-

--

I

I_CLRIX

I
TAVAL
TLLAX-

I

TR1VCt

I

--

!

DC- '\

TR~r={

TAZRL-

READ CYCLE

f\--/~

I--TCLCH-

TCHCL

TCLDV _ i

rCLAV-

TCLlH-

~

T,

Tw

_TCLCL_~CH1CH]HC'
I
CH r - - \
v---\
r,",

TCVCTX-

-TCHCTV

I

Figure 1-31 Minimum Mode Waveforms

1-72

210912-001

8086/8088 CPU

WAVEFORMS (Continued)
MINIMUM MODE (Continued)

elK (I2UA Output)

MliO

ALE

WRITE CYCLE

(NOTE 1)

(RD,iii'fA,
DT"'zYOH)

I
TCVCTX--

INTA CYCLE

DTIR

(NOTES , . 3)

Ati. WR",VOH
lIRE. VoL!

SOFTWARE HALT-

AD, WA, INTA. = YaH
DT/A = INDETERMINATE

INVALID ADDRESS

SOFTWARE HALT

TelAV

NOTES:
1. All signals switch between VOH and VOL unless otherwise specified.
2. ROY is sampled near the end of T2, T3, Tw to determine if Tw machines states are to be inserted.
3. Two INTA cycles run back-to-back. The 8086 LOCAL AODR/OATA BUS is floating during both INTA cycles. Control signals shown
for second INTA cycle.
4. Signals at 8284A are shown for reference only.
5. All timing measurements are made at 1.5V unless otherwise noted.

Figure 1-31 Minimum Mode Waveforms (continued)
1-73

210912-001

8086/8088 CPU

WAVEFORMS
MAXIMUM MODE

T,

n

iCH1CH2--lF-=i i-TCl2Cll

VCH~ - T C l C

ClK

X

~

vel ....I
TClAV-

"---J

'------'

r" ~~
Tw

_TClCH_

I---- TCHCl

aSo,QSl

f-----<
~,I1,~ (EXCEPT HAL 1)

TSVlH

TCllHALE (8288 OUTPUT)
SEE NOTE 5

1

-

TCHSV

-TClSH

VI/I;:

------

~ t:=..rCLAV
~CLDV
TClAX -

X

BHE, A'I-A,I

- (

\

flY(SEE NOTE 81
TCHDX-

x:

,~-----

X

57·$3

TCHLL

I

-[k t~~~,X
- -

r--

----

-TR1VCl

RDY (8214A INPUn

TRYlCl_

READY (8088 INPUT)

zf -

TRYHCH-

READ CYCLE

TCLAV-I

£

""- 'r'
I

-TClAZ -

TAZRl-

,

~

..0...- TCHRYX

TRYHSH~I,
-TClAX-·I·

-

TDVCl~

TCHDTl-1

I"-

TClRH

lALRH

1- ~ TeLRl

DTIR
TClMl--

-

TCLMH-...

8288 OUTPUTS
SEe NOTES 5,6

TCVNV-

DEN

-TClDX-1

\I

DATA IN

V

RD

\\\

\

t-

1/

TCVNX ---

flOAT

~

TRHAV----!

TCHDTH

~
-

Figure 1-32 Maximum Mode Waveforms
1-74

210912-001

8086/8088 CPU

WAVEFORMS (Continued)
MAXIMUM MODE (Continued)
T,

T,

T,

T,
T..

eLK

\

$2,~,S:O (EXCEPT HALT)

WRITE CYCLE

\~----

TCHDX-

AD15-ADo

DATA
TCYNX--

DEN

TClMH--

8288 0VfPUTS
SEE NOTES 5,6

AMWC OR AIOWC

_TCLMH

INTACYCLE
ADu-ADo
(SEE NOTES 3 " 4)

FLOAT

~ TeL,OX
A015-AOO

MCEJ
PD£N
DTIR

8288 OUTPUTS

see NOTES 5,6

INTA

DEN
SOFTWARE HALT -

(DEN. YOL;R'D,IIlHR:,R»R:.MWfC,AMWC,iOWC,AiOWC.INTA, = VOH)

INVALID ADDRESS

relAY

-------

~
/,..---------~\
' - - - - _ _......J
\ . _____ _

NOTES:
1. All signals switch between VOH and VOL unless otherwise specified.
2. ADY is sampled near the end of T2, T3, Tw to determine if Tw machines states are to be inserted.
3. Cascade address is valid between first and second INTA cycle.
4. Two INTA cycles run back-to-back. The 8086 LOCAL ADDA/DATA BUS is floating during both INTA cycles. Control for pointer
address is shown lor second INTA cycle.
5. Signals at 8284A or 8288 are shown for reference only.
6. The issuance of the 8288 command and control signals (MADC, MWTC, AMWC, IOAC, lOWe, AiOWc, INTA and DEN) lags the
active high 8288 CEN.
7. All timing measurements are made at 1.SV unless otherwise noted.
8. Status inactive in state just prior to T4'

Figure 1·32 Maximum Mode Waveforms

1-75

210912-001

8086/8088 CPU

vCC

rOl
8284

t-- RES

l

CLOCK
GENERATOR

1-<>'-

r---

r-

n

ClKMN /MlC
READY

SO
!fi

RESET

!:2

L

8288
ClK BUS
CONTROLLER

SO
!fi

-

!:2

- r-

II'iTlI

f1IfI5l!
gwrn

DEN
DT/II

Imrn

ALE

R5WC

8088
CPU

L.
ADDRESS
A19-A8

STB

..

8282
OR

8283

I I

I ... ADDRESS/DATA ..

""'~,' ~~ -!-

ADDRESS BUS

l!

l

c:>E

8286

MEMORY

110 PERIPHERAL

DATA

DATA

1

DATA BUS

t

OR

8287

.
~

Figure 1·33 Elementary Maximum Mode System

lectively allow reading from or writing into either an odd
byte location, even byte location, or both. The instruction
stream is fetched from memory as words and is addressed
internally by the processor to the byte level as necessary.

matically chosen according to the rules of the following
table. All information in one segment type share the same
logical attributes (e.g., code or data). By structuring
memory into relocatable areas of similar characteristics
and by automatically selecting segment registers, programs are shorter, faster, and more structured.

In referencing word data the BIU requires one or two
memory cycles depending on whether or not the starting
byte of the word is on an even or add address, respectively. Consequently, in referencing word operands performance can be optimized by locating data on even
address boundaries. This is an especially useful technique
for using the stack, since odd address references to the
stack may adversely affect the context switching time for
interrupt processing or task multiplexing.

Word (16-bit) operands can be located on even or odd
address boundaries and are thus not constrained to even
boundaries as is the case in many 16-bit computers. For
address and data operands, the least significant byte of the
word is stored in the lower valued address location and the
most significant byte in the next higher address location.
The BIU automatically performs the proper number of
memory accesses, one if the word operand is on an even
byte boundary and two if it is on an odd byte boundary.
Except for the performance penalty, this double access is
transparent to the software. This performance penalty
does not occur for instruction fetches, only word operands.

Certain locations in memory are reserved for specific
CPU operations (see Figure 1-45). Locations from address FFFFOH through FFFFFH are reserved for operations including a jump to the initial program loading
routine. Following RESET, the CPU will always begin
execution at location FFFFOH where the jump must be.
Locations OOOOOH through 003FFH are reserved for interrupt operations. Each of the 256 possible interrupt
types has its service routine pointed to by a 4-byte pointer
element consisting of a 16-bit segment address and a
16-bit offset address. The pointer elements are assumed to

Physically, the memory is organized as a high bank
(015-08) and a low bank (07-00) of 512K 8-bit bytes
addressed in parallel by the processor's address lines
A 19-A 1. Byte data with even addresses is transferred on
the 07-00 bus lines while odd addressed byte data (AO
HIGH) is transferred on the 015-08 bus lines. The processor provides two enable signals, BHE* and AO, to se1-76

210912-001

8086/8088 CPU

Vee

t

~D~
8284 CLOCK
GENERATOR

RES

I

RDY

MNIMX "'-Vcc

~

ClK

MIlO

f+
f+

READY

INTA

RESET

liD

COMM AND
BU S

WR

t

GND

}

DTiRr----,

I

DEN I- - - - ,
8086 CPU
ALE

I ___iljl~-+I;;r~:-:-=-i-l'
III
STB
I
GND! !
OE
I
~

~

II

ADo-AD" ~ADDRIDATA
A'6-A"
BHE

r--

I

8282
lATCH
20, R 3

•
•

>

W
..----,

1 MEGABYTE
ADDRESS BUS

I I
II

J:---""
IL-JT----,I
L--!oe

' - - - - - II

FO~~~~OR~~~ED

DATA BUS DRIVE

8286

TRAN~;'EIVER

I

L ___ I

II
II i-A----\
~
v' D;;:~TUS

!I

Figure 1-34 8086/88 Minimum Mode System

Vee

t

, 10

1

8284
CLOCK
GENERATOR

RES

I

GND

t
~

ClK

f+
f+

READY

SO
51

RESET

52

-

RDY

t

ClK

MNIMX -4-GND

--

MWTC

S;
S2

8288 AMWC ' - BUS
IORC
CTRlR
10WC

DEN

COMMAND
BUS

r-r--

; - - - DTilI

8086
CPU

MRDC

SO

AIOWC

r---

fN'fA

r--

r-- ALE
lOCK -N.C.

'--.
ADo-AD15 A
A18-Au rDDRIDA

iHe

STB

OE

GND

to.

8282
lATCH
(2 OR 3)

~.

-

Y

-t=
~

r-

Y

1 MEGABYTE
ADDRESS BUS

T

DE
8288
TRANSCEIVER
(2)

A
I~

t..

18-BIT

r DATA BUS

r

Figure 1-35 8086/88 Maximum Mode System

1-77

210912-001

8086/8088 CPU

,-----1 ><>----'2'tCLK

-t________~'~LOAD

MHBYf~:::::::::::::::::::::::::::::::::::::::::::::~==)o~_ _ _ _ _ _ _
iilii\'I'E1

74S'"

elKA - - - - - - - - - : ; :_ _ _ _ _ _ _ _ _ _---<'--:+

QA 14
OB 13

ac 12
aD 11
RIP 15
CAR
OUT

aCTO

74532

MHBYTEAND 1 - MATCH CONDITIONS
elKA
- CPU CLOCK
aS1, aso
- CPU QUEUE STATUS
T301,1201
- T STATES 13 Ind T2 (CLOCK LOW TIME_Ot)
SOIH~S2LH
- CPU STATUS so.S2
C ACCESS
- CODE ACCESS
aCTO
- QUeUE MATCH
AO·P
- SINGLE BYTE ON UPPER HALF OF THE 8US

SOLH

----..:..r-...

)o'~'~-------------------------------C.CCESS

S1IH -----''!....../

ffiii-----""'-I'
74SOo1

Figure 1·36 8086/88 Queue Tracking Circuit
MEMORY INTERFACE

have been stored at the respective places in reserved memory prior to occurrence of interrupts.

The basic characteristics of 8086/8088 memory organization (see Figure 1-46) are partitioning of the 16-bit word
memory into high and low 8-bit banks on the upper and
lower halves of the data bus and inclusion of BHE* and

"'~~JLJ
'.~~~~~

~

LOCK

LOCK

NOP BYTE

NEXT LOCK

PREFIX
BYTE FROM
aUEUE

FROM THE
QUEUE
(LOCKED NOP)

PREFIX FROM
THE QUEUE

LOCKED INSTRUCTION

1

QUEUE STATUS INDICATES FIRST BYTE OF OPCODE FROM THE QUEUE.

2

THE LOCK OUTPUT WILL GO INACTIVE BETWEEN SEPARATE LOCKED INSTRUCTIONS.

3

TWO CLOCKS ARE REQUIRED FOR DECODE OF THE LOCK PREFIX AND
ACTIVATION OF THE [OCR SIGNAL.

4

SINCE QUEUE STATUS REFLECTS THE QUEUE OPERATION IN THE PREVIOUS CLOCK
CYCLE, THE iJ5CK OUTPUT ACTUALLY GOES ACTIVE COINCIDENT WITH THE START
OF THE NEXT INSTRUCTION AND REMAINS ACTIVE FOR ONE CLOCK CYCLE
FOLLOWING THE INSTRUCTION.

S

IF THE INSTRUCTION FOllOWING THE LOCK PREFIX IS NOT IN THE QUEUE, THE
LOCK OUTPUT STILL GOES ACTIVE AS SHOWN WHILE THE INSTRUCTION IS BEING
FETCHED.

6

THE BIU WILL STIll PERFORM INSTRUCTION FETCH CYCLES DURING EXECUTION
OF A LOCKED INSTRUCTION. THE U)CR MERelY LOCKS THE BUS TO THIS CPU FOR
WHATEVER BUS CYCLES THE CPU PERFORMS DURING THE LOCKED INSTRUCTION.

Figure 1·37 8086/88 Lock Activity

1·78

210912-001

8086/8088 CPU

AO in selection of the banks. Specific implementations
depend on the type of memory and system configuration.

74LS02

74LS388

ROM and EPROM
ROM's and EPROM's are the easiest devices to interface
to the 8086/8088 system (see Figure 1-47). The byte format of these devices provides a simple bus interface and,
since they are read only devices, AO and BHE* do not
need to be included in their chip enable/select decoding.
(Chip enable is similar to chip select and also determines
if the device is in active or standby power mode.) The
address lines connected to the devices start with A 1 and
continue up to the maximum number of address lines the
device can accept. The remaining address lines are used
for chip enablel select decoding. To connect the devices
directly to the multiplexed bus, they must have output enables. The output enable is also necessary to avoid bus
contention in other configurations. No special decode
techniques are required for generating chip
enable/selects. Each valid decode selects one device on
the upper and lower halves of bus to allow byte and word
access. Byte access is achieved by reading the full word
onto the bus with the 8086 only accepting the desired
byte. If RD*, WR * and M/IO* are not decoded to form
separate commands for memory and 110 in a minimum
mode 8086, M/IO* (high active) must be a condition of
chip enable/select decode. This is also true if the 1/0
space overlaps the memory space assigned to the
EPROM/ROM. The output enable is controlled by the
system memory read signal.

DEFINED

EN~~~: _ _ _ _ _ _ _-.4--'

NOTE: IF IT IS NOT NECESSARY TO THREE·STATE THE COMMAND LINES. A
DECODER (1205 OR 745131) COULD IE USED. THE 74LS257 IS NOT
RECOMMENDED SINCE THE OUTPUTS MAY EXPERIENCE VOLTAGE
SPIKES WHEN ENTERING OR LEAVING THREE·STATE.

Figure 1·38 Decoding Memory and 1/0 RD"
and WR" Commands
Static RAM
Several new memory design requirements are introduced
when interfacing static RAM's to the system. To begin
with, AO and BHE* must be included in the chip
select/chip enable decoding of the devices and write timing must be considered in the compatibility analysis.
Data bus connections must be restricted to either the upper half or the lower half of the data bus for each device.
Also, devices must not straddle the upper and lower
halves of the data bus. In order to select either the upper
byte, lower byte or the full 16-bit word for a write operation, BHE* must be a condition of decode for selecting
the upper byte and AO must be a condition of decode for
selecting the lower byte. Several selection techniques for

Four parameters must be evaluated when determining the
compatibility of static ROM's and PROM's to an
808618088 system. The parameters, equations and evaluation techniques given in the 110 section are also applicable
to these devices. The relationship of parameters is given
in Table 1-32. TACC and TCE are related to the same
equation and differ only by the delay associated with the
chip enable/select decoder. The following example shows
a 2716 EPROM memory residing on the multiplexed bus
of a minimum mode 8086 configuration:

ADD~~~~:U
Il!lIll

1m

~

WlI

110 DEVICE

TACC: 3TCLCL -140 - address buffer delay:
430 ns (8282 : 30 ns max delay)
(I) SEPARATE 110 COMMANDS

TCE : TACC - decoder delay: 412 ns (8205
decoder delay: 18 ns)

ADDRESS\~S
e!
LINESl

TOE: 2TCLCL - 195 : 205 ns

1m

1m

WlI

WII

110 DEVICE

TDF: :155
(b) MULTIPLE CHIP SELECTS

The results of the calculations in the previous example
represent the times a minimum mode configuration requires from the component for full speed compatibility
with the system.

Figure 1·39 Linear Select for 1/0
1-79

210912-001

8086/8088 CPU

I-T,-CLK
--J

r

A19/S6,A16/S3

--

--T,--

Jr---;

X

-

~T"".

It-----

T.-

i~

,1"'--'

X

STATUS

AD DR

-

READY

ADDRESS

A1S~AO

,

P

FLOAT - -

)(

DATA IN

015~OO

1---

~-- ~----.

)( FLOAT

1-.

-----

RD
READ
CYCLE

V

DliA

V

r-,.

DEN

ADDRESS

X

-x::::..

DATA OUT

WR
WRITE
CYCLE

V

DEN

DTIR

---

---Figure 1·40 Basic 8086/88 Bus Cycles

CA) LOGICAL ADDRESS SPACE

devices with single chip selects and no output enables are
illustrated in Figure 1-48 and Figure 1-49 illustrates selection techniques for devices with chip selects and output
enables.

(I) PHYStCAllMPlEMENTATlON OF THE
ADDRESS SPACE

FFFFF

512K IYTES
FFFFF

FFFF£

FFFFD

512K BYTES

FFFF£
FFFFC

FFFFO
FFFFC

In the first examples (see Figure 1-48) AO and BHE*
must be included to decode or enable the chip selects.
Since these memories do not have output enables, read
and write are used as enables for chip select generation to
prevent bus contention. If read and write are not used to
enable the chip selects, devices with common
input/output pins will be subjected to severe bus contention between chip select and write active. For devices with
separate input/output lines, the outputs can be externally
buffered with the buffer enable controlled by read. This
solution will only allow bus contention between memory
devices in the array during chip select transition periods.

~
1 MEO .... YTE

Figure 1·41 8086 Memory

1-80

210912-001

8086/8088 CPU

For devices with output enables (see Figure 1-49), write
may be gated with BHE* and AO to provide upper and
lower bank write strobes. This simplifies chip select decoding by eliminating BHE* and AO as a condition of
decode. Although both devices are selected during a byte
write operation, only one will receive a write strobe. No
bus contention will exist during the write since a read
command must be issued to enable the memory output
drivers.

8086 Momory

If multiple chip selects are available at the device, BHE*
and AO may directly control device selection. This allows
normal chip select decoding of the address space and direct connection of the read and write commands to the
devices. Alternately, the multiple chip select inputs of the
device could directly decode the address space (linear select) and be combined with the separate write strobe technique to minimize the control circuits needed to generate
chip selects.

BHE (HIGH)
0,.-00
Even Addressed Byte Transfer

D1S-De

Ao (lOW)

TRANSFER X + 1

"

Y+1

r---1\

~(X+1)~

II"

Y

""

I

As with the EPROM's and ROM's, if separate commands
are not provided for memory and 110 in the minimum
mode 8086 and the address spaces overlap, M/IO* (high
active) must be a condition of chip select decode. Also,
the address lines connected to the memory devices must
start with Al rather than AO.

t'--

LF--

I

~ ~I
D15-0,

y
X

BHE (LOW)

""0,-00~

... (HIGH)

Odd Addressed Byte Transfer

Figure 1·42 Memory Even and Odd
Data Byte Transfers

The write timing parameters listed in Table 1-33 may also
need to be considered to analyze RAM compatibility (depending on the RAM device being considered). CPU
clock relative timing is listed in Table 1-34. The equations
specify the device requirements at the CPU and provide a
base for determining device requirements in other configurations. For example, consider the write timing requirements of a 2148 in a maximum mode buffered 8086
system (see Figure I-50). The write parameters of the
2148 that must be analyzed are TWP write pulse width,
TWR write recovery time, TDW data valid at end of
write, and TDH data hold from write time.

Engineer and simplify the design task somewhat, Intel
provides the 8202,8203,8207, and 8208 dynamic RAM
controllers as part of the 8086 family of peripheral devices. The following paragraphs describe the use of the
8202 with the 8086 in designing a dynamic memory system for an 8086 system.
For example, a standard interconnection for an 8202 in an
8086 system (see Figure I-51) accomn1odates 64K words
(128 bytes) of dynamic RAM which is addressable as
words or bytes. To access the RAM, the 8086 must initiate
a bus cycle with an address that selects the 8202 (via
PCS*) and the appropriate transfer command (MRDC* or
MWTC*). If the 8202 is not performing a refresh cycle,
the access starts immediately, otherwise, the 8086 must
wait for completion of the refresh. XACK* from the 8202
is connected to the 8284 RDY input to force the CPU to
wait until the RAM cycle is completed before the CPU
can terminate the bus cycle. This effectively synchronizes
the asynchronous events of refresh and CPU bus cycles.
The normal write command (MWTC*) is used rather than
the advanced command (AMWC*) to guarantee that data
is valid at the dynamic RAMs before the write command
is issued. Gating WE* withAO and BHE* provides selective write strobes to the upper and lower banks of memory
to allow byte and word write operations. The logic which
generates the strobe for the data latches allows read data
to propagate to the system as soon as the data is available
and latches the data on the trailing edge of CAS*.

TWA = 2TCLCL - TCLMLmax + TCLMHmin
=375 ns.
TWR = 2TCLCL - TCLMHmax + TCLLHmin
+ TSHOVmin = 17Ons.
TDW = 2TCLCL - TCDLVmax + TCLMHmin
- TIVOV max = 265ns.
TDH = TCLCH - TCLMHmax + TCHDXmin
+ TIVOVmin = 95ns.
A comparison of these results with the 2148 family indicates the standard 2148 write timing is fully compatible
with this 8086 configuration. The read timing must also
be analyzed to determine the complete compatibility of
the devices.

Dynamic RAM
A dynamic RAM is one of the most complex devices to
design into an 8086 system. In order to help the Design
1-81

210912-001

8086/8088 CPU
1l!Ibie 1·31 Status Information
r-__....,TRANSFER X+ 1. X...._ _......

S3

S4

o

o
o

1

o

Alternate (relative to the ES segment)
Stack (relative to the SS segment)
Code/None (relative to the CS segment or a default of zero)
Data (relative to the OS segment)

0,-110

A.(LOW)

S5 = IF (interrupt enable flag)
S6 = 0 (indicates the 8086 is on the bus)

E.... AdckelHCI Word Trlnl'or

Table 1·32 EPROM/ROM Parameters

,...-_ _-iFIRST IUS CYCLE...-_ _- ,

TOE - Output Enab(e to Valid Data .. TRLDV
TACC - Address to Valid Data 5 TAVDV
TCE - Chip Enable to Valid Data" TSLDV
TDF - Output Enable High to Output Float. TRHDZ

a. Read Cycle
iKE (LOW)

Ao(HIGHI

For no wait state operation, the 8086 requires data to be
valid from MRDC* in:

...-_ _.....;SECOND BUS CYCL;;;E_ _.....,

Y+1

2TCLCL-TCLML-TDVCL-buffer delays
ns.

iKE (HIOHI

0,-110

Ao(LOWI

Since the 8202 is CAS* access limited, only CAS* access
time needs to be examined. The 8202/2118 guarantees
data valid from 8202 RD* low to be:
(tph + 3tp + 100 ns) 8202 TCC delay + TCAC for the
2118

Figure 1·43 Memory Even and Odd
Data Word Transfers

D}

..r----l- FFFFFH

•.1..
j

r

'=

CODE SEGMENT

XXXXOH

A 25 MHz 8202 and 2118-3 pro"ide only 297 ns, which is
insufficient for no wait state operation. If only 64K bytes
are accessed, the 8202 requires only (tph + 3tp = 85 ns)
giving 282 ns access and no wait states required (see Figures 1-52 and 1-53). Refer to the devices respective data
sheets for additional information.
RESET IOOTSTAAP

} STACK SEGMENT

SEGMENT

cs
55

os

ES

~

t1

FFF .... H

PROGRAM JUMP

FFFFOH

+ OFfSET

REGISTER FilE

= 291

INTERRUPT POINTER

} DATA SEGMENT

3FFH

FOR TYPE 255

3FCH

f--

7H
INTERRUPT POINTER

}EXTRA DATA SEGMENT

FOR TYPE 1
INTERRUPT POINTER

FOR TYPE 0

'H

'H

OH

Figure 1·45 Reserved Memory Locations

Figure 1·44 8086/8088 Memory Organization
1-82

210912-001

8086/8088 CPU

ADDRESS ' - -_ _ _- ,

"0-----1

LOW BANK
CHIP SELECTS

ADDRESS _ _ _ _ _-,

CONTROL

DATA

BHE

MliO OR

---++----01

HIGH BANK
CHIP SELECTS

+---q

ADDITIONAL - - -......
ADDRESS

(I)

Figure 1·46 8086/8088 Memory Array

a. Write Cycle
An important consideration for dynamic RAM write cycles is to guarantee data to the RAM is valid when both
CAS* and WE* are active. For the 2118, ifWE* is valid
prior to CAS*, the data setup is to CAS* and if CAS* is
valid before WE* (as would occur during a read modify
write cycle) the data setup time is to WE*.
For the 8202, the WR* to CAS* delay is analyzed to determine the data setup time to CAS* inherently provided
by the 8202 command to RAS*/CAS* timing. The minimum delay from WR* to CAS* is:
ce)

.5
AOOR
CHIP SELECT

------<>----------,

IfL.J....,.-,---'\ ::~rpHERAL

Table 1-35 presents a list of bus parameters, their definition and how they relate to the A. C. characteristics of.

DATA BUS

ADDAESS

iIif

PERIPHERAL
C8

----h/l "0..

m

00

.2051
Ii

Ao -'---+-
  • <0:--------,"""---, 360 372 772 258 58 ,4, '47 347 258 ,3 572 772 40 '43 354 240 '43 40 DEVICES ARE CONNECTED TO THE UPPER AND LOWER HALVES OF THE DATA BUS. ADDRESS o 1 2 3 4 5 6 7 DEVICE DEVICE DEVICE DEVICE DEVICE DEVICE DEVICE DEVICE 0 1 0 1 2 3 2 3 DATA DATA CONTROUSTATUS CONTROUSTATUS DATA DATA CONTROUSTATUS CONTROUSTATUS ETC. Not applicable. Figure 1·59 Device Assignment clock) or not using the device. As an example, consider address valid prior to advanced write lower (TAVWLA) for the maximum mode fully buffered: The routine begins operation by loading CX with a count of the number of lines in the system and DX with the I/O address of the first line. The I/O addresses are designed with 8251's as the 110 devices (see Figure 1-59). The status of each line is read to determine if it needs service. If yes, the appropriate routine is called to input or output a character. After servicing the line or if no service is needed, CX is decremented and DX is incremented to test the next line. After all lines have been tested and serviced, the routine terminates. If all interrupts from the lines are OR'd together, only one interrupt is used for all lines. If the interrupt is input to the CPU through an 8259A interrupt controller, the 8259A should be programmed in the level triggered mode to guarantee all line interrupts are serviced. TAVWLA= TCYC-1OO ns-address latch delay- address buffer delay - chip select decode delay + write buffer delay (minimum) Assuming inverting latches and buffers with 22 ns delay (8283/8287) and an 8205 address decoder with 18 ns delay: TAVWLA = 38 ns which is the time a 5 MHz 8086 system provides. To service either an input or an output request (see Figure 1-60), the called routine transfers DX to BX, and shifts BX to form the offset for this device into the table of input or output buffers. The first entry in the buffer is an index to the next character position in the buffer and is loaded into the 81 register. By specifying the base address of the table of buffers as a displacement into the data segment, the base + index + displacement addressing mode allows direct access to the appropriate memory location. Multiple Communications Lines Example Consider an interrupt drive procedure for handling multiple communications lines. On receiving an interrupt from one of the lines, the invoked procedure polls the lines (reading the status of each) to determine which line to service. The procedure does not enable lines but simply services input and output requests until the associated output buffer is empty (for output requests) or until an input line is terminated (for the example, only EOT is considered). On detection of the terminate condition, the routine will disable the line. It is assumed that other routines will fill a lines output buffer and enable the device to request output or empty the input buffer and enable the device to input additional characters. Memory - 1/0 Block Transfers Example The memory mapped 110 and the 8086 string primitive instructions may be used to perform block transfers between memory and 110. By assigning a block of the 1·91 210912·001 8086/8088 CPU THIS CODE OEMONSTRATES TESTING DEVICE STATUS FOA SERVICE, CONSTRUCTINQ THE APPROPRIATE LINE IUFFER ADDRESS FOR INPUT AND OUTPUT AND SERVICING AN INPUT REQUEST CHECtCS'A'US: MASK EQU OFFFDH INPUT AL, OX MQY AH, AL TEST JZ CALL TEST JZ CALL TEST JZ WRITE_ SEAVICE: NEXT_IO: ADDRESS: CALL DEC ex JNC AND ADD EXIT ox, MASK OX, 3 ; YE., REITO'" • AnU"N, OR JMP CHECILSTATUI ; NEXT INPUT, AND ox, MASK ; IELICT DATA., ; CONSTRUCT IUFFER ; OIiPLACEMINT II'OR ; THII DEVICE. ; IX IS THI DISPLACEMENT, MOY INC SHA AEAD: : OET 1251. STATUS, AH, AEAD_OR_WRITLSTATUS NEXT_IO ADDRESS AH, READ STATUS WfUTE_SERYICE READ AH, WAITE SUTUS NEXT_IO WRITE ; TEIT IF DONE. ox, 2 IH,DL IH IH ; REMOVE.t AND TAANSFER 258 BYTE BLOCKS TO THE I/O DEVICE ; INCRIMINT ADDRUI. ; IILICT ITATUS FOR THE ADDRESS SPACE ASSIGNED TO THE 110 DEVICE IS A" FROM THAU XOR IL,IL AIT INPUT AL, DX MOV II, AIlAD-I.UFflAI,I)(j JNZ CONT _RIAD CONT _READ: RIT ADDRESS ADDRESS A' ~ _0', ~ 1', MEMORY DATA NEED NOT IE ALIGNED TO EVEN ADDRESS 10UNDAAIES 110 TAANSFERS MUST IE WORD TRANSFERS TO EVEN ADDRESS 10UNDARIES i RIAD CHAMCTIIII. j on CHARACTER POINTIR. MOY IIIIAD_IU"ERI,IX .• IIJ.AL ; ITO~I CHAIlACTI~. j INCR CH......CTIR POINTE ... INC ~IIAD_'UFfI~II')(j eMP AL, lOT j END 0' TMNIMIUION? CALL DIUILI READ i-IASE ~IASE Figure 1·61 Block Transfer to 16·blt 1/0 Using 8086/88 String Primitives j VEl, DIIAILE "ICIIVEIII. ; lEND M.18'GI THAT INPUT j II RIADY, There are several techniques available for interfacing devices without output enables to the multiplexed bus, Note that each of these techniques introduces other restrictions or limitations. Consider the case of chip select gated with read and write (see Figure 1-68). Two problems exist with this technique. First, the chip select access time is reduced to the read access time, and may require a faster Figure 1·60 1/0 Input Request Code Example memory address space (equivalent in size to the maximum block to be transferred to the liD device) and decoding this address space to generate the liD device's chip select, the block transfer capability is easily implemented. Figure 1-61 gives an interconnect for 16-bit liD devices while Figure 1-62 incorporates the 16-bit bus to 8-bit bus mUltiplexing scheme to support 8-bit liD devices. A code example to perform such a transfer is shown in Figure 1-63. A"., L-_ _ _-,/ 3805 A·1 CHIP SELECT 1.4.5 System Design Alternatives Two implementation alternatives must be considered when referring to the system data bus: 1) the multiplexed addressldata bus (see Figure 1-64); and 2) a data bus buffered from the multiplexed bus by transceivers (see Figure 1-65). CS iiiiE --+-4._, DATA iiii If memory or liD devices are connected directly to the multiplexed bus, the designer must guarantee the devices do not corrupt the address on the bus during T 1. To avoid this, device output drivers should not be enabled by the device chip select. They should have an output enable controlled by the system read signal (see Figure 1-66). The 8086 timing guarantees that read is not valid until the address is latched by ALE (see Figure 1-67). All Intel peripherals, EPROM products, and RAM's for microprocessors provide output enable or read inputs to allow connection to the multiplexed bus. 8·BIT 110 DEVICE Wii ADDRESS ASSIGNMENT SAME AS PREVIOUS EXAMPLE. 18-BIT BUS IS MULTIPLEXED ONTO AN 8·BIT PERIPHERAL BUS. Figure 1·62 Block Transfer to 8·bit 1/0 Using 8086188 String Primitives 1-92 210912·001 8086/8088 CPU BUFFERED DATA BUS ; DEFINE THE 110 ADDRESS SPACE 1I0_BLOCK: 110 SEGMENT ORG BLOCKJDDRESS OW, a8 DUP (?) 110 ENDS ; ASSUME THE DATA IS FROM THE CURRENT : DATA SEGMENT CLD ; OF. FORWARD LES 01, I/O_BLOCKJDDAESS ; 110 BLOCK ADDRESS ; CONTAINS THE ADDRESS MOV ex, BLOCK_LENGTH MOV 51, SOURCILADDRESS MOVS 110 BLOCK ; OF 1/0 BLOCK : PERFORM WORD TRANSFERS ; END CODE EXAMPLE NOTE THE CODE IS CAPABLE OF PERFORMING BVTE TRANSFERS BY CHANGING THE 110 BLOCK DEFINITION FROM WORD TO BYTES 'a. as. SYSTEM BUS Figure 1·63 Code For Block Transfers device if maximum system performance (Le., no wait states) is to be achieved (see Figure 1-69). Second, the designer must verify that the chip select-to-write setup and hold times for the device are not violated (see Figure 1-70). Alternate techniques can be extracted from the bus interfacing techniques, also described in this chapter, but are subject to the associated restrictions. In general, for best results, use devices with output enables. To guarantee the specified A.C. characteristics, the 8086's drive capability of 2.0 rnA and capacitive loading of 100 pF subsequently limits the fan out of the multiplexed bus. Assuming capacitive loads of 20 pF per I/O device, 12 pF per address latch and 5-12 pF per memory device, a system mix of three peripherals and two to four memory devices (per bus line) approach the loading limit. Figure 1·65 Buffered Data Bus The data bus must be buffered using inverting or non-inverting octal buffers to satisfy the capacitive loading and drive requirements of larger systems. To enable and control the direction of the transceivers, the 8086 provides Data Enable (DEN) and Data Transmit/Receive (DT/R*) signals (see Figure 1-65). These signals provide the appropriate timing to guarantee isolation of the multiplexed bus from the system during Tl and elimination of MULTIPLEXED DATA BUS BHE 8282 ALE-----I ADDRESS BUS ADDRESS MULTIPLEXED BUS L-_ _ _ _--'A"'D"',,'--:::::AD"",'-'\ MULTIPLEXED ADDRESS/OAT A Figure 1·66 Devices With Output Enable on the Multiplexed Bus Figure 1·64 Multiplexed Data Bus 1-93 210912-001 8086/8088 CPU T1 T2 T3 T4 ,---,----- / ALE Figure 1·67 Relationship of ALE to READ bus contention with the CPU during read and write (see Figure 1-71). Although the memory and peripheral devices are isolated from the CPU (see Figure 1-72), bus contention may still exist in the system if the devices do not have an output enable control other than chip select. As an example, bus contention will exist during transition from one chip select to another (the newly selected device begins driving the bus before the previous device has disabled its drivers). Another, more severe case exists during a write cycle: from chip select to write active, a device whose outputs are controlled only by chip select, will drive the bus simultaneously with write data being driven through the transceivers by the CPU (see Figure 1-73). The same technique given for circumventing these problems on the multiplexed bus can be applied here with the same limitations. ADDRESS '--_ _ _ _ _ _ _-::><:---,/ MULTIPLEXED BUS Since the majority of system memories and peripherals require a stable address for the duration of the bus cycle, the address on the multiplexed address/data bus during Tl should be latched and the latched address used to select the desired peripheral or memory location. Since the 8086 has a 16-bit data bus, the multiplexed bus components of the 8085 family are not applicable to the 8086 (a device on address/data bus lines 8-15 will not be able to receive the byte selection address on lines 0-7). To demultiplex the bus (see Figure 1-74), the 8086 system provides an Address Latch Enable signal (ALE) to capture the address in transparent D-type latches. The latches Figure 1·68 Devices Without Output Enable on the Multiplexed Bus .000 ... ---<. . .________-----. '\ , -,- J .ooo~~_ _ _ _ _ _ _ _ _ _ _ _ __ WR-------------~ C!.WII----h}~ DATA 1 ACCESS TIME FOA CS GENERATED FROM ADDRESS DECODE. 2 ACCESS TIME IF CS IS GATED WITH ADlWlt k 1 cs IS NOT VALID PRIOR TO WRITE AND BECOMES ACTIVE ONE OR TWO GATE a CS REMAINS VALID AFTER WRITE ONE OR TWO GATE DELAYS, DELAVS LATER. Figure 1·69 Access Time: CS Gated with AD*IWR* Figure 1·70 CE to WR* Setup and Hole 1-94 210912-001 8086/8088 CPU AD. ADDRESS A,,-Ao AOtS-ADo 1 READ CYCLE T4_ "_Tlll·~~~_T3 I FLOAT f--- IX DATA IN ) 015-Do --- ----- --- ----- FLOAT iffi DTIR - ~ V 1\ DEN X AD,s·ADo ADDRESS X i DATA OUT FLOAT Viii 2 WRITE CYCLE II DiN DT/A" - ---, - _J 1 DiN IS ENABLED AnER THE _ 2 !!Ell ENABLES THE TRANSCEIVERS EARLY IN THE CYCLE, BUT DTIR GUARANTEES HAS FLOATED THE MULTIPLEXED BUS THE TRANSCEIVERS ARE IN TRANSMIT RATHER THAN RECEIVE MODE AND WILL NOT DRIVE AGAINST THE CPU. Figure 1-71 Bus Transceiver Control may be either inverting or non-inverting. These devices propagate the address through to the outputs while ALE is high and latch the address on the falling edge of ALE. ADDA~~__________________________ 0'" J / ~10'" THIIUS Dl¥telS DillY r- lUI CONTENllON"...;._______• • _ _ _ _ _ _ __ ~ Figure 1-72 Devices With Output Enable on the System Bus Figure 1-73 CS·/Bus Driving Device Timing 1-95 210912-001 8086/8088 CPU NOTE Throughout this chapter consider the multiplexed bus as the local CPU bus and the demultiplexed address and buffered data bus as the system bus. ADDRESS BUS MULTIPLEXED ADDRESS AND DATA BUS AD1S-ADo Figure 1-74 De-multiplexing Address and Data From the Processor Bus This timing delays address access and chip select decoding by only the propagation delay of the latch. The outputs are enabled through the low active OE* input. The demultiplexing of the multiplexed address/data bus (Jatchings of the address from the multiplexed bus), can be done locally at appropriate points in the system or at the CPU with a separate address bus distributing the address throughout the system (see Figure 1-75). For optimum system performance and compatibility with multiprocessor and MULTIBUS configurations, the latter technique is strongly recommended over the first. An additional extension to bus implementation is a second level of buffering to reduce the total load seen by devices on the system bus (see Figure 1-76). This technique is typically used for multiboard systems and for isolation of memory arrays. The concerns with this configuration are the additional delay for access and, more important, control of the second transceiver in relationship to the system bus and the device being interfaced to the system bus. One technique for controlling the transceiver (see Figure 1-77) simply distributes DEN and DT/R* throughout the system. DT/R * is inverted to provide proper direction control for the second level transceivers. Another technique (see Figure 1-78) provides control for devices with output enables. RD* is used to normally direct data from the . system bus to the peripheral. The buffer is selected whenever a device on the local bus is chip selected. Bus contention is possible on the device's local bus during a read as the read simultaneously enables the device output and changes the transceiver direction. Contention may also occur as the read is terminated. For devices without output enables, the same technique can be applied (see Figure 1-79) if the chip select to the device is conditioned by read or write. Controlling the chip select with read/write prevents the device from driving against the transceiver prior to the command being received. Using this technique, read/write time and CS-to-write setup and hold times limit access to the devices. ADDRESS BUS 8088 CPU Using an alternate technique applicable to devices with and without output enables, (see Figure 1-80). RD* controls the direction of the transceiver but it is not enabled until a command and chip select are active. The possibility for bus contention still exists but is reduced to variations in output enable versus direction change time for the transceiver. Full access time from chip select is now available, but data will not be valid prior to write and will only be held valid after write by the delay to disable the transceiver. DATA BUS SEPARATE ADDRESS AND DATA BUSSES r------, I I I I I , I r'--~~~~ I 8086 I CPU I ,, ,L ______ J, I 1----..-----.. ALE L-.L-____J\ ADDRESS/DATA BUS In the last example of a technique for devices with separate inputs and outputs (see Figure 1-81) separate bus receivers and drivers are provided rather than a single transceiver. The receiver is always enabled while the bus driver is controlled by RD* and chip select. The only possibility for bus contention in this system occurs as multiple devices during chip selection changes. Figure 1-75 Multiplexed Bus With Local Address Demultiplexing 1-96 210912·001 8086/8088 CPU CPU LOCAL BUS MEMORY/IO LOCAL BUS SYSTEM BUS Figure 1·76 Fully Buffered System 1.4.6 Multiprocessor/Coprocessor Applications The 8086 architecture supports multiprocessor systems based on the concept of a shared system bus (see Figure 1-82). All CPU's in the system communicate with each other and share resources using the system bus. The bus may be either the Intel MULTIBUS system bus or an extension of the system bus. Arbitration logic consists of the major addition required to the demultiplexed system bus MEMORY/IIO DEVICE ,2H/7 Figure 1·79 Buffering Devices Without OE*/RD* and With Common or Separate Input/Output MEMORY/IIO DEVICES ~------1>------------' Figure 1·77 Controlling System Transceivers with DEN and DT/R* WR-----------. 1lI------?------, RD--------~--+_--------_r-+_, SYSTEM DATA BUS 828617 SVSTEM fL ____J'\1 DATA BUS MEMORY/I/O DEVICE MEMORYIIIO DEVICE Figure 1·80 Buffering Devices Without OE*/RD* and With Common or Separate Input/Output Figure 1·78 Buffering Devices with OE*/RD* 1-97 210912-001 8086/8088 CPU access to shared resources to include concurrent support of a local CPU bus for private resources. For specific configurations and additional information on the 8289, refer to paragraph 1.8.3. e!~~-------------------------, lm--qL-'" Wft---------+--~----------__, SYSTEM DATA BUS LOCK· 74804 OR 74S240 -.----+--1 LOCAL WRITE BUS LOCAL READ BUS The LOCK*outputis used in conjunction with an Intel 8289 Bus Arbiter to guarantee exclusive access of a shared system bus for the duration of an instruction. This output is software controlled and is effected by preceding the instruction with a one byte "lock" prefix (see instruction set description earlier in this chapter). o MEMORY/I/O DEVICE 748240 When the lock prefix is decoded by the EU, the EU informs the BID to activate the LOCK* output during the next clock cycle. This signal remains active until one clock cycle after the execution of the associated instruction is concluded. Figure 1·81 Buffering Devices Without OE*/RO· and With Separate Input/Output to control access to the system bus. As each CPU asynchronously requests access to the shared bus, the arbitration logic resolves priorities and grants bus access to the highest priority CPU. Having gained access to the bus, the CPU completes its transfer and will either relinquish the bus or wait to be forced to relinquish the bus. For discussion on MULTIBUS arbitration techniques, refer to Application Note AP-28A, Intel MULTIBUS Interfacing. QSO, QS1 The QSl and QSO (Queue Status) outputs permit external monitoring of the CPU's internal instruction queue to allow instruction set extension processing by a coprocessor. (The corresponding Intel ICE modules use these status bits during "trace" operations.) The encoding of the QS 1 and QSO bits is shown in Table 1-39. To support a multi-master interface to the MULTIBUS system bus for the 8086 family, the 8289 bus arbiter is included as part of the family. The 8289 is compatible with the 8086's local bus and in conjunction with the 8288 bus controller, implements the MULTIBUS protocol for bus arbitration. The 8289 provides a variety of arbitration and prioritization techniques to allow optimization of bus availability, throughput, and utilization of shared resources. Additional features (implemented through strapping options) extend the configuration options beyond a pure CPU interface to the multi-master system bus for 1.4.7 Interpreting The 8086/8088 Bus Timing Diagrams The 8086/8088 bus timing diagrams are a powerful tool for determining system requirements. The timing diagrams for both the minimum and maximum modes (Figures 1-83 and 1-84) may be divided into six sections: (1) address and ALE; (2) read cycle timing; (3) write cycle timing; (4) interrupt acknowledge timing; (5) ready timing; and (6) HOLD/HLDA or RQ*/GT* timing. Since the A.C. characteristics of the signals are specified relative to the CPU clock, the relationship between the majority of the signals can be reduced by simply determining the clock cycles between the clock edges the signals are relative to and adding or subtracting the appropriate minimum or maximum parameter values. One aspect of system timing not compensated for in this approach is the worst case relationship between the minimum and maximum parameter values (also known as tracking relationships). As an example, consider a signal which has specified minimum and maximum turn on and turn off delays. Depending on device characteristics, it may not be possible for the component to simultaneously demonstrate a maximum turn on and a minimum turn off delay even though worst case analysis might imply the possibility. This argument is characteristic of MOS devices and is therefore applicable to the 8086 A.C. characteristics. Therefore, the designer should assume that in worst case analysis mixing mini- SHARED PERIPHERALS Figure 1·82 8086 Family Multiprocessor System 1·98 210912'()01 8086/8088 CPU and TCLAX apply to the entire multiplexed bus for both read and write cycles. AD15-0 is tri-stated for read cycles and immediately switched to write data during write cycles. AD 19-16 immediately switch from address to status for both read and write cycles. TLHLLmin, which takes precedence over the value obtained by relating TCLLHmax and TCHLLmin, guarantees the minimum ALE pulse width. Table 1·39 Queue Status Bit Decoding QS1 QSO Queue Status o(low) 0 No Operation. During the last clock cycle, nothing was taken from the queue. 0 1 First Byte. The byte taken from the queue was the first byte of the instruction. 1 (high) 0 Queue Empty. The queue has been reinitialized as a result of the execution of a transfer instruction. 1 1 Subsequent Byte. The byte taken from the queue was a subsequent byte of the instruction. To determine the worst case delay-to-valid address on a demultiplexed address bus, two paths are considered: (1) delay of valid address and (2) delay to ALE. Since the D-type latches are flow through devices, a valid address is not transmitted to the address bus until ALE is active. A comparison of address valid delay TCLAVmax with ALE active, delay TCLLHmax indicates TCLAVmax is the worst case. Subtracting the latch propagation delay gives the worst case address bus valid delay from the start of the bus cycle. Minimum Mode Read Cycle Timing The queue status is valid during the eLK cycle after which the queue operation is performed. Read timing consists of conditioning the bus, activating the read command and establishing the data transceiver enable and direction controls. DT/R* is established early in the bus cycle and requires no further consideration. During read, the DEN* signal must allow the transceivers to propagate data to the CPU with the appropriate data setup time and continue to do so until the required data hold time. The DEN* turn on delay allows TCLCL + TCHCLmin - TCVCTV max - TDVCL = 127 ns transceiver enable time prior to valid data required by the CPU. Since the CPU data hold time TCLDXmin and minimum DEN* turnoff delay TCVCTXmin are both 10 ns relative to the same clock edge, the hold time is guaranteed. Additionally, DEN* must disable the transceivers prior to the CPU, redriving the bus with the address for the next bus cycle. The maximum DEN* turn off delay (TCVCTXmax), compared with the minimum delay for addresses out of the 8086 (TCLCL + TCLAVmin), indicates the transceivers are disabled at least 105 ns before the CPU drives the address onto the multiplexed bus. mum and maximum delay parameters will typically exceed the worst case obtainable and should therefore receive further subjective degradation to obtain worst-worst case values. This following paragraphs provide guidelines for specific areas of 8086 timing sensitive to tracking relationships. MINIMUM MODE BUS TIMING The minimum mode address and ALE timing relationship determines the ability to capture a valid address from the multiplexed bus. Since the D-type latches capture the address on the trailing edge of ALE, the critical timing involves the state of the address lines when ALE terminates. If the address valid delay is assumed to be maximum TCLAV and ALE terminates at TCHLLmin, its earliest point (assuming zero minimum delay), the address would be valid only if TCLCHmin-TCLAVmax = 8 ns prior to ALE termination. This result is unrealistic in the assumption of maximum TCLAV and minimum TCHLL. To provide an accurate measure of the true worst case, a separate parameter specifies the minimum time for address valid prior to the end of ALE (TAVAL). TAVAL = TCLCH-60 ns overrides the clock related timings and guarantees 58 ns of address setup to ALE termination for a 5 MHz 8086. The address is guaranteed to remain valid beyond the end of ALE by the TLLAX parameter. This specification overrides the relationship between TCHLL and TCLAX which might seem to imply the address may not be valid by the end of the latest possible ALE. TLLAX holds for the entire address bus. The TCLAXmin specification on the address indicates the earliest the bus will go invalid if not restrained by a slow ALE. TLLAX If memory or 110 devices are connected directly to the multiplexed address and data bus, the TAZRL parameter guarantees the CPU will float the bus before activating read, allowing the selected device to drive the bus. At the end of the. bus cycle, the TRHAV parameter specifies the bus float delay the device being deselected must satisfy to avoid contention with the CPU driving the address for the next bus cycle. The next bus cycle may start as soon as the cycle following T4 or any number of clock cycles later. The minimum delay from read active to valid data at the CPU is 2TCLCL - TCLRLmax - TDVCL = 205 ns. The minimum pulse width is 2TCLCL -75 ns = 325 ns. This specification (TRLRH) overrides the result which could 1-99 210912·001 8086/8088 CPU T, CLK (8214 OUTPUll ~ TCHCTV I-- TCLAV- - - TCLLHALE r ~TfLDV TCLAX- TCHDX - lilt, A,,-A, I I VIH-X . ' "';\ ~~~\~ ~~ ~~ \' _f- I-TCLR X - - I - :- TAVAL -TRYHCH- - TDVCL _ _ -TCLDX- !-TCLAX DATA IN Au-Ao TAZRL- READ CYCLE ::'~TCHCTV TCLRL -"FCHRYX - - TLLAX- I-- r-- ---- _TR1VCL 4- ~R~R TCLAV - I-- T~LAX V,L - I I ) 57-Sa TLHLL-=: -TAVAL- RDY (12141NPUll SEE NOTE 4 DT/R T. _TCLCH_ TCHCL TCHLL-I NOTE' (WI!, IRTA. VOH) Tw ''"''=-;C:JHC~~'---In- MOO READY (1011 IN PUll T, T. ::{ f/ TCLAH- ,-' r---- TRLRH TCVCTV- FLOAT/--!'--TRHAV t=.rCHCTV I TCVCTX - I 1 Figure 1·83 8086 Bus Timing - Minimum Mode System 1-100 210912-001 8086/8088 CPU T, 12 T3 Tw T4 "'_oo_:"~=~~n,t::. ~ TCHCTV TCHCL MI~ .~ ~ ALE TCLDV_ TClAX _ '-- TCHDX - TLHLL-::::: _ - TLlAX AD,,-AD, TCVCTV __ r-:.r, _+-__+-___'""',,ffi -JJ: __ _ 1~~__~I______________~I____~l____ TA1AL AD,,-ADo -+---t-,:,J-(J r __ I "~-; ;:~1 E TelAV" ,II:...... ~+-_________S_,-_S3____~I______~J)(~______ 1- TCLLH- ~iI"f,.~~) x= TCLCH_ ~ TClAV- WRITE CYCLE NOTE 1 - I ""P - If.- { Jr----{/ DATA OUT -TWHD~ -ITAVAl T~lAX 1_ - 'TCVCTX ~~--+-----------+-+-~~ I TCVCTV- 1'-__ -- +-___ '{ TWlWH Viii I~ TCVCTX- _+-_-_t---.\I-TClAZ ~r INTA CYCLE NOTES 113 DT/R I-TDVCL- >---.....-+-.,,-,--,--+L-----,,(1/ TCHCTV FLOAT \ "J..-_'TC_I+-.D.".X,.."..,.".-_-<, " I/\J Fl,O_A_:_C_HC_T_V_ _ -+;--t-- \ ---'1/ :Rr~~L~OH POINTER _:==TCV=CTV_:{/-- ~4-);-- r-7 V TCVCTV_V TCVCTX- DEN t;r-+------- "-'- _ _ _ _ _---J SOFTWARE HALT _ (DEN .. VOL; lID, \VA.1liTA DT/Ii. VOH; AD,,-AD, T!'S FOllOW TI, THEN NMI OR INTR BEGIN A NEW TI. AD1S- AD o ~ 'r TClAV::::::j NOTES: INVALID ADDRESS '-r=-- 1. All SIGNALS SWITCH BETWEEN VOH AND VOl UNLESS OTHERWISE SPECIFIED. 2. ROY IS SAMPLED NEAR THE END OF Ta. Ta. Tw TO DETERMINE IF Tw MACHINES STATES ARE TO BE INSERTED. 3. BOTH INTA CYCLES RUN BACK·TO·BACK. THE lIOII lOCAL ADDRIDATA BUS IS FLOATING DURING THE SECOND INTA CYCLE. CONTROL SIGNALS SHOWN FOR SECOND INTA CYCLE• •. SIGNALS AT 1214 ARE SHOWN FOR REFERENCE ONLY. 5. All TIMING MEASUREMENTS ARE MADE AT 1.5V UNLESS OTHERWISE NOTED. Figure 1·83 8086 Bus Timing - Minimum Mode System (continued) 1-101 210912-001 8086/8088 CPU T, -TCLCLCLK vCH r--" VCl -1 .;----\ "---J TCLAV~ .1:- ~ - 1 SEE NOTE 5 _TCLCH_ - TCLLH- -TCLSH W& ~/.1 ~CLOV { \ SEj NOTE 8 TCHOX- ii'HE,A ... A1I ALE (8288 OUTPUT) -f\- ~ - r-TCLAV TCLAX- T. ;~ TCHCL TCHSV TSVLH~ I 1"'---" ~ l. Q5"QS, s,:s"S;; (EXCEPT HALT) T, TCH1CH21H[TCL2CLl ------ '------ 57-53 TCHLL r-- 1..--- ~ -~~~ ~ !--TR1VCL ~ ROY (8284 INPUT) I ~-TCLR1~ TRYLCL READY (8088 INPUT) TYHSH~I -- TRYHCHzf READ CYCLE TClAV--j AD'S-ADo i F . . -. 'f(' -TCLAZ I- f-TCHRYX - TDVCL~ !--TCLDX- DATA IN TCLRH TAZRL- - / RD TCHDTL -I -- TCLRL TRLRH DT/A - TCLML- TCLMH-- 8288 OUTPUTS SEE NOTES 5,6 TCVNVDEN , FL~:JL ~ TRHAV TCHDTH F1 II--- /r TCVNX- Figure 1-84 8086 Bus Timing - Maximum Mode System (Using 8288) 1-102 210912·001 8086/8088 CPU T, T, ClK 1i.It.SO (EXCEPT HALT) WRITE CYCLE - } TCLAV-- ~SEENOTE. TCYNV- .I:.TCLDY \ ,~---- TCHDX- X Y-c DATA ,-- TCYNX- DEN .... """"'" SEe NOTES 5,. - i-TClMl TCLMH- AMWC: OR Alowe ~ TCLMl - t-- -TCLMH INTACYCLE "On-ADo SEE NOTES 3 .... FLOAT _ RESERVED FOR /~ICT~:DEADDR \ rr:, .lOu-ADo := \.)....--1-....,.__-------4---+.,-=--(rFLOAT TDVCl- ~TC :~OAT POINTER MCEI PliEIi OTIA ..... """"'" SEE NOTES 5,6 DEN TCVNX- x.: 'F' ------------ ADn-ADo INVALID ADDRESS TClAV- ' jr------.-\------- ~ ----' ....... NOTES: \._----- 1. ALL SIGNALS SWITCH BETWEEN YOH AND VOL UNLESS OTHERWISE SPECIFIED. 2. ROY IS SAMPLED NEAR THE END OF T2. T3. Tw TO DETERMINE IF Tw MACHINES STATES ARE TO BE INSERTED. S. CASCADE ADDRESS IS VALID BETWEEN FIRST AND SECOND INfA CYCLES• •• 10TH INTA CYCLES RUN BACK·To-IACK. THE I0Il LOCAL ADDRIOATA BUS IS FLOATlNQ DURING THE SECOND INTA CYCLE. CONTROL FOR POINTER ADDRESS IS SHOWN FOR SECOND INTA CYCLE. 5. SIGNALS AT 1214 OR 1211 ARE SHOWN FOR REFERENCE ONLY. e. THE ISSUANCE OF THE 1211 COMMAND AND CONTROL SIGNALS (1IRDe, IIWTC. ~.RI"IIe. ~. ~.1IiTl AND DEN) LAGS THE ACnVE HIGH UIII eEN. 7. ALL TIMING MEASUREMENTS ARE MADE AT 1.5V UNLESS OTHERWISE NOTID. I. ITATUI INACTIVE IN ITATE JUST PRIOR TO T.. Figure 1-84 8086 Bus Timing - Maximum Mode System (continued) 1-103 210912-001 8086/8088 CPU be derived from the clock relative delays (2TCLCL-TCLRLmax + TCLRHmin). each of the INTA * bus cycles. The interrupt type number read by the 8086 on the second INTA * bus cycle must satisfy the same setup and hold times required for data during a read cycle. Minimum Mode Write Cycle Timing The write cycle provides write data to the system, generates the write command and controls data bus transceivers. The transceiver direction control signal DT/R* is conditioned to transmit at the end of each ready cycle and does not change during a write cycle. This process allows the transceiver enable signal DEN* to be active early in the cycle (while addresses are valid) without corrupting the address on the multiplexed bus. The leading edge of T2 enables both the write data and write command. A comparison of minimum WR* active delay TCVCTVmin with the maximum write data delay TCLDV indicates that write data may be not valid until 100 ns after write is active. The devices in the system should capture data on the trailing edge of the write command rather than the leading edge to guarantee valid data. The data from the 8086 is valid a minimum of 2TCLCL - TCLDVmax + TCVCTXmin = 300 ns before the trailing edge of write. The minimum write pulse width is TWLWH = 2TCLCL - 60 ns = 340 ns. The CPU maintains valid write data TWHDX ns after write. The TWHDZ specification overrides the result derived by relating TCLCHmin and TCHDZmin which implies write data may only be valid 18 ns after WR*. Normally the CPU simply switches the output drivers from data to address at the beginning of the next bus cycle. If forced off the bus by a HOLD or RQ* input, the 8086 floats the bus after write. As with the read cycle, the next bus cycle may start in the clock cycle following T4 or any clock cycle later. The CPU disables DEN* a minimum of TCLCHmin + TCVCTXmin-TCVCTXmax= 18 ns after write to guarantee data hold time to the selected device. Again comparing TCVCTXmin with TCVCTXmax, the real minimum delay from the end of write to transceiver disable equals approximately 60 ns. Minimum Mode Interrupt Acknowledge Timing The interrupt acknowledge sequence consists of two interrupt acknowledge timing cycles as previously described. The detailed timing of each cycle is identical to the read cycle timing with two exceptions: command timing and .address/data bus timing. The multiplexed address/data bus floats from the beginning (Tl) of the INTA* cycle (within TCLAZ ns). The upper four multiplexed address/status lines do not three-state. The address value on A19-A16 is indeterminate, but the status information will be valid (S3 = 0, S4=0, S5=IF, S6=0, S7=BHE*=0). The multiplexed address/ data lines will remain in three-state until the cycle after T4 of the INTA * cycle. This sequence occurs for The DEN* and DT/R* signals are enabled for each INTA * cycle and do not remain active between the two cycles. Their timing for each cycle is identical to the read cycle. The INTA * command has the same timing as the write command. It is active within lIOns of the start of T2 providing 260ns of access time from command to data valid at the 8086. The command is active a minimum of TCVCTXmin = IOns into T4 to satisfy the data hold time of the 8086. This provides minimum INTA* pulse width of 300ns, however, taking signal delay tracking into consideration gives a minimum pulse width of 340ns. Since the maximum inactive delay of INTA* is TCVCTXmax = lIOns and the CPU will not drive the bus until 15ns (TCLAVmin) into the next clock cycle, 105ns are available for interrupt devices on the local bus to float their outputs. If the data bus is buffered, DEN* provides the same amount of time for local bus transceivers the three-state the outputs. Minimum Mode Ready Timing The CPU typically generates the system ready signal from either the address decode of the selected device or the address decode and the command (RD*, WR *, INTA *. For a system which is normally not ready, the time to generate ready from a valid address and not insert a wait state, requires 2TCLCL - TCLAVmax - TRI VCLmax = 255 ns. This time is available for buffered delays and address decoding to determine if the selected device does not require a wait state and drive the RDY line high. If wait cycles are required, the user hardware must provide the appropriate ready delay. Since the address will not change until the next ALE, RDY will remain valid throughout the cycle. If the system is normally ready, selected devices requiring wait states also have 255 ns to disable the RDY line. The user circuits must delay re-enabling RDY by the appropriate number of wait states. If the RD* command is used to enable the RDY signal, TCLCL - TCLRLmax - TRIVCLmax = 15 ns are available for external logic. If the WR* command is used, TCLCL - TCVCTVmax - TRIVCLmax = 55 ns is available. Comparison of RDY control by address or command indicates that address decoding provides the best timing. If the system is normally not ready, address decode alone could be used to provide RDY for devices not requiring wait states while devices requiring wait states may use a combination of address decode and command to activate a wait state generator. If the system is normally ready, devices not requiring wait states do Iiothing to RDY while 1-104 210912-001 8086/8088 CPU devices needing wait states should disable RDY via the address decode and use a combination of address decode and command to activate a delay to re-enable RDY. If the system requires no wait states for memory and a fixed number of wait states for RD* and WR* to alillO devices, the M/IO* signal can be used as an early indication of the need for wait cycles. This techniques allows a common circuit to control ready timing for the entire system without feedback of address decodes. Minimum Mode TEST" Timing The TEST* input is sampled by the 8086 only during execution of the WAIT instruction. The TEST* signal should be active for a minimum of 6 clock cycles during the WAIT instruction to guarantee detection. TCLCHmax must be used since TCHCLmin was assumed to derive the 58 ns ALE enable delay. The address is guaranteed to be valid TCLCHmin + TCHLLmin - TCLAVmax = 8 ns prior to the trailing edge of ALE to capture the address in the latches. Again we have assumed a very conservative TCHLL = O. Note, since the address of ALE are driven by separate devices, no tracking of A.C. characteristics can be assumed. The address hold time to the latches is guaranteed by the address remaining valid until the end of Tl while ALE is disabled a maximum of 15 ns from the positive clock transition in Tl (TCHCLmin - TCHLLmax = 52 ns address hold time). The multiplexed bus transitions from address to status and write data or tri-state (for read) are identical to the minimum mode timing. Also, since the address valid delay (TCLAV) remains the critical path in establishing a valid address, the address access times to valid data and ready are the same as the minimum mode system. MAXIMUM MODE BUS TIMING Maximum Mode Read Cycle Timing The maximum mode 8086 bus operations are logically equivalent to the minimum mode operation. Detailed timing analysis now involves signals generated by the CPU and the 8288 bus controller. The 8288 also provides additional control and command signals which expand the flexibility of the system. Maximum Mode Address and ALE Timing In the maximum mode, the address information continues to come from the CPU while the ALE strobe is generated by the 8288. To determine the worst case relationships between ALE and the address, we first must determine 8288 ALE activation relative to the SO*-S2* status from the CPU. The maximum mode timing diagram specifies two possible delay paths to generate ALE. The first is TCHSV + TSVLH measured from the rising edge of the clock cycle preceding T1. The second path is TCLLH measured from the start of T 1. Since the 8288 initiates a bus cycle from the states lines leaving the passive states (SO* - S2* = I), if the 8086 is late in issuing the status (TCHSVrnax) while the clock high time is a minimum (TCHCLmin), the status will not have changed by the start of T I and ALE is issued TSVLH ns after the status changes. If the status changes prior to the beginning of Tl, the 8288 will not issue the ALE until TCLLH ns after the start of T1. The resulting worst case delay to enable ALE (relative to the start of Tl) is TCHSVmax + TSVLHmax - TCHCLmin = 58 ns. Note, whencalculating signal relationships, be sure to use the proper maximum mode values rather than equivalent minimum mode values. The trailing edge of ALE is triggered in the 8288 by the positive clock edge in Tl regardless of the delay to enable ALE. The resulting minimum ALE pulse width is TCLCHmax-58 ns= 75 ns assuming the TCHLL= O. The maximum mode system offers read signals generated by both the 8086 and the 8288. The 8086 RD* output signal timing is identical to the minimum mode system. Since the A.C. characteristics of the read commands generated by the 8288 are significantly better than the 8086 output, access to devices on the demultiplexed buffered system bus should use the 8288 commands. The 8086 RD* signal is available for devices which reside directly on the multiplexed bus. The following evaluations for read, write and interrupt acknowledge only consider the 8288 command timing. The 8288 provides separate memory and 1/0 read signals which conform to the same A.C. characteristics. The commands are issued TCLML ns after the start of T2 and terminate TCLMH ns after the start of T4. The minimum command length is 2TCLCL - TCLMLmax + TCLMLmin = 375 ns. The access time to valid data at the CPU is 2TCLCL - TCLMLmax - TDVCLmax = 335 ns. Since the 8288 was designed for systems with buffered data busses, the commands are enabled before the CPU has tri-stated the multiplexed bus and should not be used with devices which reside directly on the multiplexed bus (to do so could result in bus contention during 8086 bus float and device tum-on). The direction control for data bus transceivers is established in TI while the transceivers are not enabled by DEN until the positive clock transition of T2. This provides TCLCH + TCVNVmin = 123 ns for 8086 bus float delay and TCHCLmin + TCLCL - TCVNVmax - TDVCLmax = 187 ns of transceiver active to data valid at the CPU. since both DEN and command are valid a minimum of 10 ns into T4, the CPU data hold time TCLDX is guaranteed. A maximum DEN disable of 45 ns (TCVNXmax) guarantees the transceivers are disabled by the start of the next 8086 bus cycle (215 ns minimum from the same H05 210912-001 8086/8088 CPU clock edge). On the positive clock transition of T4, DT/R * is returned to transmit in preparation for a possible write operation on the next bus cycle. Since the system memory and.IlO devices reside on a buffered system bus, they must tri-state their outputs before the device for the next bus cycle is selected (approximately 2TCLCL) or the transceivers drive write data onto the bus (approximately 2TCLCL). Maximum Mode Write Cycle Timing In the maximum mode, the 8288 provides normal and advanced write commands for memory and I/O. The advanced write commands are active a full clock cycle ahead of the normal write commands and have timing identical to the read commands. The advanced write pulse width is 2TCLCL- TCLMLmax + TCLMHmin = 375 ns while the normal write pulse width is TCLCL - TCLMLmax + TCLMHmin = 175 ns. Write data setup time to the selected device is a function of either the data valid delay from the 8086 (TCLDV) or the transceiver enable delay TCVNY. The worst case delay to valid write data is TCLDV = 110 ns minus transceiver propagation delays. This implies the data may not be valid until lOOns after the advanced write command but will be valid approximately TCLCL-TCLDVmax+ TCLMLmin 100 ns prior to the leading edge of the normal write command. Data will be valid 2TCLCL-TCLDVmax + TCLMHmin = 300 ns before the trailing edge of either write command. The data and command overlap for the advanced command is 300 ns while the overlap with the normal write command is 175 ns. The transceivers are disabled a minimum of TCLCHmin - TCLMHmax + TCVNXmin = 85 ns after the write command while the CPU provides valid data a minimum of TCLCHmin - TCLMHmax + TCHDZmin = 85 ns. This guarantees write data hold of 85 ns after the write command. The transceivers are disabled TCLCL - TCVNXmax + TCHDTLmin = 155 ns (assuming TCHDTL = 0) prior to transceiver direction change for a subsequent read cycle. Maximum Mode Interrupt Acknowledge Timing The maximum mode INTA * sequence is logically identical to the minimum mode sequence. The transceiver control (DEN and DT/R*) and INTA* command timing of each interrupt acknowledge cycle is identical to the read cycle. As in the minimum mode system, the multiplexed address/data bus will float from the leading edge of Tl for each INTA * bus cycle and not be drive by the CPU until after T4 of each INTA* cycle. The setup and hold times on the vector number for the second cycle are the same as data setup and hold for the read. If the device providing the interrupt vector number is connected to the local bus, TCLCL - TCLAZmax + TCLMLmin = 130 ns are available from 8086 bus float to INTA * command active. The selected device on the local bus must disable the system data bus transceivers since DEN is still generated by the 8288. If the 8288 is not in the lOB (I/O Bus) mode, the 8288 MCE/PDEN* output becomes the MCE output. This output is active during each INTA * cycle and overlaps the ALE signal during Tl. The MCE is available for gating cascade addresses from a master 8259A onto three of the upper AD15-AD8 lines and allowing ALE to latch the cascade address into the address latches. The address lines may then be used to provide CAS and address selection to slave 8259A's located on the system bus (see Figure 1-85). MCE is active within 15 ns of status or the start of Tl for each INTA * cycle. MCE should not enable the CAS lines onto the multiplexed bus during the first cycle since the CPU does not guarantee to float the bus until 80 ns into the first INTA * cycle. The first MCE can be inhibited by gating MCE with LOCK*. The 8086 LOCK* output is activated during T2 of the first cycle and disabled during T2 of the first cycle and disabled during T2 of the second cycle. The overlap of LOCK* with MCE allows the first MCE to be masked and the second MCE to gate the cascade address onto the local bus. Since the 8259A will not provide a cascade address until the second cycle, no information is lost. As with ALE, MCE is guaranteed valid within 58 ns of the start of Tl to allow 75 ns CAS address setup to the trailing edge of ALE. MCE remains active TCHCLmin - TCHLLmax + TCLMCLmin = 52 ns after ALE to provide data hold time to the latches. If the 8288 is strapped in the lOB mode, the MCE output becomes PDEN* and all I/O references are assumed to be devices on the local bus rather than the demultiplexed system bus. Since INTA * cycles ilre considered I/O cycles, all interrupts are assumed to come from the local system and cascade addresses are not gated onto the system address bus. Additionally, the DEN signal is not enabled since no I/O transfers occur on the system bus. If the local I/O bus is also buffered by transceivers, the PDEN* signal is used to enable those transceivers. PDEN* A.C. characteristics are identical to DEN with PDEN* enabled for I/O references and DEN enabled for instruction or memory data references. Maximum Mode Ready Timing Ready timing based on address valid timing is the same for maximum and minimum mode systems. The delay from 8288 command valid· to RDY valid ;It the 8284 is TCLCL - TCLMLmax - TRlVCLmin = 130 ns. This time is available for external circuits to determine the need to insert wait states and disable ROY or enable RDY to avoid wait states. INTA*, all read commands and advanced write commands provide this timing. The normal write command is not valid until after the RDY signal must be valid. Since both normal and advanced write 1-106 210912-001 8086/8088 CPU ADDRESS ~T------r------'-r-------~,~----~/BUS DATA ~------------------------------~/BUS Figure 1-85 Max Mode 8086 with Master 8259A on the Local Bus and Slave 8259A's on the System Bus commands are generated by the 8288 for all write cycles, the advanced write may be used to generate a RDY indication even though the selected device uses the normal write command. Since separate commands are provided for memory and 110, no M/IO* signal is specifically available as in the minimum mode to aIlowan early 'wait state required' indication for 110 devices. The S2 * status line, however is logically equivalent to the M/IO* signal and can be used for this purpose. Other Maximum Mode Considerations The RQ*/GT* timing is covered in the Bus Exchange Mechanisms section paragraph 1.6.2 Maximum Mode (RQ*/GT*) later in this chapter and will not be duplicated here. The only additional signals to be considered in the maximum mode of operation are the queue status line QSO and QS1. These signals are changed on the leading edge of each clock cycle (high to low transition) including idle and wait cycles (the queue status independent of bus activity). External logic may sample the lines on the low to high transition of each clock cycle. When sampled, the signals indicate the queue activity in the previous clock cycle and therefore lag the CPU's activity by one cycle. The TEST* input requirements are identical to those stated for the minimum mode. To inform the 8288 of HALT status when a HALT instruction is executed, the 8086 will initiate a status transition from passive to HALT status. The status change will cause the 8288 to emit an ALE pulse with an indeterminate address. Since no bus cycle is initiated (no command is issued), the results of the address will not affect the CPU operation (i.e., no response such as READY is expected from the system). This external hardware to latch and decode all transitions in system status. 1.4.8 Wait State Insertion The ready signal is used in the system to accommodate memory and I/O devices that cannot transfer information at the maximum CPU bus bandwidth. Ready is also used in multiprocessor systems to force the CPU to wait for access to the system bus or MULTmUS system bus. To insert a wait state in the bus cycle, the READY signal to the CPU must be inactivate (low) by the end of T2. To avoid insertion of a wait state, READY must be active (high) within a specified setup time prior to the positive transition during T3. Depending on the size and characteristics of the system, ready implementation may take one of two approaches. The classical ready implementation is to have the system 'normally not ready'. When the selected device receives the command (RD*IWR*/INTA*) and has had sufficient time to complete the command, it activates READY to the CPU, allowing the CPU to terminate the bus cycle. This implementation is characteristic of large multiprocessor, MULTIBUS systems or systems where propagation de- 1-107 210912-001 8086/8088 CPU CLOCK 8088 READY READY INACTIVE. I na HOLD TIME 30 '" -J I--.• 1 nl TO GUARANTEE THE NEXT CYCLE IS T, Figure 1·86 Normally Ready System Inserting a Wait State CLOCK 1D18 READY Figure 1·87 Normally Not Ready System Avoiding a Wait State lays, bus access delays and device characteristics inherently slow down the system. for maximum system performance, devices that can run with no wait states must return 'READY' within the previously described limit. Failure to respond in time will only result in the insertion of one or more wait cycles. An alternate technique is to have the system 'normally ready'. All devices are assumed to operate at the maximum CPU bus bandwidth. Devices that do not meet the requirement must disable READY by the end of T2 to guarantee the insertion of wait cycles. This implementation is typically applied to small single CPU systems and reduces the logic required to control the ready signal. Since the failure of a device requiring wait states to disable READY by the end of T2 will result in premature termination of the bus cycle, the system timing must be carefully analyzed when using this approach. both cases, READY must satisfy a hold time of 30 ns (TCHRYX) from the T3 or TW positive clock transition. To generate a stable READY signal which satisfies the previous setup and hold times, the 8284 provides two separate system ready inputs (RDY1, RDY2) and a single synchronized ready output (READY) for the CPU. The RDY inputs are qualified with separate access enables (AEN1*, AEN2*, low active) to allow selecting one of the two ready signals (see Figure 1-88). The gated signals are logically OR'ed and sampled at the beginning of each CLK cycle to generate READY to the CPU (see Figure aYE---1! .7 +5 The 8086 has two different timing requirements on READY depending on the system implementation. for a 'normally ready' system to insert a wait state, the READY must be disabled within 8 ns (TRYLCL) after the end of T2 (start of T3) (see Figure 1-86). To guarantee proper operation of the 8086, the READY input must not change from ready to not ready during the clock low time of T3. For a 'normally not ready' system to avoid wait states, READY must be active within 119 ns (TRYHCH) of the positive clock transition during T3 (see Figure 1-87). For 1·108 ~ 11 ~ ~ ~ ~ ...! X. ClK 8 RESET .0 X. Fie READY 8284 5 18 21 22 ClK RESET READY 8088 RES AENI RDYI AEN2 RDY2 Figure 1·88 Ready Inputs to the 8284 and Output to the 8086/88 210912·001 8086/8088 CPU 1-89). The sampled READY signal is valid within 8 ns (TRYLCL) after CLK to satisfy the CPU timing requirements on 'not ready' and ready. Since READY cannot change until the next CLK, the hold time requirements are also satisfied. The system ready inputs to the 8284 (RDY1, RDY2) must be valid 35 ns (TRIVCL) before T3 and AEN* must be valid 60 ns before T3. For a system using only one RDY input, the associated AEN* is tied to ground while the other AEN* is connected to 5 volts through approximately lK ohms (see Figure 1-90). If the system generates a low active ready signal, it can be connected to the 8284 AEN* input if the additional setup time required by the 8284 AEN* input is satisfied. In this case, the associated RDY input would be tied high (see Figure 1-91). 1.4.9 8086/8088 Instruction Sequence Figure 1-92 illustrates the internal operation and bus activity that occur as an 8086 CPU executes a sequence of instructions. This figure presents the signals and timing relationships that help illustrate 8086 operation. The following discussion interprets the figure. Figure 1-92 shows the repeated execution of an instruction loop. This loop is defined in both machine code and assembly language by Figure 1-93. The loop demonstrates both the effects of a program jump on the queue and makes the instruction sequence easy to follow. The program sequence consists of seven instructions and 16 bytes, and is typical of the tight loops found in many application programs. This particular sequence contains several sort, fast-executing instructions that demonstrate both the effect of the queue on CPU performance and the interaction between the execution unit (EU) fetching code from the queue and the bus interface unit (BIU) filling the queue and performing the requested bus cycles. For the purpose of this discussion, code, stack, and memory data references are aligned on even word boundaries. The entire sequence of instructions has taken 55 clock cycles. Eighteen opcode bytes were fetched, one word memory read occurred, and one word stack write was performed. Consider that the loop starts in clock cycle 1 with the queue reinitialization that occurs as part of the JMP instruction. The EU completes JMP instruction execution. While the BIU performs an opcode fetch to begin refilling the queue. In clock cycle 8, the queue status lines indicate that the first byte of the MOV immediate instruction has been removed from the queue (one clock cycle after it was placed there by the BIU fetch) and that execution of this instruction has begun. The second byte of this instruction is taken from the queue in clock cycle 10 and then, during clock cycle 12, the EU pauses to wait one clock cycle for the second BIU opcode fetch to complete and for the third byte of the MOV immediate instruction to be come available for execution (recall that the queue status lines indicate queue activity that has occurred in the previous clock). Clock cycle 13 begins the execution of the PUSH AX instruction, and during clock cycle 15, the BIU begins the fourth opcode fetch. The BIU finishes the fourth fetch in clock cycle 18 and prepares for another fetch when it receives a request from the EU for a memory write (the stack push). Instead of completing the opcode fetch and forcing the EU to wait for additional clock cycles, the BIU immediately aborts the fetch cycle (resulting in two idle clock cycles, TI, in clock cycles 19 and 20) and performs the required memory write. This interaction between the EU and BIU results in a single clock extension to the execution time of the PUSH AX instruction, the maximum delay that can occur in response to an EU bus cycle request. Execution continues during clock cycle 24 with the execution of sequential register-to-register MOV instructions. The first of these instructions takes full advantage of the pre fetched opcode to complete this operation in two clock cycles. The second MOV instruction, however, depletes the queue and requires two additional clock cycles (28 and 29). During clock cycle 30, the ADD memory indirect to AX instruction begins. In the time required tv execute this instruction, the BIU completes two opcode fetch cycles and a memory read, then begins a fourth opcode fetch cycle. Note that in the case of the memory read, the EU's request for a bus cycle occurs at a point in the BIU fetch cycle where it can be incorporated directly (idle states are not required and no EU delay is imposed). During clock cycle 44, the EU begins the ADD immediate instruction, taking four bytes from the queue and completing instruction execution in four clock cycles. Also during this time, the BIU senses a full queue during clock cycle 45 and enters a series of bus idle states (five or six bytes constitute a full queue in the 8086; the BIU waits until it can fetch a full word or opcode before accessing the bus). At clock cycle 47, the BIU again begins a bus cycle sequence, one that becomes an "overfetch" since the EU is executing a JMP instruction. As part of the JMP instruction, the queue reinitialization (which began the instruction sequence) occurs. The example can be easily extended to incorporate wait states in the bus access cycles. In the case of a single wait state, each bus cycle would be lengthened to five clock cycles with a wait state (TW) inserted between every T3 and T4 state of the bus cycle. As a first approximation, the instruction sequence execution time would appear to be lengthened by 10 clock cycles, one cycle for each useful read or write bus cycle that occurs. Actually, this ap- 1-109 210912-001 8086/8088 CPU ---~~I-- T4ffw CLOCK 8284 RDY SETUP 8284 READY OUT (TO 8088) NOTE: THE 8284 DATA SHEET SPECIFIES READY OUT DELAY (TRYLCL) AS -I .. 'BEFORE' THE END OF T2 WHICH IMPLIES THE TIMING SHOWN. Figure 1·89 8284 With 8086/88 Ready Timing proximation for the number of wait states inserted is incorrect since the queue can compensate for wait states by making use of previously idle bus time. For the example code sequence, this compensation reduced the actual execution time by one wait state, and the sequence was completed in 64 clock cycles, one less than the approximated 65 clock cycles. This example is, deliberately, partially bus limited and indicates the types of EU and BIU interaction that can occur in this type of situation. Most application code sequences, however, use a high proportion of more complex, longer-executing instructions and addressing modes, and 8284 SYSTEM READY 1.5 BUS EXCHANGE MECHANISMS The 8086 supports protocols for transferring control of the local bus between itself and other devices capable of acting as bus masters. The minimum mode configuration offers a signal level handshake similar to the 8080 and 8085 systems. The maximum mode provides an enhanced pulse sequence protocol designed to optimize utilization of CPU pins while extending the system configurations to two prioritized levels of alternate bus masters. These protocols are simply techniques for arbitration of control of the CPU's local bus and should not be confused with the need for arbitration of the system bus. RDYl AeN2 RDY2 1.5.1 Minimum Mode (HOLD/HLDA) +5 Figure 1·90 Using RDY1/RDY2 to Generate Ready SYSTE~ ----.! RIi1 ~~RDYl ~AEN2 r- K lKJ. +5 therefore tend to be execution limited. In this case, less BIU-EU interaction is required, the queue more often is full, and more idle states occur on the bus. 8284 RDY2 -= Figure 1·91 Using AEN1*/AEN2* to Generate Ready The minimum mode 8086 system uses a hold request input (HOLD) to the CPU and a hold acknowledge (HLDA) output from the CPU. To gain control of the bus, a device must assert HOLD to the CPU and wait for the HLDA before driving the bus. When the 8086 can relinquish the bus, it floats the RD*, WR *, INTA * and M/IO* command lines, the DEN* and DT/R* bus control lines and the multiplexed address/data/status lines. The ALE signal is not tri-stated. The CPU acknowledges the request with HLDA to allow the requestor to take control of the bus. The requestor must maintain the HOLD request active until it no longer requires the bus. The HOLD request to the 8086 directly affects the execution unit. The CPU will continue to execute from its internal queue until either more instructions are needed or an operand transfer is required. This allows a high degree of overlap between CPU and auxiliary bus master operation. When the re- 1·110 210912·001 8086/8088 CPU I • I • I • I .. I " I " I " I " I " I " I " I " I " I • I " I WIIlTt~~MO"Y ,-------, I " I " I" " I" " I" ,:',,,u~ ~ I" " F£TCH . . CI T2 " I " I " I" Tl f£TCH"Ol ~ ~ ~ ~~~ :II I .. I 31 I u I U I M I 311 I 31 I 31 100 31 101 " I" ~ ~~~ ~.." ,. I REAO.EMORY I 1, :!tCH"~ T3 l( I T, ;:rCHIP~ ~~~~ ~ --------t-IIiIOVCX •• ...j--MOVOl,CJ ,--'~_"'_"....J~ . I" 12 WII"\f:'KONTO ~.." "'G=-----• I I " I " I • I • I " I ' n I :II I *I I ., I ~ I I U oM I (S I .. I ., t I ... I .. ,. coot FETCH IIL_,,_,,_m,_"...J 50 I ~, I 52 I 53 I .... I SS I M I 51 I ,--------- -- -L_ '-----' " I " I " I " I" ' ,~""":: "I" I " I " I " I ;~~~~ ~~ L-_ _ _ _ _ _ _ _ _ _ _ _ _ _--' FIRST NfJ(T II lYlE NUT II lYlE NUT II FIIIST ,nt II ,YTt lYlE ~ .. , L--------'E?~W1Dl- - -- o---------_I---·~··_--II_----- Figure 1·92 Representative Instruction Execution Sequence questor drops the HOLD signal, the 8086 will respond by dropping HLDA. The CPU will not re-drive the bus, command and control signals from tri-state until it needs to perform a bus transfer. Since the 8086 may still be executing from its internal queue when HOLD device is driving the bus. To prevent the command lines from drifting below the minimum VIH level during the transition of bus control, 22K ohm pull up resistors should be connected to the bus command lines. The timing diagram in Figure 1-94 shows the handshake sequence and 8086 tim- ASSEMBLY LANGUAGE MACHINE CODE MOV AX, OF802H PUSH AX MOVCX, BX MOVDX,CX ADD AX, [SI] ADD SI, 8086H JMP$ -14 B802F8 50 8BCB 8BD1 0304 81C68680 EBFO Figure 1·93 Instruction Loop Sequence ing to sample HOLD, float the bus, and enable/disable HLDA relative to the CPU clock. To guarantee valid system operation, the designer must assure that the requesting device does not assert control of the bus prior to the 8086 relinquishing control and that the device relinquishes control of the bus prior to the 8086 driving the bus. The HOLD request into the 8086 must be stable THVCH ns prior to the CPU's low to high clock transition. Since this input is not synchronized by the CPU, signals driving the HOLD input should be synchronized with the CPU clock to guarantee the setup time is not violated. Either clock edge may be used. The maximum delay between HLDA and the 8086 floating the bus is TCLAZmax - TCLHAVmin - 70 ns. If the system cannot tolerate the 70 ns overlap, HLDA active from the 8086 should be delayed to the device. The minimum delay for the CPU to drive the control bus from HOLD inactive is THVCHmin + 3TCLCL = 635 ns and THVCHmin + 3TCLCL+ TCHCL= 701 ns to drive the multiplexed bus. If the device does not satisfy these requirements, HOLD inactive to the 8086 should be delayed. The delay from HLDA inactive to driving the busses is TCLCL + TCLCHmin-TCHAVmax= 158 ns for the control bus and 2TCLCL - TCLHAVmax = 240 ns for the data bus. 1-111 210912·001 8086/8088 CPU elK HOLD CONTROL HlOA _ _ _ _..oJ Figure 1·94 HOLD/HLDA Sequence Timing Diagram LATENCY OF HLDA TO HOLD The decision to respond to a HOLD request is made in the bus interface unit. The major factors that influence the decision are the current bus activity, the state of the LOCK* signal internal to the CPU (d by the software LOCK prefix) and interrupts. If the LOCK* is not active, an interrupt acknowledge cycle is not in progress and the Bus Interface Unit (BIU) is executing a T4 or T1 when the HOLD request is received, the minimum latency to HLDA is: 35 ns 65 ns 200ns IOns THVCH min (Hold setup) TCHCLmin TCLCL (bus float delay) TCLHAV min (HLDA delay) 310 ns @5MHz latency by four additional clocks plus N additional wait states. With no wait states in the bus cycle, the maximum would be 2.476 microseconds. Although the minimum mode 8086 does not have a hardware LOCK* output, the software LOCK prefix may still be included in the instruction stream. The CPU internally reacts to the LOCK prefix as would the maximum mode 8086. Therefore, the LOCK does not allow a HOLD request to be honored until completion of the instruction following the prefix. This allows an instruction which performs more than one memory reference (example ADD [BXJ, CX; which adds CX to [BX]) to execute without another bus master gaining control of the bus between memory references. Since the LOCK signal is active for once clock longer than the instruction execution, the maximumlatency to HLDA is: 34 ns 200ns 82 ns (M+ 1)*200 200 ns 160 ns The maximum delay under these conditions is: 34 ns 200 ns 82 ns 200 ns 160 ns 677 ns (just missed setup time) delay to next sample TCHCLmax TCLCL (bus float delay) TCLHAV max (HLDA delay) @5MHz (M*200 ns) + 876 ns @ 5MHz If the BIU just initiated a bus cycle when the HOLD request was received, the worst case response time is: 34 ns 82 ns 7*200 N*200 160 ns THVC (just missed) delay to next sample TCHCLmax ns LOCK instruction execution set up HLDA (internal) TCLHAV max (HLDA delay) If the HOLD request is made at the beginning of an interrupt acknowledge sequence, the maximum latency to HLDA is: 34 ns 82 ns 2600ns 160 ns THVCH (just missed) TCHCLmax bus cycle execution N wait stateslbus cycle TCLHAV max (HLDA delay) THVCH (just missed) TCHCLmax 13 clock cycles for INTA TCLHAVmax 2.876 microseconds @ 5 MHz 1.676 microseconds @ 5 MHz, no wait states Note, the 200 ns delay for just missing is included in the delay for bus cycle execution. If the operand transfer is a word transfer to an odd byte boundary, two bus cycles are executed to perform the transfer. The BIU will not acknowledge a HOLD request between the two bus cycles. This type of transfer would extend the above maximum MINIMUM MODE DMA CONFIGURATION A typical use of the HOLD/HLDA signals in the minimum mode 8086 system is bus control exchange with DMA devices like the Intel 8257-5 or 8237 DMA control- 1·112 210912-001 8086/8088 CPU lers. Figure 1-95 illustrates a general interconnect for this type of configuration using the 8237-2. The DMA controller resides on the upper half of the 8086 's local bus and shares the A8-A15 demultiplexing address latch of the 8086. All registers in the 8237-2 must be assigned odd addresses to allow initialization and interrogation by the CPU over the upper half of the data bus. The 8086 RD*/WR* commands must be demultiplexed to provide separate 110 and memory commands which are compatible with the 8237-2 commands. The AEN control from the 8237-2 must disable the 8086 commands from the command bus, disable the address latches from the lower (AO-A7) and upper (AI9-AI6) address bus and select the 8237-2 address strobe (ADSTB) to the A8-A15 address latch. If the data bus is buffered, a pull-up resistor on the DEN line will keep the buffers disabled. The DMA controller will only transfer bytes between memory and 1/0 and requires the 110 devices to reside on an 8-bit bus derived from the 16-bit to 8-bit bus multiplex circuit given in Section 4. Address lines A7-AO are drive directly by the 8237 and BHE* is generated by inverting AO. If A19-A16 are used, they must be provided by an additional port with either a fixed value or initialized by software and enabled onto the address bus by AEN. Figure 1-96 gives an interconnection for placing the 8257 on the system bus. By using a separate latch to hold the upper address from the 8257-5 and connecting the outputs to the address bus as shown, 16-bit DMA transfers are provided. In this configuration, AEN simultaneously enables AO and BHE* to allow word transfers. AEN still disables the CPU interface to the command and address busses. RO*/GT* TO HOLD/HLDA CONVERSION Consider a circuit for translating a HOLD/HLDA handshake sequence into a RQ*/OT* pulse sequence (see Figures 1-97 and 1-98). After receiving the grant pulse, the HLDA is enabled TCHCLmin ns before the CPU has tri-stated the bus. If the requesting circuit drives the bus within 20 ns of HLDA, it may be desirable to delay the acknowledge one clock period. The HLDA is dropped not later than one clock period after HOLD is disabled. The HLDA also drops at the beginning of the release pulse to provide 2TCLCL + TCLCH for the requestor to relinquish control of the status lines and 3TCLCL to float the remaining signals. 1.5.2 Maximum Mode (RQ*/GT*) The maximum mode 8086 configuration supports a significantly different protocol for transferring bus control. When viewed with respect to the HOLD/HLDA sequence of the minimum mode, the protocol appears difficult to implement externally. However, it is necessary to understand the intent of the protocol and its purpose within the system architecture. The maximum mode RQ*/OT* sequence is intended to transfer control of the CPU local bus between the CPU and alternate bus masters which reside totally on the local bus and share the complete CPU interface to the system bus. The complete interface includes the address latches, data transceivers, 8288 bus controller and 8289 multi-master bus arbiter. If the alternate bus masters in the system do not reside directly on the 8086 local bus, system bus arbitration is required rather than local CPU bus arbitration. To satisfy the need for multi-master system bus arbitration at each CPU's system interface, the 8289 bus arbiter should be used rather than the CPU RQ*/OT* logic. RO*/GT* USAGE The RQ*/OT* protocol was developed to allow up to two instruction set extension processor (co-processors) or other special function processors (like the 8089 110 processor in local mode) to reside directly on the 8086 local bus. Each RQ* IOT* pin of the 8086 supports the full protocol for exchange of bus control. The sequence consists of a request from the alternate bus master to gain control of the system bus, a grant from the CPU to indicate the bus has been relinquished and a release pulse from the alternate master when done. The two RQ*/OT* pins (RQ*/OTO* and RQ*/OTI *) are prioritized with RQ*/OTO* having the highest priority. The prioritization only occurs if requests have been received on both pins before a response has been given to either. For example, if a request is received on RQ* lOTI * followed by a request on RQ*/OTO* prior to a grant on RQ*/OTI *, RQ* IOTO* will gain priority over RQ* lOTI *. However, if RQ*/OTI * had already received a grant, a request on RQ* IOTO* must wait until a release pulse is received on RQ*/OTl*. The requestl grant sequence interaction with the bus interface unit is similar to HOLD/HLDA. The CPU continues to execute until a bus transfer for additional instructions or data is required. If the release pulse is received before the CPU needs the bus, it will not drive the bus until a transfer is required. Upon receipt of a request pulse, the 8086 floats the multiplexed address, data and status bus, the SO*, S1*, and S2 * status lines, the LOCK* pin and RD*. This action does not disable the 8288 command outputs from driving the command bus and does not disable the address latches from driving the address bus. The 8288 contains internal pull-up resistors on the SO*, SI*, and S2* status lines to maintain the passive state while the 8086 outputs are tri-state. The passive state prevents the 8288 from initiating any commands or activating DEN to enable the transceivers buffering the data bus. If the device issuing the RQ* does not use the 8288, it must disable the 8288 command outputs by disabling the 8288 AEN* input. Also, address latches not used by the requesting device must be disabled. 1·113 210912·001 8086/8088 CPU Vee T DEMULTIPLEX MIN MODE COMMANDS r t~ I 8284 I L I RDIWRIIO/M BHE Ai." l' 8018 READY CLK RESET HOLD 1 L ALE AD1S-D HLDA T T COMMAND BUS EIIAIU 8282 DO 01 STa m f---- '( ~ m = UPPER OMA AD DR - 00- >c>- 01 - 8282 1/0 PORT LOADED DURING 8237 INITIALIZATION LOCAL DATA BUS 8282 74LS74 Q CLR If-D r- 01 ~ DO STa - AD7.----10 RESET OSC PClK ClK READY Figure 1-109 8284A Clock GeneratorlDriver Block Diagram Xl 24MHZ$ X2 CSYNC ~ .". .". FIe: I A. I Figure 1-111 Recommended Crystal Clock Configuration Figure 1-110 8086/88 Clock Waveform +5 "lJ.X1X, ~ The oscillator output is inverted from the oscillator signal used to drive the CPU clock generator circuit. Because of this inversion, the oscillator output of one 8284A should not drive the EFI input of a second 8284A if both are driving clock inputs of separate CPU's that are to be synchronized. The variation on EFI to CLK delay over a range of 8284A's may approach 35 to 45 ns. If, however, 1-127 EXTEANAl FREQUENCY SOUACE F'~ 14 ClK EFI 1214 1 \I ClK - Figure 1-112 8284A Interfaced to an 8086/88 210912·001 8086/8088 CPU +5 14 lK 17 OSC X, C ~ 8284 18 13 TO CSYNC EXTERNAL SYNC-----I INPUT CONDITION IiXTERNAl FREQUENCY X, Fie TO L--------------EFI INPUT Figure 1-115 Synchronizing CSYNC With EFI +5 Figure 1-113 External Frequency for Multiple 8284's all 8284A's are the same package type, have the same relative supply voltage and operate in the same temperative environment, the variation will be reduced to between IS and 25 ns. 8284A OUTPUTS There are three frequency outputs from the 8284A, the oscillator (OSC) mentioned above, the system clock (CLK) which drives the CPU, and a peripheral clock (PCLK) that runs at one half the CPU clock frequency (see Figure 1-114). The oscillator output is only driven by the crystal and is not affected by the F/C* strapping option. If a crystal is not connected to the 8284A when the external frequency input is used, the oscillator output is indeterminate. The CPU clock is derived from the selected frequency source by an internal divide by three counter. The counter generates the 33 % duty cycle clock which is optimum for the CPU at maximum frequency. The peripheral clock has a 50 % duty cycle and is derived from the CPU clock. The maximum skew is 20 ns between OSC and CLK, and 22 ns between CLK and PCLK. Since the state of the 8284A divide by three counter is indeterminate at system initialization (power on), an external sync to the counter (CSYNC) provides synchronization of the CPU clock to an external event. When CSYNC is brought high, the CLK and PCLK outputs are forced high. When CSYNC returns low, the next positive clock from the frequency source starts clock generation. CSYNC must be active for a minimum of two periods of the frequency source. If CSYNC is asynchronous to the frequency source, use the circuit in Figure 1-115 for synchronization. The two latches minimize the probability of a meta-stable state in the latch driving CSYNC. The latches are clocked with the inverse of the frequency source to guarantee the 8284A setup and hold time of CSYNC to the frequency source (see Figure 1-116). If a single 8284A is to be synchronized to an external event EFI CSVNC J, I --l I I I I--TYHEH -MAX IS SPEC'ED TO GUARANTEE MAX aoee CLOCK FREQUENCY Figure 1-116 CSYNC Setup and Hold to EFI = ClK PClK~ ~ Figure 1-114 Oscillator to ClK and ClK to PClK Timing Relationships 1-128 210912·001 8086/8088 CPU +5 17 +5 X, osc 100Q 12 elK Cl ~ 18 X, 8284 100Q FIe CSYNC elK 8 SYNC 100Q Figure 1·117 EFI From 8284A Oscillator Figure 1·119 Buffering the 8284 ClK Output and an external frequency source is not used, the oscillator output of the 8284A may be used to synchronize CSYNC (see Figure 1-117). Since the oscillator output is inverted from the internal oscillator signal, the inverter in the previous example is not required. If multiple 8284A's are to be synchronized, an external frequency source must drive all 8284A's and a single CSYNC synchronization circuit must drive the CSYNC input of all 8284A's (see Figure 1-118). Since activation of CSYNC may cause violation of CPU minimum clock low time, it should only be enabled during reset or CPU clock high. CSYNC must also be disabled a minimum of four CPU clocks before the end of reset to guarantee proper CPU reset. input high Voltage) (see Figure 1-119). A single 8284A should not be used to generate the CLK for multiple CPU's that do not share a common local (mUltiplexed) bus since the 8284A synchronizes ready to the CPU and can only accommodate ready for single CPU. If multiple CPU's share a local bus, they should be driven with the same clock to optimize transfer of bus control. Under these circumstances, only one CPU will be using the bus for a particular bus cycle which allows sharing a common READY signal (see Figure 1-120). Due to the fast transitions and high drive (5 rnA) of the 8284A CLK output, it may be necessary to put a 10 to 100 ohm resistor in series with the clock line to eliminate ringing (resistor value depending on the amount of drive required). If multiple sources of CLK are needed with minimum skew, CLK can be buffered by a high drive device (74S241) with outputs tied to 5 volts through 100 ohms to guarantee VOH = 3.9 min (8086 minimum clock +. THE 8284A RESET FUNCTION The reset signal to the 8086 can be generated by the 8284A; the 8284A has a Schmitt trigger input (RES*) for generating reset from a low active external reset. The hysteresis specified in the 8284A data sheet implies that at least 0.25 volts will separate the 0 and 1 switching point of the 8284A reset input. Inputs without hysteresis will switch from low to high and high to low at approximately the same voltage threshold. The inputs are guaranteed to switch at specified low and high voltages (VIL and VIH) but the actual switching point is anywhere in-between. Since VIL min is specified at 0.8 volts, the hysteresis guarantees that the reset will be active until the input MULTIPlEX£D IUS Figure 1·120 8086 and Coprocessor on the local Bus Share a Common 8284 Figure 1·118 Synchronizing Multiple 8284As 1-129 210912-001 8086/8088 CPU reaches at least I. 05 volts. A reset will not be recognized until the input drops at least 0.25 volts below the reset inputs VIR of2.6 volts. +V RESETIN~ POWER UP RESET ±T":284 To guarantee reset from power up, the reset input must remain below 1.05 volts for 50 microseconds after Vee has reached the minimum supply voltage of 4.5 volts. The hysteresis allows the reset input to be drive by a simple RC circuit (see Figure 1-121). The calculated RC value does not include time for the power supply to reach 4.5 volts or the charge accumulated during this interval. Without the hysteresis, the reset output might oscillate as the input voltage passes through the switching voltage of the input. The calculated RC value provides the minimum required reset period of 50 microseconds for 8284A's that switch at the 1.05 volt level and a reset period of approximately 162 microseconds for 8284A's that switch at the 2.6 volt level. If tighter tolerance between the minimum and maximum reset times is necessary, the reset circuit shown in Figure 1-122 might be used rather than the simple RC circuit. This circuit provides a constant current source and a 1.inear charge rate on the capacitor rather than the inverse exponential charge rate of the RC circuit. This implementation generates a maximum reset period of 124 microseconds. Yc = AC = 188.10- 6 1.05 V 5 I .' MINIMUM RESET ACTIVE TIME / - - MAXIMUM RESET ACTIVE TIME Figure 1·121 8284A Reset Circuit Vee 0, R, - DETERMINES CURRENT TO CHARGE C Ra - VALUE NOT CRITICAL ::10K 0, The 8284A synchronizes the reset input with the CPU clock to generate the RESET signal to the CPU (see Figure 1-123). The output is also available as a general reset to the entire system. The reset has no effect on any clock circuits in the 8284A. 1.8.2 8288 Bus Controller = 50 j.lsec = 4.5 Ie = tfHARGE CURRENT = VbcCO, R02 - Td RESET IF All SEMICONDUCTORS ARE SILICON. Ie. ¥ · l n f - - - - - < v e e - 08 The 8288 Bus Controller (Figure 1-124) uses the S2*, SI * and SO* status bit outputs from the CPU (and the 8089 lOP) to generate all bus control and command output signals required for a bus cycle. The status bit outputs are decoded as outlined in Table 1-43. For a detailed description of the operation of the 8288 Bus Controller, refer to the Microsystems Component Handbook (Intel Order No. 230843-002). The three status lines (SO*, S1*, S2 *) are defined to provide communications with the 8288 and 8289. The status lines tell the 8288 when to initiate a bus cycle, what type of command to issue and when to terminate the bus cycle. The 8288 samples the status lines at the beginning of each CPU clock (CLK). To initiate a bus cycle, the CPU drives the status lines from the passive state (SO*, S 1*, S2 * 1) to one of the seven possible command codes (see Table 1-43). This occurs on the rising edge of the clock during T4 of the previous bus cycle or a TI (idle cycle, no current bus activity). The 8288 detects the status change by sampling the status lines on the high to low transition of each clock cycle. The 8288 starts a bus cycle by generat- T Figure 1·122 Constant Current Power Up Reset Circuit 17 CJ Y +5 = 1-130 18 13 ClK X, SYSTEM RESET 8 8284 11 X, FIe ClK 8086 RESET 10 21 RESET '::- 11 liB ~ Figure 1·123 8086/88 Reset and System Reset 210912-001 8086/8088 CPU 5o~ 8086 { STATUS 5,-- 52-- STATUS DECODER MRDC - - . MWTC COM· MAND SIGNAL GENER· ATOR AMWC 10RC lowe 1 I MUL TlSUS ™ COMMAND SIGNALS Alowe INTA CONTROL INPUT { ClK~ AEN CEN- CONTROL lOGIC CONTROL SIGNAL GENER· ATOR +5V GND 108-- DTiR } ADDRESS lATCH, DATA DEN TRANSCEIVER, AND MCE/PDEN INTERRUPT CONTROL SIGNALS ALE Figure 1·124 8288 Bus Controller Block Diagram ing ALE and appropriate buffer direction control of the clock cycle immediately following detection of the status change (T 1). The bus transceivers and the selected command are enabled in the next clock cycle (T2) (or T3 for normal write commands). When the status returns to the passive state, the 8288 will terminate the command (see Figure 1-125). Since the CPU will not return the status to the passive state until the 'ready' indication is received, the 8288 maintains active command and bus control for any number of wait cycles. The status lines may also be used by other processors on the 8086's local bus to monitor bus activity and control the 8288 if they gain control of the local bus. and static RAMs. The normal write provides data setup prior to write to accommodate dynamic RAM memories and I/O devices which strobe data on the leading edge of write. The advanced write commands do not guarantee that data is valid prior to the leading edge of the command. The DEN signal in the maximum mode is inverted from the minimum mode to extend transceiver control by allowing logical conjunction of DEN with other signals. While not appearing to be a significant benefit of interrupt control and various system configurations will demonstrate the usefulness of qualifying DEN. Figure 1-126 compares the timing of the minimum and maximum mode bus transfer commands. Although the maximum mode configuration is designed for multiprocessor environments, large single CPU designs (either MULTIBUS systems or greater than two PC boards) should also use the maximum mode. Since the 8288 is a bipolar dedicated controller device, its output drive for the commands (32 rnA) and tolerances on A.C. characteristics (timing parameters and worse case delays) provide better large system performance than the minimum mode 8086. The 8288 provides the bus control (DEN, DT/R*, ALE) and commands (INTA*, MRDC*, IORC*, MWTC*, AMWC*, IOWC*, AIOWC*) removed from the CPU. The command structure has separate read and write commands for memory and I/O to provide compatibility with the MULTIBUS command structure. The advanced write commands are enabled one clock period earlier than the normal write to accommodate the wider write pulse widths often required by peripherals Table 1·43 Status Line Decode Chart s; s, So 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 Processor State 0 InterrUQI Acknowledge 1 Read I/O Port 0 Write I/O Port 1 Halt 0 Code Access 1 Read Memory 0 Write Memory 1 Passive 8288Command INTA 10RC 10WC,AIOWC None M'RoC MRDC MWTC,AMWC None In addition to assuming the functions removed from the CPU, the 8288 provides additional strapping options and controls to support multiprocessor configurations and peripheral devices on the CPU local bus. These capabilities allow assigning resources (memory or I/O) as shared (available on the MULTIBUS system bus) or private (accessible only by this CPU) to reduce contention for access to the MULTIBUS system bus and improve multi-CPU system performance. The following paragraphs describe these strapping options. 1-131 210912-001 8086/8088 CPU I T, I T, I ClKf\J\J\. GOES INACTIVE IN THE STATE :~~ !=<~'. \'---- READY ~\\~\\\ READY 9 WAIT Figure 1·125 Status Line Activation And Termination ClK (8284 OUTPUn MN MODE 8088 110 ns TCVCTX TClMH 35 MX MODE 8088 WITH ~ OR AIllWil -----------hl 8288 Figure 1·126 Maximum and Minimum Mode Command Timing 1-132 210912-001 8086/8088 CPU aoaeIlOIIIlOII STATUS PROCESSOR CONTROL \ BClK INIT BREQ BPRN BPRO Ii ~ I MUlTlBUSTM COMMAND SIGNALS BUSY CIRQ lOCK ClK ~ RESB ANYRQST 1 iOa AEN I===~~~=~~~~;J- SYSB/IIED } SYSTEM SIGNALS +5Y Figure 1-127 8289 Bus Arbiter Block Diagram I/O BUS MODE Strapping the lOB pin HIGH puts the 8288 in the 110 Bus mode of operation. In the 110 Bus mode all command lines (lORC*, 10WC*, AIOWC*, INTA*) are always enabled and not dependent on AEN*. When an 110 command is issued by the processor, the 8288 immediately activates the command lines using PDEN* and DT/R* to control the 110 bus transceiver. In this configuration the 110 command lines should not be used to control the system bus because there is no arbitration present. In this mode one 8288 can handle two external busses. No waiting is involved when the CPU wants to gain access to the 1/0 bus. Normal memory access requires a "Bus Ready" signal (AEN* LOW) before it will proceed. The lOB mode of operation is especially advantageous in a multi-processor system where there are 110 or peripherals are dedicated to only one processor. SYSTEM BUS MODE When the lOB pin is strapped LOW the 8288 is in the System Bus Mode of operation. No commands are issued in this mode until 115ns after the AEN* line is activated (LOW). The System Bus Mode assumes arbitration logic will inform the bus controller (on the AEN* line) when the bus is free for use. Both memory and 110 commands wait for arbitration. This mode is used when only one bus exists. In this case, both 110 and memory are shared by more than one processor. The processor is unaware of the arbiter's existence and issues commands as though it has exclusive use of the system bus. If the processor does not have the use of the multi-master system bus, the bus arbiter prevents the bus controller, the data transceivers and the address latches from accessing the system bus (i.e., all bus driver outputs are forced into the high impedance state). Since the command was not issued, a transfer acknowledge (XACK) will not be returned and the processor will enter into wait states. Transfer acknowledges are signals returned from the addressed resource to indicate to the processor that the transfer is complete. This signal is typically used to control the ready inputs of the clock generator. The processor will remain in a wait state until the bus arbiter acquires the use of the multi-master system bus. At that time the bus arbiter will allow the bus controller, the data transceivers and the address latches to access the system bus. The 8089 uses the LOCK* output to guarantee exclusive access of a shared system bus for the duration of an instruction. LOCK* is software controlled and must be preceded by the instruction requiring exclusive access with a one byte "lock" prefix. When the lock prefix is decoded by the EU, the EU informs the BIU to activate the LOCK* output during the next clock signal. This signal remains active until one clock cycle after the execution of the associated data transfer is concluded. Once the command has been issued and a data transfer has taken place, a transfer acknowledge (XACK) is returned to the processor. The processor then completes its transfer cycle. In this way, the arbiter serves to multiplex a processor (or bus master) onto a multi-master system bus and avoid contention problems between bus masters. 1.8.3 8289 Bus Arbiter The 8289 Bus Arbiter (see Figure 1-127) operates in conjunction with the 8288 Bus Controller to interface an 8086, 8088, or 8089 processor to a multi-master system bus (the 8289 is used as a general bus arbitration unit). Since there can be many bus masters on a multi-master system bus, some means of resolving priority between bus masters simutaneously requesting the bus must be provided. The 8289 provides several resolving techniques. These techniques are based on a priority concept that at 1-133 210912·001 8086/8088 CPU any given time one bus master will have priority over the rest. Two of the techniques, parallel and serial priority resolving techniques, are discussed in the following paragraphs. The parallel priority resolving technique uses a separate bus request line (BREQ*) for each arbiter on the multi-master bus system (see Figure 1-128). Each BREQ* line enters into a priority encoder which generates the binary address of the highest priority BREQ* line which is active. The binary address is decoded by a decoder to select the corresponding BPRN* (Bus Priority In) line to be returned to the highest priority requesting arbiter. The arbiter receiving priority (BPRN* true) then allows its associated bus master onto the multi-master system bus as soon as it becomes available. When one bus arbiter gains priority over another arbiter it cannot immediately seize the bus, it must wait until the present bus transaction is complete. Upon completing its transaction the present bus occupant recognizes that it no longer has priority and surrenders the bus by releasing BUSY*. BUSY* is an active low "OR" tied signal line which goes to every bus arbiter on the system bus. When BUSY* goes inactive (high), the arbiter which presently has bus priority (BPRN* true) then seizes the bus and pulls BUSY* low to keep other arbiters off the bus. Refer to Figure 1-129. Multi-master system bus transactions are synchronized to the bus clock (BCLK). This allows the parallel priority resolving circuits or any other priority resolving scheme to settle. The serial priority resolving technique eliminates the need for the priority encoder-decoder. arrangement by daisy-chaining the bus arbiters together, connecting the higher priority bus arbiter's BPRO* (Bus Priority Out) output to the BPRN* of the next lower priority. (See Figure 1-130). There are two types of processors in the 8086 family - -an I/O processor (the 8089 lOP) and a non-I/O processor (the 8086 and 8088 CPU's). Consequently, there are two basic operating modes in the 8289 Bus Arbiter. One, the I/O Peripheral Bus (lOB) mode, permits the processor access to both an I/O peripheral bus and a multi-master system bus. The second, the Resident Bus (RESB) mode, permits the processor to communicate over both a resident bus and a multi-master system bus. Even though.it is intended for the arbiter to be configured in the lOB mode when interfacing to an I/O processor and for it to be in the RESB mode when interfacing to a non-I/O processor, it is quite possible for the reverse to be true. That is, it is possible for a non-I/O processor to have access to an I/O peripheral bus or for an I/O processor to have access to a resident bus as well as access to a multi-master system bus. The lOB strapping option configures the 8289 Bus Arbiter into the lOB mode and RESB strapping optires it into the resident bus mode. If both strapping options are strapped false, a third mode of operation is created, the single bus mode, in which the arbiter interfaces. the processor to a multi-master system .bus only. See Figure 1-131. With both options strapped true, the arbiter interfaces the processor to a multi-master system bus, a resident bus and an I/O bus. 1.8.4 8259A Programmable Interrupt Controller The 8259A is a programmable interrupt controller (PIC) designed to accommodate the INTA * protocol of maskable hardware interrupts. This component is programmable to operate in both 8080/8085 systems and 8086 systems. The 8259A manages eight levels of interrupts and has built-in features for expansion. The devices are cascadable in master/slave arrangements to allow up to 64 interrupt levels in the system with additional 8259A's. Figures 1-132 and 1-133 are examples of 8259 A's in minimum and maximum mode 8086 systems. The minimum mode configuration (a) shows an 8259A connected to the CPU's multiplexed bus. Configuration (b) illustrates an 8259A connected to a demultiplexed bus system. These interconnects are also applicable to maximum mode systems. The configuration given for a maximum mode system shows a master 8259A on the CPU's multiplexed bus witave 8259A's out on the buffered system bus. This configuration demonstrates several unique features of the maximum mode system interface. If the master 8259A receives interrupts from a mix of slave 8259A's and regular idevices, the slaves must provide the type number for devices connected to them while the master provides the type number for devices directly attached to its interrupt inputs. The master 8259A is programmable to determine if an interrupt is from a direct input or a slave 8259A and will use this information to enable or disable the data bus transceivers (via the NAND function of DEN and EN*). If the master must provide the type number, it will disable the data bus transceivers. If the slave provides the type number, the master will enable the data bus transceivers. The EN* output is normally high to allow the 8086/8288 to control the bus transceivers. To select the proper slave when servicing a slave interrupt, the master must provide a cascade address to the slave. If the 8288 is not strapped in the I/O bus mode (the 8288 lOB input connected to ground), the MCE/PDEN* output becomes a MCE or Master Cascade Enable output. This signal is only active during INTA * cycles (see Figure 1-134) and enables the master 8259A's cascade address onto the 8086's local bus during ALE. This allows the address latches to capture the cascade address with ALE and allows use of the dress bus for selecting the proper slave 8259A. The MCE is gated with LOCK* to minimize local bus contention between the 8086 tri-stating its bus outputs and the cascade address being enabled onto .the bus. The first INTA * bus cycle allows the master to resolve internal priorities and output a cascade address to be transmitted to the slaves on the subsequent INTA* bus cycle. 1-134 210912·001 8086/8088 CPU 74148 PRIORITY ENCODER 74138 3TOB DECODER Figure 1-128 Resolving Technique The following paragraphs provide a more detailed description of interrupt vectoring, the interrupt priority scheme, the edge and level triggering modes and interrupt cascading. For additional information on the 8259A, refer to Intel Application Note AP-59. MCS-86/88 mode of operation to insure correct interrupt vectoring when used in an 8086/8088 system. When programmed in the MCS-86/88 mode, the 8259A should only be used with an MCS-86 or MCS-88 system. In this mode, the 8086/8088 will handle interrupts in the format described in the 8259A - 8086/8088 Overview. INTERRUPT VECTORING Each IR input of the 8259A has an individual interrupt vector address in memory associated with it. Designation of each address depends upon the initial programming of the 8259A. The 8259A must be programmed in the I Upon interrupt in the MCS-86/88 mode, the 8259A will output a single interrupt-vector byte to the data bus. This is in response to only two INTA * pulses issued by the 8086/8088 after the 8259A has raised INT high. 3 HIGHER PRIORITY 8US ARBITER REQUESTS THE MUlTI·MASTER SYSTEM BUS. ATTAINS PRIORITY. LOWER PRIORITY BUS ARBITER RELEASES BUSY. 4 HIGHER PRIORITY BUS ARBITER THEN ACQUIRES THE BUS AND PULLS BUSY DOWN. Figure 1-129 Higher Priority Arbiter Obtaining the Bus from a Lower Priority Arbiter 1-135 210912-001 8086/8088 CPU rupt vector byte are user definable. The lower 3 bits are automatically inserted by the 8259A depending on the IR level. Contents of the interrupt-vector byte for 8086/8088 type selection is put on the data bus during the second INTA * pulse and shown in Figure 1-135. INTERRUPT PRIORITIES CaRQ: A variety of modes and commands are available for controlling the interrupt varieties of the 8259A. All of them are programmable, i.e., they may be changed dynamically under software control. With these modes and commands, many possibilities are conceivable, giving the user enough versatility for almost any interrupt controlled application. : BUSY THE NUMBER OF ARBITERS THAT MAY 8E DAISY·CHAINED TOGETHER IN THE SERIAL PRIORITY RESOLVING SCHEME IS A FUNCTION OF BCLK AND THE PROPA· GATION DELAY FADM ARBITER TO ARBITER. NORMALLY, AT 10 MHz ONLY 3 AR81· TEFl MAY BE DAISY-CHAINED. Figure 1·130 Serial Priority Resolving. Fully Nested Mode The first INTA * pulse is used only for set-up purposes internal to the 8259A. As in the MCS-80/85 mode, this setup includes priority resolution and cascade mode operations which will be covered later. Unlike the MCS-80/85 mode, no CALL opcode is placed on the data bus. The fully nested mode is a general purpose priority mode. This mode supports a multilevel-interrupt structure in which priority order of all eight IR inputs are arranged from highest to lowest. The second INTA * pulse is used to enable the single interrupt-vector byte to select one of 256 interrupt "types" in the 8086/8088 memory. Interrupt type selection for all eight IR levels is made when initially programming the 8259A. However, reference to only one interrupt is needed for programming. The upper 5 bits of the inter- Unless otherwise programmed, the fully nested mode is entered by default upon initialization. At this time, IRO is assigned the highest priority through IR7 the lowest. The fully nested mode, however, is not confined to this IR structure alone. Once past initialization, other IR inputs can be assigned highest priority also, keeping the - _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ XACK MULnM"'$TEA SVSTEM BUS f-"---'" I============v ~~:~:NO MULTJ.MASTHI MULTI·MASTER SYSTEM BUS MULTI·MASTER ~==~~=========:>SVSTEM ." ADDRESS Figure 1·131 Typical Medium Complexity CPU Circuit 1·136 210912-001 8086/8088 CPU 1-----'-----'--'----'--'---.... \ ADDRESS 1J1--------"""----""---.... \ DATA I-__-,____,-~---r,---,;BUS 1\,---------------,/ BUS a. b. Figure 1-132 Min Mode 8086 with Master 8259A on the Local Bus and Slave 8259A's on the System Bus multilevel-interrupt structure of the fully nested mode. Figure 1-136 shows some variations of the priority structures in the fully nested mode. In general, when an interrupt is acknowledged, the highest priority request is determined from the IRR (Interrupt Request Register). The interrupt vector is then placed on the data bus. In addition, the corresponding bit in the ISR (In-Service Register) is set to designate the routine in service. This ISR bit remains set until an EOI (End-Of-Interrupt) command is issued to the 8259A. EOI's will be explained in greater detail shortly. In the fully nested mode, while an ISR bit is set, all further requests of the same or lower priority are inhibited from generating an interrupt to the microprocessor. A higher priority request, though, can generate an interrupt, thus vectoring program execution to its service routine. Interrupts are only acknowledged, however, if the microprocessor has previously executed an"Enable Interrupts" instruction. This is because the interrupt request pin on the microprocessor gets disabled automatically after acknowledgement of any interrupt. The assembly language instruction used to enable interrupts is "ST!". Interrupts can be disable by using the instruction "eLi". When a routine is completed a "return" instruction "IRET" is executed. A single 8259A is essentially always in the fully nested mode unless certain programming conditions disturb it. 1-137 210912-001 8086/8088 CPU ADDRESS r-~-----r------'-r-------'-r------,/BUS I/L---------------"'''---------'''''------...... '\ DATA ~-------------------------------,/BUS Figure 1·133 Max Mode 8086 with Master 8259A on the Local Bus and Slave 8259A's on the System Bus The following programming conditions can cause the 8259A to go out of the high to low priority structure of the fully nested mode. • • The special mask mode • A slave with a master not in the special fully nested mode The automatic Eor mode T, I T2 T3 T.. TI I ------'n'----_ TI T, T, T, A L E J \_ _ _ \1....-_ _ _ _----11 FLOAT Figure 1·134 MCE Timing to Gate 8259A CAS Address onto the 8086 Local Bus 1-138 210912-001 8086/8088 CPU IR 7 6 5 4 3 2 1 a command, it resets the highest priority ISR bit. This confirms to the 8259 A that the highest priority routine of the routines in service is finished. 07 06 05 04 03 02 01 00 T7 T7 T7 T7 T7 T7 T7 T7 T6 T6 T6 T6 T6 T6 T6 T6 T5 T5 T5 T5 T5 T5 T5 T5 T4 T4 T4 T4 T4 14 T4 T4 T3 T3 T3 T3 T3 T3 T3 T3 1 1 1 1 a a a a 1 1 1 a a 1 a a 1 1 1 a a 1 a a b. Specific EOI Command Figure 1-135 Interrupt Vector Byte Additional details on these interrupt modes can be found in Intel Application Note AP-59. These modes are mentioned here so that the designer will be aware of them. As long as these program conditions are not enacted, the fully nested mode remains undisturbed. A specific EOI command is sent from the microprocessor to let the 8259A know when a service routine of a particular interrupt level is completed. Unlike the non-specific EOI command which automatically resets the highest priority ISR bit, a specific EOI command specifies an exact ISR bit to be reset. One of the eight IR levels of the 8259A can be specified in this command. The purpose of the specific EO! command is to reset the ISR bit of a completed service routine whenever the 8259 A cannot automatically determine the completion. End of Interrupt (EOI) c. Automatic EOI Mode Upon completion of an interrupt service the 8259A must be informed so that its ISR can be updated. This is done to keep track of which interrupt levels are in the process of being serviced and their relative priorities. Three different End-Of-Interrupt (EO!) formats are available to the designer. These are: 1) non-specific EO! command; 2) specific EOI command; and, 3) automatic EOI command. Selection of which EOI to use is dependent on the interrupt operation the designer wishes to perform. When programmed in the automatic EOI mode the microprocessor does not need to issue a command to notify the 8259A of a completed interrupt routine. The 8259A accomplishes this by performing a non-specific EOI automatically at the trailing edge of the last INTA * pulse (second pulse). The advantage of automatic EOI over the other EOI commands is that no command has to be issued. This simplifies programming and lowers code requirements within interrupt routines. However, special consideration must be taken when deciding to use the automatic EO! mode because it disturbs the fully nested mode. a. Non-Specific EOI Command The microprocessor sends a non-specific EOI command to let the 8259A know when a service routine has been completed. This command does not specify the the exact interrupt level. The 8259 A automatically determines the interrupt level and resets the correct bit in the ISR. To use the non-specific EO! command the 8259A must be in a mode of operation where it can predetermine in-service routine levels. For this reason the non-specific EOI command should only be used when the most recent level acknowledged and serviced is always the highest priority level. When the 8259A receives a non-specific EO! IR LEVELS rr=IR6 J R5 lR4 IR3_IR2 IR1 IRO PRIORITY 7 ---.L_L_~ __ ~ ___1 0 A IR LEVELS PRIORITY 1R7 IRG IRS IR4 IR3 IR2 IR1 IRO 4. '3 2·' 1 a 7 6 5 IR LEVELS PRIORITY IR7 IRG IRS IR4 IR3 IR2 I 1 IRO 1 ~L_7_6___ 5 _4_3 2 C Figure 1-136 Priority Structure VariationsFully Nested Mode Automatic Rotation - Equal Priority Automatic rotation of priorities is used in applications where interrupting devices are of equal priority, such as communications channels. The concept is that once a peripheral is serviced, all other equal priority peripherals should be given a chance to be serviced before the original peripheral is serviced again. This is accomplished by automatically assigning a peripheral the lowest priority after it has been serviced. Therefore, worst case, the device would have to wait until all other devices have been serviced before being serviced again. There are two methods of accomplishing automatic rotation. One is the "rotate on non-specific EO! command" which is used with the non-specific EOI command. The other is the "rotate in automatic EOI mode" which is used with the automatic EOI mode. a. Rotate On Non-Specific EOI Command When the rotate on non-specific EOI command is issued, the highest ISR bit is reset as in a normal non-specific EO! command. However, after the ISR bit is reset the 1-139 210912'()01 8086/8088 CPU corresponding IR level is assigned the lowest priority. Other IR priorities rotate to confonn to the fully nested mode based on the newly assigned low priority. b. Rotate On Automatic EOI Mode gered mode and the level triggered mode to allow the user the capability of either method. Selection of one of these methods is done during the programmed initialization of the 82S9A. Level Triggered Mode The rotate in automatic EOI mode operates similar to the non-specific EO! command. The main difference is that priority is done automatically after the last INTA * pulse of an interrupt request. Th enter or exit this mode a rotate-in-automatic-EOI set command and a rotate-in-automatic-EOI clear command is provided. After these two commands, no other commands are needed, as in the automatic EOI mode. However, when using any fonn of the automatic EO! mode, special consideration since the guideline for the automatic EO! mode also stands for the rotate in automatic EO! mode. Specific Rotation - Specific Priority The specific rotation mode provides the designer with versatile capabilities in interrupt controlled operations. This priority mode is very useful in applications where a specific device's interrupt priority must be altered. Unlike automatic rotation, which automatically sets priorities, specific rotation is completely user controlled. The user selects which interrupt level is to receive lowest or highest priority. This can be done during the main program or within interrupt routines. Two specific rotation commands are available to the user, the "set priority command" and the "rotate on specific EOI command". a. Set Priority Command The set priority command allows the programmer to assign an IR level to the lowest priority. All other interrupt levels will confonn to the fully nested mode based on the newly assigned low priority. b. Rotate On Specific EOI Command The rotate on specific EOI command is a combination of the set priority and the specific EO! command. As in the set priority command, a specified IR level is assigned lowest priority. As in the specific EOI command, a specified level will be reset in the ISR. Therefore, the rotate on specific EOI command accomplishes both tasks in only one command. When the 82S9A is in the level triggered mode it will recognize any active (high) level on the IR input as an interrupt request. If the IR input remains active after an EOI command has been issued, resetting its ISR bit, another interrupt will be generated. This assumes the processor INT pin is enabled. Unless repetitious interrupt generation is desired, The IR input must be brought to an inactive state before an EOI command is issued in its service routine. However, necessary timing requirements must be obeyed (see Figure 1-137). Note that the request on the IR line must remain until after the falling edge of the first INTA>I< pulse. On any IR input, if the request goes inactive before the first INTA>I< pulse, the 82S9A will respond as if IR7 was active. In any design where there is a possibility of this happening, the IR7 default feature can be used as a safeguard. This can be accomplished by using the IR7 routine as a "cleanup routine" which might check the 82S9A status or merely return program executi to its pre-interrupt location. Edge 1l'lggered Mode In the edge triggered mode the 82S9A will only recognize interrupts if generated by an inactive (low) to active (high) transition on the IR input. The edge triggered mode incorporates an edge lockout method of operation. This means that after the rising edge of an interrupt request and the acknowledge of the request, the positive level of the IR input will not generate further interrupts on this level. The user does not neeto worry about quickly removing the request to avoid generating further interrupts. Before another interrupt can be generated the IR input must return to the inactive state. Timing requirements for the edge triggered mode are shown Figure 1-137. As in the level triggered mode, the request on the IR input must remain active until after the falling edge of the first INTA>I< pulse in the edge triggered mode. Unlike the level triggered mode, after the interrupt request is acknowledged its IRR latch is disarmed. Only after the IR input goes inactive will the IRR latch again become armed making it ready to receive another interrupt request (in the level triggered mode the IR latch is always armed). Note that the IR7 default discussed in the level triggered mode also works in the edge triggered mode. INTERRUPT TRIGGERING INTERRUPT CASCADING There are two basic ways of sensing an active interrupt request. One is a level sensitive input and the other is an edge sensitive input. The 82S9A provides the edge trig- More than one 82S9A can be used to expand the priority interrupt scheme to up to 64 levels without additional 1·140 210912'()01 8086/8088 CPU IR -+-..J INT _ _ _ _ _ INTA--------~------------, LATCH" EARLIEST IR CAN BE REMOVED ARMED LATCH" ARMED "EDGE TRIGGERED MODE ONLY Figure 1·137 IR Triggering Timing Requirements 1-138 shows a typical system containing a master and two slaves, providing 22 interrupt levels. Note that the master is designated by a high on the SP*/EN* pin, while the SP*/EN* pins on the slaves are grounded (this can also be done by software, see the buffered mode). Also the INT output pin of each slave is connected to the an IR input pin on the master. The CASO-2 pins on all 8259A's are paralleled. These pins, which act as outputs when the 8259A is a master and inputs for the slaves, serve as a private 8259A bus. They control which slave has control of the system bus for interrupt vectoring operation with the processor. All other pins are connected as in normal operation (each receives an INTA pulse). hardware. This method for expanded interrupt capability is called cascading. The 8259A supports cascading operations with the cascade mode. Additionally, the specially fully nested mode and the buffered mode are available for increased flexibility when cascading 8259A's under certain applications. Cascade Mode In the cascade mode, basic operation consists of one 8259A acting as a master to the others which are acting as slaves. A specific hardware set-up is required to establish operation in the cascade mode (see Figure 1-138). Figure ADDRESSBUSl161 CONTROL BUS tNT REa \ DATA BUS (81 -- - .- --- -- - -- --+-- - '0 cs • I • f-- t-- r- j - 5 4 5 4 CAS 1 !- CAS2 !- , 2 ,r r ,r r 2 I- , 0 0 r---;, '0 CS INT INTA CASO Jo 1 1 1 r 7 f-- t-- -- - - t- r- DO·' B259A SLAVE A m!1if7 --- t- DO·' 6 5 4 oro r r 1 1 7 • CASO CASO 8259A SLAVE B m!1if 7 cs INT INfA 5 4 I , CAS 1 CAS 1 , CAS 2 2 !!! 0 DO·' 7 [NTA INT B259A MASTER CAS2 mm M7 M6 0 1 '0 I MS M4 M3 M2 Ml MO LL1.1 1 ),11 6 4 1 0 I INTEARUPT AEoueSTS Figure 1·138 Cascaded 8259A's 22 Interrupt Levels 1·141 210912·001 8086/8088 CPU In addition to the hardware set-up requirements, all 8259A's must be software programmed to work in the cascade mode. Programming the cascade mode is done during the initialization of each 8259A. The 8259A that is selected as master must receive specification during its initialization as to which of its IR inputs are connected to a slave's INT pin. Each slave must be designated during its initialization with an ID (0 -7) corresponding to which of the master's IR inputs its INT pin is connected to. This is necessary so the master's CASO-2 pins will be able to address each individual slave. Note that as in normal operation' each 8259A must also be initialized to give its IR inputs a unique interrupt vector. output is enabled, its SP*/EN* pin will go low. This signal can be used to enable data transfer through a buffer transceiver in the required direction. A conceptual diagram of three 8259A's in cascade is show in Figure 1-139. Each slave is controlling an individual 8286 8-bit bidirectional bus driver by means of the buffered mode. Note the pull-up on the SP*/EN* line. This pull-up is used to enable data transfer to the 8259A for its initial programming. When data transfer is to go from the 8259A to the processor, SP*/EN* will go low, otherwise it will be high. 1.8.5 8237A Programmable DMA Controller Specially Fully Nested Mode Depending on the application, changes in the nested structure of the cascade mode may be desired. This is because the nested structure of a slave 8259 A differs from that of the normal fully nested mode. In the cascade mode, if a slave receives a higher priority interrupt request than the one in service (through the same slave), it will not be recognized by the master. This is because the master's ISR bit is set, ignoring all requests of equal or lower priority. In this case, the higher priority slave interrupt will not be serviced until after the master's ISR bit is reset by an EO! command. This will normally be after completion of the lower priority routine. If the user wishes to have a truly fully nested structure within a slave 8259A, the specially fully nested mode should be used. The specially fully nested mode is programmed in the master only. This is done the master's initialization. In this mode the master will ignore only those interrupt requests of lower priority than the set ISR bit and will respond to all requests of equal or higher priority. Therefore, if a slave receives a higher priority request than the one in service, it will be recognized. To ensure proper interrupt operation when using the special fully nested mode, the software must determine if any other slave interrupts are still in service before issuing an EOI command to the master. This done by resetting the appropriate slave ISR bit with an EO! and then reading it's ISR. If the ISR contains all zeros, there aren't any other interrupts from the slave in service and an EOI command can be sent to the master. If the ISR isn't all zeros, an EO! command should not be sent to the master. Clearing the master's ISR bit with an EOI command while there are still slave interrupts in service would allow lower priority interrupts to be recognized at the master. When configured in minimum mode, the 8086 and 8088 provide HOLD (hold) and HLDA (hold acknowledge) signals that are compatible with the 8237 A DMA controller. The 8237 A can request use of the bus for direct transfer of data between an I/O device and memory by activating HOLD. The CPU will complete the current bus cycle, if one is in progress, and the issue HLDA, granting the bus to the DMA controller. The CPU will not attempt to use the bus until HOLD goes inactive. The 8086 addresses memory that is physically organized in two separate banks, one containing even-addressed bytes and one containing odd-addressed bytes. An 8-bit DMA controller must alternately select these banks to access logically adjacent bytes in memory. Used as a maximum mode DMA controller, the 8089 provides a simple way to interface a high-speed 8-bit device to an 8086-based system (refer to Chapter 4). The 8237A Multimode Direct Memory Access (DMA) Controller (see Figure 1-140) is a peripheral interface circuit designed to improve system performance by allowing external devices to directly transfer information from the system memory. Memory-to-memory transfer capability is also provided. The 8237 A offers a wide variety of programmable control features to enhance data throughput and system optimization and to allow dynamic reconfiguration under program control. The 8237 A is designed to be used in conjunction with an external 8-bit address register such as the 8282. It contains four independent channels and may be expanded to any number of channels by cascading additional controller chips. The three basic transfer modes allow programmability of the types of DMA service by the user. Each channel can be individually programmed to Autoinitialize to its original condition following an End of Process (EOP). Buffered Mode DMA OPERATION The buffered mode is useful in large systems where buffering is required on the data bus. Although not limited to cascading, the buffered mode is most pertinent for this use. In the buffered mode, whenever the 8259A's data bus The 8237 A operates in two major cycles, the Idle cycle and the Active cycle. Both device cycles are made up of several states. The 8237 A can assume seven different 1-142 210912-001 8086/8088 CPU SLAVE 8259A MASTER 8259A SLAVE 8259A INT INTR Figure 1-139 Cascade-Buffered Mode Example states, each composed of one or more complete clock cycles. State I (SI) is the inactive state. This state is entered when the 8237A has no valid DMA requests pending. In the SI state, the DMA controller is inactive, but may be in the Program Condition, being programmed by the processor. State SO (SO) is the first state of a DMA service. At this point the 8237A has requested a hold, but the processor has not yet returned an acknowledge. The 8237 may still be programmed until it receives HLDA from the CPU. An acknowledge from the CPU signals that DMA transfers can begin. S 1, S2, S3 and S4 are working the states of the DMA service. If more time is needed to complete a transfer than is available with normal timing, wait states (SW) can be inserted between S2 or S3 and S4 by use of the Ready line on the 8237A. Note that the data transferred directly from the I/O device-to-memory (or visa versa) with IOR* and MEMW* (or MEMR* and IOW*) being active at the same time. The data is not read .". RESET READY CLOCK ••• "DSTB ....... ilili ;ow DREOOOREQ3 HRQ DACKOOACK3 Figure 1-140 8237A DMA Controller Block Diagram 1-143 210912·001 8086/8088 CPU into or driven out of the 8237A in lIO-to-memory or memory-to-llb DMA transfers. Memory-to-memory transfers require a read-from and a write-to-memory to complete each transfer. The states. which resemble the normal working states, use two digit numbers for identification. Eight states are required for a single transfer. The first four states (SII, S12, S13, S14) are used for the read-from-memory half and the last four states (S21, S22, S23, S24) for the write-to-memory half of the transfer. lowing each transfer. When the word count "rolls over" from zero to FFFFH, a Thrminal Count (TC) will cause an Autoinitialization if the channel has been programmed to do so. DREQ must be held active until DACK becomes active in order to be recognized. If DREQ is held active throughout the single transfer, HRQ will go inactive and release the bus to the system. HRQ will again go active and another single transfer will occur upon receipt of a new HLDA. This ensures one full machine cycle execution between DMA transfers. Idle Cycle b. Block Transfer Mode When no channel is requesting service, the 8237A will enter the Idle cycle and perform SI states. In this cycle the 8237A will sample the DREQ lines every clock cycle to determine if any channel is requesting a DMA service. The device will also sample CS*, looking for an attempt by the microprocessor to write or read the internal registers. When CS* is low and HLDA is low, the 8237 A enters the Program condition. The CPU can now establish, change or inspect the internal definition of the part by reading from or writing to the internal registers. Address lines AO-A3 are inputs to the device and select which registers will be read or written. The lOR * and 10W* lines are used to select and time reads or writes. An internal flip-flop is used to generate an additional bit of address due to the number and size of the internal registers. This bit is used to determine the upper or lower byte of the 16-bit Address and Word Count registers. The flip-flop is reset by Master Clear or Reset. A separate software command can also reset this flip-flop. In the Block Transfer Mode the device is activated by DREQ to continue making transfers during service until a TC, caused by word count going to FFFFH, or an external End of Process (EOP*) is encountered. DREQ should be held active until DACK becomes active. Autoinitialization will occur at the end of the service if the channel is preprogrammed for it. Special software commands can be executed by the 8237A in the Program Condition. These commands are decoded as sets of addresses with the CS* and 10W*. The commands do not make use of the data bus. Instructions include Clear First/Last Flip-Flop and Master Clear. c. Demand Transfer Mode In this mode the device is programmed to continue making transfers until a TC of external EOP* is encountered, or until DREQ goes inactive. Therefore, transfers may continue until the lIO device has exhausted its data capacity. After the 1/0 device has had a chance to catch up, the DMA service is re-established by means of a DREQ. During the time between services when the microprocessor is allowed to operate, the intermediate values of address and word count are stored in the 8237A Current Address and Current Word Count registers. Only EOP* can cause an Autoinitialize at the end of the service. EOP* is generated by TC or by an external signal. d. Cascade Mode a. Single Transfer Mode This mode is used to cascade more than one 8237A together for simple system expansion. The HRQ and HLDA signals from the additional 8237A are connected to the DREQ and DACK signals of a channel of the initial 8237A. This allow the DMA requests of the additional device to propagate through the priority network circuits of the preceding device. The priority chain is preserved and the new device must wait for its turn to acknowledge requests. Since the cascade channel of the initial 8237 A is used only for prioritizing the additional device, it does not output any address or control signals of its own. The 8237A will respond to DREQ and DACK but all other outputs except HRQ will be disabled. In the Single Transfer mode the 8237 A is programmed to make one transfer only. The word count will be decremented and the address decremented of incremented fol- Two additional 8237A devices cascaded into an initial device using two of the previous channels are shown in Figure F14L This forms a two level DMA system. More Active Cycle When the 8237A is in the Idle cycle and a non-masked channel requests a DMA service, the device will output an HRQ to the microprocessor and enter the Active cycle. In this cycle the DMA service will take place. The DMA service takes place in one of four modes: 1) single transfer mode; 2) block transfer mode; 3) demand transfer mode; and 4) cascade mode. 1-144 210912-001 8086/8088 CPU Temporary register to memory using the address in its Current Address register and incrementing or decrementing it in the normal manner. The channel 1 Current Count is decremented. When the word count of the channel goes to FFFFH, a TC is generated causing an EOP* output terminating the service. To allow a single word to be written to a block of memory Channel 0 may be programmed to retain the same address for all transfers. 2ND LEVEL 8237A 1ST lEVEL MICROPROCESSOR 1f----- HRQ DREQ 1- HRa DACK I--- HL.DA I-- HRa DREa ~ HlDA DACK HlDA 8237A INITIAL DEVICE The 8237 A will respond to external EOP* signals during memory-to-memory transfers. Data comparators in block schemes may use this input to terminate the service when a match is found. Memory-to-memory operations can be detected as an active AEN with no DACK outputs. 8237A ADDITIONAL DMA REGISTERS DEVICES Figure 1-141 Cascaded 8237As 8237As could be added at the second level by using the remaining channels of the first level. Additional devices can also be added by cascading into the channels of the second level devices, forming a third level. The 8237A contains 344 bits of internal memory in the form of registers. Table 1-44 lists the registers by name and shows the size of each. The following paragraphs provide a detailed description of each register and their functions. Current Address Register TRANSFER TYPES Each of the three active transfer modes can perform three different types of transfers. These are Read, Write, and Verify. Write transfers move data from an 110 device to the memory by activating MEMW* and lOR *. Read transfers move data from memory to an 110 device by activating MEMR * and 10W*. Verify transfers are pseudo transfers. The 8237 A operates as in Read or Write transfers generating addresses, and responding to EOp, however, the memory and 1/0 control lines all remain inactive. Verify mode is not permitted during memory to memory operation. Each channel has a 16-bit Current Address register. This register holds the value of the address used during DMA transfers. The address is automatically incremented or decremented after each transfer and the intermediate values of the address are stored in the Current Address register during the transfer. This register is written or read by the microprocessor in successive 8-bit bytes. The register may also be reinitialized back to its original value by an :Autoinitialize. Autoinitialize takes place after EOP*. Current Word Register Memory-to-Memory Transfers The 8237A includes a memory-to-memory transfer feature to perform block moves of data from one memory address space to another with a minimum of program space and effort. (See Figure 1-142 for timing.) Channels o and 1 are selected to operate in the memory-to-memory mode by programming a bit in the Command register. A transfer is initiated by setting the software DREQ for channel O. The 8237A requests a DMA service in the normal manner. After HLDA is true, the device reads data from the memory using eight-state transfers in the Block Transfer mode. The channel 0 Current Address register is the source for the address used and is decremented or incremented in the normal manner. The data byte read from the memory is stored in the 8237A internal Temporary register. Channel 1 then writes the data from the Each channel has a 16-bit Current Word Register. This register determines the number of transfers to be performed. The actual number of transfers will be one more than the number programmed in the Current Word register (programming a count of 100 will result in 101 transfers, etc.). The word count is decremented after each transfer. The immediate value of the word count is stored in the register during the transfer. When the value in the register goes from zero to FFFFH, a TC will be generated. This register is loaded or read in successive 8-bit bytes by the microprocessor in the Program Condition. Following the end of a DMA service it may also be reinitilized by an Autoinitialization back to its original value. Autoinitialize can occur only when EOP* occurs. If it is not Autoinitialized, this register will have a count of FFFFH after TC. 1-145 210912-001 8086/8088 CPU ADSTB AO-A7 080-oB7 MEMW EOP ----------t--W -------------+----------------------------~----------+_~I Figure 1-142 Memory-To-Memory Transfer Timing Base Address and Base Word Count Registers Each channel has a pair of Base Address and Base Word Count Registers. These 16-bit registers store the original value of their associated current registers. During Autoinitialize these values are used to restore the current registers to their original values. The base registers are Table 1-44 8237A Internal Registers Ne_ Sin Number Base Address Aeglsters Base Word Count Aeglsters Current Address Registers Current Word Count Aeglsters Temporary Address Aeglster Temporary Word Count Aeglster Stetul Aeglster Command Register Temporary Register Mode Registers Mask Aeglster Aequest Register 16 bits 16blts 16 bits 16 bits 16 bits 16 bits 8blts 8 bits 8 bits 6 bits 4 bits 4 bits 4 4 4 4 1 1 1 1 1 4 1 1 written simultaneously with their corresponding current register in 8-bit bytes in the Program Condition by the microprocessor. These registers cannot be read by the microprocessor. Command Register The 8-bit Command register controls the operation of the 8237A (see Figure 1-143). This register is programmed by the microprocessor in the Program Condition and is cleared by Reset or a Master Clear instruction. Figure 1-143 lists the function of each of the command bits. Figure 1-144 shows the address coding. Mode Register Each channel has a 6-bit Mode register associated with it (see Figure 1-145). When the register is being written to 1-146 210912-001 8086/8088 CPU 7 o 1 o 6 l Memory-ta-memory disable Memory-la-memory enable 5 4 3 2 1 ~ 0 T-LfOO ,... ~ o X L _ _ _ _-I 0 1 o '-------1 Normal1lming Compressed liming 11 bit 0 ... 1 Fixed priority Rotating priority Late write selection Extended write selection If bit 3= 1 o.~ 01 Channel 1 select 10 Cha"el 2 s.'ec, 11 Channel 3 select Channel 0 address hold disable Channel 0 address hold enable If bit 0=0 Controller enable Controller disable L----I 1 Bit Number I I I I I I I 00 01 10 11 XX Verdy transfer Write transfer Read transfer lIIegal If bits 6 and 7 = 11 o Autoinitialization disable 1 Autoinitialization enable o 1 Address increment select Address decrement select ( 00 Demand mode select L_ _ _ _ _ _ _-{ 01 Single mode select '0 Block mode select 11 Cascade mode select l DREQ sense active high DAEQ sense active low Figure 1·145 Mode Register Figure 1·143 Command Register by the microprocessor in the Program condition, bits 0 and 1 determine which channel Mode register is to be written. Request Register The 8237A can respond to requests for DMA service which are initiated by software as well as by a DREQ. Each channel has a request bit associated with it in the 4-bit Request register (see Figure 1-146). These are non-maskable and subject to prioritization by the Priority Encoder network. Each register bit is set or reset separately under software control or is cleared upon generation of a TC or external EOP*. The entire register is cleared by a Reset. To set or reset a bit, the software loads the proper form of the word. See Table 1-45 for register address coding. In order to make a software request, the channel must be in Block Mode. Mask Register Each channel has a mask bit (see Figure 1-147) which can be set to disable the incoming DREQ. Each mask bit is set when its associated channel produces an EOP* if the channel is not programmed for Autoinitialize. Each bit of the 4-bit Mask register (see Figure 1-148) may also be set or cleared separately under software control. The entire register is also set by a Reset. This disables all DMA requests until a clear Mask register instruction allows A2 At AO lOR Operation lOW Register Read Status Register Write Command Register Illegal Signals Operation Command Mode Request Mask Mask Temporary Status Signals A3 Table 1·45 Definition of Register Codes CS lOR lOW A3 A2 AI AO 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 0 1 0 1 1 0 0 0 1 1 0 1 1 0 Write Write Write Set/Reset Write Read Read 1 1 1 1 0 0 Write Request Register Illegal Wnte Single Mask RegISter 811 Illegal 7 Write Mode Register 6 5 4 3 2 1 0 ....-Bit Number I I I I I I I I I Illegal -..Don't Care Clear Byte POinter Flip i Flop Read Temporary Register Master Clear Illegal ~ 00 Select channel 0 01 Select channel 1 10 Select channel 2 11 Select channel 3 Reset request bit Set requesl bit Clear Mask Register Illegal Write All Mask Register Bits Figure 1·144 Software Command Codes Figure 1·146 Request Register 1-147 210912-001 8086/8088 CPU 7 6 5 4 3 2 1 0_ -..-- L{ Bit Number I I I I I I I I I Don't Care 00 01 10 11 Select Select Select Select channel channel channel channel 0 mask 1 mask 2 mask 3 mask bit bit bit bit Clear mask bit Set mask bit Temporary Register Figure 1·147 Mask Bits o 1 ing DMA requests. Bits 0-3 are set every time a TC is reached by that channel or an external EOP* is applied. These bits are cleared upon Reset and on each Status Read. Bits 4-7 are set whenever their corresponding channel is requesting service. Clear channel 0 mask bit Set channel 0 mask bIt The Temporary register is used to hold data during memory-to-memory transfers. Following the completion of the transfers, the last word moved can be read by the microprocessor in the Program Condition. The Temporary register always contains the last byte transferred in the last memory·to-memory operation, unless cleared by a Reset. Clear channel 1 mask bit Set channel 1 mask bit a 1 Clear channel 2 mask bit Set channel 2 mask bit Figure 1·148 Mask Register them to occur. The instruction to separately set or clear the mask bits is similar in form to that used with the Request register. See Thble 1-45 for instruction addressing. Software Commands The software commands are additional special software commands which can be executed in the Program Condition (see Figure 1-144). The commands do not depend on any specific bit pattern on the data bus. The software command are Clear First/Last Flip-Flop, Master Clear and Clear Mask Register. Figure 1-144 lists the address codes for the software commands. a. Clear First/Last Flip/Flop Status Register The Status register (see Figure 1-149) is available to be read out of the 8237 A by the microprocessor. This register contains information about the status of the devices at this point. This information includes which channels have reached a terminal count and which channels have pend- This command is executed prior to writing or reading new address or word count information to the 8237 A. This initializes the flip-flop to a known state so that subsequent accesses to register contents by the microprocessor will address upper and lower bytes in the correct sequence. b. Master Clear 1 1 L~======= 1 Channel Channel Channel Channel 0 has 1 has 2 has 3 has reached reached reached reached TC TC TC TC This software instruction has the same effect as the hardware Reset. The Command, Status, Request, Temporary, and Internal First/Last Flip-Flop registers are cleared and the Mask register is set. The 8237 A will enter the Idle cycle. Channel 0 request Channell request Channel 2 request Channel 3 request Figure 1·149 Status Register c. Clear Mask Register This command clears the mask bits of all four channels, enabling them to accept DMA requests. 1-148 210912·001 80186180188 CPU 2 CHAPTER 2 80186/80188 CPU In addition, the 80186 may be interfaced to the 8087 Numeric Data Co-Processor to make use of the "number crunching" capabilities of that device. 2.1 INTRODUCTION-THE HIGH INTEGRATION CONCEPT This chapter presents hardware design data for the 80186/ 80188 CPU's and describes the features that distinguish them from the 8086/8088. The 80186/80188 are upward compatible from the 8086/8088. In compatible modes of operation the 80186/188 operate virtually the same as the 8086/88. This chapter also describes the use of the 80186/ 188 with various input/output peripheral and memory devices. As the reader will discover, the integrated devices of the iAPX186 (a DMA unit, timer, interrupt controller, bus controller, chip select logic, and ready generation logic all integrated onto the chip) greatly simplify system configuration. 2.2.1 Architectural Overview The 80186/188 device architecture consists of the same Bus Interface Unit (BIU) and Execution Unit (EU) as the 8086188 (see Figure 2-1). The 80186 and 80188 CPUs have the same basic register set, memory organization, and addressing modes as the 8086 and 8088. The differences between the 80186 and 80188 are the same as the differences between the 8086 and 8088: the 80186 has a 16-bit architecture and a 16-bit bus interface; the 80188 has a 16-bit internal architecture, but an 8-bit data bus interface; the 80186 has a 6-byte prefetch queue and the 80188 has a 4-byte prefetch queue. The execution times of the two processors differ accordingly. For each nonimmediate 16-bit read/write instruction, 4 additional clock cycles are required by the 80188. In addition, the 801861188 contain a programmable interrupt controller, three 16-bit programmable timers, a chip select unit, and a two channel programmable direct memory access (DMA) unit. The iAPX86/88 family consists of two devices: the 80186 processor with a 16-bit external bus and the 80188 processor with an 8-bit external bus. Internally, both devices use the same processor with the same integrated components. Except where noted, all references to the 80186 in this chapter apply equally to the 80188. Also, all parametric values in this chapter are from the iAPX186 Advance Information Data Sheet and pertain to 8 MHz devices. 2.2 COMPONENT OVERVIEW EXECUTION UNIT AND BUS INTERFACE UNIT The 80186 and 80188 microprocessors each contain a number of the most common iAPX system components integrated onto a single chip (see Figure 2-1). These onboard devices include: As in the 8086/88, the EU is responsible for the execution of all instructions, for providing data and addresses to the BIU, and for manipulating the general registers and the flag register. Except for a few control pins, the EU is completely isolated from the "outside" world. The BIU executes all external bus cycles and consists of the segment and communications registers, the instruction pointer and the instruction object code queue. The BIU combines segment and offset values in its dedicated hardware adder to derive 20-bit addresses, transfers data to and from the EU on the Arithmetic Logic Unit (ALU) data bus and loads "pre-fetched" instructions into the queue from which they are fetched by the EU. • Clock generator • Two, independent, high speed DMA channels • Programmable Interrupt Controller • • Three programmable 16-bit timers Programmable memory and peripheral chip select logic • Programmable wait state generator • Local bus controller. When the EU is ready to execute an instruction, it fetches the instruction object code byte from the BIU's instruction queue and then executes the instruction. If the queue is empty when the EU is ready to fetch an instruction byte, the EU waits for the instruction byte to be fetched. If a memory location or I/O port must be accessed during instruction execution, the EU requests the BIU to perform the required bus cycle. This high scale integration doubles the throughput of the standard 5 MHz 8086. The 80186/88 instruction set is completely upward compatible with iAPX86 object code and contains only ten new instructions in addition to the complete 8086 instruction set. Device compatibility extends to 8086 bus support components that include: • 8282 and 8283 Octal Latches • 8286 and 8287 Bus Transceivers • 8288 Bus Controller for the iAPX86/88 • 8289 Bus Arbiter The two processing sections of the CPU operate independently. In the 80186 CPU, when two or more bytes of the 6-byte instruction queue are empty and the EU does not 2-1 210912-001 80186/80188 CPU INT3I1NTA1 INT2/INTAO CLKOUT Vee GND !! rO~ I x,I TMR IN 1t ExEcUTIONUNIT] x, ALU GENERATOR '.-BIT INTERRUPT I REGISTER A CONTROL REGISTERS I R~~~::S t MAX COUNT CONTROLLER I GENERAL It ~:~I~~t:J ~ PROGRAMMABLE I I CLOCK TMR IN PROGRAMMABLE TIMERS a , 2 I I l6-BIT t TMR OUT 1 TMR OUT 0 INTl CONTROL REGISTERS '--..,.---I.--.J I I 16-BIT COUNT REGISTER {'t {( INTERNAL BUS .-------+-OROO ORO' u '"""'PRD=G:;;R:-:A::M::M:-:A~BL:-;E~ CHIP-SELECT UNIT 20-BIT SOURCE POINTERS J aDMAUNIT, SO-S2 SROY-+ AROY-+ BUS INTERFACE UNIT Tm-+ HOLO-+ H:;:=+ 16-BIT SEGMENT REGISTERS PROGRAMMABLE' 6-BYTE CONTROL REGISTERS PREFETCH ---l-L IlL HI--------1 uh 1 RESET_ QUEUE I .loft. LOCK ~ WR BHElS7 DTIII A ,6/53- AOO- AD15 r-r- ~ ~ DES~N~~ION POINTERS I Il la-BIT TRANSFER COUNT CONTROL REGISTERS L kS6/A2 LCS PCSSlA1 A191S6 INT3/INTAl INT2IiN'fAO CLKOUT Vee GHD !! rO~ Jx, jx, ExEcUTIONuNrr] CLOCK GENERATOR l6·BIT GENERAL PURPOSE REGISTERS 'r {( ~ ~ TMR IN 1t INITa It , MAX COUNT PROGRAMMABLE INTERRUPT CONTROLLER REGISTER B t 2 f..."'" _~~ MAX COUNT REGISTER A CONTROL REGISTERS CONTROL REGISTERS --.J II 16-BIT COUNT REGISTER {( INTERNAL BUS r- .------+-OROO ORO' u U ,> TMR IN PROGRAMMABLE TIMERS a I I I I I I I 16-BIT ALU ·r t TMR OUT 1 TMR OUT 0 INn NTI ~ PROGRAMMABLE OMAUNIT a SO-S2 ;=: BUS INTERFACE UNIT HOLD-~ H::,::f. RESET .... I .lot. LOCK DTIR 16-81T SEGMENT REGISTERS 4-BYTE PREFETCH QUEUE RD ADO- A8- A015 A 15 ~ DES~:l~ION POINTERS 16-8IT TRANSFER COUNT REGISTERS tU.iH!- BHEJS7 I LLL 11 I~ 1 L ks.,A2 PROGRAMMABLE CONTROL LCS , 2O-81T SOURCE POINTERS CHIP-SELECT UNIT SROY--+ CONTROL REGISTERS PCS5.'A1 Meso-a Figure 2-1 80186/80188 Functional Block Diagrams 2-2 210912-001 80186/80188 CPU require the BIU to perform a bus cycle, the BIU executes instruction fetch cycles to refill the queue. In the 80188 CPU, when one byte of the 4-byte instruction queue is empty, the BIU executes an instruction fetch cycle. Note that since the 80186 CPU has a 16-bit data bus, it can access two instruction object code bytes in a single bus cycle. The 80188 CPU, since it has an 8-bit data bus, can access only one instruction object code byte per bus cycle. If the EU issues a request for bus access while the BIU is in the process of an instruction fetch bus cycle, the BIU completes the cycle before honoring the EU's request. programmable number of CPU clocks, to give a count pulse to either or both of the other two timers after a programmable number of CPU clocks, or to give a DMA request pulse to the integrated DMA unit after a programmable number of CPU clocks. CHIP SELECT AND READY GENERATION UNIT The 80186 integrated chip select logic is used to enable memory or peripheral devices. Memory addressing uses six output lines and peripheral addressing uses seven output lines. The memory chip select lines are split into 3 groups in order to separately address the three major memory areas in a typical 80186 system. These major memory areas are upper memory for reset ROM, lower memory for interrupt vectors and mid-range memory for programs. The size of each of these areas is user programmable. The starting location of lower memory is OOOOOH and the ending location for upper memory is FFFFFH. Starting and ending locations for mid-range memory is user programmable. CLOCK GENERATOR The 80186/188 integrated circuits include a clock generator and crystal oscillator. The crystal oscillator can be used with a parallel resonant, fundamental mode crystal at 2X the desired CPU clock speed (i.e., 16 MHz for an 8 MHz 80186), or with an external oscillator also at 2X the CPU clock. The output of the oscillator is internally divided by two to provide the 50% duty cycle CPU clock that initiates all 80186 system timing. The CPU clock is externally available, and all timing parameters are referenced to this externally available signal. The clock generator also provides ready synchronization for the processor. The seven peripheral select lines each address one of seven contiguous 128 byte blocks above a user programmable base address. The base address for each of these blocks can be located in either memory or 110 space so that the peripheral devices may be either memory or I/O mapped. PROGRAMMABLE INTERRUPT CONTROLLER Each of the programmed chip select areas has a set of programmable ready bits. These ready bits control an integrated wait state generator. This allows a programmable number of wait states (from 0 to 3) to be inserted whenever an access is made to the area of memory associated with the chip select area. Each set of ready bits also contains a bit which determines whether the external ready signals (ARDY and SRDY) will be used or ignored (i.e., a bus cycle will terminate even though a ready has not been returned on the external pins). A total of 5 sets of ready bits allow independent ready generation for each of upper memory, lower memory, mid-range memory, peripheral devices 0-3 and peripheral devices 4-6. The integrated 80186 interrupt controller arbitrates interrupt requests between all internal and external sources. The integrated interrupt controller has two major modes of operation, non-iRMXTM 86 mode (called master mode) and iRMX 86 mode. In the master mode, the integrated controller acts as the master interrupt controller for the system. It can be directly cascaded as the master system interrupt controller for up to two slave external 8259A interrupt controllers to allow up to 128 interrupts. In the iRMX 86 mode the integrated interrupt controller can be configured as a slave controller to an external master system interrupt controller. This provides complete compatibility with an 80130, 80150, and the iRMX 86 operating system. Some of the interrupt controller registers and interrupt controller pins change definition between the two modes, but the basic function of the integrated interrupt controller remains basically the same. PROGRAMMABLE DIRECT MEMORY ACCESS UNIT The 801861188 contain an integrated programmable Direct Memory Access (DMA) Unit which contains two high speed DMA channels. This DMA unit performs transfers to or from any combination of 110 space and memory space in either byte or word units. Each DMA cycle requires from two to four bus cycles: one or two cycles to fetch the data to an internal register; and one or two cycles to deposit the data. This operation allows word data to be located on odd boundaries, or byte data to be moved from odd locations to even locations. (Locating word data on odd boundaries and moving bytes from odd PROGRAMMABLE TIMERS The integrated timer unit contains three independent programmable 16-bit timer/counters. Two of these timers can be used to count external events, to provide waveforms derived from either the CPU clock or an external clock of any duty cycle, or to interrupt the CPU after a specified number of timer "events". The third timer counts only CPU clocks and can be used to interrupt the CPU after a 2-3 210912·001 80186/80188 CPU to even locations is normally difficult, since odd bytes are transferred on the upper 8 data bits of the 16-bit data bus, while even data bytes are transferred on the lower 8 data bits of the data bus.) tion of new instructions designed to improve the existing code, or to produce optimum 80186/188 code. Increased integration simplifies system construction, which results in lower part count, therefore, a substantial reduction in system cost for the user. Each DMA channel maintains a set of independent 20-bit source and destination pointers which are used to access the source and destination of the data transferred. Each of these pointers may independently address either I/O or memory space. After each DMA cycle, the pointers may be independently incremented, decremented, or maintained constant. Each DMA channel also keeps a transfer count which may be used to terminate a series of DMA transfers after a pre-programmed number of transfers. The 80186/188 have the same basic instruction set, memory organization, and addressing modes as the 8086/88. The differences between the 80186 and 80188 are the same as the differences between the 8086 and 8088: the 80186 has a 16-bit architecture and a 16-bit bus interface; the 80188 has a 16-bit internal architecture, but an 8-bit data bus interface. The instruction execution times of the two processors differ accordingly. For each nonimmediate 16-bit data read/write instruction four additional clock cycles are required for the 80188. INTERNAL PERIPHERAL INTERFACE CPU Execution Speed The 80186 CPU uses 16-bit registers, contained within an internal 256-byte control block, to control all integrated peripherals. This control block may be mapped into either memory or I/O space. Internal logic recognizes the address and responds to the bus cycle. During bus cycles to the internal registers, the bus controller signals the operation externally (i.e., the RD*, WR * status, address, data, etc., lines will be driven as in a normal bus cycle), and ignores D15-0, SRDY and ARDY. The base address of the control block must be on an even 256-byte boundary (i.e., the lower 8 bits of the base address are all zeros). The 80186 CPU may read from or write to all of the defined registers within this control block at any time. The current base address of the control block determines the location of any register contained within the 256-byte control block. Refer to Volume I of this manual for a description of control block programming. Because of 80186/188 hardware enhancements in both the bus interface unit and the execution unit, most instructions require fewer clock cycles to execute than on the 8086/88. Execution speed is gained by performing the effective address calculations (base + displacement + index) with a dedicated hardware adder, which takes only 4 clock cycles in the 80186/188 bus interface unit, rather than with a microcode routine (used by the 8086/88). This results in an execution speed which is three to six times faster than the 8 MHz 8086/88. In addition, the execution speed of specific instructions has been enhanced. All multiple-bit shift and rotate instructions execute 1.5 to 2.5 times faster than the 8 MHz 8086/88. Multiply and divide instructions execute three times faster. String move instructions run at bus bandwidth (i.e., data is transferred onto the bus in each consecutive CPU clock cycle), allowing transfers at 2 Megabytes per second (80186),and 1 Megabyte per second (80188), which is about twice the speed of the 8 MHz 8086 or 8088, respectively. Overall, the 80186/188 CPU's are 30-percent faster than the 8 MHz 8086/88 CPU's, and 50-percent faster than the 5 MHz 8086/88 CPU's. The integrated iAPX 80186 peripherals operate semiautonomously from the CPU. Access to them is, for the most part, through software read/write of the control and data locations in the control block. Most of these registers can be both read from and written to. A few dedicated lines, such as interrupts and DMA requests, provide realtime communication between the CPU and peripherals similar to the more conventional system that uses discrete peripheral blocks. The overall interaction and function of the peripheral blocks has not substantially changed. 2.2.2 Software Overview The following paragraphs describe the functions of the new instructions and interrupts provided by the 80186/ 80188 CPU's. A description of the overall instruction set by category is also provided. In addition, a complete instruction set summary is provided in tabular form which recaps each device instruction by category, and provides timing cycles for each instruction. CPU ENHANCEMENTS The 80186 and 80188 are highly integrated microprocessors. They effectively combine 15 to 20 of the most common iAPX86 system components on a single chip (see Figure 2-1). The 80186 and 80188 provide higher performance and more highly integrated solutions to the total system problem of the microprocessor user. The higher performance results from the enhancements made to both the general and specific areas of CPU operation. These include faster effective address calculation, improvements in the execution speed of many instructions, and the addi- NEW 80186/80188 INSTRUCTIONS The 80186/188 CPU's add ten new instructions to those in the basic 8086/88 instruction set. These instructions are 2-4 210912-001 80186/80188 CPU only a single bit shift can be performed, or a multiple shift can be performed where the number of bits to be shifted is specified in the CL register. designed to simplify assembly language programming, enhance the performance of high-level language implementations, and reduce the size of object code for the 80186/188. The new instructions appear shaded in the instructions set summary at the back of the 80186 data sheet. The following paragraphs explain the operation of these new instructions. In order to use these new instructions with the 8086/80186 assembler, the "$modI86" switch must be given to the assembler. This can be done by placing the line: "$modI86" at the beginning of the assembly language file. All of the shift/rotate instructions of the 80186 allow the number of bits shifted to be specified by an immediate value. Like all multiple bit shift operations performed by the 80186, the number of bits shifted is the number of bits specified modulus 32 (i.e., the maximum number of bits shifted by the 80186 multiple bit shifts is 31). Push Immediate (PUSHI) Instruction These instructions require two operands: the operand to be shifted (which may be a register or a memory location specified by any of the 80186 addressing modes) and the number of bits to be shifted. The PUSHI instruction allows immediate data to be pushed onto the processor stack. This data can be either an immediate byte (sign extended 8-bit value) or an immediate word (16-bit value). If the data is a byte, it will be sign extended to a word before it is pushed onto the stack (since all track operations are word operations). Block Input/Output (INS/OUTS) Instructions The two new 80186 input/output instructions (INS and OUTS) perform block input or output operations similar to the string move instructions of the processor. Push All/Pop All (PUSHA, POPA) Instructions The INS instruction performs block input from an 110 port to memory. The 110 address is specified by the DX register and the memory location is pointed to by the DI register. After the operation is performed, the DI register is adjusted by 1 (if a byte input is specified) or by 2 (if a word input is specified). The adjustment is either an increment or a decrement, as determined by the Direction bit in the flag register of the processor. The ES segment register is used for memory addressing, and cannot be overridden. When preceeded by a Repeat (REP) prefix, this instruction allows blocks of data to be moved from an 110 address to a block of memory. The 110 address in the DX register is not modified by this operation. These two instructions allow all of the eight of the 80186 general purpose registers to be saved onto the stack, or restored from the stack. The registers saved by this instruction (in the order they are pushed onto the stack) are AX, CX, DX, BX, SP, BP, SI and DI. The SP value pushed onto the stack is the value of the register before the first PUSH (AX) is performed; the value popped for the SP register is ignored. PUSHA and POPA do not save any of the segment registers (CS, DS, SS, ES), the instruction pointer (IP), the flag register, or any of the integrated peripheral registers. The OUTS instruction performs block output from memory to an 110 port. The 110 address is specified by the DX register and the memory location is pointed to by the SI register. After the operation is performed, the SI register is adjusted by 1 (if a byte output is specified) or by 2 (if a word output is specified). The adjustment is either an increment or a decrement, as determined by the Direction bit in the flag register of the processor. The DS segment register is used for memory addressing, but can be overridden by using the segment override prefix. When preceeded by a Repeat (REP) prefix, this instruction allows blocks of data to be moved from a block of memory to an 110 address. The 110 address in the DX register is not modified by this operation. Integer Immediate Multiply (IMUL) The IMUL instruction allows a value to be multiplied by an immediate value. The result of this operation is 16 bits long. One operand for this instruction is obtained using one of the 80186 addressing modes (meaning it can be in a register or in memory). The immediate value can be either a byte or a word, but will be sign extended if it is a byte. The 16-bit result of the multiplication can be placed in any of the 80186 general purpose or pointer registers. IMUL requires three operands: the register in which the result is to be placed, the immediate, and the second operand. The second operand can be any of the 80186 general purpose register or a specified memory location. Like the string move instructions, these two instructions require two operands to specify whether word or byte operations are to take place. Additionally, this determination can be supplied by the mnemonic itself by adding a "B" or "W" to the basic mnemonic. For example: Shifts/Rotates By An Immediate Value The 80186 can perform multiple bit shifts or rotates where the number of bits to be shifted is specified by an immediate value. This is different from the 8086, where INSB REPOUTSW 2-5 ;perform byte input ;perform word block output 210912-001 80186/80188 CPU Array Sounds (SOUND) Instruction struction, this involves only moving the contents of the BP register to the SP register, and popping the old BP value from the stack. The 80186 supplies the BOUND instruction to facilitate bound checking of arrays. In this instruction, the calculated index into the arrays is placed in one of the general purpose registers of the 80186. Located in two adjacent word memory locations are the lower and upper bounds for the array index. The BOUND instruction compares the register contents to the memory locations, and if the value in the register is not between the values in the memory locations, an interrupt type 5 is generated. The comparisons performed are SIGNED comparisons. A register value equal to the upper bound or the lower bound will not cause an interrupt. This instruction requires two arguments: the register in which the calculated array index is placed, and the word memory location which contains the lower bound of the array which can be specified by any of the 80186 memory addressing modes). The location containing the upper bound of the array must follow immediately the memory location containing the lower bound of the array. Neither the ENTER nor the LEAVE instructions save any of the 80186 general purpose registers. If they must be saved, this must be done in addition to the ENTER and the LEAVE. In addition, the LEAVE instruction does not perform a return from a subroutine. If this is desired, the LEAVE instruction must be explicitly followed by the RET instruction. ADDITIONAL INTERRUPTS The 80186/80188 include two additional interrupts to detect program execution errors and escape opcodes. These two new interrupts are the Unused Opcode and Escape Opcode. The following paragraphs describe these new interrupts. Unused Opcode ENTER And LEAVE Instructions When opcodes OFH, 63H -67H, FIH and FFFFH are executed an interrupt type 6 is generated. This interrupt is useful in detecting programs errors (e.g., the execution of data), and provides a set of opcodes which the user may define for specific purposes, emulating the action of the instruction in software. The 80186 contains two instructions which are used to build and tear down stack frames of the higher level, block structured languages. The instruction used to build these stack frames is the ENTER instruction. The algorithm for this instruction is: PUSH BP /*save the previous frame Escape Opcode pointer*/ if level=O then BP:=SP; else templ: =S P; I*save current frame pointer*/ temp2:=level-l; do while temp2>O I*copy down previous level BP: =BP-2 ; PUSH [BP]; BP:=templ; PUSH BP; The 801861188 CPU's may be programmed to cause an interrupt type 7 when an escape opcode (D8H-DFH) is encountered. This provides a straightfoward method of giving instructions to coprocessors, e.g., the 8087. The programming is done by a bit in the relocation register. It is programmed not to cause a interrupt on reset. frame*/ l*pointers*1 I*put current level frame pointer*1 80186/80188 INSTRUCTION SET /*create space on the stack for*1 The 80186 and 80188 execute exactly the same instructions. This instruction set includes equivalents to the instructions typically found in previous microprocessors, such as the 8080/8085. Significant new operations include: I*in the save area*1 SP:=SP-disp; I*local variables*! Figure 2-2 shows the layout of the stack before and after this operation. This instruction requires two operands. The first value (disp) specifies the number of bytes the local variables of this routine require. This is an unsigned value and can be as large as 65536. The second value (level) is an unsigned value which specifies the level of the procedure and can be as great as 255. The 80186 includes the LEAVE instructions to tear down stack frames built by the ENTER instruction. As can be seen from the layout of the stack left by the ENTER in- • Multiplication and division of signed and unsigned binary numbers as well as unpacked decimal numbers, • move, scan and compare operations for strings up to 64k bytes in length, • non-destructive bit testing, • byte translation from one code to another, • software generated interrupts, • a group of instructions that can help coordinate the activities of multiprocessing systems. 2-6 210912-001 80186/80188 CPU ? t BEFORE BP ~ SP -----.~------__--~ AFTER BP - OLDBP 1- .....- - - - - 1 OLD FRAME PTRS. CURRENT FRAME PTR - LOCAL VARIABLE AREA SP _~------------~ Figure 2-2 ENTER Instruction Stack Frame In addition to these improvements, the 80186/80188 CPU's provide ten new instructions that are used to streamline existing code and produce optimum new iAPX 186 code (refer to the paragraphs on "NEW 80186/80188 INSTRUCTIONS" in paragraph 2.2.2). encoded in the instruction. To increment a register, however, does not require as much information, so the instruction can be shorter. The 80186/188 have eight different machine-level instructions that increment a different 16-bit register. Each of these instructions are only one byte long. The 80186/80188 instructions treat different types of operands uniformly. Nearly every instruction can operate on either byte or word data. Register, memory, and immediate operands may be specified interchangeably in most instructions. The exception is that immediate values serve as source and not destination operands. In particular, memory variables may be added to, subtracted from, shifted, compared, and so on, in place, without moving them in and out of registers. This saves instructions, registers, and execution time in assembly language programs. In high-level languages, where most variables are memory based, compilers can produce faster and shorter object programs. The 801861188 instruction set is divided into seven functional groups. These are data transfer, arithmetic, bit manipulation, string manipulation, control transfer, high level and processor control instructions. The following paragraphs provide a functional description of the assembly-level instructions. Data Transfer Instructions Data transfer instructions move single bytes and words between memory and registers. These instructions also move single bytes and words between the AL or AX registers and 110 ports. Table 2-1 lists the four types of data transfer instructions and their functions. The data transfer instructions are categorized in four types: general purpose; input/output; address object; and flag transfer. The stack manipulation instructions, the instructions for transferring flag contents and the instructions for loading segment registers are included in this group. Figure 2-3 shows the flag storage formats primarily used by the LAHF instruction when converting 8080/8085 assembly language programs to run on the 80186 or 80188. The address object instructions manipulate the addresses of variables instead of the contents of values of the variables. This is useful for list processing, based variable and string operations. The 80186/80188 instruction set basically exists on two levels. One is the assembly level and the other is the machine level. To the assembly language programmer, the 80186 appears to have a repertoire of about 100 instructions. One MOV (move) instruction, for example, transfers a byte or a word from a register or a memory location or an immediate value to either a register or a memory location. The CPU's, however, recognize 28 different MOV machine instructions ("move byte register to memory", "move word immediate to register", etc.). The two levels of instruction set address two different requirements: efficiency and simplicity. The approximately 300 forms of machine-level instructions make very efficient use of storage. For example, the machine instructions that increments a memory operand is three or four bytes long because the address of the operand must be 2-7 210912-001 80186/80188 CPU Table 2·2 Arithmetic Instructions Table 2·1 Data Transfer Instructions GENERAL PURPOSE MOV PUSH POP XCHG XLAT ADD ADC INC AAA DAA Move byte or word Push word onto stack Pop word off stack Exchange byte or word Translate byte SUBTRACTION SUB SBB INPUT /OUTPUT Input word or byte Output word or byte IN OUT DEC NEG CMP AAS DAS ADDRESS OBJECT LEA LDS LES Load effective address Load pointer using DS Load pOinter using ES MUL IMUL AAM FLAG TRANSFER LAHF SAHF PUSHF POPF DIV IDIV AAD CBW CWD Load AH register from flags Store AH register in flags Push flags onto stack Pop flags off stack Arithmetic Instructions Is, I7 Z , U , A , U 6 5 4 3 ! P 2 I U 1 ! C 0 Bit Manipulation Instructions The 80186 and 80188 CPU's provide three groups of instructions for manipulating bits within both bytes and words. These three groups are logicals, shifts and rotates. Table 2-4 lists the three groups of bit manipulation instruetions with their functions. I I 1....--6080/8085 FLAGS----..I I I I I ~g~~F'lu! U,U ,U ,0,0, I, T,S ,Z ,U tA,U, P, Ute 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 a. Logical I The logical instructions include the boolean operators "not", "and", "inclusive or", and "exclusive or". A TEST instruction that sets the flags, but does not alter either of its operands is also included. U = UNDEFINED; VALUE IS INDETERMINATE 0= OVERFLOW FLAG o = DIRECTION flAG I = INTERRUPT ENABLE flAG T Subtract byte or word Subtract byte or word with borrow Decrement byte or word by 1 Negate byte or word Compare byte or word ASCII adjust for subtraction Decimal adjust for subtraction MULTIPLICATION Multiply byte or word unsigned Integer multiply byte or word ASCII adjust for multiply DIVISION Divide byte or word unsigned Integer divide byte or word ASCII adjust for division Convert byte to word Convert word to doubleword the operands specified in arithmetic instructions contain data that represents valid numbers for the type of instruction being performed. Invalid data may produce unpredictable results. Arithmetic operations (see Table 2-2) may be performed on four types of numbers: unsigned binary, signed binary (integers), unsigned packed decimal and unsigned unpacked decimal (see Table 2-3). Binary numbers may be 8 or 16 bits long. Decimal numbers are stored in bytes, two digits per byte for packed decimal and one digit per byte for unpacked decimal. The processor always assumes that ~~~~. ADDITION Add byte or word Add byte or word with carry Increment byte or word by 1 ASCII adjust for addition Decimal adjust for addition = TRAP flAG S = SIGN FLAG Z = ZERO flAG A = AUXILIARY CARRY FLAG b. Shifts Figure 2·3 Flag Store Formats The bits in bytes and words may be shifted arithmetically or logically. Up to 255 shifts may be performed, according to the value of the count operand coded in the instruction. The count may be specified as a constant 1, or P = PARITY FLAG C = CARRY flAG 2·8 210912-001 80186/80188 CPU Table 2·3 Arithmetic Interpretation of a·Bit Numbers HEX BIT PATTERN UNSIGNED BINARY SIGNED BINARY UNPACKED DECIMAL PACKED DECIMAL +7 7 7 07 o0 0 0 0 1 1 1 7 89 10001001 137 -119 invalid 89 C5 11000101 197 -59 invalid invalid extension of the operand in two of the rotate instructions, allowing a bit to be isolated in CF and then tested by a JC (jump if carry) or JNC (jump if not carry) instruction. register CL, allowing the shift count to be a variable supplied at execution time. Also, the number of shifts may be specified as an immediate value in the instruction. This eliminates the need for a MOV immediate to the CL register if the number of shifts is known at assembly time. Before the 80186/80188 perform a shift or rotate, they AND the value to be shifted with 1FH. This limits the number of shifts occurring to 32 bits. Arithmetic shifts may be used to multiply and divide binary numbers by powers of two. Logical shifts can be used to isolate bits in bytes or words. String Instructions The string instructions, also called primitives, allow strings of bytes or words to be operated on, one element (byte or word) at a time. Strings of up to 128k bytes may be manipulated with these instructions. Instructions are available to move, compare and scan for a value, as well as moving string elements to and from the accumulator and 110 ports. Table 2-5 lists the string instructions. These basic operations may be preceded by a special one-byte prefix that causes the instruction to be repeated by the hardware, allowing long strings to be processed much faster than would be possible with a software loop. The repetitions can be terminated by a variety of conditions, and a repeated operation may be interrupted and resumed. c. Rotates Bits in bytes and words can also be rotated. Bits rotated out of an operand are not lost as in a shift, but are "circled" back into the other "end" of the operand. As in the shift instructions, the number of bits to be rotated is taken from the count operand, which may specify either a constant of 1, or the CL register. The carry flag may act as an Program Transfer Instructions Table 2·4 Bit Manipulation Instructions The instruction execution sequence for the 80816/80188 is determined by the content of the code segment register (CS) and the instruction pointer (IP). The CS register contains the base address of the current code segment (i.e., the 64k memory area where instructions are currently being fetched). The IP points to the memory address where the next instruction to be fetched is located. In most operating conditions, the next instruction to be executed will have already been fetched and will be waiting in the CPU instruction queue. The program transfer instructions operate on the instruction pointer and on the CS register. Changing the content of these causes normal sequential operation to be altered. When a program transfer occurs, the queue no longer contains the correct instruction. When the BIU obtains the next instruction from memory using the new IP and CS values, it passes the instruction directly to the EU and then begins refilling the queue from the new location. LOGICALS NOT AND OR XOR TEST SHLISAL SHR SAR ROL ROR RCL RCR "Not" byte or word "And" byte or word "Inclusive or" byte or word "Exclusive or" byte or word "Test" byte or word SHIFTS Shift logical/arithmetic left byte or word Shift logical right byte or word Shift arithmetic right byte or word ROTATES Rotate left byte or word Rotate right byte or word Rotate through carry left byte or word Rotate through carry right byte or word Four groups of program transfers are available with the 80186/188 CPU's (see Table 2-6). These are unconditional transfers, conditional transfers, iteration control instructions, and interrupt-related instructions. 2-9 210912·001 80186/80188 CPU Table 2·6 Program li'ansfer Instructions Table 2·5 String Instructions REP Repeat REPE/REPZ Repeat while equal/zero REPNE/REPNZ Repeat while not equal/not zero MOVS Move byte or word string MOVSB/MOVSW Move byte or word string CMPS Compare byte or word string SCAS Scan byte or word string LODS Load byte or word string STOS Store byte or word string UNCONDITIONAL TRANSFERS Call procedure Return from procedure Jump CALL RET JMP CONDITIONAL TRANSFERS JA/JNBE JAE/JNB JB/JNAE JBE/JNA JC JE/JZ JG/JNLE JGE/JNL a. Unconditional Transfers JLlJNGE The unconditional transfer instructions may transfer control to a target instruction within the current code segment (intrasegment transfer) or to a different code segment (intersegment transfer). The ASM-86 Assembler terms an intrasegment transfer NEAR and an intersegment transfer FAR. The transfer is made unconditionally any time the instruction is executed. JLE/JNG JNC JNE/JNZ JNO JNP/JPO JNS JO JP/JPE b. Conditional Transfers The conditional transfer instructions are jumps that may or may not transfer control depending on the state of the CPU flags at the time the instruction is executed. These 18 instructions (see Table 2-7) each test a different combination of flags for a condition. If the condition is "true" then control is transferred to the target specified in the instruction. If the condition is "false" then control passes to the instruction that follows the conditional jump. All conditional jumps are SHORT, that is, the target must be in the current code segment and within -128 to + 127 bytes of the first byte of the next instruction (IMP DOH jumps to the first byte of the next instruction). Since jumps are made by adding the relative displacement of the target to the instruction pointer, all conditional jumps are self-relative and are appropriate for position-independent routines. JS Jump If above/not below nor equal Jump If above or equal/not below Jump If below/not above nor equal Jump If below or equal! not above Jump if carry Jump if equal/zero Jump if greater/not less nor equal Jump if greater or equal! not less Jump if less/not greater nor equal Jump if less or equal/ not greater Jump if not carry Jump if not equal/ not zero Jump if not overflow Jump if not parity / parity odd Jump if not sign Jump if overflow Jump if parity / parity even Jump if sign ITERATION CONTROLS Loop LOOP Loop If equal/zero LOOPE/LOOPZ LOOPNEI LOOPNZ Loop If not equal! not zero Jump If register CX - 0 JCXZ INTERRUPTS INT INTO IRET Interrupt Interrupt If overflow Interrupt return c. Iteration Control The iteration control instructions can be used to regulate the repetition of software loops. These instructions use the CX register as a counter. Like the conditional transfers, 2·10 210912·001 80186/80188 CPU Table 2-7 Interpretation of Conditional Transfers MNEMONIC CONDITION TESTED "JUMP IF ..." JA/JNBE JAE/JNB JB/JNAE JBE/JNA JC JE/JZ JG/JNLE JGE/JNL JL/JNGE JLE/JNG JNC JNE/JNZ JNO JNP/JPO JNS JO JP/JPE JS (CF oRZF)-O CF-O CF-1 (CF OR ZF)-1 CF-1 ZF-1 «SF XOR OF) OR ZF)-O (SF XOR OF)-O (SF XOR OF)-1 ((SF XOR OF) OR ZF)-1 CF-O ZF-O OF-O PF=O SF-O OF=1 PF=1 SF=1 above/not below nor equal above or equal I not below below I not above nor equal below or equal/not above carry eQual/zero greater I not less nor equal greater or equal I not less less I not greater nor equal less or equal I not greater not carry not equal I not zero not overflow not parity I parity odd not sign overflow parity I parity equal sign Note: "above" and "below" refer to the relationship of two unsigned values; "greater" and "less" refer to the relationship of two signed values. the iteration control instructions are self-relative and may only transfer to targets that are within -128 to + 127 bytes of themselves, i.e., they are SHORT transfers. ternal events. A final instruction causes the CPU to do nothing. Except for the flag operations, none of the processor control instructions affect the flags. Table 2-8 Processor Control Instructions d. Interrupt Instructions FLAG OPERATIONS Interrupt instructions allow interrupt service routines to be activated by programs as well as by external hardware Set carry flag Clear carry flag Complement carry flag Set direction flag Clear direction flag Set interrupt enable flag Clear interrupt enable flag STC CLC CMC STD CLD STI Cli devices. The effect of software interrupts is similar to hardware-initiated interrupts. However, the processor does not execute an interrupt acknowledge bus cycle if the interrupt originates in software or with an NMI. High-Level Instructions EXTERNAL SYNCHRONIZATION The 80186/188 CPU's have two instructions used with high-level languages. These are ENTER and LEAVE. Detailed descriptions of the operation of these two instructions are contained in the paragraphs on "NEW 801861 80188 INSTRUCTIONS" in paragraph 2.2.2. HLT WAIT ESC LOCK Halt until interrupt or reset Wait for TEST pin active Escape to external processor Lock bus during next instruction Processor Control Instructions NO OPERATION The processor control instructions allow programs to control various CPU functions. Table 2-8 lists the groups of processor control instructions and their functions. One group of instructions updates flags, and another group is used primarily for synchronizing the processor with ex- NOP 2-11 No operation 210912-001 80186/80188 CPU sections of the device specifications is not implied. Exposure to absolute maximum conditions for extended periods of time may affect the device reliability. INSTRUCTION SET SUMMARY Table 2-9 presents a reference data table of the complete 80186/80188 instruction set with timing cycles for each instruction. The instruction timings represent the minimum execution time in clock cycles for each instruction. The timings are based on the following assumptions: • Table 2-11 presents the D. C. voltage characteristics of the 80186/188 CPU's. Tables 2-12 through 2-16 list the various A. C. characteristics timing requirements and timing responses for the 80186/188 CPU's. Figure 2-5 presents the major cycle timing waveforms for the 80186/80188 CPU's related to the preceding A.C. characteristics tables. The opcode, along with any data or displacement required for execution of a particular instruction, has been prefetched and resides in the queue at the time it is needed. • No wait states or bus HOLDS occur. • All word-data is located on even-address boundaries. 2.4 OPERATING MODES The following paragraphs present the various operating modes of the 801861188 CPU's and compare these to those of the 8086/88 CPU's described in Chapter 1. Refer to the 8086/88 operating mode discussion in paragraph All jumps and calls include the time required to fetch the opcode of the next instruction at the destination address. Any instructions which involve memory references can require one (and in some cases, two) additional clocks above the minimum timings shown. This is du.e to the asynchronous nature of the handshake between the BIU andEU. 1.4. 2.4.1 8086/88-80186/188 Operating Mode Comparisons 2.3 DEVICE PIN DEFINITIONS The 80186/188 multiplexed address/data bus simultaneously supports both the 8086/88 minimum mode local bus and the maximum mode system bus. The 80186/188 provides both local bus controller outputs (RD*, WR * , ALE, DEN* and DT/R*) and the system status outputs (SO*, S 1* and S2*) for use with the 8288 bus controller. This is different from the 8086/88 where local bus controller outputs (generated only in the minimum mode) are not available if the status outputs (generated only in the maximum mode) are required. The following paragraphs present functional descriptions of all input/output signals and electrical descriptions of all of the input/output pins on the 80186 and 80188 40-pin DIP's. 2.3.1 Functional Description of All Signals Figure 2-4 shows the 80186/80188 DIP pin assignments and Table 2-10 provides a complete functional description of each device pin signal and correlates the description to the pin number and associated signal symbol. Because the 80186/188 simultaneously provides both local bus control signals and status outputs, many systems supporting both a system bus (MULTIBUS) and a local bus will not require two separate external bus controllers. The bus control signals may be used to control the local bus while the status signals are concurrently connected to the 8288 bus controller to drive the system bus control signals. The 801861188 CPU's require an 8288 and an 8289 to interface with the MULTIBUS. 2.3.2 Electrical Description of Pins The absolute maximum ratings for the 8086/8088 device are as follows. Absolute Maximum Ratings Ambient Temperature Under Bias Storage Temperature Voltage on Any Pin with Respect to GND Power Dissipation 2.4.2 Queue Status Mode of Operation OOC to 70°C -65°C to + 150°C When the RD* line is externally grounded during reset and remains grounded during processor operation, causes the 80186 to enter "queue status" mode. In this mode, the WR * and ALE signals become queue status outputs, reflecting the status of the internal pre-fetch queue during each clock cycle. These signals allow a processor extension (such as the Intel 8087 numeric data processor) to track execution of instructions within the 80186. The interpretation of QSO (ALE) and QSl (WR*) are given in Table 2-17. These signals change on the high-to-low clock -1.0 to +7V 3.0 Watt Stresses above those listed above may cause permanent damage to the device. These values present stress ratings only and functional operation of the device at these or any other conditions above those indicated in the operational 2-12 210912·001 80186/80188 CPU Table 2·9 Instruction Set Summary FUNCTION Clock Cycles FORMAT Comments DATA TRANSFER MOV = Move: Register to Register/Memory Register'memory to register Immediate to register memory Immediate to register Memory to accumulator 11 000100wi 11 000101wl 11 1 0 0 0 1 1 w 11 01 1 w reg I I mod reg rim mod reg rim modOOO rim datailw,-1 addr-Iow addr-high addr-Iow addr-high Accumulator to memory 11 010000wl 11 0100 01w l Registermemory to segment register 11 00 0 1 1 1 0 Segment register to reglster,'memory 11 00011001 mod 0 reg rim PUSH = Push: Memory 1111111111 RegISter 10 1 0 1 0 Segment reglSler 10 0 0 reg I dala data 2/12 2/9 12-13 3-4 9 8 2/9 2/11 dal,,1 w " 1 mod 0 reg rim 16 10 9 modl10 rim I 11 0I reg ¥_:fl£~~il~l\l;;l(?:~ll:J'f!Jl;lir;J!it,\;.~,~~;~li;'f'~i; ; i§j~"';!;i4; ;,';:;I .:;:"': "':I:A" 'i;i"'I.","',', "',i,:"'},"";"'l"",''"':"'ili"',"' "i' ' ~I:' '$'i' ' 'W' 'I' 'li,' ' ~:';' 'Y,HflC,,',lj" ;;1;;,1,;",'::,,::, ,'10,'::!',; ','c"" "",,',' ,",'/,I/i:Yti/',I:/iU;, I,,'! POP = Pop: Memory 11 00 0 1 1 1 11 reg modOOO rim Register 10 1 0 1 1 Segment register 10 0 0 reg 1 1 11 (reg ~011 8/16-bit 8/16-bit I",:; , I"~ ,,",",I!', 20 10 8 I ",'',1,,',:' 'I""""",,,>:://,,/! "",',! XCHG = exchlnge: Register/memory with register Register with accumulator IN = Input lrom: Fixed port Variable port OUT = OUlpUtlD: FIXed porI variable port XLAT, Translale byte to AL LEA = Load EA to reg ISler LOS = Load pointer to OS 11 000011wl 11 00 1 0 reg mod reg 4/17 3 rim I 11 1 1 0 0 lOw 11 1 1 0 1 lOw I I 11 1 1 00 1 1 W 11 1101 1 1 w 11 1 0 1 0 1 1 11 00 0 1 1 0 1 LES = Load pOinter 10 ES 11 1 0 0 0 1 0 1 11 1000100 LAHF = Load AH wllh flags 11 SAHF ~ Slore AH Inl0 Ilags PUSHF = Push Ilags 11 00 1 1 1 1 0 1 11 00 1 1 1 0 0 POPf - Pop lIags 11 00 1 o0 1 port 10 8 port 9 7 11 6 18 18 2 3 9 8 mod reg rim mod reg rim (mod + II) mod reg rim (mod + II) 1111 I 10 t 1 SEGMENT. Sigmont Ovor,ldo: os I I 10 0 1 1 1 1 1 0 I ES 1001001101 CS 10 0 1 0 1 1 1 0 ss 10 0 1 1 0 1 1 0 2 2 2 2 Shaded areas indicate instructions not available in iAPX 86, 88 microsystems. 2-13 210912·001 80186/80188 CPU Table 2-9 Instruction Set Summary (continued) FUNCnON Clock Cycl•• FORMAT ADD '= Add: Reg/memory with register to either 10 00 0 0 0 d w Immediate to registerlmemory 1100000swi modOOO rim Immediate to accumulator 10 00 0 0 1 0 wi I mod reg rim data data 10 0 0 1 0 0 d w Immediate to registerlmemory 1100000swl mod 0 10 rim data dataifw=1 mod reg I I • I Immediate to accumulator 10001010wl data 11 11 1 1 11 wi mod 000 rim Register 10 1 0 0 0 reg dataifsw=01 4/16 3/4 8116-bit 3/15 I 3 sua = Sublract: Reg/memory and register to either 10 0 1 0 1 0 d wi mod reg rim Immediate from register/memory 1100000swi mod 1 01 rim Immediate from accumulator 10 0 1 0 1 1 0 wi data SaB = Sublract willi borrow: Reglmemory and register to either 10 00 t 1 0 d wi mod reg rim Immediate from registerlmemory 11 OOOOOs wi mod011 rim Immediate from accumulator 10 00 1 1 1 0 wi data DEC = Decrement: Registerlmemory 8116-bit 3/10 rim INC = Incremenl: Register/memory 3/10 4/16 3/4 dataifw=1 ADC = Add with carry: Reg/memory with register to either I dataifsw=01 Comments data dataifsw=01 dataifw= 1 data dataifsw=01 dataifw=1 3/10 4/16 3/4 3/10 4/16 3/4 11 111111 wi reg mod 00 1 rim Register 10 1 0 0 1 3/15 3 CMP = Compare: Registerlmemory with register 10 01 1 1 01 wi mod reg rim Register with register/memory 10 0 1 1 1 00 w mod reg rim Immediate wifh registerlmemory !100000sw mod111 rim Immediate with accumulator 10 01 1 1 1 0 w data NEG = Change sign 11 11 1011 w mod011 3/10 3/10 3/10 3/4 3 AM = ASCII adjust for add 10 01 1 01 1 OM = Oecimal adjust for add 10 01 0 0 1 1 AAS = ASCII adjust for subtract 10 01 1 1 1 1 DAS = Decimal adjust for subtract 10 01 0 1 1 1 MUL = Multiply (unsigned): Register-Byte Register-Word Memory-Byte Memory-Word 11 11 1011 w IMUL = Integer multiply (signed): Register-Byte Register-Word Memory-Byte Memory-Word 11 11 101 1 wi DIY = Divide (unsigned): Register-Byte Register-Word Memory-Byte Memory-Word 11 11 1 011 wi I data dataifsw=01 dataifw=1 rim 8116-b,it 8116-bit 8116-bit 8 4 7 4 mod 100 rim 26-28 35-37 32-34 41-43 mod1'01 rim 25-28 34-37 31-34 40-43 mod110 rim 29 38 35 Shaded areas indicate instructions not available in iAPX 86,88 microsystems, 2-14 210912-001 80186/80188 CPU Table 2·9 Instruction Set Summary (continued) FUNCTION Clock Cycles FORMAT Comments (Continued): IDlY ~ Integer divide (signed) Register-Byte Register-Word Memory-Byte Memory-Word AAM = ASCII adlustfor multiply 11 1 1 1 0 1 1 w 1 mod 111 rim 44-52 53-61 50-58 59-67 19 15 11 1 0 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 AAO= ASCII adjustfor.divide 11 10101011000010101 CBW=Convertbytetoword 11 001 100 01 CWO = Convert word to double word 11 0 0 1 1 0 0 1 1 LOGIC Shill/Rotate Inst,uctlons: RegisterlMemory by 1 11 1 0 1 000 wi mod RegisterlMemory by CL 11 1 0 1 o 0 1 wi mod 2 4 Tn m ~·H rim 1 rim I -~: 2/15 5+n/17+n i i.~ :n~: m Instruction ROL o00 o0 1 ROR RCL o 10 o 11 RCR 1 0 0 SHUSAL 101 SHR 111 SAR AND = And: Reg/memory and register to either 1001000d w i mod reg Immediate to register/memory 11000000wl mod 1 00 rim data Immediate to accumulator 10010010wl data data ifw= 1 TEST = And function 10 flags, no ,esult: Register/memory and register 11 000010wl Immediate data and register/memory 11 11 1 011 wi mod reg rim dataifw=1 rim modOOO rim data data dataifw=1 Immediate data and accumulator 11 010100wl OR = Or: Reglmemory and register to either 1000010dwi mod reg Immediate to register!memory 11000000wl mod 00 1 rim data Immediate to accumulator 10000110wl data dataifw=1 dataifw=1 rim dataifw=1 3/10 4/16 3/4 8/16-bit 3/10 4/10 3/4 8/16-bit 3/10 4/16 3/4 8/16-bit XOR = Exclusive or: Reg/memory and register to either 1001100dwi mod reg Immediate to register/memory 11000000wl mod 11 0 rim data dataifw= 1 rim Immediate to accumulator 10011010wl data NOT = Invert registerlmemory [1 1 1 1 0 1 1 wi mod010 rim STRING MANIPULATION: MOYS ~ Move byte/word 11 010010wl CMPS = Compare byte/word 11 01 001 1 wi SCAS = Scan byte/word 11 01 0 1 1 1 wi LOOS = Load byte/wd to AUAX 11 dataifw=1 3/10 4/16 3/4 3 8/16-bit 14 22 15 12 Shaded areas indicate instructions not available in iAPX 86,88 microsystems. 2-15 210912·001 80186/80188 CPU Table 2-9 Instruction Set Summary (continued) FUNCTION FORMAT Repeated by count In ex MOVS - Move strIOg 11 CMPS - Compare strIOg 11 SCAS - Scan string 11 11 LOOS - Load string 11 11 Clock Cycles 10 0 1 o0 1 oa 1 o0 1 8+8n 5+22n 5+15n 6+11n 11010010wl z 11 0 1 0 0 1 1 w Comments I CONTROL TRANSFER CALL; Call: Direct within segment Re91ster memory indirect within segment Direct intersegment 11 10 1 oa a 11 11 11 11 00 1 1 dlsp-Iow dlSp-hlgh mod010rm a1 15 13/19 23 segment offset segment selector Indirect mlersegment 11 111111 1 JMP; Unconditional jump: Short!long 11 1 1 0 1 0 1 disp-Iow Direct within segment 11 1 1 a 1 00 disp-Iow Reglster.tmemory indirect within segment 1 I 11111 Direct mtersegment 11 1 modOl1rm I 11 111111 1 RET ; Return from CALL: Within segment 11 1 0 Within seg addmg Immed to SP 11 1 T 11) dlSp·hlgh mod 1 00 rm a10 1 aI Indirect intersegment (mod a0 a1 aaaa1 aI Intersegment ~OO 1 01 11 Intersegment adding Immediate to SP 11 1 a a 10 1 a I segmen10ilset 38 14 14 11/17 14 segment selector mod 1 0 1 r m (mod Til) data-lOw data·hlgh data-low data"hlgh 26 16 18 22 25 Shaded areas indicate instructions not available in iAPX 86,88 microsystems. 2-16 210912·001 80186/80188 CPU Table 2-9 Instruction Set Summary (continued) FUNCTION Clock Cycles FORMAT Comments CONTROL TRANSFER JE/JZ Jump on equaliZero 10 1 1 1 0 1 0 0 disp 4/13 JLJJNGE ::= Jump on less;not greater or equal 10 1 1 1 1 1 0 0 disp JLE/JNG ::= Jump on less or equal mol greater 10 1 1 1 1 1 1 dlSp J8/JNAE = Jump on belowmot above or equal 10 1 1 1 0 0 1 dlSp JBE/JNA ~ Jump on below or equalmol above 10 1 1 1 0 1 1 dlSp 4/13 4/13 4/13 4/13 JP/JPE ~ Jump on parl~'pan~ even 10 1 1 1 1 0 1 dlSp JO ~ Jump on ovtrtlow 101110000 disp 0 JS = Jump on sign 10 1 1 1 1 00 0 dlSP JNE/JNZ ~ Jump on not equal'not zero 10 1 1 1 0 1 0 1 disp JNl/JGE == Jump on not less;greater or equal 10 1 1 1 1 1 0 1 disp 13 if JMP taken 4ifJMP not taken 4/13 4/13 4/13 4/13 4/13 JNLE/JG ~ Jump on notlessorequaligreater 10 1 1 1 1 1 1 1 disp 4/13 JNB/JAE ~ Jump on not belowlabove orequal 10.1 1 1 0 0 1 1 disp 4/13 JNBElJA ~ Jump on not below orequal"bove 10 1 1 1 0 1 1 1 disp JNP/JPO ~ Jump on not par'par odd 10 1 1 1 1 0 1 1 dlSp 4/13 4/13 JNO ~ Jump on not Ovtrtlow 10 1 1 1 0 00 1 dlSP JNS ~ Jump on not Sign 10 1 1 1 1 0 0 1 dlSp JCXZ ~ Jump on ex zelO 11 1 1 0 0 0 1 1 I dlSp LOOP ~ loop ex times 11 1 1 0 0 0 1 0 disp LOOPZlLOOPE ~ loop while zewequal 11 1 1 0 0 0 0 I 1I dlSP LOOPNZ/LOOPNE ~ loop while not zerOiequal 11 11000001 disp INT =Interrupt: Type specilied 11 1 0 0 1 1 0 1 1 type Type 3 11 1 0 0 1 1 0 0 1 INTO::= Interrupt on overflow 11 1 0 0 1 1 1 01 45 48/4 IRET ~ Inlerlupt return 11 1 0 0 1 1 1 11 28 4/13 5/15 6/16 6/16 16 5 JMP takenl J MP not taken 47 if INT. takenl if INT. not taken Shaded areas indicate instructions not available in iAPX 86,88 microsystems. 2-17 210912-001 80186/80188 CPU Table 2-9 Instruction Set Summary (continued) FUNCTION Clock Cycles FORMAT PROCESSOR CONTROL CLC = Clear carry 11 1 1 1 1 00 01 CMC = Complement carry 11 1 1 1 0 1 0 1 1 STC = Set carry 11 1 1 1 1 00 1 1 CLO = Clear direclion 11 1 1 1 1 1 0 01 STO = Set direction 11 1 1 1 1 1 0 1 1 CLI = Clear interrupt 11 1 1 1 1 0 1 01 sn = Set interrupt 11 1 1 1 1 0 1 1 1 HLT = ~alt 11 1 1 1 0 1 0 01 \VAIT=Wait 11 00 1 1 0 1 1 1 LOCK = Bus lock prefix 11 t I l 0 0 0 01 ESC = Processor Extension Escape 11 1 0 lIT TTl mod LLL rim 1 (ITT lLL are opcode to processor extension) 2 2 2 2 2 2 2 2 6 2 6 Comments if test =0 Shaded areas indicate instructions not available in iAPX 86, 88 microsystems. FOOTNOTES The effective Address (EA) of the memory operand is computed according to the mod and rim fields: regis assigned according to the following: if mod = 11 then rim is treated as a REG field if mod = 00 then OISP = 0*, disp-Iow and disp-high are absent if mod = 01 then OISP = disp-Iow sign-extended to 16-bits, disp-high is absent reg Segment Register 00 01 10 11 ES CS SS OS if mod = 10 then OISP = disp-high: disp-Iow REG is assigned according to the following table: if rim = 000 then EA = (BX) + (SI) + OISP if rim = 001 then EA = (BX) + (01) + OISP if rim = 010 then EA = (BP) l6-Bit (w = 1) + (SI) + OISP 000 001 010 011 100 101 110 111 if rim = 011 then EA = (BP) + (01) + OISP if rim = 100 then EA = (SI) + OISP if rim = 101 then EA = (01) + OISP if rim = 110 then EA = (BP) + OISP* if rim = 111 then EA = (BX) + OISP OISP follows 2nd byte of instruction (before data if required) ·except if mod = 00 and rim = 110 then EA = disp-high: disp-Iow. 8-Bit (w = 0) 000 001 010 011 100 101 110 111 AL CL OL BL AH CH OH BH The physical addresses of all operands addressed by the BP register are computed using the SS segment register. The physical addresses of the destination operands of the string primitive operations (those addressed by the 01 register) are computed using the ES segment, which may not be overridden. NOTE: • EA CALCULATION TIME IS 4 CLOCK CYCLES FOR ALL MODES AND IS INCLUDED IN THE EXECUTION TIMES GIVEN WHENEVER APPROPRIATE. SEGMENT OVERRIDE PREFIX 10 0 1 reg 1 1 0 AX CX OX BX SP BP SI 01 I 2-18 210912-001 80186/80188 CPU BOTTOM TOP Sci ..,,:+--"--"_' U 'U S1 52 AROY CLKOUT RESET X2 X1 Vss ALElQSD RD/QSMO WAlQS1 BHE A191S6 A18/S5 A17/S4 A18/53 1Mc, r11r1 r1 TMRIN1 TMRIND ORQ1 ',DRQD ~ 'I.:lJ'L..JJ...IL:'-~I..II..JJ..J.'::'J::.lW~U::J ........................................................................Il....Ij,J' , PIN NO.1 MARK.............. Figure 2-4 80186/80188 DIP Pin Assignments transition, one clock phase earlier than on the 8086. Note that since execution unit operation is independent of bus interface unit operation, queue status lines may change in any T ,state. tions between the two modes, but the basic function of the interrupt controller remains basically the same. The main difference between the two modes is that when in the master mode, the interrupt controller presents its input directly to the 80186 CPU and in the iRMX 86 mode the interrupt controller presents its interrupt input to an external controller. The external interrupt controller then presents the interrupt inputs to the CPU. Since the ALE, RD*, and WR * signals are not directly available from the 80186 when it is configured in queue status mode, these signals must be derived from the status lines SO*-S2 * using an external 8288 bus controller. Th prevent the 80186 from accidentally entering queue status mode during reset, the RD* line is internally provided with a weak pullup device. RD* is the ONLY tri-state or input pin on the 80186 which is pulled up (neither pullups nor pulldowns are used for any other 80186 tri-state or input pin). Placing the interrupt controller in the iRMX 86 mode is done by setting the iRMX mode bit in the peripheral control block relocation register. A description of the operation of the integrated interrupt controller in the iRMX 86 and non-iRMX 86 modes of operation is contained in paragraph 2.8.3. 2.4.3 Interrupt Controller Operating Modes 2.5 BUS OPERATION The integrated interrupt controller has two major modes of operation. These are the non-iRMX 86 mode (referred to as master mode) and the iRMX 86 mode. In master mode the integrated interrupt controller acts as the master interrnpt controller for the system. Bus operation in the 80186/188 and 8086/88 CPU's is basically the same. Before proceeding with this section review the 8086 Bus Operation discussion in paragraph 1.5. In the 80186, bus cycles occur sequentially, but do not necessarily follow one after another; that is, the bus may remain idle for several T states (Ti) between each bus access initiated by the 80186. A bus idle occurs whenever the 80186 internal queue is full and no read/write cycles In iRMX 86 mode the controller operates as a slave to an external interrupt controller which operates as the master system interrupt controller. Some of the interrupt controller registers and interrupt controller pins change defini2-19 210912·001 80186/80188 CPU Table 2·10 80186/80188 Device Pin Descriptions Symbol Pin No. ~ Vcc, Vee 9.43 I Vss, Vss System Name and Function Power: + 5 volt power supply. 26.60 I System Ground. RESET 57 0 Reset Output Indicates that the 80186 CPU ir. being reset, and can be used as a system reset. It Is active HIGH. synchronized with the procassor clock, and lasts an Integer number of clock periods corl'!lsponding to thfllength of the ~ signal. Xl,X2 59.58 I Crystel Inputs, Xl and X2, provide an external connecllon for a fundamental mode parallel resonant crystal' for the intarnal. crystel oscillator. Xl can interface to an external clock instead of a crystel. In this case, minimize the capacitanca on X2 or drive X2 with complemented Xl. The input or oscillator frequency is Internally divided by two to generate the clock signal (CLKoi.JT). CLKOUT 56 0 Clock Output provides the system with a 50% duty cycle waveform. All device pin timings are specified relative to CLKOIJT. CLKOUT has suffiCient MOS drive capabilitias for the 8087 Numeric Processor Extension. RES 24 I System Reset causas the 80186 to Immediately terminate Its present activity, clear the Internal logic, and enter a dormant stata. This signal may be asynchronous to the 80186 clock. The 80186 begins fetching instructions approximately 7 clock cycles after RES Is returned HIGH. RES Is required to be LOW for greater than 4 clock cycles and Is Internally synchronized. For proper Initialization. tha LOW-to-HIGH transition of RES must occur no sooner than 50 microseconds after power up. This Input is provided with a Schmitt-trigger to facilitate power-on RES generation via an RC network. When RES occurs. the 80186 will drive the status lines to an Inactive level for one clock, and then trl-state them. 'inT 47 I TEST is examined by the WAIT instruction. If the TEST input is HIGH when "WAIT" execution begins, instruction execution will suspend. TEST will be resampled until it goes LOW, at which time execution will resume. If interrupts are enabled while the 80186 is waiting for TEST, interrupts will be serviced. This input is synchronized internally. TMR IN 0, TMRINl 20 21 I I Timer Inputs are used either as clock or pontrol signals, depending upon the programmed timer mode. These inputs are active HIGH (or LOW-to-HIGH transitions are counted) and internally synchronized. TMR OUT 0, TMR OUT 1 22 23 0 0 Timer outputs are used to provide single pulse or continUous waveform generation, depending upon the timer mode selected. ,DRaO ORal 18 19 I I DMA Request is driven HIGH by an external device when it desires that a DMA channel (Channel 0 or 1) perform a transfer. These signals are active HIGH, level-triggered, and internally synchronized. NMI 46 I Non-Maskable Interrupt is an e.dge-triggered input which causes a type 2 interrupt. NMI is not maskable internally. A transition from a LOW to HIGH initiates the interrupt at the next instruction boundary. NMI is latched internally. An NMI duration of one clock or more will guarantee service. This input is internally synchronized. INTO,INT1, INT2/fNTAij INT3/INTAl 45,44 42 41 I I/O I/O Maskable Interrupt Requests can be requested by strobing one of these pins. When configured as inputs, these pins are active HIGH. Interrupt Requests are synchronized internally. INT2 and INT3 may be configured via software to provide active-LOW interrupt-acknowledge output signals. All interrupt inputs may be configured via software to be either edge- or level-triggered. To ensure recognition, all interrupt requests must remain active until the interrupt is acknowleged. When iRMX mode is selected, the function of these pins changes (see Interrupt Controller section of this data sheet). A19/S6, A18/S5, A17/S4, A16/53 65 0 0 0 0 Address Bus Outputs (16-19) and Bus Cycle Status (3-6) reflect the four most significant address bits during T1. These signals are active HIGH. During T2, T3, Tw, and T4, status information is available on these lines as encoded below: 66' 67 66 I I 56 Low Processor Cycle 53,$4, and 55 are defined as LOW during T2-T4' AD15-ADO 10-17, 1-8 I/O I High DMA Cycle I Address/Data Bus (0-15) signals constitute the time mutiplexed memory or I/O address (T1) and data (T2' T3, Tw, and T4) bus. The bus is active HIGH. Ao is analogous to BHE for the lower byte of the data bus, pins 07 through Do. It is LOW during T1 when a byte is to be transferred onto the lower portion of the bus in memory or I/O operations. 2-20 210912-001 80186/80188 CPU Table 2·10 80186/80188 Device Pin Descriptions (continued) Symbol BHE/S7 Pin No. Type Name and Function 64 0 During T, the Bus High Enable sign-al should be used to determine if data is to be enabled onto the most significant half of the data bus. pins 0'5-08. BHE is LOW during T, for read. write. and interrupt acknowledge cycles when a byte is to be transferred on the higher half of the bus. The S7 sta~information is available during T2. T3. and T4. S7 is logically equivalent to BHE. The signal is active LOW. and is tristated OFF during bus HOLD. BHE and AO Encodings BHE Value AO Value Function 0 0 1 0 1 0 1 Word Transfer Byte Transfer on upper half of data bus (015-08) Byte Transfer on lower half of data bus (07-00) Reserved , ALE/QSO 61 0 Address Latch Enable/Queue Status 0 is provided by the 80186 to latch the address into the 8282/8283 address latches. ALE is active HIGH. Addresses are . guaranteed to be valid on the trailing edge of ALE. The ALE rising edge is generated off the rising edge of the CLKOUT immediately preceding T, of the associated bus cycle. effectively one-half clock cycle earlier than in the standard 8086. The trailing edge is generated off the CLKOUT rising edge in T, as in the 8086. Note that ALE is never floated. WR/QSl 63 0 Write Strobe/Queue Status 1 indicates tl;1at the data on the bus is to be written into a memory or an I/O device. WR Is active for T2, T3, and Tw of any write cycle. It is active LOW, and floats during "HOLD." It is driven HIGH for one clock during Reset, and then floated. When the 80186 is in queue status mode, the ALE/QSO and WR/QSl pins provide information about processor/instruction queue interaction. QSl 0 0 1 1 QSO 0 1 1 0 Queue Operation No queue operation First opcode byte fetched from the queue Subsequent byte fetched from the queue Empty the queue RD/QSMD 62 0 Read Strobe indicates that the 80186 is performing a memory or 1/0 read cycle. RD is active LOW for T., T 3 , and Tw of any read cycle. It is guaranteed not to go LOW in T. until after the Address Bus is floated. RD is active LOW, and floats during "HOLD." RD is driven HIGH for one clock during Reset, and then the output driver is floated. A wllak internal pull-up mechanism on the RD line holds it HIGH when the line is not driven. During RESET the pin is sampled to determine whether the 80186 should provide ALE, WR and RD, or ilthe Queue-Status should be provided. RD should be connected to GND to provide Queue-Status data. ARDY 55 I Asynchronous Ready informs the 80186 that the addressed memory space or I/O device will complete a data transfer. The ARDY input pin will accept an asynchronous input, and is active HIGH. Only the rising edge is internally synchronized by the 80186. This means that the falling edge of ARDY must be synchronized to the 80186 clock. I! connected to Vee, no WAIT states are inserted. Asynchronous ready (A ROY) or synchronous ready (SRDY) must be active to terminate a bus cycle. I! unused, this line should be tied LOW. SRDY 49 I Synchronous Ready must be synchronized externally to the 80186. The use of SRDY provides a relaxed system-timing specification on the Ready input. This is accomplished by eliminating the one-hal! clock cycle which is required for internally resolving the signal level when using the ARDY input. This lineis active HIGH. I! this line is connected to Vee, no WAIT states are inserted. Asynchronous ready (ARDY) or synchronous ready (SRDY) must be active before a bus cycle is terminated. I! unused, this line should be tied LOW. LOCK 48 0 LOCK output indicates that other system bus masters are not to gain control of the system bus while LOCK is active LOW. The LOCK signal is requested by the LOCK prefix instruction and is activated at the beginning of the first data cycle associated with the instruction following the LOCK prefix. It remains active until the completion of the instruction following the LOCK prefix. No prefetches will occur while LOCK is asserted. LOCK is active LOW, is driven HIGH for one clock during RESET, and then floated. -- I 2-21 210912-001 80186/80188 CPU Table 2·10 80186/80188 Device Pin Descriptions (continued) Symbol SO,Sl,S2 Pin No. Type Name and Function 52-54 0 Bus cycle status SO-S2 are encoded to provide bus-transaction information: 80186 Bus Cycle Status Information S2 Sl SO 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 Bus Cycle Initiated Interrupt Acknowledge Read I/O Write I/O Halt Instruction Fetch Read Data from Memory Write Data to Memory Passive (no bus cycle) The status pins float during "HOLD." S2 may be used as a logical M/IO indicator, and 51 as a DT/R indicator. The status lines are driven HIGH for one clock during Reset, and then floated ntil a bus cycle begins. HOLD (input) HLDA (output) 50 51 I 0 HOLD Indicates that another bus master Is requesting the local bus. The HOLD Input Is active HIGH. HOLD may be asynchronous with respect to the 80186 clock. The 80186 will Issue a HLDA (HIGH) In response to a HOLD re~uest at the end of T4 or Tl. Simultaneous with the Issuance of HLDA, the 80 86 will float the local bus and control lines. After HOLD Is detected as being LOW, the 80186 will lower HLDA. When the 80186 needs to run another bus cycle, It will again drive the local bus and control lines. UCS 34 0 Upper Memory Chip Select is an active LOW output whenever a memory reference Is made to the defined upper portion (1 K-256K block) of memory. This line is not floated during bus HOLD. The address range activating is software programmable. ues LCS MCSO-3 33 0 Lower Memory Chip Select is active LOW whenever a memory reference is made to the defined lower portion (lK-256K) of memory. This line is not floated during bus HOLD. The address range activating LCS is software programmable. 38,37,36,35 0 Mid-Range Memory Chip Select signals are active LOW when a memory reference is made to the define~id-range portion of memory (8K-512K). These lines are not floated during us HOLD. The address ranges activating ~-3 are software programmable. Peripheral Chip Select signals 0-4 are active LOW when a reference is made to the defined peripheral area (64K byte I/O space). These lines are not floated during bus HOLD. The address ranges activating PCSO-4 are software programmable. 25 0 l5C'Sl·4 27,28,29,30 0 PCS5/Al 31 0 Peripheral Chip Select 5 or Latched Al may be programmed to provide a sixth peripheral chip select, or to provide an internally latched Al Signal. The address range activating ~ is software programmable. When programmed to provide latched Al, rather than PCS5, this pin will retain the previously latched value of Al during a bus HOLD. Al is active HIGH. PCSS/A2 32 0 Peripheral Cblp Select 6 or Latched A2 may be programmed to provide a seventh peripheral chip select, or to provide an internally latched A2 signal. The address range activating PCSS is softwa!!..R!:ogrammable. When programmed to provide latched A2, rather than PCS6, this pin will retain the previously latched value of A2 during a bus HOLD. A2 Is active HIGH. DT/R 40 0 Data Transmit/Receive controls the direction of data flow through the external 8286/8287 data bus transceiver. When LOW, data Is transferred to the 80186. When HIGH the 80186 places write data on the data bus. DEN 39 0 Data Enable is provided as an 8286/8287 data bus transceiver o'utput enable. l5EN Is active LOW during each memory and I/O access.l5EN is HIGH whenever DTIJ!f changes state. PCSO 2-22 210912·001 80186/80188 CPU Table 2-11 D.C. Characteristics D.C. CHARACTERISTICS (T3A =oo-70o, Vcc=5V :l::10%) .Symbol Parameter VIL Input Low'Voltage VIH Input High Voltage (All except Xl and (RES) , Min. Max. Units - 0.5 + 0.8 Vee + 0.5 Volts Vee + 0.5 Volts 0.45 Volts 2.0 Test Conditions Volts VIH1 Input High Voltage (1lES) Va. Output Low Voltage 3.0 VOH Output High Voltage 2.4 Icc Power Supply Current 550 45ij mA Max measured at +A = ~~~c lu Input Leakage Current ",lQ ~ OV < VIN < Vee Ito Output Leakage Current ",10 ~ 0.45V Vew Clock Output Low 0.6 Volt~ I~ - 4.0 mA Volts 10 • = -200~ VCHO Clock Output High Vcu VCHI Clock Input Low Voltage -0.5 Clock Input High Voltage 3.9 ~ Input Capacitance c:., 1/0 Capacitance Volts 4.0 loa = -400 ~ AS 0.6 Volts Vee + 1.0 10 Volts 20 pF are being requested by the execution unit or integrated DMA unit. Recall that the bus interface unit fetches opcodes (including immediate data) from memory, while the execution unit actually executes the pre-fetched instructions. The number of clock cycles required to execute an 80186 instruction vary from 2 clock cycles for a register to register move to 67 clock cycles for an integer divide. I. = 2.5 mA for· m:l-~ I•. = 2..0 mA lor all other outputs < VOUT < Vee PI" fetch queue at a greater rate. This usage also means that the effect of wait states is more pronounced in an 80186 system than in an 8086 system. In all but a few cases, however, the performance degradation incurred by adding a wait state is less than might be expected because instruction fetching and execution are performed by separate units. If a program contains many long instructions, program execution will be CPU limited, that is, the instruction queue will be constantly filled. Thus, the execution unit does not need to wait for an instruction to be fetched. If a program contains mainly short instructions or data move instructions, the execution will be bus limited. Here, the execution unit will be required to wait often for an instruction to be fetched before it continues its operation. 2.5.1 HALT Bus Cycle The 80186 uses a HALT bus cycle to signal external circuits that the CPU has executed a HLT instruction. This bus cycle differs from a normal bus cycle in two important ways. First, since the processor is entering a halted state, none of the control lines (RD'" or WR*) will be driven active. Address and data information will not be driven by the processor, and no data will be returned. Second, the SO"'-S2'" statUs lines go to their passive state (all high) during T2 of the bus cycle, well before they go to their passive state during a normal bus cycle. RD"', WR"', INTA*, DEN'" will all go high (VOH) and DT/R'" will go low (VOL)' Like a normal bus cycle, ALE is driven active. Since no valid address information is present, the Although the amount of bus usage (Le., the percentage of bus time used by the 80186 for instruction fetching and execution required for top performance) will vary considerably from one program to another, a typical instruction mix on the 80186 will require greater bus usage than the 8086. This is greater usage caused by the higher performance execution unit requiring instructions from the pre- 2-23 210912·001 80186/80188 CPU Table 2·12 A.C. Characteristics Timing Requirements A.C. CHARACTERISTICS (TA = O·-70·C. Vee = 5V ::t: 10%) 80186 Timing Requirements. All Timings Measured At 1.5 Volts Unless Otherwise Noted. Applicable to 80186 (8 MHz) and 80186·6 (6 MHz) ----- •.... Symbol Parameter Min. Max. Units TOVCl Data in Setup (AID) 20 ns TClOX Data in Hold (AID) 10 ns TARYCHl Asynchronous Ready inactive hold time 15 ns TARYHCH Asynchronous Ready (AREAOY) active setup time· 20 ns TARYlCL AREAOY inactive setup time 35 ns TCHARYX AREADY hold time 15 ns TSRYCL Synchronous Ready (SREADY) transition setup time 20 ns TClSRY SREADY transition hold time 15 ns THVCl HOLD Setup· 25 ns TINVCH INTR, NMI. TEST, TIMERIN. Setup· 25 ns TINVCl DRQO. DRQ1. Setup· 25 ns Test Conditions -- ·To guarantee recognition at next clock. 33% duty cycle CPU clock (one-third of the time it is high, the other two-thirds of the time, it is low). These differences manifest themselves as follows: information strobed into the address latches should be ignored. However, this ALE pulse can be used to latch the HALT status from the SO*-S2* status lines. 1. No oscillator output is available from the 80186, as it is available from the 8284A clock generator. 2. The 80186 does not provide a PCLK (50% duty cycle, one-half CPU clock frequency) output as does the 8284A. 3. The clock low phase of the 80186 is narrower, and the clock high phase is wider than on the same speed 8086. 4. The 80186 does not internally factor AEN with ROY. Therefore, if both ROY inputs (AROY and SROY) are used, external logic must be used to prevent the ROY not connected to a certain device from being driven active during an access to this device (remember, only one ROY input needs to be active to terminate a bus cycle). 5. The 80186 concurrently provides both a single asynchronous ready input and a single synchronous ready input, while the 8284Aprovideseither two synchronous ready inputs or two asynchronous ready inputs as a user-strapable option. 6. The CLOCKOUT (CPU clock output signal) drive cac pacity of the 80186 is less than the CPU clock drive capacity of the 8284A. Therefore, not as many high speed devices (e.g., Schottky TTL flip-flops) may be connected to this signal as can be used with the 8284A clock output. Halting the processor does not interfere with the operation of any of the 80186 integrated peripheral units. Therefore, if a OMA transfer is pending while the processor is halted, the bus cycles associated with the OMA transfer will run. In fact, OMA latency time will improve while the processor is halted because the OMA unit will not be contending with the processor for access to the 80186 bus. 2.5.2 8086/80186 Bus Operation Differences The 80186 bus was designed to be upward compatible with the 8086 bus. As a result, the 8086 bus interface components (the 8288 bus controller and the 8289 bus arbiter) may be used directly with the 80186. There are a few differences between the two processors, however, which must be considered. These are described in the following paragraphs. CPU DUTY CYCLE AND CLOCK GENERATOR The 80186 contains an integrated clock generator which provides a 50% duty cycle CPU clock. The 8086 differs by using an external clock generator (the 8284A) with a 2·24 210912-001 80186/80188 CPU Table 2-13 A.C. Characteristics Master Interface Timing Responses 80188 (8 MHz) Symbol Paramelers TCLAV Address Valid Delay TCLAX Address Hold TCLAZ Address Float Delay TCHCZ Command Lines Float Delay TCHCV Command Lines Valid Delay (afterftoat) TLHLL ALE Width TCHLH ALE Active Delay Min. 5 MalL Min. Max. Units 55 5 63 ns 35 TcLAX 10 TCLAX 80188-6 (6 MHz) 10 ns 44 ns 45 56 ns 55 76 ns 44 ns TCLCL-35 ns TCLCL-35 35 TCHLL ALE Inactive Delay TLLAX Address Hold to ALE Inactive TCLOV Data Valid Delay 10 TCLOCX Data Hold Time 10 10 TWHOX Data Hold after WR TCLCL-40 TCLCL-50 TCVCTV Control Active Delay 1 5 70 5 87 ns TCHCTV Control. Active Delay 2 10 55 10 76 ns TCVCTX Control Inactive Delay 5 55 5 76 ns TCVOEX DEN Inactive Delay (Non-Write Cycle) 10 70 10 87 ns TAlRL Address Float to RD Active 0 TCLRL RD Active Delay 10 70 10 87 ns TCLRH RD Inactive' Delay 10 55 10 TCLCH ns TRHAV RO Inactive to Address Active TCLHAV HLDA Valid Delay TRLRH RDWidth 2TCLCL-50 2TCLCL-50 ns TWLWH WRWidth 2TcLCL-40 2TcLCL_40 ns TAVAl Add,ess Valid to ALE Low TCLCH-25 TClCH-45 TCHSV Status Active Delay 10 55 10 TCHCL ns TCLSH Status Inactive Delay 10 65 10 TCLCH ns TCLTMV Timer Output Delay 60 75 ns TCLRO Reset Delay 60 75 ns 44 ns 35 44 TCHCL-25 10 5 55 ns ns ns TCLCL-50 5 50 ns ns 0 TClCL-40 ns ns TCHCL-30 44 67 ns ns TCHQSV Queue Status Delay TCHDX Status Hold Time 10 10 ns TAVCH Address Valid to Clock High 10 10 ns 35 Test Conditions CL : 20-200 pF all outputs 100 pF max LOCAL BUS CONTROLLER AND CONTROL SIGNALS 7, The crystal or external oscillator used by the 80186 is twice the CPU clock frequency, while the crystal or external oscillator used with the 8284A is three times the CPU clock frequency, The 80186 simultaneously provides both local bus controller outputs (RD*, WR*, ALE, DEN*, and DT/R*) Table 2-14 A.C. Characteristics Chip-Select Timing Requirements Symbol Parameter Min, TCLCSV Chip-Select Active Delay Tcxcsx Chip-Selct Hold from Command Inactive 35 TCHCSX Chip-Select Inactive Delay 5 Max, Min_ 66 Max. Units 80 ns ns 35 10 35 2-25 Test Conditions 47 ns 210912-001 80186/80188 CPU Table 2·15 A.C. Characteristics ClKIN Requirements 80186 ClKIN Re.quirements Symbol 80186 (8 MHz) 80186·6 (6 MHz) Min. Max. Units Min. Max. Parameter Test Conditions TCKIN ClKIN Period TCKHl ClKIN Fall Time TCKlH ClKIN Rise Time TClCK ClKIN Low Time 25 33 ns 1.5 volts TCHCK ClKIN High Time 25 33 ns 1.5 volts 62.5 250 83 250 ns 10 ,10 ns 3.5 to 1.0 volts 10 10 ns 1.0 to 3.5 volts and status outputs (SO*, S 1*, S2 *) for use with the 8288 bus controller. This is different from the 8086 where the local bus controller outputs (generated only in minimum mode) are sacrificed if status outputs (generated only in maximum mode) are desired. These differences will manifest themselves in 8086 systems and 80186 systems as follows: HOlD/HlDA VERSUS RQ*/GT* The 80186 uses a HOLD/HLDA type of protocol for exchanging bus mastership (like the 8086 in minimum mode) rather than the RQ*/GT* protocol used by the 8086 in maximum mode. This allows compatibility with Intel's new generation of bus master peripheral devices (for example the 82586 Ethernet controller or 82730 CRT controller) . 1. Because the 80186 can simultaneously provide local bus control signals and status outputs, many systems supporting both a system bus (e.g., a MULTIBUS) and a local bus will not require two separate external bus controllers, that is, the 80186 bus control signals may be used to control the local bus while the 80186 status signals are concurrently connected to the 8288 bus controller to drive the control signals of the system bus. STATUS INFORMATION The 80186 does not provide S3-S5 status information. On the 8086, S3 and S4 provide information regarding the segment register used to generate the physical address of the currently executing bus cycle. S5 provides information concerning the state of the interrupt enable flip-flop. These status bits are always low on the 80186. 2. The ALE signal of the 80186 goes active a clock phase earlier on the 80186 then on the 8086 or the 8288. This timing minimizes address propagation time through the address latches, since typically the delay time through these latches from inputs valid is less than the propagation delay from the strobe input active. Status signal S6 is used to indicate whether the current bus cycle is initiated by either the CPU or a DMA device; subsequently, S6 is always low on the 8086. On the 80186, it is low whenever the current bus cycle is initiated by the 80186 CPU, and is high when the current bus cycle is initiated by the 80186 integrated DMA unit. 3. The 80186 RD* input must be tied low to provide queue status outputs from the 80186 (see Figure 2-6). When so strapped into "queue status mode", the ALE and WR * outputs provide queue status information. Notice that this queue status information is available one clock phase earlier from the 80186 than from the 8086. See Figure 2-7. BUS DRIVE The 80186 output drivers will drive 200pF loads. This is double that of the 8086 (l OOpF). This allows larger systems to be constructed without the need for bus buffers. It Table 2·16 A.C. Characteristics ClKOUT Requirements 80186 ClKOUT Timing (200 pF load) Symbol Parameter Min. Max. Min. Max. Units Test Conditions TCICO ~lKIN TClCl ClKOUT Period TClCH ClKOUT Low Time V2 TClCl-7.5 V2 TClCl-7.5 ns TCHCl ClKOUT High Time '/2 TClCl-7.5 '/2 TClCl-7.5 ns 1.5 volts to ClKOUT Skew TCH1CH2 ClKOUT Rise Time . TCL2Cll ClKOUT Fall Time 50 125 500 167 62.5 ns 500 ns 1.5 volts 15 15 ns 1.0 to 3.5 volts 15 15 ns 3.5 to 1. volts 2-26 210912-001 80186/80188 CPU T, Tw T, CLKOUT BHE/S7, A19/$s-A'6 /5:J ALE TCHU;-:;:~ 1::LAV____ I::: ~gt~l:: 1~5~Ao WRITE CYCLE 1\ DATAOU' TClpox:r- ~--------II.~~~I~~ --I_--+"_V"'_-+-'~ ~r-+ITLLA: RQ,INTA, DT/R ~ VOH J- TC,LAZ_ jl#~- -- __~__-+____'~_YY ~'_-~~I-~-+----l·~..,.LW.. ~------~~__~__~_____ __ - ..J- j/ TCLAZ --t---JI INTA CYCLE DT/R ~- /r FLOAT TCHCTV \ 1- :CLDX POINTEI // ~ -J-~ ___+-____'_~Y~I tlit11: = VOL _ FLOAT I~lfl;=':!:£!!£!!..-- ~[)'f----- ~ fiij,~~VOH 1 __I..-[j VI/ .__. i-rj-+J+-_ _ __ I SOFTWARE HALT-DT/R ~VOL' RD, WR, INTA, DEN ~ VOH pcs, MCS LCS, UCS ---+---t - INVALID ADDRESS TCHC~X­ _TCLCSV TCXCSX_ - Figure 2·5 Major Cycle Timing Waveforms READIWRITE SIGNALS also means that good grounds must be provided to the 80186, since its large drivers can discharge its outputs very quickly causing large current transients on the 80186 ground pins. The 80186 does not provide early and late write signals, as does the 8288 bus controller. The WR * signal generated by the 80186 corresponds to the early write signal of 2-27 210912-001 80186/80188 CPU TCH1CH2 CLKOUT 52.So ---r----~----_+-----r------r_--_+--+.r~~77~t_----_+------------ BHEIS7,A19156-A16/S3 ALE AD,,-ADo READ CYCLE DTIR DEN PCS, MCii LCS, UCS ----t""""' NOTES: 1. Following a Write cycle, the Local Bus is floated by the 80186 only when the 80186 enters a "Hold Acknowledge" state. 2. INTA occurs one clock later in RMX-mode. 3. Status inactive just prior to T4 Figure 2·5 Major Cycle Timing Waveforms (continued) Table 2·17 80186 Queue Status QS1 QSO 80186 Interpretation QSO - - - - ; ALE 0 0 no operation 0 I first byte of instruction taken from queue I 0 queue was reinitialized I I subsequent byte of instruction taken from queue QS1 .....- - - I WR r-L-R_D__. . Figure 2·6 Generating Queue Status Information 2-28 210912-001 80186/80188 CPU CLOCK OUT 186 as ________~------~----~L-~----~_*---------------~~------~--------~~,~----~~~-----as ____________________________ ____ ______ 8086 ~'~ ~J~ 1. 80186 changes queue status off falling edge of ClK 2. 8086 changes queue status off rising edge of ClK Figure 2-7 80186 and 8086 Queue Status Generation active bus cycle when address information is not being generated on the address/data pins. In most systems, the DEN* signal should NOT be directly connected to the OE* input of buffers, since unbuffered devices (or other buffers) may be directly connected to the processor's address/data pins. If DEN* were directly connected to several buffers, contention would occur during read cycles, as many devices attempt to drive the processor bus. Rather, DEN* should be a factor (along with the chip selects for buffered devices) in generating the output enable input of a bi-directional buffer. the 8288. This means that data is not stable on the address/data bus when this signal is driven active. The 80186 also does not provide differentiated lIO and memory ready and write command signals. If these signals are desired, an external 8288 bus controller may be used, or the S2* signal may be used to synthesize differentiated commands. 2.5.3 Multiplexed Address/Data Bus (186,188) The DT/R * signal determines the direction of data propagation through the bi-directional bus buffers. It is high when ever data is being driven out from the processor, and is low whenever data is being read into the processor. Unlike the DEN* signal, DT/R* may be directly connected to bus buffers, since this signal does not usually directly enable the output drives of the buffer. See Figure 2-8 for an example data bus subsystem supporting both buffered and unbuffered devices. Observe the A side of the 8286 buffer is connected to the 80186, the B side to the external device. The B side of the buffer has greater drive capacity than the A side (since it is meant to drive much greater loads). The DT/R* signal can directly drive the T (transmit) signal of the buffer, since it has the correct polarity for this configuration. Because of the bus drive capabilities ofthe 80186 (200pF, sinking 2mA, sourcing 400!-,A, roughly twice that of the 8086), this bus may not require additional buffering in many small systems. If data buffers are not used in the system, take steps to prevent bus contention between the 80186 and the devices directly connected to the 80186 data bus. Since the 80186 floats the address/data bus before activating any command lines, the only requirement on a directly connected device is that it floats its output drivers after a read BEFORE the 80186 begins to drive address information for the next bus cycle (consider the minimum time from RD* inactive until addresses active for the next bus cycle (tRHAV ) which has a minimum value of 8Sns). If the memory or peripheral device cannot disable its output drivers in time, data buffers will be required to prevent both the 80186 and the peripheral or memory device from driving these lines concurrently. Note, this parameter is unaffected by the addition of wait states. Data buffers solve this problem because their output float times are typically much faster than the 80186 required minimum. CONTROL SIGNALS The 80186 directly provides the control signals RD*, WR*, LOCK*, and TEST*. In addition, the 80186 provides the status signals SO*-S2 * and S6 from which all other required bus control signals can be generated. If buffers are required, the 80186 provides DEN* (Data ENable) and DT/R* (Data Transmit/Receive) signals to simplify buffer interfacing. The DEN* and DT/R * signals are activated during all bus cycles, whether or not the cycle addresses buffered devices. The DEN* signal is driven low whenever the processor is either ready to receive data (during a read) or when the processor is ready to send data (during a write); that is, any time during an RD* ANDWR* The RD* and WR * signals strobe data to or from memory or lIO space. The RD* signal is driven low off the beginning of T2, and is driven high off the beginning of T4 during all memory and lIO reads (see Figure 2-9). RD* 2-29 210912-001 80186/80188 CPU 80186 SIGNALS AD8-D15 DEN BUFFERED 8286 8 A ~ 8 J) OE r-- DEVICES B r 08AD15 T BUFFERED SELECT DATA BUS 8288 8 ADO- AD7 A 8 OE B 00- r---"L--. 07 T DT/A /8 //8 r UNBUFFERED } DATA BUS Figure 2·8 Example 80186 Buffered/Unbuffered Data Bus Figure 2-10). If this approach is used, the 52* signal will required latching, since the 52* signal (like 50* and 51 *) goes to a passive state well before the beginning of T4 (where RD* goes inactive). If 52* was directly used for this purpose, the type of read command (I/O or memory) could change just before T4 as 52* goes to the passive state (high). The status signals may be latched using ALE in an identical fashion as is used to latch the address signals (often using the spare bits in the address latches). will not become active until the 80186 has ceased driving address information on the address/data bus. Data is sampled into the processor at the beginning of T4. RD* will not go inactive until the processor's data hold time (IOns) has been satisfied. Note that the 80186 does not provide separate I/O and memory RD* signals. If separate I/O read and memory read signals are required, they can be synthesized using the 52* signal (which is low for all I/O operations and high for all memory operations) and the RD* signal (see CLOCK OUT ADOAD15 1. 2. 3. 4. 5. tClAZ: Clock low until address float=35 ns max tClRl: Clock low until RD active = 70 ns max t AZRl : Address float until RD active = 0 ns min t DVCl : Data valid until clock low (data input set-up time) = 20 ns min' tClDX: Clock low until data invalid (data input hold time from clock) = 10 ns min' 6. tClRH: Clock low until RD high = 10 ns min 7. tRHAV: RD high until addresses valid = 85 ns min _ 8. tRHDX: Read high until data invalid (data input hold from RD) = 0 ns min' , Input requirements of 80186, all others are output characteristics Figure 2·9 Read Cycle Timing 2-30 210912-001 80186/80188 CPU LATCH --------I D Qr---~------~~ ALE --------I STB RD --------------------------~~~~ Figure 2·10 Generating 1/0 and Memory Read Signals Often the lack of separate liD and memory RD* signal is not important in an 80186 system. Each of the 80186 chip select signals will respond on only one of memory or liD accesses (the memory chip selects respond only accesses to memory space; the peripheral chip selects can respond to accesses to either I/O or memory space, at programmer option). Therefore, the chip select signal enables the external device only during accesses to the proper address in the proper space. applications, a DRAM controller (such as the Intel 8207 or 8203) solves this problem while with iRAMs this problem may be solved by placing cross-coupled NAND gates (S-R latch) between the CPU and the iRAMs on the WR* line (see Figure 2-12). This S-R latch will delay the active going edge of the WR * signal to the iRAMs by a clock phase, allowing valid data to be driven onto the data bus. STATUS LINES The WR * signal is also driven low off the beginning of T2 and driven high off the beginning of T4. Like the RD* signal, the WR* signal is active for all memory and liD writes, and also like the RD* signal, separate liD and memory writes may be generated using the latched S2 * signal along with the WR* signal (see Figure 2-11). More importantly, however, is the active going edge of write. At the time WR * makes its active (high to low) transition, valid write data is NOT present on the data bus. When using this signal as a write enable signal for DRAMs and iRAMs consider that both of these devices require that the write data be stable on the data bus at the time of the inactive to active transition of the WE* signal. In DRAM T, The 80186 provides three status outputs which are used to that indicate the type of bus cycle currently being executed. These signals go from an inactive state (all high) to one of seven possible active states during the T state immediately preceding T1 of a bus cycle (see Figure 2-13). The possible status line encodings and their interpretations are given in Table 2-18. The status lines are driven to their inactive state in the T state (T3 or Tw) immediately preceding T4 of the current bus cycle. The status lines may be directly connected to an 8288 bus controller, which can be used to provide local bus control T3 ADO· AD15 __~~~~J~______+-~~ __~~____~~'\-~~___ \Vii I I I I I 1. tCLOV: Clock low until data valid = 44 ns max 2. tCVCTV: Clock low until WR active = 70 ns max 3. tCVCTX: Clock low until WR inactive = 55 ns max 4. tCLOOX: Clock high until data invalid = 10 ns max 5. WR inactive until data invalid = t CLCL min - t CVCTX + tCLDOX = 125 - 55 + 10 = 80 ns Figure 2·11 Write Cycle Timing 2-31 210912·001 80186/80188 CPU CLKOUT --------~r-~ DELAYED WRITE (DATA VALID ON LEADING EDGE) Figure 2·12 Synthesizing Delayed Write from the 80186 T, or Tw T, T. CLOCK OUT STATUS ACTIVE STATUS INFO I T,or INACTIVE STATUS T, T. Tw CLOCK OUT STATUS ACTIVE STATUS ACTIVE STATUS LINES Figure 2·13 Active·lnactive Status Transitions Table 2·18 80186 Status Line Interpretation S2 S1 S9 0 0 0 0 1 0 0 0 I I 0 1 0 1 0 1 I 0 0 1 1 1 I I Operation 80186 8288 interrupt acknowledge read I/O write I/0 halt instruction fetch read memory write memory passive SO-52 SO-52 BUS CONTROL CLOCK OUT SIGNALS CLK Figure 2·14 80186/8288 Bus Controller Interconnection signals or MULTIBU5 control signals (see Figure 2-14). Use of the 8288 bus controller does not preclude the use of the 80186 generated RD*, WR* and ALE signals, however. The 80186 directly generated signals may be used to provide local bus control signals, while an 8288 provides MULTIBU5 control signals, for example. The 80186 provides two additional status signals: 56 and 57. 57 is equivalent to BHE* (refer to Volume I of this User's Guide) and appears on the same pin as BHE*. BHE*/57 changes state, reflecting the bus cycle about to 2-32 210912·001 80186/80188 CPU be run, in the middle of the T state (T4 or Ti) immediately preceding Tl of the bus cycle. This timing means that BHE*/S7 does not need to be latched, i.e., it may be used directly as the BHE* signal. S6 provides information concerning the unit generating the bus cycle. It is time multiplexed with A19, and is available during T2, T3, T4, and Tw. In the 8086 family, all central processors (e.g., the 8086, 8088, and 8087) drive this line low, while all I/O processors (e.g., 8089) drive this line high during their respective bus cycles. Following this scheme, the 80186 drives this line low whenever the bus cycle is generated by the 80186 CPU, but drives it high when the bus cycle is generated by the integrated 80186 DMA unit. This process allows external devices to distinguish between bus cycles fetching data for the CPU from those transferring data for the DMA unit. Figure 2-15 Circuit Holding LOCK" Active Until Ready is Returned executed. The LOCK prefix may be executed well before the processor is prepared to perform the locked data transfer. This process activates the LOCK* signal before the first LOCKED data cycle is performed. Since LOCK* is active before the processor requires the bus for the data transfer, opcode pre-fetching can be LOCKED. However, since the 80186 does not activate the LOCK * signal until the processor is ready to actually perform the locked transfer, locked pre-fetching will not occur with the 80186. The three other status signals, S3, S4, and S5, available on the 8086 are not provided on the 80186. Together, S3 and S4 indicate the segment register from which the current physical address derives. S5 indicates the state of the interrupt flip-flop. On the 80186, these signals will always be low. TEST" AND LOCK" The LOCK* signal does not remain active until the end of the last data cycle of the locked transfer; this may cause problems in some systems if, for example, the processor requests memory access from a dual ported RAM array and is denied immediate access (because of a DRAM refresh cycle, for example). When the processor finally gains access to the RAM array, it may have already dropped its LOCK* signal. This allows the dual port controller to give the other port access to the RAM array instead. Figure 2-15 illustrates an example circuit which can be used to hold LOCK* active until a RDY has been received by the 80186. The 80186 provides a TEST* input and a LOCK* output. The TEST* input is used in conjunction with the processor WAIT instruction. TEST* is typically driven by a processor extension (like the 8087) to indicate whether it is busy. Then, by executing the WAIT (or FWAIT) instruction, the central processors may be forced to temporarily suspend program execution until the processor extension indicates that it is idle by driving the TEST* line low. The CPU drives LOCK* output low whenever the data cycles of a LOCKED instruction are executed. A LOCKED instruction is generated whenever the LOCK prefix occurs immediately before an instruction. The LOCK prefix is active for the single instruction immediately following the LOCK prefix. This signal indicates to a bus arbiter (e.g., the 8289) that a series of locked data transfers is occurring. The bus arbiter should not release the bus while locked transfers are occurring. The 80186 will not recognize a bus HOLD, nor will it allow DMA cycles to be run by the integrated DMA controller during locked data transfers. Locked transfers are used in multiprocessor systems to access memory based semaphore variables which control access to shared system resources (refer to Intel Application Note AP-106, "Multiprogramming with the iAPX88 and iAPX86 Microsystems," by George Alexy, September 1980). MULTIBUS® APPLICATIONS The 8288 and 8289 are the bus controlled and multimaster bus arbitration devices used with the 8086 and 8088. Because the 80186 bus is similar to the 8086 bus, they can be directly used with the 80186 (see Figure 2-16). The 8288 bus controller generates control signals (RD*, WR*, ALE, DTlR*, DEN, etc.) for an 8086 maximum mode system. It derives its information by decoding status lines SO*-S2 * of the processor. Because the 80186 and the 8086 drive the same status information on these lines, the 80186 can connect directly to the 8288 just as in an 8086 system. Using the 8288 with the 80186 does not prevent using the 80186 control signals directly. Many systems require both local bus control signals and system bus control signals. In this type of system, the 80186 lines could be used as the local signals, with the 8288 lines used as the system signals. On the 80186, the LOCK* signal goes active during Tl of the first DATA cycle of the locked transfer. It is driven inactive three T states after the beginning of the last DATA cycle of the locked transfer. On the 8086, the LOCK* signal is activated immediately after the LOCK prefix is 2-33 210912-001 80186/80188 CPU the upper and lower byte of a 16-bit word each have a unique byte address by which they may be individually accessed, even though they share a common word address (see Figure 2-17). TO MULTI-MASTER BUS ADDRESS LATCHES & DATA BUFFERS All bytes with even addresses (AO = 0) reside on the lower 8 bits of the data bus, and all bytes with odd addresses (AO =1) reside in the upper 8 bits of the data bus. Whenever an access is made to only an even byte, AO is driven low, BHE* is driven high, and the data transfer occurs on 00-07 of the data bus. Whenever an access is made to only an odd byte, BHE* is driven low, AO is driven high, and the data transfer takes place on 08-016 of the data bus. If a word access is performed to an even address, both AO and BHE* are driven low and the data transfer takes place over the entire 16-bit data bus (00-015). 80186 8288 so- so- 52 S2 ALE DEN DT/R f-- CLK CLOCKOUT LCS UCS PCSO ~ 8289 L...,.. SO- 52 SYSB/RESB "----0. CLK Word accesses are made to the addressed byte and the next higher numbered byte. Two byte accesses must be performed if a word access is performed to an odd address, the first to access the odd byte at the first word address on 08-015, and the second to access the even byte at the next sequential word address on 00-07. For example, byte 0 and byte 1 can be individually accessed (read or written) in two separate bus cycles (byte accesses) to byte addresses 0 and 1 at word address 0 (see Figure 2-17). They may also be accessed together in a single bus cycle (word access) to word address O. However, two word access bus cycles are required to address 1. The first cycle accesses byte 1 at word address 0 (note byte 0 will not be accessed), and the second cycle accesses byte 2 at word address 2 (note byte 3 will not be accessed). Therefore, to maximize processor performance, all data should be located at even addresses. Figure 2·16 80186/8288/8289 Interconnection NOTE In an 80186 system, the 8288-generated ALE pulse occurs later than that of the 80186 itself. In multi-master bus systems, use the 8288 ALE pulse to strobe the addresses into the system bus address latches to insure that the address hold times are met. The 8289 bus arbiter arbitrates the use of a multi-master system bus among various devices each of which can become the bus master. This component also decodes status lines 80*-82 * of the processor directly to determine when the system bus is required. When the system bus is required, the 8289 forces the processor to wait until it has acquired control of the bus, then it allows the processor to drive address, data and control information onto the system bus. The system determines when it requires system bus resources by an address decode. Whenever the address being driven coincides with the address of an on-board resource, the system bus is not required and thus will not be requested. The circuit shown in Figure 2-16 factors the 80186 chip select lines to determine when the system bus should be required, or when the 80186 request can be satisfied using a local resource. When byte reads are made, the data returned on the half of the data bus not being accessed is ignored. When byte writes are made, the data driven on the half of the data bus not being written is indeterminate. 2.5.5 Memory and 110 Peripherals Interface The 80186 uses the same techniques for interfacing memory (i.e., static RAM, dynamic RAM, EPROM, and ROM) as used for the 8086. Before continuing with this section, review the discussions regarding memory interface in paragraphs 1.5.4. MEMORY INTERFACE 2.5.4 Data Transfer The 80186 includes a chip select unit that generates hardware chip select signals for memory and I/O accesses generated by the 80186 CPU and OMA units. This unit is programmable to fulfill the chip select requirements (in terms of memory device or bank size and speed) of most small and medium sized 80186 systems. During clock cycles T2, T3, Tw, and T4 of a bus cycle the m}lltiplexed address/data bus becomes a 16-bit data bus. Data transfers on this bus may be either in bytes or in words. All memory is byte addressable. This means that 2-34 210912-001 80186/80188 CPU r.: 16_BITS:~ 8 BITS--I..-8 BITS WORD ADDRESS 4 5 4 3 2 0 0 08015 DO07 I~UM"'~ IN BYTE FIELD 80186 SIGNAL CONNECTIONS Figure 2-17 Physical Memory Byte/Word Addressing Chip selects are driven for internally generated bus cycles only. Any cycles generated by an external unit (e. g., an external DMA controller) will not cause the chip selects to go active. Therefore, any external bus masters must be responsible for their own chip select generation. Also, during a bus HOLD, the 80186 does not float (i.e., tristate) the chip-select lines. Therefore, logic must be included to enable the devices to which the external bus master wishes to access (see Figure 2-18). to the Al address line from the 80186, NOT to the AO line. Also, AO signals a data transfer on only the lower 8 bits of the 16-bit data bus. The EPROM outputs are connected directly to the address/data inputs of the 80186, and the 80186 RD* signal is used as the OE* for the EPROMs. The chip select output of the 80186 drives the chip enable of the EPROM directly. For this configuration, access time for the EPROMs is calculated as follows: ROM and EPROM Interface Time from address: The Intel 2764 EPROM provides one of the simplest memory interfaces to implement with the 80186. The address is latched using the address generation circuit (see Figure 2-19). The AO line of each EPROM is connected !cLAY + (3 + N)*tcLcL - t[YQy(8282) -tDYCL = 375 + (N * 125) -44-30 -20 =281 +(N * 125) ns 80186 CHIP SELECT~ MEMORY or I/O EXTER"N'A"LL~Y~G~E=N~E=R~AT~E~D"'CHIP SELECT ---~ DEVICE CHIP SELECT Figure 2-18 80186/External Chip Select/Device Chip Select Generation 2764 CE 13 A13 A1 RD / /13 / ~ A12 AO OE 00-07 f ADO-AD7 AD8-AD15 I /8 2764 ' - CE r- A12 AO OE 00-07 /8 Figure 2-19 Example 2764/80186 Interface 2-35 210912-001 80186/80188 CPU Time from chip select: used to afford a much simpler interface with no loss of performance. The iRAM automatically selects between these modes by the nature of the control signals. (3 + N)*tCLC - tCLCSV - tOVCL = 375 + (N * 125) -66-20 =289+(N * 125) ns The 2186 is a leading edge triggered device, therefore, address and data information are strobed into the device on the active going (high to low) transition of the command signal. This action requires that both CE* and WR* be delayed until the address and data driven by the 80186 are guaranteed stable. Figure 2-20 shows a simple circuit which can be used to perform this function. ALE CANNOT be used to delay CE* if addresses are not latched externally. This would violate the address hold time required by the 2186 (30ns). Time from RD* (OE*): (2 + N)tcLCL - tCLRL - tOVCL =250+(N * 125)-70-20 =160+(N * 125) ns where: tcLAV tcLCL t,vov tOVCL tcLCSV tCLRL N time from clock low in T1 until address are valid clock period of processor time from input valid of 8282 until output valid of 8282 186 data valid input setup time until clock low time ofT4 time from clock low in T 1 until chip selects are valid time from clock low in T2 until RD* goes low number of wait states inserted Since the 2186 devices are RAMs, data bus enables BHE* and AO MUST be used to factor either the chip enables or write enables of the lower and upper bytes of the 16-bit RAM memory system. If this is not done, all memory writes, including single byte writes, will write to both the upper and lower bytes of the memory system. The example system shown in Figure 2-20 uses BHE* and AO as factors to the 2186 CE * because both of these signals (AO and BHE*) are valid when the address information is valid from the 80186. As indicated in the preceding calculations, 250ns EPROMs must be used for zero wait state operation. The only significant parameter not included in the preceding calculations is t RHAV ' This is the time from RD* inactive (high) until the 80186 begins driving address information. This parameter is typically 85ns to meet the 2764-25 (250ns speed selection) output float time requirement (85ns). If slower EPROMs are used, a discrete data buffer MUST be inserted between the EPROM data lines and the address/data bus. This is required since these devices may continue to drive data information on the multiplexed addressl data bus when the 80186 begins to drive address information for the next bus cycle. The 2186 requires a certain amount of recovery time between the time chip enable goes inactive and the chip enable going active to insure proper operation. For a "normal" cycle (a read or write), this time is tEHEL = 40 ns. The 80186 chip select lines go inactive soon enough at the end of a bus cycle to provide the required recovery time even if two consecutive accesses are made to the iRAMs. If the 2186 *CE is asserted without a command signal (WE* or OE*), a false memory cycle (FMC) is generated. Whenever an FMC is generated, the recover time is much longer; another memory cycle must not be initiated for 200ns. As a result, if the memory system will generate FMCs, CE* must be taken away in the middle of the T state (T3 or Tw) immediately preceding T4 to insure that two consecutive cycles to the iRAM will not violate this parameter. Status going passive (all high) can be used for this purpose. These lines will all go high during the first phase of the next to last T state (either T3 or Tw) of a bus cycle. RAM Interface Randon access memory (RAM) devices are interfaced to the 80186 very much as they are interfaced to the 8086. The Intel 2186 iRAM is a memory device ideally suited for 80186 applications (see Figure 2-20). This RAM device incorporates many requisite system features, including low power dissipation, automatic initialization, extended cycle operation, and two-line bus control to eliminate bus contention. The 2186 almost ideally matches the 80186 because of its large scale integration and the fact that it does not require address latching. Since the 2186 is a dynamic device, it requires refresh cycles to maintain data integrity. The circuits that generate these refresh cycles are integrated within the 2186. To support the required refresh cycles the 2186 has a ready line which is used to suspend processor operation if a processor RAM access coincides with an internally generated refresh cycle. The ready line is an open collector output, allowing many devices to be wire OR'ed together, since more than one device may be accessed at a time. These lines are also normally ready, which means that they will be high whenever the 2186 is not being accessed, i.e., they will only be driven low if a processor request coincides with an internal refresh cycle. Therefore, the ready lines from the iRAM must be factored into The 2186 is internally a dynamic RAM integrated with refresh and control circuits. It operates in two modes: pulse mode and late cycle mode. Pulse mode is entered if the CE* input signal to the device is low for a maximum of 130ns, and requires the command input (RD* or WE*) to go active within 90ns after CE*. Because of these requirements, interfacing the 80186 to the 2186 in pulse mode would be difficult. Instead, the late cycle mode is 2-36 210912·001 80186/80188 CPU CLKOUT -,~---ir\-'>----r-_ LCS BHE -------------4---------~~ AO CLKOUT ----------------L../ ---.:------j-"\.-______ WR 2186 2186 CE CE WE WE ~ --------------------~~ OE OE 4.7K AO-A12 AO-A12 ROY AROY 00-07 :g~ _______________ 8 A01- 13 ~~L_~---~~~-~~~_~ A013 AD8AD15 Figure 2-20 Example 2186/80186 Inter1ace the 80186 RDY circuit only during accesses to the iRAM itself. Since the 2186 refresh logic operates asynchronously to the 80186, this RDY line must be synchronized for proper operation with the 80186, either by the integrated ready synchronizer or by an external circuit. The example circuit uses the integrated synchronizer associated with the ARDY processor input. 3 * tCLCL - tcLCSV - (TTL delay) - tovCL = 375 -66- 30-20ns =258 ns where: tcLCL tcLCsv tOVCL The 2186 ready lines are active unless a processor access coincides with an internal refresh cycle. These lines must go inactive after a cycle is requested in time to insert wait states into the data cycle. The 2186 drives this line low within 50ns after CE * is received, which is early enough to force the 80186 to insert wait states if they are required. Of primary concern in this case is that the ARDY line be driven not active before its setup time in the middle of T2. This setup time is required by the nature of the 80186 asynchronous ready synchronization circuits. Since the 2186 RDY pulse may be as narrow as 50ns, if ready was returned after the first stage of the synchronizer, and subsequently changed states within the ready setup and hold time of the high to low going edge of the CPU clock at the end of T2, improper operation may occur. CPU clock cycle time time from clock low in T1 until chip selects are valid = 80186 data in setup time before clock low in T4 The data valid from OE* active is less than lOOns, and is therefore not an access time limiter in this interface. Additionally, the 2186 data float time from RD* inactive is less than the 85ns 80186 imposed maximum. The CE* generation circuit shown in Figure 2-20 provides an address setup time of at least 11 ns, and an address hold time of at least 35ns (assuming a maximum two level TTL delay ofless than 30ns). Write cycle address setup and hold times are identical to the read cycle times. This circuit shown provides at least Ilns write data setup and lOOns data hold time from WE*, easily meeting the Ons setup and 40ns hold times required by the 2186. For more information concerning 2186 timing and interfacing refer to the 2186 data sheet in the Memory Components Handbook (Intel Order Number: 210830-004, or The example interface shown in Figure 2-20 has a zero wait state RAM read access tie from CE* of: 2-37 210912-001 80186/80188 CPU " 8203 MCS1 MCSO J '17/ A17-A1 J SEL WR AOA16, WE ~ BO SACK 1 / AROY r- ~ 220 UPPER BYTE WE 220 LOWER BYTE WE DRAMS, XACK RO f AOO-A015 /- f 010-15 000-15 8282 ~ 000-7 010-7 OE ./ ~ I- STB - 000-7 - 8282 OE '----- STB 010-7 - Figure 2·21 Example 8203/DRAM/80186 Interface the Intel Application Note AP-132, "Designing Memory systems with the 8Kx8 iRAM" by John Fallin and William Righter (June 1982). zation time, the 8203 should be used with the highest speed crystal that will maintain DRAM compatibility. Even if a 25 MHz crystal is used (the maximum allowed by the 8203), two wait states will be required by the example circuit when using 150ns DRAMs with an 8 MHz 80186, three wait states if 200ns DRAMs are used (see Figure 2-22). 8203 Dynamic RAM Interface The Intel 8203 Dynamic RAM Controller is designed specifically to provide all of the signals necessary (i.e., control, address multiplexing, and refresh generation) to use 2164, 2117 or 2118 dynamic RAMs in microcomputer systems. As such, it is ideally suited to 80186 applications. For an application example of an 80186 used with the 8203 and interfaced with 64K dynamic RAMs (see Figure 2-21). The entire RAM array controlled by the 8203 can be selected by one or a group of the 80186 provided chip selects. These chip selects can also be used to insert the wait states required by the interface. Since the 8203 is operating asynchronously to the 80186, the RDY output of the 8203 (used to suspend processor operation when a processor DRAM request coincides with a DRAM refresh cycle) must be synchronized to the 80186 (the 80186 ARDY line provides the necessary ready synchronization). The 8203 ready outputs operate in a normally not ready mode, that is, they are only driven active when an 8203 cycle is being executed, and a refresh cycle is not being run. This process differs fundamentally from the normally ready mode used by the 2186 All 8203 cycles are generated from control signals (RD* and WR*) provided by the 80186. These signals will not go active until T2 of the bus cycle. In addition, since the 8203 clock (generated by the internal crystal oscillator of the 8203) is asynchronous to the 80186 clock, all memory requests by the 80186 must be synchronized to the 8203 before the cycle will be run. To minimize this synchroni2-38 210912-001 80186/80188 CPU T, Tw T, T, 186 ___~~+-,., RD 8203 _ _ _ _ _ _ _ _ _ _~--..., RAS -+_____+ __~--_I_... 8203 _ _ CAS RAM ""~~~""~~~""~~""~~~~~\r----4~-------DATA ~~~~~~~~~~~~~~~~~~'~__-+~_________ LATCH DATA ~""~mm~mmmm~~~~~~~~~~~~~r~~--------~~~~~~~~~~~~~~~~~~~U~ __~_________ 1. tCLEL: Clock low until read low = 70 ns max 2. tCR: Command active until RAS = 150 ns max' 3. tcc: Command active until CAS = 245 ns max' 4. tCAC: Access time from CAS = 85 ns max 5. tISOU: Input to output delay = 30 ns max 6. t OVCL: Data valid to clock low (data in set up) = 20 ns min Total Access Time = 70 + 245 +85 +30 +20 = 450 ns (3.6 T-states) (j) &@ are 186 specs ® & @ are 8203 specs @ @ is a 2164A-15 spec is on 8282 spec 'Assumes 25MHz 8203 operation Figure 2·22 8203/2164A·15 Access Time Calculation iRAMs. The 8203 SACK* signal is presented to the 80186 only when the DRAM is being accessed. Notice that the SACK* output of the 8203 is used, rather than the XACK * output. Since the 80186 will insert at least one full CPU clock cycle between the time RDY is sampled active, and the time data must be present on the data bus, using the XACK* signal would insert unnecessary additional wait states, since it does not indicate ready until valid data is available from the memory. (For more information about 8203/DRAM interfacing and timing, refer to the 8203 data sheet, or Intel Application Note AP97 A, "Interfacing Dynamic RAM to iAPX86/88 Systems Using the Intel 8202A and 8203" by Brad May, April 1982). when programmed to run asynchronously it inserts the necessary synchronization circuits for RD*, WR *, PE*, and PCTL inputs. The 8208 is capable of addressing 64K and 256K dynamic RAMs. It directly supports the 2164A RAM family or any RAM with similar timing requirements. Figure 2-24 shows the connection of the processor address bus to the 8208 using the different RAMs. The 8208 divides memory into two banks with each bank having its own Row Address Strobe (RAS*) pair and Column Address Strobe (CAS*) pair. This organization permits RAM cycle interleaving. RAM cycle interleaving overlaps the start of the next RAM cycle with the RAM precharge period of the previous RAM cycle. Hiding the precharge period of one RAM cycle behind the data access period of the next RAM cycle optimizes memory bandwidth and is effective as long as successive RAM cycles occur in the alternate banks. Successive data accesses to the same bank cause the 8208 to wait for the precharge time of the previous RAM cycle. The exception to this is when the 8208 is programmed in an iAPX 186 synchronous configuration consecutive read cycles to the same bank do not result in additional wait states, zero wait state reads result. 8208 Dynamic RAM Interface The Intel 8208 Dynamic RAM Controller is designed to address, refresh and directly drive 64K and 256K Dynamic RAM's in iAPX 186 and iAPX 188 systems. The 8208 contains the control circuits capable of supporting one of several possible interface bus structures (see Figure 2-23). It may be programmed to run synchronous or asynchrouous to the processor clock. The 8208 has been optimized to run synchronously with the 801861188 and 2-39 210912-001 80186/80188 CPU 8208/AACK - - _ _ , - - , . Slil-----.\ 51 t--------~ :g~:~ Sl S2~-.+-I--+-----~ ADDR/DATA SYNCHRONOUS-STATUS INTERFACE ADDRESS DECODE 1------,./ ASYNCHRONOUS-STATUS INTERFACE ASYNCHRONOUS-COMMAND INTERFACE SYNCHRONOUS-COMMAND INTERFACE Figure 2·23 8208 Dynamic RAM Controller Interfaces h. Refresh If all of the RAM banks are not occupied, the 8208 reassigns the RAS* and CAS* strobes to allow wider data words without increasing the loading on the RAS* and CAS* drivers. Table 2-19 shows the bank selection decoding and the horizontal word expansion, including RAS* and CAS* assignments. For example, if only one RAM bank is occupied, the two RAS* and CAS* strobes are activated with the same timing. Program bit RB is not used to check the bank select input BS. System design must protect from "illegal", non-existent banks of memory by deactivating the PE input when addressing an "illegal", non-existent bank of memory. The 8208 adjusts and optimizes either the fast or slow RAMS as programmed. The 8208 provides an internal refresh interval counter and a refresh address counter to allow the 8208 to refresh memory. It will refresh 128 rows every 2 milliseconds or 256 rows every 4 milliseconds. This allow RAM refresh options to be supported. Also, the 8208 has the ability to refresh 256 row address locations every 2 milliseconds via the Refresh Period programming option. the 8208 may be programmed for any of five refresh options. These are: 1. Internal refresh only; 2. External refresh with failsafe protection; 3. External refresh without failsafe protection; a_ 8208 Memory Initialization 4. Burst Refresh modes; 5. No Refresh. After programming is complete, the 8208 performs eight RAM "wake-up" cycles to prepare the dynamic RAM for proper device operation. During the "warm-up" some of the RAM interface parameters may not be met, but this should not harm the dynamic RAM array. The refresh time interval may be decreased by 10%,20% or 30%. This option allows the 8208 to compensate for reduced clock frequencies. An additional 5 % interval 2-40 210912-001 80186/80188 CPU TRESP = PROG + TPREP where: (NOTE 1) AH8 TPROG TPREP A11-A19 AHO-AH7 = (40)(TCLCL) which is programming time = (8)(32)(TCLCL) which is RAM warm-up time if TCLCL = 125 nsec then TRESP = 37 usec 8208 AL8 d. Reset The 8208 uses the falling edge of the asynchronous RESET input to directly sample the logic levels of the PCTL, RFRQ, and POI inputs. The internally synchronized falling edge of reset is used to begin programming operations (shifting the contents of the external shift register, if needed, into the POI input). eso 256K RAM INTERFACE 64K RAM INTERFACE NOTES: The 8208 will register bu t not respond to command and status inputs until programming is completed. A simple means of preventing commands or status from occurring this period is to differentiate the system reset pulse to obtain a smaller reset pulse for the 8208. The total time of the 8208 reset pulse and the 8208 programming time must be less than the time before the first command the CPU issues in systems that alter default port synchronization programming bit (default is synchronous interface). Differentiated reset is unnecessary when the default synchronization programming is used. 1. Unassigned address input pins should be strapped high or low. 2. AO along with BHE are used to select a byte within a processor word. 3. low order address bits are used as bank select inputs so that consecutive memory access requests are to alternate banks allowing bank interleaving of memory cycles. Figure 2-24 8208 Processor Address Interfaces The differentiated reset pulse would be shorter than the system reset pulse by at least the programming period required by the 8208. The differentiated reset pulse first resets the 8208, and system reset would reset the rest of the system. While the rest of the system is still in reset, the 8208 completes its programming. Figure 2-25 illustrates a circuit to accomplish this task. Within four clocks after RESET goes active, all the 8208 outputs will go high, except for AOO-2, which will go low. shortening is built-in in all refresh interval options to compensate for lock variations and non-immediate response to the internally generated refresh request. c_ External Refresh Requests After RESET External refresh requests are not recognized by the 8208 until after it is finished programming and preparing memory for access. Memory preparation includes 8 RAM cycles to prepare and ensure proper dynamic RAM operation. The time it takes for the 8208 to recognize a request is shown as follows. 2.5.6 Interpreting the 80186/80188 Bus Timing Diagrams Table 2-19 Bank Selection Decoding and Word Expansion Program Bit RB Bank Input BS 0 0 'AAS'o l' 0 1 Illegal 1 0 1 1 RASo, CAS'o to Bank 0 ~1' CAS 1 to Bank 1 The 80186 bus and the 8086 bus are very similar in structure. Both include a multiplexed address/data bus, along with various control and status lines. Table 2-20 lists the 80186 bus signals by function and name. Each bus cycle requires a minimum of 4 CPU clock cycles along with any number of wait states required to accommodate the speed access limitations of external memory or peripheral devices. The bus cycles initiated by the 80186 CPU are identical to those initiated by the 80186 integrated DMA unit. The following paragraphs describe the 80186 bus timing with all timing values given for an 8MHz 80186. Any future speed selections for the 80186 may have different values for the various parameters. 8208 AAS/eA$ Pair Allocation CASo 1to Bank 0 2-41 210912-001 80186/80188 CPU SYSTEM r--------, 8208 .1----- t1~ RE~ L-- =-1 RES~_______________ t1 PROGRAMMING TIME OF 8208 -(!}-1~ 1-1 I I I ..·1 RESET DIFFERENTIATED RESET (!}2 (LOW (HIGH PHASE) PHASE) L Figure 2-26 Single T-State NOTES: 1. Required only when the port synchronization option(s) is altered from its initial default value. 2. diately before TI (either T4 or T j ). Because information concerning an upcoming bus cycle occurs during the T-state immediately before the first T-state of the actual bus cycle, two different types of T4 and T j can be generated. One where the T-state is immediately followed by a bus cycle and one where the T-state is immediately followed by an idle T state. Vee must be stable before system reset is activated when using this circuit. Figure 2-25 8208 Differentiated Reset Circuit Eaeh 80186 clock cycle (called "T" states) are numbered sequentially T 1, T2 , T 3 , Tw and T4. Additional idle T states (T) can occur between T4 and TI when the processor requires no bus activity (instructions fetches, memory writes, 110 reads, etc.). The ready signals control the number of wait states (Tw) inserted in each bus cycle. This number can vary from zero to positive infinity. During the first type of T4 or Tjo status information concerning the upcoming bus cycle is generated. This information will be available no later than tcHsv (55 ns) after the low-to-high transition of the 80186 clock in the middle of the T state. During the second type of T4 or Tjo the status outputs remain inactive (high), since no bus cycle is to be started. This means that the decision per the nature of a T 4 or T j state (Le., whether it is immediately followed by a T j or a T I) is decided at the beginning of the T-state immediately preceding the T4 or T j (see Figure 2-13). This has consequences for the bus latency time. The beginning of the T state is signaled by a high to low transition of the CPU clock. Each T state is divided into two phases, phase 1 (or the low phase) and phase two (or the high phase) which occur during the low and high levels of the CPU clock, respectively (see Figure 2-26). Physical addresses are generated by the 80186 during TI of the bus cycle. Since the address and data lines are multiplexed on the same set of pins, addresses must be latched during T 1 if they are required to remain stable for the duration of the bus cycle. To facilitate latching of the physical address, the 80186 generates an active high ALE (Address Latch Enable) signal which can be directly connected to a transparent latch's strobe input. Different types of bus activity occur during all of the T-states (see Figure 2-27). Address generation information occurs during T 1, data generation during T2 , T l , Tw and T4. The beginning of a bus cycle is signaled by the status lines of the processor going from a passive state (all high) to an active state in the middle of the T-state imme- Table 2-20 80186 Bus Signals Slgn.IN.me Function address/data address/status co-processor control local bus arbitration local bus control multi-master bus ready (wait) interface status information ADO-ADIS A16/S3-A19-S6,BHE/S7 TEST HOLD,HLDA ALE,RD,WR,DT/it,DEN LOCK SRDY,ARDY SO-S2 2-42 210912-001 80186/80188 CPU T, T2 T, LINES DATA LINES ADDRESSI -;--------~~~~~:J~~----~--------~----~ CONTROL ~--------~---------ft SIGNALS (RD,WR) Figure 2-27 Example 80186 Bus Cycle Addresses are guaranteed valid for no more than teLAv (44 ns) after the beginning of T I' and will remain valid at least teLAX (10 ns) after the end of T 1 • See Figure 2-28 for 80186 physical address generation parameters. The ALE signal is driven high in the middle of the T state (either T4 or T.) immediately preceding T I and is driven low in the middle ofT!> no sooner than t AVAL (30 ns) after addresses become valid. This parameter (tAVAL) is required to satisfy the address latch set-up times of address valid until strobe inactive. Addresses remain stable on the address/data bus at least tLLAX (30 ns) after ALE goes inactive to satisfy address latch hold times of strobe inactive to address invalid. the propagation delay through the latch rather than the delay from the latch strobe, which is typically longer than the propagation delay. For the Intel 8282 latch, this parameter is tIVOV , the input valid to output valid delay when strobe is held active (high). Note that the 80186 drives ALE high one full clock phase earlier than either the 8086 or 8288 bus controller. The 80186 also keeps ALE high throughout the 8086 or 8288 ALE high time (i.e., the 80186 ALE pulse is wider). A typical circuit for latching physical addresses (see Figure 2-29) uses three 8282 transparent octal non-inverting latches to demultiplex all 20 address bits provided by the 80186. Typically, the upper 4 address bits are used only to select among various memory components and subsystems, so when the integrated chip selects (see paragraph Because ALE goes high long before addresses become valid, the delay through the address latches will be mainly T, T2 CLOCK OUT ALE AO-A19 -----...,..-t-~ NOTES: 1. tCHlH: Clock high to ALE high=35 ns max 2. tcLAv: Clock low to address valid =44 ns max 3. tCHlL: CloCk high to ALE low=35 ns max 4. tCLAx: Clock low to address invalid (address hold from clock low)=10 ns min 5. tllAX: ALE low to address invalid (address hold from ALE)=30 ns min 6. t AVAl : Address valid to ALE low (address setup to ALE)=30 ns min Figure 2-28 80186 Address Generation Timing 2-43 210912-001 80186/80188 CPU 186 SIGNALS A16A19 I / 0 STS - AD8AD15 A16-A19 8282 /8 I 7 ~ -, L4 7 OE STS ADOAD7 LATCHED ADDRESS SIGNALS 8282 /4 /8 0 / 0 / A8-A15 OE 8282 /8 I STS ALE ~ = L.8 AO-A7 OE Figure 2-29 Oemultiplexing the 80186 Address Bus 2.8.4) are used, these upper bits do not need to be latched. The worst case address generation time from the beginning of T 1 (including address latch propagation time tIVOV of the Intel 8282) for the circuit is: 2_5_7 Wait State Generator The 80186 provides two ready lines, a synchronous ready (SRDY) line and an asynchronous ready (ARDY) line. These lines signal the processor to insert wait states (Tw) into a CPU bus cycle. Wait states allow slower devices to respond to CPU service requests (reads or writes). They are only inserted when both ARDY and SRDY are low (i.e., only one of ARDY or SRDY need be active to terminate a bus cycle). Any number of wait states may be inserted into a bus cycle. The 80186 will ignore the RDY inputs during an access to the integrated peripheral registers, and to any area where the chip select ready bits indicate that the external ready should be ignored. tCLAV (44 ns) + t1vOV (30 ns) =74 ns Many memory and peripheral devices may not require addresses to remain stable throughout data transfer. Examples of these are the 80130 and 80150 operating system firmware chips, and the 2186 8K x 8 iRAM. If a system is entirely constructed of these types of devices, addresses do not need to be latched. In addition, two of the peripheral chip select outputs from the 80186 may be configured to provide latched A I and A2 outputs for peripheral register selects in a system which does not demultiplex the address/data bus. Since the timing between the two ready lines is different, asynchronous ready inputs to the ARDY line are internally synchronized to the CPU clock before being presented to the processor (see Figure 2-30). Figure 2-31 illustrates an ARDY synchronization circuit. The first flip-flop to "resolves" the asynchronous transition of the ARDY line. It will achieve a definite high or low level before the second flip-flop latches its output for presentation to the CPU. When latched high, it allows the level present on the ARDY line to pass directly to the CPU; when latched low, it forces not ready to be presented to the CPU. One additional signal is generated by the 80186 to address memory. This is BHE* (Bus High Enable). This signal, along with AO, is used to enable byte devices connected to either or both halves (bytes) of the 16-bit data bus. Because AO is used only to enable devices onto the lower half of the data bus, memory chip address inputs are usually driven by address bits AI-AI9, NOT AO-AI9. This provides 512K unique word addresses, or 1M unique BYTE addresses. BHE* is not present on the 8-bit 80188. All data transfers occur on the eight bits of the data bus. With this scheme, only the active going edge of the ARDY signal is synchronized. Once the synchronization flip-flop has sampled high, the ARDY input directly drives the RDY flip-flop. Since inputs to this RDY 2-44 210912-001 80186/80188 CPU : ~ : ~ : ~ ~ : C\.OCK~ "DY~ OUT 1. No setaup or hokt times required 2. !cLARYX: Clock low to AROY Inactive (ARDY active hold ttme) - 15 ns min : : ~ : ~ ~ ~ : CLOCK~ .:~\~ 1. I ARyHCti : AROY valid until clock high (ARDY inactive set-up time to clock high) - 20 ns min 2. No set-up or hold time required ONLY if m is guaranteed 3. !cLARY)(: Clock low to AROY inactive (AROY active hold time) - 15 ns min ~ : ~ : ~ : ~ c::~ 1. tARVLCL: ARDY low to clock low (ARDY inactive set-up time to clock low) = 35 ns min must be satisfied since synchronizing FLIP-FLOP has sampled active 2. tARYHCH: AROY high to clock high (ARDYactive set-uptime) = 20 ns min must be satisfied ONLY to guarantee recognition at the next clock (Le. to guarantee synchronizing FLlp·FlOP will sampte AADY active) 3.lcLARYX: Clock low to AROV Inactive (ARDY active hold time) "'" 15 ns -~ OUT: ARDY ,CD : : , I I t ~ t • I I t t l I CD LESS THAN 3S,.. CLOCK~: T. : T, : ? :. OUT ARDY ~ CD (VI I t ~ I I I I I I I : I t I 1. Less than 20 ns 2. Less than 35 ns Figure 2·30 Valid/Invalid ARDY Transitions flip-flop must satisfy certain setup and hold times, these setup and hold times (tARYLCL = 35ns and tcHARYX = 15ns respectively) must be satisfied by any inactive going transition of the ARDY line. Used in this manner, ARDY allows a slow device the greatest amount of time to respond with a not ready after it has been selected. In a normally ready system, a slow device must respond with a not ready quickly after it has been selected to prevent the ,processor from continuing and accessing invalid data from the slow device. By implementing ARDY in the above manner, the slow device has an additional clock phase to respond with a not ready. If RDY is sampled active into the RDY flip-flop at the beginning of T3 or Tw (meaning that ARDY was sampled high into the synchronization flip-flop in the middle of aT state, and has remained high until the beginning of the next T state), that T state will be immediately followed by T4. If RDY is sampled low into the RDY flip-flop at the beginning of T3 or T2 (meaning that either ARDY was sampled low into the synchronization flip-flop OR that ARDY was sampled high into the synchronization flip-flop, but has subsequently changed to low before the ARDY setup time) that T state will be immediately followed by a wait state (Tw). Any asynchronous transition on the ARDY line not occurring during the above times, that is, when the processor is not "looking at" the ready 2·45 210912-001 80186/80188 CPU ARDY INPUT r----------------~ I 80186 I I I I TO BUS INTERFACE UNIT I c c I CPU IL-CLOCK________ _ _ _ _ -.J FROM SYNCHRONOUS READY 1. Asynchronous Resolution Flip Flop 2. Ready Latch Flip Flop NOTE: The second flip-flop is not actually in the circuit. It is drawn here only to show the functional equivalent of the interface to the BIU. Figure 2·31 Asynchronous Ready Circuits for the 80186 lines, will not cause CPU malfunction. Again, for ARDY to force wait states to be inserted, SRDY must be tied low, since they are internally ORed together to form the processor RDY signal. 2.5.8 80186 Synchronization Many input signals to the 80186 are asynchronous, that is, a specified set up or hold time is not required to insure proper functioning of the device. Associated with each of these inputs is a synchronizer which samples this external asynchronous signal, and synchronizes it to the interal 80186 clock. The synchronous ready (SRDY) line requires that ALL transitions on this line during T2, T3 or Tw satisfy a certain setup and hold time (tSRYCL =35 ns and tcLSRY =15 ns respectively). If these requirements are not met, the CPU will not function properly (see Figure 2-32). The processor looks at this line at the beginning of each T3 and Tw. If the line is sampled active at the beginning of either of these two cycles, that cycle will be immediately followed by T4. If, however, the line is sampled inactive at the beginning of either of these two cycles, that cycle will be followed by a Tw. Any asynchronous transition on the SRDY line not occurring at the beginning of T3 or Tw, that is, when the processor is not "looking at" the ready lines will not cause CPU malfunction. SYNCHRONIZER REQUIREMENTS Every data latch requires a certain set up and hold time in order to operate properly. At a certain window within the specified set up and hold time, the latch will try to latch the data. If the input makes a transition within this window, the output cannot attain a stable state within the given output delay time. The size of this sampling CLOCK OUT SRDY 1. Decision: Not ready, T-state will be followed by a wait state 2. Decision: Ready, T-state will not be followed by a wait state 3. tSRYCl: Synchronous ready stable until clock low (SRDY set-up time) = 35 ns min 4. tClSRY: Clock low until synchronous ready transition (SRDY hold time) = 15 ns min Figure 2·32 Valid SRDY Transitions on the 80186 2-46 210912-001 80186/80188 CPU STROBE CLOCK , OUT INPUT ---S--E"""T.-UP-T-IM-EJHOLD TIME rrl I ACTUAL SAMPLING INSTANT V INVALID INPUT~ RESPONSE VALID --.l I- RESOLUTION TIME HOLD ---~--~~~--~---- HLDA --:---/-'1-"-1 --r-/I--~l-...!!:2!~~-__ AD15·ADO DEN ___ 1 ~-+ ~ A16·A19 RD,WR,BHE INPUT DT/R,SO·S2 ---i---' RESPONSE - - - - - - - - ' , Figure 2·34 Signal Float/HLDA Timing Figure 2·33 Valid & Invalid Latch Input Transitions & Responses synchronization technique described above (with some minor modifications for the ARDY line, refer to paragraph 2.5.1). The sampling window of the latches is designed to be in the tens of pico-seconds, and should allow operation of the synchronizers with a mean time between failures of over 30 years assuming continuous operation. window is typically much smaller than the actual window specified by the data sheet specifications, however, part to part variation can move this actual window around within the specified window. Even ifthe input to a data latch makes a transition while a data latch is attempting to latch this input, the output of the latch will attain a stable state after a certain amount of time-typically much longer than the normal strobe to output delay time (see Figure 2-33). Therefore, in order to synchronize an asynchronous signal, sample the signal into one data latch, wait a certain amount of time, then latch it into a second data latch. Since the time between the strobe into the first data latch and the strobe into the second data latch allows the first data latch to attain a steady state (or to resolve the asynchronous signal), the second data latch will be presented with an input signal which satisfies any set up and hold time requirements it may have. The output of this second latch is a synchronous signal with respect to its strobe input. 2.6 BUS EXCHANGE MECHANISMS The 80186 uses a HOLD/HLDA bus exchange protocol. This protocol allows other asynchronous bus master devices (i.e., ones which drive address, data, and control information on the bus) to gain control of the bus to perform bus cycles (memory or 110 reads or writes). 2.6.1 HOLD Response In the HOLD/HLDA protocol, a device requiring bus control (e.g., an external DMA device) raises the HOLD line. In response to this HOLD request, the 80186 will raise its HLDA line after it has finished its current bus activity. When the external device is finished with the bus, it drops its bus HOLD request. The 80186 responds by dropping its HLDA line and resuming bus operation. A synchronization failure can occur if the synchronizer fails to resolve the asynchronous transition within the time between the two latch's strobe signals. The rate of failure is determined by the actual size of the sampling window of the data latch, and by the amount of time be· tween the strobe signals of the two latches. Obviously, as the sampling window gets smaller, the number of times an asynchronous transition will occur during the sampling window will drop. In addition, however, a smaller sampling window is also indicative of a faster resolution time for an input transition which manages to fall within the sampling window. 80186 SYNCHRONIZERS When the 80186 recognizes a bus hold by driving HLDA high, it will float many of its signals (see Figure 2-34). ADO·ADI5 (address/data 0·15) and DEN* (data enable) are floated within tCLAZ (35 ns) after the same clock edge that caused HLDA to be driven active. A16-A19 (address 16-19), RD*, WR*, BHE* (Bus High Enable), DT/R* (Data Transmit/Receive*) and SO-S2 (status 0·2) are floated within lcHCZ (45 ns) after the clock edge immediately before the clock edge on which HLDA becomes active. The 80186 contains synchronizers on the RES*, TEST*, TmrInO·I, DRQO·I, NMI, INTO-3, ARDY, and HOLD input lines. Each of these synchronizers use the two stage Only the signals described in the previous paragraph float during bus HOLD. Signals that do not float during bus HOLD are mainly associated with peripheral 2-47 210912·001 80186/80188 CPU normally insert no Tj states between T4 and T J of the next bus cycle if it requires any bus activity (e.g., instruction fetches or 110 reads). However, the 80186 may not have an immediate need for the bus after a bus cycle, and will insert Tj states independent of the HOLD input. When the HOLD request is active, the 80186 will be forced to proceed from T4 to TjsO that the bus may be relinquished. See Figure 2-36. HOLD must go active 3 T-states before the end of a bus cycle to force the 80186 to insert idle T-states after T4 (and to synchronize the request, and one to signal the 80186 that T4 of the bus cycle will be followed by idle T-states). After the bus cycle has ended, the bus hold will be immediately acknowledged. If the 80186 has already determined that an idle T-state will follow T4 of the current bus cycle, HOLD only needs to go active two T-states before the end of the bus cycle to force the 80186 to relinquish the bus at the end of the current bus cycle. This is because the external HOLD request is not required to force the generation of idle T-states. HOLD HLDA _ _ _ _:......_ _ _...:-_ _ _-1 1. tHVCL: Hold valid until clock low = 25 ns min 2. tCLHAV: Clock low until HLDA active = 50 ns max Figure 2-35 80186 Idle Bus HOLD/HLDA Timing functionality or control bus devices, either directly or indirectly. These signals include TmrOut, ALE (Address Latch Enable) and the chip select lines (UCS*, LCS*, MCSO-3*, and PCSO-6*). The designer should be aware that the chip select circuits do not look at externally generated addresses. Discrete chip select and ready generation logic must be used for memory or peripheral devices that are addresses by external bus master devices. An external HOLD has a higher priority than both the 80186 CPU or the integrated DMA unit. However, an external HOLD will not separate the. two cycles needed to perform a word access to an odd memory location. Also, an external HOLD will not separate the two-to-four bus cycle required to perform a DMA transfer using the integrated controller. Each of these factors will add additional bus cycle times to the bus latency of the 80186. 2.6.2 HOLD/HLDA Timing and Bus Latency Another factor influencing bus latency is locked transfers. Whenever a locked transfer is occurring, the 80186 will not recognize external HOLDs. The 80186 will also not recognize internal D MA bus requests. Locked transfers are programmed by preceding an instruction with the LOCK prefix. Any transfers generated by such a prefixed instruction will be locked, and will not be separated by any external bus requesting device. String instructions may be locked. Since string transfers may require thousands of bus cycles, bus latency will suffer if they are locked. The time required between HOLD going active and the 80186 driving HLDA active is known as bus latency. Many factors affect this latency, including synchronization delays, bus cycle times, locked transfer times and interrupt acknowledge cycles. Since the HOLD request line is internally synchronized by the 80186, and it may be an asynchronous signal. To guarantee recognition on a certain clock edge, it must satisfy a certain setup and hold time to the falling edge of the CPU clock. A full CPU clock cycle is required for this synchronization, that is, the internal HOLD signal is not presented to the internal bus arbitration circuits until one full clock cycle after it is latched from the HOLD input. If the bus is idle, HLDA will follow HOLD by two CPU clock cycles plus a small amount of setup and propagation delay time. The first clock cycle synchronizes the input and the second clock cycle signals the internal circuits to initiate a bus hold. (See Figure 2-35.) The final factor affecting bus latency time is interrupt acknowledge cycles. When an external interrupt controller is used, or if the integrated interrupt controller is used in the iRMX86 mode the 80186 will run two interrupt acknowledge cycles back to back. These cycles are automatically "locked" and will never be separated by any bus HOLD, either internal or external. Many factors influence the number of clock cycles between a HOLD request and a HLDA. These factors may make the latency longer than the best case shown above. One of the most important factors is that the 80186 will not relinquish the local bus until the bus is idle. An idle bus occurs whenever the 80186 is not performing any bus transfers. When the bus is idle the 80186 generates idle T-states. The bus can become idle only at the end of a bus cycle. Therefore, the 80186 can recognize HOLD only after the end of the current bus cycle. The 80186 will 2.6.3 End of HOLD Timing After the 80186 recognizes that the HOLD input has gone inactive, it will drop its HLDA line in a single clock cycle. Figure 2-37 shows this timing. The 80186 will insert only two Tj after HLDA has gone inactive, assuming that the 80186 has internal bus cycles to run. During the last Tj, status information will go active concerning the bus 2-48 210912·001 80186/80188 CPU CLOCK OUT HOLD -;-1 HL.DA _ _ _-;.. _ _ _.;..-_ _ 1 Decision: No additional internal bus cycles required, idle T-states will be inserted after T4 2. Greater than 25 ns (tHvcd 3. less than 50 ns (tCLHAV} 4. HOLD request internally synchronized I I T 3 0R Tw I I T. I I T; CLOCK~(D ~ OUT HOLD 0~ I I \ I HLOA _ _ _ _ _ _ _ _ _ _ _ _ _ __ 1. Decision: Additional internal bus cycles required, no idle T-states will be inserted, Hold not active soon enough to force idle T-states 2. Greater than 25 ns (tHVCL): not required since it will not get recognized anyway 3. HOLD request interna!ly synchroniled CL.OCK OUT HOLD HlOA _ _ _ _ _ _ _ _ _ _ _ _ _ _...1 1. HOLD request internally synchronized 2. Decision: HOLD request active, Idle I-slates will be inserted at end of current bus cycle 3. Greater than 25 ns 4. Less than 50 ns Figure 2-36 HOLD/HLDA Timing CLOCK OUT HOLD HLOA AOO-AD15 DEN A16/53-A19/S6 RO,WR,BHE OT/A,5O-82 1. 2. 3. 4. HOLD internally synchronized Greater than 25 ns Less than 50 ns Lines come out of float only if a bus cycle is pending Figure 2-37 End of HOLD Timing Diagram 2-49 210912-001 80186/80188 CPU Table 2·21 801861188 Interrupt Vectors cycle about to be run. If the 80186 has no pending bus activity, it will maintain all lines floating (high impedance) until the last Ti before it begins the first bus cycle after the HOLD. Interrupt Name Divide Error Exception Single Step Interrupt NMI Breakpoint Interrupt INTO Detected Overflow Exception Array Bounds Exception Unused-Opcode Exception ESC Opcode Exception Timer 0 Interrupt Timer 1 Interrupt Timer 2 Interrupt Reserved DMA 0 Interrupt DMA 1 Interrupt INTO Interrupt INTI Interrupt INT2 Interrupt INT3 Interrupt 2.7 INTERRUPTS Interrupts fall into three classes: hardware initiated interrupts; INT instructions; and instruction exceptions. Hardware initiated interrupts usually occur in response to some external input and are classified as non-maskable or maskable. Software programs cause an interrupt with an INT instruction. Interrupt exceptions usually occur when some unusual circumstance, that prevents further instruction processing, occurs while attempting to process instructions. The 801861188 CPU receives interrupts from both internal and external sources. Internal interrupt sources such as the timers and DMA channels can be disabled by their own control registers or by mask bits in the integral interrupt controller. The 80186/188 integral interrupt controller has its own control registers that set the mode of operation for the controller. Vector Default 1\'pe ,Priority Related Instructions '1 1 12"2 All 2 3 1 '1 All INT 4 '1 INTO 5 '1 BOUND 6 '1 Undefined Opcodes ESC Opcodes 7 '1'" 8 18 19 9 10 11 12 13 14 15 2A .... 2B .... 2C .... I DIV,IDIV 0 ! 3 4 5 6 7 8 9 NOTES: *1. These are generated as the result of an instruction execution. * *2. This is handled as in the 8086. * * * *3. All three timers constitute one source of request to the interrupt controller. The Timer interrupts all have the same default priority level with respect to all other interrupt sources, However, they have a defined priority ordering amongst themselves, (Priority 2A is higher priority than 2B,) Each Timer interrupt has a separate vector type number. 4. Default priorities for the interrupt sources are used only if the user does not program each source into a unique priority level. * * * 5, An escape opcode will cause a trap only if the proper bit is set in the peripheral control block relocation register. The integral interrupt controller operates in two major modes (refer to paragraph 2.4). These two modes of operation are the master (non-iRMX 86) mode and the iRMX 86 mode. In the master mode the integral interrupt controller acts as the system master interrupt controller. Five pins (NMI and INTO-INT3) are provided in this interrupt mode for external interrupt sources. Each external interrupt source has a pre-assigned vector type and priority. (See Table 2-21.) Vector types point to address information for interrupt service routines. The user can program the interrupt sources into any of eight different priority by placing a 3-bit priority level (0-7) in the control register of the interrupt source. Vectors generated in the master mode are fixed and cannot be changed. coding of the priority level requesting service. The significant five bits of the vector are programmed by writing to the Interrupt Vector at offset 20H. In addition, the integral interrupt controller will generate interrupt vectors for the the integrated DMA channels and the integrated timers. Interrupt vectors for the external interrupt lines will also be generated by the integral interrupt controller if the external interrupt lines are not configured in the cascade or special fully nested modes. For a detailed description of the operation of the integral interrupt controller in the various interrupts modes, and vector generation in these modes (refer to paragraph 2.8.4). In the iRMX 86 mode the integral interrupt controller operates as a slave to an external interrupt controller which is the master system interrupt controller. Vector generation in this mode of operation is exactly like the operation of an 8259A slave. The interrupt generates an 8-bit vector which the CPU multiplies by four and uses as an address into a vector table. The significant five bits of the vector are user programmable while the lower three bits are generated by the priority logic. These bits represent the en- 2.8 SUPPORT CIRCUITS The following paragraphs describe the various integral support circuits that are use to support the 801861188 CPU's. These integral circuits are the Direct Memory Access (DMA) Unit, the Timer Unit, the Interrupt 2-50 210912-001 80186/80188 CPU Controller Unit, the Chip Select Unit and the Clock Generator Unit. Paragraph 2.2.1 provides an overview of these integral circuits. EXTERNAL ADDRESS/DATA, CONTROL, CHIP SELECTS, ETC. BUS INTERFACE 2.8.1 Direct Memory Access (DMA) Unit & CHIP SELECT CIRCUITRY The 80186 contains an integrated DMA unit with two independent high speed DMA channels. These channels operate independently of the CPU, and drive all integrated bus interface components (bus controller, chip selects, etc.) exactly as the CPU (see Figure 2-38). Therefore, bus cycles initiated by the DMA unit are exactly the same as bus cycles initiated by the CPU (except that S6 = I during all DMA initiated cycles, refer to paragraph 2.5). Therefore, interfacing with the DMA unit itself is very simple, since, except for the addition of the DMA request connection, it is exactly the same as interfacing to the CPU. DMA REQUESTS Figure 2-38 80186 CPU/DMA Channel Internal Model After every DMA transfer the 16-bit DMA transfer count register is decremented by I, whether a byte transfer or a word transfer has occurred. If·the TC bit in the DMA control register is set, the DMA ST/STOP* bit (discussed later) will be cleared when this register goes to zero, causing DMA activity to cease. A transfer count of zero allows 65536 (2 16) transfers. Data transfers can occur between memory and I/O spaces (e.g., Memory to I/O) or within the same space (e.g., Memory to Memory or I/O to I/O). Data can be transferred either in bytes (8 bits) or in words (16 bits) to or from even or odd addresses. Each DMA channel maintains both a 20-bit source and destination pointer which can be optionally incremented or decremented after each data transfer (by one or two depending on byte or word transfers). Each data transfer consumes two bus cycles (a minimum of eight clocks), one cycle to fetch data and the other to store data. This provides a maximum data transfer rate of one MW/sec (megaword/second) or two MBytes/sec. The DMA control register contains bits which control various channel characteristics. (See Figure 2-40.) This includes control bits for each of the data source and destination whether the pointer points to memory or I/O space, or whether the pointer will be incremented/decremented/ left alone after each DMA transfer. The control register also contains a bit which selects between byte or word transfers. Two synchronization bits are used to determine the source of the DMA requests. The TC bit determines whether DMA activity will cease after a programmed number of DMA transfers. The INT bit is used to enable interrupts to the processor when this has occurred. PROGRAMMING THE DMA UNIT Each of the two DMA channels contains several registers which are used to control the channel operations. These registers are included in the 80186 integrated peripheral control block. Registers included are the source and destination pointer registers, the transfer count register, and the control register. Layout and bit interpretations for these registers are shown in Figure 2-39. NOTE An Interrupt will not be generated to the CPU when the count reaches zero unless both the INT bit and the TC bit are set. The 20-bit source and destination pointers allow access to the complete I Mbyte address space of the 80186. All 20 bits are affected by the auto-increment or auto-decrement unit of the DMA (i.e., the DMA channels address the full 1 Mbyte address space of the 80186 as a flat, linear array without segments). When addressing I/O space, the upper 4 bits of the DMA pointer registers should be programmed to be O. If these upper 4 bits are not programmed to 0, the programmed value (greater than 64K in 110 space) will be driven onto the address bus where it is not accessable to the CPU. However, the data transfer will take place correctly. The control register also contains a start/stop (ST/STOP*) bit. This bit is used to enable DMA transfers. Whenever this bit is set, the channel is "armed" and a DMA transfer will occur whenever a DMA request is made to the channel. If this bit is cleared, no DMA transfers will be performed by the channel. A companion bit, the CHG/ NOCHG* bit, allows the contents of the DMA register to be changed without modifying the state of the start/stop bit. The ST/STOP* will only be modified if the CHG/ 2-51 210912·001 80186/80188 CPU OFFSET DEH DCH DAH D8H D6H x I 15 DOH 15 CEH C2H COH I I I XI .1 I I I I CONTROL WORD 0 119 16 119 16 0 0 X X TRANSFER COUNT DESTINATION POINTER t SOURCE POINTER CHANNEL 1 X I I I I I I xl I I X X X X X X I CHANNELO~ 0 15 C6H C4H X 15 D4H D2H CCH CAH C8H X 119 16 J19 16 0 15 CONTROL WORD TRANSFER COUNT DESTINATION POINTER SOURCE POINTER 0 15 (1) CONTROL REGISTER LAYOUT: -------DESTINATION SOURCE -..SYNCHRONIZATION Figure 2·39 80186 DMA Register Layout NOCHG* bit is also set during the write to the DMA control register. The CHG/NOCHG* bit is write only. This bit will always be read back as a '0'. Because DMA transfers could occur immediately after the ST/STOP* bit is set, this bit should only be set after all other DMA control registers have been programmed. This bit is automatically cleared when the transfer count reaches zero and the TC bit in the DMA control register is set. This bit is also cleared when the transfer count register reaches zero and unsynchronized DMA transfers are programmed (regardless of the state of the TC bit). gramming values should be placed into memory locations and moved into the DMA registers using a locked string move instruction. This will prevent a DMA transfer from occurring after only half of the register values have changed. This also holds true if a read/modify/write type of operation is being performed (e.g., ANDing off bits in a pointer register in a single AND instruction to a pointer register mapped into memory space. All DMA unit programming registers are directly accessable by the CPU. This means the CPU can, for example, modify the DMA source pointer register after 137 DMA transfers have occurred, and have the new pointer value used for the 138th DMA transfer. If more than one register in the DMA channel is being modified during the time when a DMA request may be generated, and the DMA channel is enabled (ST/STOP* bit set), the register pro- Every DMA transfer in the 80186 consists of two independent bus cycles, the fetch cycle and the deposit cycle (see Figure 2-41). During the fetch cycle, the byte or word data is accessed from memory or I/O space using the address in the source pointer register. The data accessed is placed in an internal temporary register, which is not accessible by the CPU. During the deposit cycle, the byte or word data in this internal register is placed in DMA TRANSFERS Figure 2·40 DMA Control Register 2-52 210912-001 80186/80188 CPU CLOCK I I T. I I T, T. T. Tw Tw T, T. T. T. T4 OUT~ I I I I DRQ~ I I ~ ADOAD15 I I I I I I I I I \ I WR I I. :I~ CD: CD I i RD 1. 2. 3. 4. \ I I I I I I l\I I 0: I I I I I I I I I I I I I I lr I Sou ce address Source data Destination address Destination data NOTE: Wait states are inserted by the bus condition during the bus cycle, not by the DMA controller Figure 2·41 Example DMA Transfer Cycle memory or I/O space using the address in the destination pointer register. These two bus cycles will not be separated by bus HOLD or by the other DMA channel, and one will never be run without the other except when the CPU is RESET. Notice that the bus cycles run by the DMA unit are exactly the same as memory or liD bus cycles run by the CPU. The only difference between the two is the state of the S6 status line (which is multiplexed on the A 19 line): on all CPU initiated bus cycles, this status line will be driven low; on all DMA initiated bus cycles, this status line will be driven high. channel can be programmed to generate a DMA request whenever Timer 2 reaches its maximum count. Setting the TDRQ bit in the DMA channel control register selects this feature. A DMA request generated in this manner will be latched in the DMA controller, so that once the timer request has been generated, it cannot be cleared except by running the DMA cycle or by clearing the TDRQ bits in both DMA control registers. Before any DMA requests are generated in this mode, Timer 2 must be initiated and enabled. A timer requested DMA cycle being run by either DMA channel will reset the timer request. Thus, if both channels are using the timer to request a DMA cycle, only one DMA channel will execute a transfer for every timeout of Timer 2. Another implication of having a single bit timer DMA request latch in the DMA controller is that if another Timer 2 timeout occurs before a DMA channel has a chance to run a DMA transfer, the first request will be lost (Le., only a single DMA transfer will occur, even though the timer has timed out twice). DMA REQUESTS Each DMA channel has a single DMA request line by which an external device may request a DMA transfer. The synchronization bits in the DMA control register determine whether this line is interpreted to be connected to the source of the DMA data or the destination of the DMA data. All transfer requests on this line are synchronized to the CPU clock before being presented to internal DMA logic. Any asynchronous transitions of the DMA request line will not cause the DMA channel to malfunction. In addition to external requests, DMA requests may be generated whenever the internal Timer 2 times out, or continuously by programming the synchronization bits in the DMA control register to call for unsynchronized DMA transfers. The DMA channel can also be programmed to provide its own DMA requests. In this mode, DMA transfer cycles will be run continuously at the maximum bus bandwidth, one after the other until the preprogrammed number of DMA transfers (in the DMA transfer count register) have occurred. This mode is selected by programming the synchronization bits in the DMA control register for unsynchronized transfers. In this mode, the DMA controller monopolizes the CPU bus (Le., the CPU will not be able to perform opcode fetching, memory operations, etc., while the DMA transfers are occurring). Also, the DMA The 80186 DMA controller handles two types of internally synchronized DMA transfers: the first Timer 2 generates the DMA request, and the second where the DMA channel itself generates the DMA request. The DMA 2-53 210912-001 80186/80188 CPU will only perform the number of transfers indicated in the maximum count register regardless of the state of the TC bit in the DMA control register. signal can be generated, if required, by decoding an address, or by using one of the PCS* lines (see Figure 2-44). NOTE DMA REQUEST TIMING AND LATENCY Before any DMA request can be generated, the 80186 internal bus must be granted to the DMA unit. A certain amount of time is required for the CPU to grant this internal bus to the DMA unit. The time between a DMA request being issued and the DMA transfer being run is known as DMA latency. Many of the issues concerning DMA latency are the same as those concerning bus latency (refer to the paragraphs on Bus Exchange Mechanisms). Consider the important difference that external HOLD always has bus priority over an internal DMA transfer. Thus, the latency time of an internal DMA cycle will suffer during an external bus HOLD. ALE must be used to factor the DACK because addresses are not guaranteed stable when chip selects go active. The use of ALE is required because if the address is not stable when the PCS goes active, glitches can occur at the output of the DACK generation circuits as the address lines change state. Once ALE has gone low, the addresses are guaranteed to have been stable for at least tAvAL (30ns). EXTERNALLY SYNCHRONIZED DMA TRANSFERS Each DMA channel has a programmed priority relative to the other DMA channel. Both channels may be programmed to be the same priority, or one may be programmed to be of higher priority than the other channel. If both channels are active, DMA latency will suffer on the lower priority channel. If both channels are active and both channels are of the same programmed priority, DMA transfer cycles will alternate between the two channels (i.e., the first channel will perform a fetch and deposit, followed by a fetch and deposit by the second channel, etc). The 80186 DMA controller is capable of two types of externally synchronized DMA transfers (requested externally rather than by integrated Timer 2 or by the DMA channel itself (in unsynchronized transfers). These transfers are source synchronized and destination synchronized transfers and are selected by programming the synchronization bits in the DMA channel control register. Source synchronized and destination synchronized transfer differ in the time at which the DMA request pin is sampled to determine if another DMA transfer is immediately required after the currently executing DMA transfer. For source synchronized transfers, the DMA request is sampled such that two source synchronized DMA transfers may occur one immediately after the other. For destination synchronized transfers a certain amount of idle time is automatically inserted between two DMA transfers to allow time for the DMA requesting device to drive its DMA request inactive. The DMA request (DRQ) is sampled four clock cycles before the beginning of a bus cycle to determine if any DMA activity will be required. A minimum of four CPU clock cycles must occur between the time DRQ goes active and the beginning of the first DMA cycle (see Figure 2-42). It takes at least four clock cycles for the request to propagate through the logic circuits (see Figure 2-43). This time is independent of the number of wait states inserted in the bus cycle. The maximum DMA latency is a function of other processor activity. Source Synchronized DMA Transfers If DRQ is sampled active at point 1 in Figure 2-42, the DMA cycle will be executed, even if the DMA request goes inactive before the beginning of the first DMA cycle. If the BIU is busy and cannot run the cycle when DRQ goes active, DRQ must remain active for a minimum of four clock cycles before the time that it is possible to run the requested cycle. DMA requests are not permanently stored, therefore, if DRQ goes inactive after one clock, a zero will be propagated through the logic and no DMA cycles will be run. In a source synchronized DMA transfer, the source of the DMA data requests the DMA cycle (for example, a floppy disk read from the disk to main memory). In this type of transfer, the device requesting the transfer is read during the fetch cycle of the DMA transfer. Since four CPU clock cycles elapse from the time DMA request is sampled to the time the DMA transfer is actually begun, and a bus cycle takes a minimum of four clock cycles, the earliest time the DMA request pin will be sampled for another DMA transfer will be at the beginning of the deposit cycle of a DMA transfer. This allows over three CPU clock cycles between the time the DMA requesting device receives an acknowledge to its DMA request (around the beginning ofT2 of the DMA fetch cycle), and the time it must drive this request inactive (assuming no wait states) to insure that another DMA transfer is not performed if it is not desired (see Figure 2-45). DMA ACKNOWLEDGE The 80186 does not generate an explicit DMA acknowledge signal. Instead, a read or write directly to the DMA requesting device is performed. A DMA acknowledge 2-54 210912·001 80186/80188 CPU T,o. T,o. T,o. I I T.o. T,o. T,o. I T,o. T.o. T,o. : Two, Two, Two, T,o. I T, T, T, T, T, olDMA I C'fCLE ~ 111011 ~~ I I I I \.!J~,~ I I I DRQ I I I I' I CD I I. I I .1 I CD I .1 I I I I I I I I I I 1. tOROCL = DMA request to clock low = 25 ns min to guarantee recognition 2. Synchronizer resolution time 3. DMA unit priority arbitration, etc. time 4. Bus Interface Unit latches DMA request and decides to run DMA cycle Figure 2·42 DMA Request Timing Figure 2·43 DMA Request Logic ADDR. LATCH 80186 A6 DMADEVICE ALEr-------------------------~ ACKNOWLEDGE PCSO r - - - - - - - - - - - - - - - - - - - + - - - - - - - - '... CHIP SEL DRQO DMA REQUEST Figure 2·44 DMA Acknowledge Synthesis 2-55 210912·001 80186/80188 CPU DEPOSIT CYCLE FETCH CYCLE T, T, T, T, T, DRQ --~----~--~~--~~ 80186 DECISION: 1. Current DMA source synchronized transfer will not be immediately followed by another DMA transfer NEXT DMA TRANSFER DEPOSIT CYCLE T, 80186 T, : Ta : T, Tw T, T, T, Decision: 1. Current DMA destination synchronized transfer will be followed immediately by another DMA transfer Figure 2-45 Source & Destination Synchronized DMA Request Timing Destination Synchronized DMA Transfers unit will insert only two CPU clock cycles between the deposit cycle of one DMA transfer and the fetch cycle of the next DMA transfer. The DMA destination requesting device must drop its DMA request at least two clock cycles before the end of the deposit cycle regardless of -the number of wait states inserted into the bus cycle. Figure 2-45 shows the DMA request ending too late to prevent the immediate generation of another DMA transfer. Any wait states inserted in the deposit cycle of the DMA transfer will lengthen the amount of time from the beginning of the deposit cycle to the time DMA will be sampled for another DMA transfer. Therefore, if the amount of time a device requires to drop its DMA request after receiving a DMA acknowledge from the 80186 is longer than the 0 wait state 8MHz 80186 maximum (lOOns) from the start of T2, wait states can be inserted into the DMA cycle to lengthen the amount of time the device has to drop its DMA request after receiving the DMA acknowledge. Table 2-22 lists the amount of time between the beginning of T2 and the time DMA request is sampled as wait states are inserted in the DMA deposit cycle. In destination synchronized DMA transfers, the destination of the DMA data requests the DMA transfer (for example a floppy disk write from main memory to the disk). In this type of transfer, the device requesting the transfer is written during the deposit cycle of the DMA transfer. This transfer causes a problem since the DMA requesting device will not receive notification of the DMA cycle being run until three clock cycles before the end of the DMA transfer (if no wait states are being inserted into the deposit cycle of the DMA transfer) and four clock cycles elapse before the DMA controller can determine whether another DMA cycle should be run immediately following the current DMA transfer. To avoid this problem, the DMA unit will relinquish the CPU bus after each destination synchronized DMA transfer for at least two CPU clock cycles. This action allows the DMA requesting device time to drop its DMA request if it does not immediately desire another immediate DMA transfer. When the DMA unit relinquishes the bus, the CPU may resume bus operation (e.g., instruction fetching, memory or I/O reads or writes, etc.). Typically, a CPU initiated bus cycle will be inserted between each destination synchronized DMA transfer. If no CPU bus activity is required, however (and none can be guaranteed), the DMA 2.8.2 Timer Unit The 80186 contains three internal 16-bit programmable timers (see Figure 2-46) two of which are connected to 2-56 210912·001 80186/80188 CPU Table 2-22 DMA Request Inactive Timing ! WAIT STATES 0 I 2 3 reaching the MAX COUNT register value, the timer count value will reset to zero during that same clock (i.e" the maximum count value is never stored in the count register itself). Timers 0 and I contain, in addition, a second MAX COUNT register, which enables the timers to alternate their count between two different MAX COUNT values programmed by the user. If a single MAX COUNT register is used, the timer output pin switches LOW for a single clock, one clock after the maximum count value has been reached. In the dual MAX COUNT register mode, the output pin indicates which MAX COUNT register is currently in use, thus allowing nearly complete freedom in selecting waveform duty cycles. For the timers with two MAX COUNT registers, the RIU bit in the control register determines which is used for the comparison. MAXIMUM TIME (ns) 6MHz 8MHZ 141 308 475 641 100 225 350 475 Table 2-23 Timer Control Block Format 'Reg later Offset Reglater Name Mode/Control Word Max Count B Max Count A Count Register Tmr.O Tmr.1 56H 54H 52H 50H Tmr.2 5EH 5CH 5AH 58H 66H not present 62H 60H Each timer gets serviced every fourth CPU-clock cycle. Therefore, the timers, whether clocked internally or externally can only operate at speeds up to one-quarter the internal clock frequency (one-eighth the crystal rate). This will be 2 MHz for an 8 MHz CPU clock. Due to internal synchronization and pipelining of the timer circuits, a timer output may take up to six clocks to respond to any individual clock or gate input. Since the count registers and the maximum count registers are all 16 bits wide, 16 bits of resolution are provided. However, any read or write access to the Timers will add one wait state to the minimum four-clock bus cycle. This is needed to synchronize and coordinate the internal data flows between the internal timers and the internal bus. four external pins (two pins per timer). These timers (Timers 0 and I) can be used to count external events, time external events, generate non-repetitive waveforms, etc. The third timer is not directly accessible through dedicated pins. This timer is useful for real-time coding and time delay applications and may be used to prescale the other two timers (refer to Volume I of this User's Guide). The timers are controlled by II 16-bit registers in the internal peripheral control block (refer to Table 2-23). The count register contains the current value of the timer and it can be read or written at any time independent of whether the timer is running or not. The value of this register will be incremented for each timer event. Each of the timers contains a MAX COUNT register, which defines the maximum count the timer will reach. After TIMER INPUT PIN OPERATION Timers 0 and 1 each have individual timer input pins. All low-to-high transitions on these input pins are DMA REQ. T2 INT. REQ. TIMERO' TIMER 2 MAX COUNT VALUE CLOCK B MAX COUNT VALUE B MAX COUNT VALUE MODE/CONTROL WORD INTERNAL ADDRESS/DATA BUS ALL 16 BIT REGISTERS Figure 2-46 Timer Block Diagram 2-57 210912·001 80186/80188 CPU synchronized, latched, and presented to the counter element when the particular timer is being serviced by the counter element. TIMER OUTPUT PIN OPERATION Timers 0 and 1 each contain a single timer output pin. This pin can perform two functions at programmer option. The first is a single pulse indicating the end of a timing cycle. The second is a level indicating the maximum count register currently being used. The timer outputs operate as outlined below whether internal or external clocking of the timer is used. If external clocking is used, however, the user should remember that the time between an external transition on the timer input pin and the time this transition is reflected in the timer out pin will vary depending on when the input transition occurs relative to the timer's being serviced by the counter element. Signals on this input affect timer operation in three different ways. The way the pin signals are used is determined by the external (EXT) and retrigger (RTG) bits in the timer control register. If the EXT bit is set, transitions on the input pin cause the timer count value to increment if the timer is enabled (the timer control register enable bit is set). Thus, the timer counts external events. If the EXT bit is cleared, all timer increments are caused by either the CPU clock or by Timer 2 timing out. In this mode, the RTG bit determines whether the input pin will enable timer operation, or whether it will retrigger timer operation. When the timer is in single maximum count register mode (timer control register ALT bit cleared) the timer output pin goes low for a single CPU clock the clock after the timer is serviced by the counter element where maximum count is reached (see Figure 2-47). This mode is useful when using the timer as a baud rate generator. If the EXT bit is low and the RTG bit is also low, the timer will count internal timer events only when the timer input pin is high and the enable (EN) bit in the timer control register is set. When the timer is programmed in dual maximum count register mode (timer control register ALT bit set), the timer output pin indicates which maximum count register is being used. The pin is low if maximum count register B is being used for the current count, high if maximum count register A is being used. If the timer is programmed in continuous mode (the CONTinuous bit in the timer control register is set), this pin could generate a waveform of any duty cycle. For example, if maximum count register A contained 10 and maximum count register B contained 20, a 33% duty cycle waveform would be generated. In this mode, the pin is level sensitive, not edge sensitive. A low-to-high transition on the timer input pin is not required to enable timer operation. If the input is tied high, the timer will be continually enabled. The time enable input signal is completely independent of the EN bit in the timer control register: both must be high for the timer to count. Example uses for the timer in this mode would be a real time clock or a baud rate generator. If the EXT bit is low and the RTG bit is high, the timer will act as a digital one-shot. In this mode, every low-to-high transition on the timer input pin will cause the timer to reset to zero. If the timer is enabled (i.e., the EN bit in the timer control register is set) timer operation will begin and the timer will count CPU clock transitions or Timer 2 timeouts. Timer operation will cease at the end of a timer cycle, that is, when the value in the maximum count register A is reached and the timer count value resets to zero (in single maximum count register mode, remember that the maximum count value is never stored in the timer count register) or when the value in maximum count register B is reached and the timer count value resets to zero (in dual maximum count register mode). If another low-to-high transition occurs on the input pin before the end of the timer cycle, the timer will reset to zero and begin the timing cycle again regardless of the state of the continuous (CONT) bit in the timer control register. If the CONT bit in the timer control register is cleared, the timer EN bit will automatically be cleared at the end of the timer cycle. This means that any additional transitions on the input pin will be ignored by the timer. If the CONT bit in the timer control register is set, the timer will reset to zero and begin another timing cycle for every low-to-high transition on the input pin, regardless of whether the timer had reached the end of a timer cycle, because the timer EN bit would not have been cleared at the end of the timing cycle. An example use of the timer is this mode is an alarm clock time out signal or interrupt. TIMER APPLICATIONS The 80186 timers can be used for almost any application for which a Qiscrete timer circuit would be used. These include real time clocks, baud rate generators, or event counters. Real Time Clock The sample program (see Figure 2-48) shows the 80186 timer being used with the 80186 CPU to form a real time clock (see Figure 2-49). In this implementation, Timer 2 is programmed to provide an interrupt to the CPU every millisecond. The CPU then increments memory based clock variables. Baud Rate Generator The 80186 timers can be used as baud rate generators for serial communication controllers (e.g., the 8274). Figure 2-50 shows this simple connection and Figure 2-48 lists the code to program the timer as a baud rate generator. 2-58 210912·001 80186/80188 CPU -- TIMER 0 SERVICED INTERNAL COUNT VALUE ------------------~,r_--------4_-----------------MAXCOUNT-1 TMROUT--------------------------~ PIN Figure 2-47 80186 Timer Out Signal Event Counter The interrupt controller resolves priority among simultaneous requests. Nesting is provided so interrupt service routines for lower priority interrupts may themselves be interrupted by higher priority interrupts. The 81086 timer can be used to count events. Figure 2-51 shows a hypothetical application in which the 80186 timer will count the interruptions in a light source. The number of interruptions can be read directly from the count register of the timer, since the timer counts up (i.e., each interruption in the light source will cause the timer count value to increase). Figure 2-48 lists the code to set up the 80186 timer in this mode. iRMXTM 86 MODE OPERATION The iAPX 186/188 integrated interrupt controllers have a special iRMX compatibility mode of operation that allows the use of the 80186/188 within the iRMX 86 operating system interrupt structure. To use this mode of operation, bit 14 in the peripheral control block relocation register must be set and special initilization software must be provided. 2.8.3 Interrupt Controller The 80186 integrated interrupt controller performs the tasks of an 8259 A type interrupt controller in a typical microprocessor system. Figure 2-52 shows a block diagram of the integrated interrupt controller. These tasks include synchronizing and prioritizing interrupt requests, and request type vectoring in response to a CPU interrupt acknowledge. Nesting is provided so interrupt service routines for lower priority interrupts may themselves be interrupted by higher priority interrupts. The integrated controller has two major modes of operation, the iRMX-86 mode and the non-iRMX 86 (master) mode. In the master mode the integrated interrupt controller can be the master controller for up to two external Intel 8259 A interrupt controllers allowing up to 128 interrupts. In the iRMX 86 mode it can be the slave to an external interrupt controller to allow compatibility with the iRMX86 operating system and the 80130/80150 operating system coprocessors (refer to Volume I ofthis User's Manual). When the iRMX mode is used, the internal interrupt controller is used as a slave controller to an external interrupt controller. The internal 80186/188 resources are monitored through the internal interrupt controller, and the external interrupt controller functions as the system master interrupt controller. When an external interrupt controller (such as an 8259A) is used it requires additional control pins from the 80186. Therefore, some of the external interrupt pins are no longer used for external interrupt inputs. Since the external interrupt registers are no longer required, the unused registers can now be used by the timers. There are enough of these unused registers to dedicate one to each timer. Previously all of the timers shared one register. In this mode of operation each timer interrupt source has its own mask bit, IS bit and control word. The 80186 can receive interrupts from a number of sources, both internal and external. The internal interrupt controller merges these requests on a priority basis, for individual service by the CPU. The iRMX 86 operating system requires peripherals to be assigned fixed priority levels. This is incompatible with the normal operation of the 80186/188 interrupt controller. Therefore the initialization software must program the proper priority for each source. The required priority levels for the internal interrupt sources in the iRMX 86 mode are shown in Table 2-24. These priority level assignments must remain fixed in the iRMX mode of operation. Internal interrupt sources (Timers and DMA channels) are disabled by their own control registers or by mask bits within the interrupt controller. The 80186 interrupt controller has its own control registers that set the controller mode of operation. The iRMX 86 mode of operation allows nesting of interrupt requests. The configuration of the 80186/188 with respect to an external 8259 A master is shown in Figure 2-59 210912·001 80186/80188 CPU $mod186 name this file contains example 80186 timer routines. The first routine sets up the timer and interrupt controller to cause the timer to generate an interrupt every 10 milliseconds, and to service interrupt to implement a real time clock. Timer 2 is used in this example because no input or output signals are required. The code example assumes that the peripheral control block has not been moved from its reset location (FFOO·FFFF in I/O space). word ptr [BP word ptr [BP word ptr [BP 19 OFF66h OFF62h OFF32h OFF22h OFF30h + 4] + 6] + 8] argl arg2 arg3 timer.2int timer.2control timer.2malLcti timer.inLcti eoLregister interrupLstat equ equ equ equ equ equ equ equ equ data msec_ hOUL minute_ seconcL. data segment public db db db db ends cgroup dgroup group group code data code segment public assume seUime. cs:code,ds:dgroup timer 2 has vector type 19 interrupt controller regs public 'data' hour.,minute.,second.,msec_ ? ? ? public 'code' seuime(hour,minute,second) sets the time variables, initializes the 80186 timer2 to provide interrupts every 10 milliseconds, and programs the interrupt vector for timer 2 seuime. proc enter push push push push near 0,0 AX DX SI DS xor AX,AX mov DS,AX mov S[,4 set stack addressability save registers used set the interrupt vector the timers have unique interrupt vectors even though they share the same control register * timer2.int Figure 2-48 Example Timer Interface Code (Sheet 1 of 4) 2·60 210912·001 80186/80188 CPU timer2-interrupLroutine mov inc inc mov pop os: [SI] ,offset timer_2-interrupLroutine SI SI OS: [SI],CS OS mov mov mov mov mov mov mov AX,argl hour_,AL AX,arg2 minute_,AL AX,arg3 second.,AL msec_,O set the time values mov mov OX,timer2_malLcti AX,20000 set the max count value 10 ms /500 ns (timer 2 counts at 1/4 the CPU clock rate) out mov mov OX,AX OX,timer2_control AX,II1000000000000 1b out OX,AX mov mov OX,timer-inLctl AX,OOOOb out sti OX,AX pop pop pop leave ret endp SI OX AX proc push push far AX OX cmp jae inc jmp msec_,99 bump_second msec_ reseLinLcti see if one second has passed if above or equal... mov cmp jae inc jmp msec_,O second_,59 bump_minute second_ reseLinLcti reset millisecond see if one minute has passed mov cmp jae inc jmp second.,O minute_,59 bump_hour minute_ reseLinLctl set the control word enable counting generate interrupts on TC continuous counting set up the interrupt controller unmask interrupts highest priority interrupt enable processor interrupts bump.second: bump_minute: see if one hour has passed Figure 2-48 Example Timer Interface Code (Sheet 2 of 4) 2-61 210912-001 80186/80188 CPU bumpllour: mov cmp jae inc jmp minute.,O hour.,12 reset.hour hour. reseLint.ctl mov hour., I mov mov out OX,eoLregister AX,8000h OX,AX pop pop iret endp ends end OX AX see if.12 hours have passed reseLhour: reseLint.ctl: timer2JnterrupLroutine code $mod186 name non·specific end of interrupt example.80 I 86.baud.code this file contains example 80186 timer routines. The second routine sets up the timer as a baud rate generator. In this mode, Timer I is used to continually output pulses with a period of 6.5 usec for use with a serial controller at 9600 baud programmed in divide by 16 mode (the actual period required for 9600 baud is 6.51 usec). This assumes that the 80186 is running at 8 MHz. The code example also assumes that the peripheral control block has not been moved from its reset location (FFOO-FFFF in I/O space). , timer Lcontrol timer LmalLcnt equ equ OFF5Eh OFF5Ah code segment assume cs:code public 'code' set-baudO initializes the 80186 timer! as a baud rate generator for a serial port running at 9600 baud set-baud. proc push push near AX OX mov mov out mov mov OX,timerLmalLcnt AX,13 OX,AX OX,timerLcontrol AX, 11 0000000000000 1b out OX,AX save registers used set the max count value 500ns * 13 - 6.5 usec set the control word enable counting no interrupt on TC continuous counting single max count register Figure 2-48 Example TImer Interface Code (Sheet 3 of 4) 2-62 210912.001 80186/80188 CPU seLbaud.. code $modl86 name pop pop ret endp ends end DX AX example_80 I 86_counLcode this file contains example 80186 timer routines. The third routine sets up the timer as an external event counter. In this mode, Timer I is used to count transitions on its input pin. After the timer has been set up by the routine, the number of events counted can be directly read from the timer count register at location FF58H in I/O space. The timer will count a maximum of 65535 timer events before wrapping around to zero. This code example also assumes that the peripheral control block has not been moved from its reset location (FFOO-FFFF in I/O space). timerl_control timer LmalLcnt timer LcnLreg equ equ equ OFF5Eh OFF5Ah OFF58H code segment assume cs:code public 'code' seLcountO initializes the 80186 timer I as an event counter seLcounL seLcounL code proc push push near AX DX mov mov DX, timer l_malLcnt AX,O out mov mov DX,AX DX,timerLcontrol AX, II 00000000000 I 0 I b out DX,AX xor mov out AX,AX DX,timerLcnLreg DX,AX pop pop ret DX AX save registers used set the max count value allows the timer to count all the way to FFFFH set the control word enable counting no interrupt on TC continuous counting single max count register external clocking zero AX and zero the count in the timer count register endp ends end Figure 2-48 Example Timer Interface Code (Sheet 4 of 4) 2-63 210912-001 80186/80188 CPU + 5V fully nested modes of operation. Five pins are provided for external interrupt sources. One of these pins is dedicated to NMI. The other four (INTO-INT3) may be configured in three ways. The response to internal interrupts is identical in all three modes, but the function of the four external interrupt pins differs in each mode. The interrupt controller is set to one of these modes by programming the correct bits in the INTO and INTI control registers. TMR IN 1 TMR OUT 1 TIMER o TMR INO Figure 2·49 80186 Real Time Clock 2-53. The INTO input is used as the 80186 CPU interrupt input. INT3 functions as an output to send the 80186 slave-interrupt-requests to one of the 8 master-PIC-inputs. Correct master-slave interface requires decoding of the slave addresses (CASO-2). Because of pin limitations, the 80186 slave address will have to be decoded externally. INTI * is used as a slave-select input. In this configuration the slave vector address is transferred internally, but the READY input must be supplied externally. INT2 * is used as an acknowledge output, suitable to drive the INTA * input of an 8259A. In the fully nested mode of operation, the four pins are configured as four interrupt input lines with internally generated interrupt vectors. In both the cascade and the special fully nested modes of operation the four interrupt input pins can be configured as either three interrupt input lines and interrupt a~knowledge output, or two interrupt inputs lines and two dedicated interrupt acknowledge output lines. In the cascade mode of operation, when two interrupts are received from the same interrupt controller, one after the other, the internal controller will wait until the service routine for the first is complete before acknowledging the second internal interrupt. When this occurs in the special fully nested mode, the second interrupt from the same cascaded interrupt controller is assumed to be of higher priority and will be acknowledged before the first interrupt service routind is completed. These four interrupt inputs can be programmed in either edge-or level-trigger mode, as specified by the LTM bit in the source's control register. The interrupt controller will generate interrupt vectors for the integrated DMA channels and the integrated timers. In addition, interrupt vectors for the external interrupt lines will be generated if they are not configured in cascade, or special fully nested mode. NON·iRMXTM 80 MODE Each interrupt source has a preassigned vector type (see Thble 2-21). Vector types point to address information for interrupt service routines. The vectors generated are fixed and cannot be changed. When configured in the non-iRMX 86 mode, the internal interrupt controller operates in one of three basic modes: the fully nested mode, the cascade mode, and the special 80186 - The user can program the interrupt sources into any of eight different priority levels. Programming is done by placing a 3-bit priority level (0-7) in the control register of each interrupt source. (A source priority of 4 has higher priority over all priority levels from 5-7. Priority registers containing values lower than 4 have higher priority.) All interrupt sources have preprogrammed default priority levels. + 5V TMRINOt TIMER - 0 TMROUTO If two requests with the same programmed priority level are pending at once, the priority ordering scheme indicated in Table 2-21 is used. If the serviced interrupt routine reenables interrupts it allows other requests to be serviced. TxC } SERIAL RxC CONTR'OLLER CONTROL REGISTERS The interrupt controller contains registers that control its operation (see Figure 2-54). Certain registers change Figure 2·50 80186 Baud Rate Generator 2-64 210912·001 80186/80188 CPU o o 80186 o TMRINO 3Q-LIGHT "/ Figure 2·51 80186 Event Counter Table 2·24 Internal Source Priority Level Priority Level 0 1 2 3 4 5 and the INTI control registers; Figure 2-56 shows the format of the INT2 and INT3 registers. In cascade mode or special fully nested mode, the control words in the INT2 and INT3 registers are not used. Interrupt Source TimerO (reserved) DMA 0 DMA1 Timer 1 Timer 2 INTERRUPT SOURCES The 80186 interrupt controller receives and arbitrates among many different interrupt request sources, both internal and external. Each interrupt source may be programmed to be a different priority level in the interrupt controller. Figure 2-57 shows an interrupt request generation flow chart. Such a flowchart would be followed independently by each interrupt source. their modes of operation between the two major modes of the interrupt controller: master mode and iRMX86 mode. These control registers include the Timer Register, two DMA registers, and four external input registers. The Timer and the DMA registers are used for interrupt controller interaction with the internal DMA and Timer units of the processor. Refer to Volume I of this User's Manual for full descriptions of these registers. The external input registers are of the greatest concern to the hardware designer. Internal Interrupt Sources The external input registers contain the control words for the four external interrupt input pins. See Figures 2-55 and 2-56. Figure 2-55 illustrates the format of the INTO TIMER TIMER TIMER OMA o 2 0 The 80186 internal interrupt sources include three timers and the two DMA channels. These sources operate independently of external devices as regards to interrupts to OMA INTO INn INT2 INTJ NMI INTERRUPT REaUEST REG OMAO CONTROL REG. INTERRUPT DM"1 CONTROL REG IN·SERVICE REG PRIOR. lEV. MASK REG EXT INPUT 0 CONTROL REG EXT. INPUT 1 MASK REG PRIORITY RESOLVER CONTROL REG INTERRUPT STATUS REG. EXT. INPUT 2 CONTROL REG Figure 2·52 Interrupt Controller Block Diagram 2-65 210912-001 80186/80188 CPU 82SU. MASTER ., INTl 80118 'NT. IN <== lOa REQUESTS FROM OTHER SLAVES INT 1 .,. - 107 CA..... ' ~ INTO IiiI'fi SlA"vtSELECf II CASCADE ADDRESS DECODER I jjffi t-INTl 101. SLAVE INTERRUPT OUTPUT Figure 2·53 iRMXTM 86 Interrupt Controller Interconnection ;RMX86~ Mode MASTER MODE OFFSET ADDRESS INT3 CONTROL REGISTER 3EH CD 3CH 3AH ===========0=========== 38H TIMER 1 CONTROL REGISTER DMAI CONTROL REGISTER 36H DMAI CONTROL REGISTER DMAO CONTROL REGISTER 34H DMAO CONTROL REGISTER TIMER CONTROL REGISTER 32H TIMER 0 CONTROL REGISTER INTERRUPT CONTROLLER STATUS REGISTER 30H INTERRUPT CONTROLLER STATUS REGISTER INTERRUPT REQUEST REGISTER 2EH INTERRUPT REQUEST REGISTER INT2 CONTROL REGISTER INTI CONTROL REGISTER ----------------------INTO CONTROL REGISTER TIMER 2 CONTROL REGISTER ----------------------IN-SERVICE REGISTER 2CH IN SERVICE REGISTER PRIORITY MASK REGISTER 2AH PRIORITY MASK REGISTER 28H MASK REGISTER ----------------------MASK REGISTER POLL STATUS REGISTER == == == =====0= === =======_ 0 __________ POLL REGISTER 26H 24H EOI REGISTER 22H SPECIFIC EOI REGISTER 20H INTERRUPT VECTOR REGISTER -----------0----------- ___________ 1. Unsupported in this mode: values written mayor may not be stored Figure 2·54 80186 Interrupt Controller Registers 15 o I 14 0 6543210 I o ISFNMI c I LTM I MSK I PR21 PAl I PRO I Figure 2·55 INTOIINT1 Control Register Formats External Interrupt Sources the 80186. Refer to Volume I of this User's Manual for detailed information regarding the operation of interrupts from these sources. The 80186 provides five dedicated pins for external interrupt sources. One of these pins is dedicated to nonmaskable interrupt, (NMI). NMI is typically used for 2-66 210912-001 80186/80188 CPU 15 14 o 0 5 I 4 3 2 1 0 Figure 2-56 INT211NT3 Control Register Format power-fail interrupts, etc. The other four pins may function either as four interrupt input lines with internally generated interrupt vectors, as an interrupt line and an interrupt acknowledge line (called the "cascade mode") along with two other input lines with internally generated interrupt vectors, or as two interrupt input lines and two dedicated interrupt acknowledge output lines. mode, the external pins associated with the interrupt controller may serve either as direct interrupt inputs, or as cascaded interrupt inputs from other interrupt controllers as a programmed option. These options are selected by programming the C and SFNM bits in the INTO and INTI control registers (see Figure 2-58). When the interrupt lines are configured in cascade mode, the 80186 interrupt controller will not generate internal interrupt vectors for external sources. The interrupt When programmed in master mode, the 80186 interrupt controller accepts external interrupt requests only. In this NO NO PRESENT INTERRUPT REQUEST TO EXTERNAL CONTROLLER Figure 2-57 80186 Interrupt Sequencing 2-67 210912-001 80186/80188 CPU 15 CDt 0 SPECIAL FULLY NESTED BIT CD CAS- LEVEL CADE TRIG. MODE CD MODE MASK CD BIT : : o PRIORITY BITS I I 1. This bit present only in INTO-INT3 control registers 2. These bits present only in INTO-INTl control register Figure 2-58 Interrupt Controller Control Register controller will generate interrupt vectors for internal sources. External sources in the cascade mode use externally generated interrupt vectors. When an interrupt is acknowledged, the controller initiates two INTA * cycles and reads the vector into the 80186 on the second cycle. Therefore, the capability to interface to external 8259A programmable interrupt controllers is provided when the inputs are configured in cascade mode. If the C (Cascade) bits in the INTO or INTI control registers are set, the interrupt input is cascaded to an external interrupt controller. Whenever the interrupt presented to the INTO or INTI line is acknowledged in this mode, the integrated interrupt controller will not provide the interrupt type for the interrupt. Instead, two INTA bus cycles will be run, with the INT2 and INT3 lines providing the interrupt acknowledge pulses for the INTO and the INTI interrupt requests respectively. INTO/INT2 and INTlIINT3 may be individually programmed into cascade and special fully nested modes. This allows 128 individually vectored interrupt sources if two banks of nine external interrupt controllers each are used. The basic modes of operation on the interrupt controller in master mode are similar to the 8259A. The interrupt controller responds identically to internal interrupts in all three modes: the modes differ only in the interpretation of function of the four external interrupt pins. Programming the correct bits in the INTO and INTI control registers sets. iRMXTM Mode Sources When the interrupt controller is configured in iRMX mode, the integrated interrupt controller accepts interrupt requests only from the integrated peripherals. Any external interrupt requests must go through an external interrupt controller. This external interrupt controller requests interrupt service directly from the 80186 CPU through the INTO line on the 80186. In this mode, the function of this line is not affected by the integrated interrupt controller. In addition, in iRMX 86 mode the integrated interrupt controller must request interrupt service through this external interrupt controller; this interrupt request is made on the INT3line. When the four interrupt inputs are programmed as direct inputs, each is controlled by an individual interrupt control register. These registers each contain three bits to select the interrupt priority level and a single bit to enable the processor interrupt source. In addition, each control register contains a bit which selects either the edge or level triggered interrupt input mode. When edge triggered mode is selected, a low-to-high transition must occur on the interrupt input before an interrupt is generated. In level triggered mode, only a high level needs to be maintained to generate an interrupt. In both modes, the interrupt level must remain high until the interrupt is acknowledged (i.e., the interrupt request is not latched in the interrupt controller). The status of the interrupt input can be shown by reading the interrupt request register. Each of the external pins has a bit in this register which indicates an interrupt request on the corresponding pin. EXTERNAL INTERFACE The four 80186 interrupt signals can be programmably configured into three major options. These options are direct interrupt inputs (with the integrated controller providing the interrupt vector), cascaded (with an external interrupt controller providing the interrupt vector), or iRMX 86 mode. In all these modes, any interrupt presented to the external lines must remain set until the interrupt is acknowledged. NOTE Since interrupt requests on these inputs are not latched by the interrupt controller, if the external input goes inactive, the interrupt request (and also the bit in the interrupt request register) will also go inactive (low). Also, if the inter rupt input is in edge triggered mode, a low-to-high transition on the input pin must occur before the interrupt request bit will be set in the interrupt request register. Direct Input Mode Clearing cascade mode bits configures the interrupt input lines as direct interrupt input lines (see Figure 2-59). In this mode an interrupt source (e.g., an 8272 floppy disk 2-68 210912·001 80186/80188 CPU vided on the INT2/INTAO* line, and will also be reflected by interrupt acknowledge status being generated on the SO*-S2 * status lines. On the second pulse, the interrupt type will be read in. 80186 INTO INn INTERRUPT SOURCES . INTO/INT2/INTAO* and INTI/INT3/INTAI * may be individually programmed into interrupt request/ acknowledge pairs, or programmed as direct inputs. Therefore, INTO/INT2/INTAO* may be programmed as an interrupt/acknowledge pair, while INTI and INT3/ INTAI * each provide separate internally vectored interrupt inputs. INT2 INT3 Figure 2·59 80186 Non·Cascaded Interrupt Connection When an interrupt is received on a cascaded interrupt, the priority mask bits and the in-service bits in the particular interrupt control register are set into the interrupt controller's mask and priority mask registers. This action prevents the controller from generating an 80186 CPU interrupt request from a lower priority interrupt. controller) may be directly connected to the interrupt input line. Whenever an interrupt is received on the input line, the integrated controller will do nothing unless the interrupt is enabled, and it is the highest priority pending interrupt. At this time, the interrupt controller will present the interrupt to the CPU and wait for an interrupt acknowledge. When the acknowledge occurs, it will present the interrupt vector address to the CPU. In this mode, the CPU will not run any interrupt acknowledge cycles. Also, in this mode, the SFNM bit in the interrupt control register is ignored. As an example of the cascade mode, consider the 80186 interface to an 8259A (see Figure 2-61). The INTO and the INT2 lines are used as direct interrupt input lines. (Figure 2-62 lists assembly code that may be used to initialize the 80186 interrupt controller.) This configuration provides ten external interrupt lines: two provided by the 80186 interrupt controller and eight from the 8259A. The 8259A, configured as the master controller, will only receive interrupt acknowledge pulses in response to an interrupt it has generated. It may be cascaded again with up to eight additional 8259A's (each configured as slaves). Cascade Input Mode Setting the cascade mode bit and clearing the SFNM bit configures the interrupt input lines in cascade mode. In this mode, the interrupt input line pairs with an interrupt acknowledge line. The INT2/INTAO* and INT3/INTAI * lines are dual purpose; they can function as direct input lines, or they can function as interrupt acknowledge outputs. INT2/INTAO* provides the interrupt acknowledge for an INTO input, and INT3/INTAI * provides the interrupt acknowledge for an INTI input (see Figure 2-60). NOTE An interrupt ready signal must be returned to the 80186 to prevent the generation of undesired wait states in response to the interrupt acknowledge cycles. When programmed in this mode, in response to an interrupt request on the INTO line, the 80186 will provide two interrupt acknowledge pulses. These pulses will be pro- 8259A Special Fully Nested Mode When both the cascade mode bit and the SFNM bit are set, the interrupt input lines are configured in the Special Fully Nested Mode. In this mode the external interface is identical to the Cascade Mode. The Special Fully Nested Mode differs only in the conditions that allow an interrupt sent from the external interrupt controller to the integrated interrupt controller to interrupt the 80186 CPU. 80186 INT INTO INTA INT2 When an interrupt is received from a Special Fully Nested Mode interrupt line, it will interrupt the 80186 CPU if it is the highest priority interrupt pending, regardless of the state of the in-service bit for the interrupt source in the interrupt controller. When an interrupt is acknowledged from a Special Fully Nested Mode interrupt line, in-serve bits in the particular interrupt control register will be set into the interrupt controller's in-service register. This will prevent the interrupt controller from generating an 80186 8259A INT INn INTA INT3 Figure 2·60 Cascade and Special Fully Nested Mode Interface 2-69 210912-001 80186/80188 CPU 80186 AROY .J -L OTHERARD Y - INTO 10 INT2 EXTERNAL 8259A-2 INTl INT INT3 INTA AOO-A07 00-07 RD RD WR WR INTERRUPTS / 8/ +5V SP CS , U t PCSA Figure 2·61 80186/8258A Interrupt Cascading spectively supply these two signals. The external master interrupt controller must be able to interrupt the 80186 CPU, and needs to know when the interrupt request is acknowledged. The INTO and INT2/INTAO* lines provide these functions. CPU interrupt request from a lower priority interrupt. Unlike cascade mode, however, the interrupt controller will not prevent additional interrupt requests generated by the same external interrupt controller from interrupting the 80186 CPU. If the external (cascaded) interrupt controller receives a higher priority interrupt request on one of its interrupt request lines and presents it to the integrated controller's interrupt request line, it may cause an interrupt to be generated to the 80186 CPU, regardless of the state of the in-service bit for the interrupt line. In the iRMX86 mode (see Figure 2-64), the 80130 interrupt controller is the master interrupt controller of the system. The 80186 generates an interrupt request to the 80130 interrupt controller when one of the 80186 integrated peripherals has created an interrupt condition, and that condition is sufficient to generate an interrupt from the 80186 integrated interrupt controller. The 80130 decodes the interrupt acknowledge status directly from the 80186 status lines; thus, the INT2/INTAO* line of the 80186 need not be connected to the 81030. The circuit illustrated by Figure 2-64 uses this interrupt acknowledge signal to enable the cascade address decoder. The 80130 drives the cascade address on AD8-ADIO during Tl of the second interrupt acknowledge cycle. This cascade address is latched into the system address latches, and if the proper cascade address is decoded by the 8205 decoder, the 80186 INTlISLAVE SELECT* line will be driven active, enabling the 80186 integrated interrupt controller to place its interrupt vector on the internal bus. (See Figure 2-62 for the code to configure the 80186 into iRMX 86 mode.) If the SFNM mode bit is set, but the cascade mode bit is not set, the controller provides internal interrupt vectoring. The controller also ignores the state of the in-service bit in determining whether to present an interrupt request to the CPU. In other words, it uses the SFNM conditions of interrupt generation with an internally vectored interrupt response (i.e., if the interrupt pending is the highest priority type pending, it will cause a CPU interrupt regardless of the state of the in-service bit for the interrupt). iRMX Mode When the RMX bit in the peripheral relocation register is set, the interrupt controller is set into iRMX 86 mode. In this mode, all four interrupt controller input lines are used to perform the necessary handshaking with the external master interrupt controller (see Figure 2-63). Interrupt Latency Because the integrated interrupt controller is a slave controller, it must be able to generate an interrupt input for an external interrupt controller. It also must be signaled when it has the highest priority pending interrupt to know when to place its interrupt vector on the bus. The INT3/ Slave Interrupt Output and INTI/Slave Select* lines, re- Interrupt latency time is the period of time between the time the 80186 receives the interrupt to the time it begins to respond to the interrupt. Interrupt latency differs from interrupt response time, which is the time from when the processor actually begins processing the interrupt to when 2-70 210912-001 80186/80188 CPU $modl86 name example.80 I 86JnterrupLcode This routine configures the 80186 interrupt controller to provide two cascaded interrupt inputs (through an external 8259A interrupt controller on pins INTO/INT2) and two direct interrupt inputs (on pins INTI and INn). The default priority levels are used. Because of this, the priority level programmed into the control register is set the III, the level all interrupts are programmed to at reset. intO.control inLmask equ equ OFF38H OFF28H code segment assume proc push push CS:code near OX AX mov AX,OIOOIlIB mov out OX,intO.control OX,AX mov AX,OIOOIlOIB mov out pop pop ret endp ends end OX,inLmask OX,AX AX OX seLinL seUnL code $modl86 name public 'code' cascade mode interrupt unmasked now unmask the other external interrupts example.80186JnterrupLcode This routine configures the 80186 interrupt controller into iRMX 86 mode. This code does not initialize any of the 80186 integrated peripheral control registers, nor does it initialize the external 8259A or 80130 interrupt controller. reloca tion.reg equ OFFFEH code segment assume proc push push CS:code near OX AX mov in or out OX,relocation.reg AX,OX AX,O I OOOOOOOOOOOOOOB OX,AX seLrmlL public 'code' read old contents of register set the RMX mode bit Figure 2-62 Example Interrupt Controller Interface Code 2-71 210912-001 80186/80188 CPU 80186 When interrupts are enabled in the CPU, the interrupt latency is a function of the instructions being executed. Only repeated instructions will be interrupted before being completed, and those only between their respective iterations. Therefore, the interrupt latency time could be as long as 69 CPU clocks-the time it takes the processor to execute an integer divide instruction (with a segment override prefix) the longest single instruction on the 80186. 8259A - INTO INT INT2 INTA INn CASCADE ADDR. DECODE 0 Other factors can affect interrupt latency. An interrupt will not be accepted between the execution of a prefix (such as segment override prefixes and lock prefixes) and the instruction. In addition, an interrupt will not be accepted between an instruction which modifies any of the segment registers and the instruction immediately following the instruction. This interrupt denial is required to allow the stack to be changed. If the interrupt were accepted, the return address from the interrupt would be placed on a stack which was not valid (the Stack Segment register would have been modified but the Stack Pointer register would not have been). Finally, an interrupt will not be accepted between the execution of the WAIT instruction and the instruction immediately following it if the TEST* input is active. If the WAIT sees the TEST* input inactive, however, the interrupt will be accepted, and the WAIT will be re-executed after the interrupt INT3 Figure 2·63 80186 iRMXTM 86 Mode Interface it actually executes the first instruction of the interrupt service routine. The factors affecting interrupt latency are the instruction being executed and the state of the interrupt enable flip-flop. Interrupts will be acknowledged only if the interrupt enable flip-flop in the CPU is set. Therefore, interrupt latency will be very long indeed if interrupts are never enabled by the processor! 80186 ALE ADDR r- )8 ADO·AD15 / ClK AO-A15 lATCH 11'3 80130 ADO-AD15 A8·A 10 / ClK MMCS2 MEMCS IRO· IOCS IR7 PCS3 /3 Slj.S2 / SHE L8 / L7 / INTERRUPT REQUESTS SO-S2 SHE INT J INTO INT3 +5 8205 E2 E3 INT2 INn - ~ E1 7 Figure 2·64 80186/80130 iRMXTM 86 Mode Interface 2·72 210912-001 80186/80188 CPU In master mode, the integrated interrupt controller is the master system interrupt controller. Therefore, no external interrupt controller needs to be informed when the integrated controller is providing an interrupt vector or when interrupt acknowledge is taking place. As a result, no interrupt acknowledge bus cycles will be generated. The first external indication that an interrupt has been acknowledged will be the processor reading the interrupt vector from the interrupt vector table to low memory. Table 2-25 80186 Interrupt Vector Types Interrupt Name Vector Type Default Priority timer 0 timer I timer 2 DMAO DMAI INTO INT I INT 2 INT 3 8 18 19 10 II 12 13 14 15 Oa Ob Oc 2 3 4 5 6 7 Since the two interrupt acknowledge are not run, and the interrupt vector address does not need to be calculated, interrupt to an internally vectored interrupt is 42 clocks cycles, which is faster than the interrupt response when external vectoring is required, or the interrupt controller is run in the iRMX 86 mode. return. Re-executing WAIT is required, since the WAIT is used to prevent execution by the 80186 of an 8087 instruction while the 8087 is busy. If two interrupts of the same programmed priority occur, the default priority scheme (see Table 2-25) is used. INTERRUPT RESPONSE TIMING Internal Vectoring, iRMXTM 86 Mode The 80186 can respond to an interrupt in two different ways. The first will occur if the internal controller is providing the interrupt vector information with the controller in master mode. The second will occur if the CPU reads interrupt type information from an external interrupt controller or if the interrupt is in the iRMX 86 mode. In both of these instances the interrupt vector information driven by the 80186 integrated interrupt controller is not available outside the 80186 microprocessor. In the iRMX mode of operation the interrupt types associated with the various interrupt sources can be changed. The upper 5 most significant bits are taken from the interrupt vector register, and the lower 3 significant bits are taken from the priority level of the device causing the interrupt. Since the interrupt type, instead of the interrupt vector address, is given by the interrupt controller in this mode the interrupt vector address must be calculated by the CPU before servicing the interrupt. In each interrupt mode the interrupt controller will automatically set the in-service bit when the integrated interrupt controller receives an interrupt response, and reset the interrupt request bit in the integrated controller. The priority mask bits are set by writing to the register only (except on RESET when they are set to 7). The priority mask bits will remain one value and prevent lower priority interrupts from occurring until the programmer resets or changes the register. Internal Vectoring, Master Mode In this mode of operation the integrated interrupt controller will present the interrupt type to the CPU in response to the two interrupt acknowledge bus cycles run by the processor. During the first interrupt acknowledge cycle, the external master interrupt controller determines which slave interrupt controller will be allowed to place its interrupt vector on the microprocessor bus. During the second interrupt acknowledge cycle, the processor reads the interrupt vector from its bus. Therefore, these two interrupt acknowledge cycles must be run since the integrated controller will present the interrupt type information only when the external interrupt controller signal the integrated controller that it has the highest pending interrupt request (see Figure 2-65). The 80186 samples the SLAVE SELECT* line during the falling edge of the clock at the beginning of T3 of the second interrupt acknowledge cycle. This input must be stable 20ns before and IOns after this edge. In the master mode of operation, the interrupt types associated with all interrupt sources are fixed and unalterable (see Table 2-25). In response to an internal CPU interrupt acknowledge the interrupt controller will generate the vector address instead of the interrupt type. On the 80186, as with the 8086, the interrupt vector address is the interrupt type multiplied by 4. This speeds up the interrupt response time. These two interrupt acknowledge cycles will be run back to back, and will be LOCKED with the LOCK* (see paragraph 2.5.3) output active (meaning that DMA requests and HOLD requests will not be honored until both cycles have been run). Note that the two interrupt acknowledge cycles will always be separated by two idle T state, and that the wait states will be inserted into the interrupt acknowledge cycle if a ready is not returned by the In addition, unless the interrupt control for the interrupt is set in Special Fully Nested Mode, the interrupt controller will prevent any interrupts from occurring from the same interrupt line until the in-service bit for that line has been cleared. 2-73 210912·001 80186/80188 CPU T, T, T, T, T, CLKOUT T, I S~S2 --~~-----+:-----+I-r--~----~----~---r~:----~I-----fl~+-_+----- I INTO (HIGH) I I I INTERRUPT ACKNOWLE GE I I INTERRUPT ACKNOWLEDGE I I I ---i----i----i---i----j----i---i----j----i'-f--;--- __ INT3 ___~--~--+_--~-~--~--~--+_~-~--_ (HIGH) =-~--~-,,~--~--~--~--~--~--~~~-, CAS 80186 SLAVE ENABLE CASCADE ADDRESS FROM 8259A CD -----+-----+--'\--+-----7'----~'----~'----~'----~'----~'----_+--,'-- INTA :.I ~...._ - , -_ _ _ _ _ _ I -- I I LOCK -----:\ I~--_+----_r-----r-----r----_r----f-----~, I I 1. SLAVE SELECT = INT1 2. INTA = INT2 3. Driven by external interrupt controller 4. SLAVE SELECT must be driven before Phase 2 of T2 of the second INTA cycle _ __ 5. SLAVE SELECT read by 80186 Figure 2·65 80186 iRMXTM 86 Mode Interrupt Acknowledge Timing processor bus interface. The two idle T states are inserted to allow compatibility with the timing requirements of an external 8259A interrupt controller. bus cycles, and that wait states will be inserted in the interrupt acknowledge cycle if a ready is not returned to the processor. Also notice that the 80186 provides two interrupt acknowledge signal, one for interrupts signaled by the INTO line, and one for interrupts signaled by the INTI line (on INT2/INTAO* and INT3/INTAI * lines, respectively). These two interrupt acknowledge signals are mutually exclusive. Interrupt acknowledge status will be driven on the status lines (50*-52*) when either INT2/ INTAO* or INT3/INTAI * signal an interrupt acknowledge. Because the interrupt acknowledge cycles must be run in iRMX 86 mode, even for internally generated vectors, and the integrated controller presents an interrupt type rather than a vector address, the interrupt response time here is the same as if an externally vectored interrupt was required, in other words 55 clocks. External Vectoring External interrupt vectoring occurs whenever the 80186 interrupt controller is placed in the cascade mode, special fully nested mode, or iRMX 86 mode (and the integrated controller is not enabled by the external master interrupt controller). In this mode, the 80186 generates two interrupt acknowledge cycles, reading the interrupt type off the lower 8 bits of the address/data bus on the second interrupt acknowledge cycle (see Figure 2-66). This interrupt response is exactly the same as the 8086, so that the 8259A interrupt controller can be used exactly as it would in an 8086 system. Notice that the two interrupt acknowledge cycles are LOCKED, and that two idle T-states are always inserted between the two interrupt acknowledge 2.8.4 Chip Select/Wait State Generation Unit The 80186/188 CPU contains an integrated chip select unit which provides programmable chip-select' generation logic for both the memories and peripherals. This unit can also be programmed to provide WAIT state (READY) generation and can provide latched address bits A 1 and A2. The chip select lines are active for all memory and I/O cycles in their programmed areas, whether the cycles are generated by the CPU of the integrated DMA unit. 2-74 210912-001 80186/80188 CPU so- S2 INTA ADO-AD7 --~----~----~----~----~----~--~~--~--~ I I I INTERRUPT TYPE (FROM EXTERNAL CONTROLLER) Figure 2·66 80186 Cascaded Interrupt Acknowledge Timing MEMORY CHIP SELECTS chip select may also be selected. Only one chip select may be programmed to be active for any memory location at a time. All chip select sizes are in bytes, whereas iAPX 186 memory is arranged in words. For example, if16 64K xl memories are used, the memory block size will be 128K, not 64K. The upper limit of UCS* and the lower limit of LCS* are fixed at FFFFFH and OH in memory space, respectively. The other limit of these is set by the memory size programmed into the control register for the chip select line. Mid-range memory allows both the base address and the block size of the memory area to be programmed. The only limitation is that the base address must be programmed to be an integer multiple of the total block size. For example, if the block size was 128K bytes (four 32K byte blocks) the base address could be 0 or 20000H, but not 10000H. The 80186 provides six discrete chip select lines which connect to memory components in an iAPX186 system. These lines (see Figure 2-67) output signals for three memory areas: upper memory (UCS*), lower memory (LCS*), and mid-range memory (MCSO-3*). The range for each chip select is user-programmable and can be set to 2K, 4K, 8K, 16K, 32K, 64K, 128K (plus lK and 256K for upper and lower chip selects). In addition, the beginning or base address of the mid-range memory FFFFF STARTUP UCS 1 MCS3 MCS2 { ROM Four registers in the peripheral control block (see Figure 2-68) control the memory chip selects. These selects include one each for UCS* and LCS*, the values of which determine the size of the memory blocks addressed by these two lines. The other two registers control the size and base address of the mid-range memory block. --- { --PROGRAM MEMORY On reset, only UCS* is active. Reset programs it to be active for the top lK memory block, to insert three wait states to all memory fetches, and to factor external ready for every memory fetch. All other chip select registers assume indeterminate states after reset, but none of the other chip select lines will be active until all necessary registers for a chip select have been accessed (not necessarily written, a read to an uninitialized register will enable the chip select function controlled by that register). MCS1 { --MCSO { INTERRUPT VECTOR '" 1 TABLE 0 Generally, the chip selects of the 80186 should not be programmed such that any two areas overlap. In addition, none of the programmed chip select areas should overlap Figure 2·67 80186 Memory Areas and Chip Selects 2-75 210912-001 80186/80188 CPU Table 2·26 UMCS Programming Values OFFSET: AOH UPPER MEMORY SIZE CD UMCS A2H LOWER MEMORY SIZE CD LMCS A4H PERIPHERAL CHIP SELECT BASE ADDRESS PACS A6H MID-RANGE MEMORY BASE ADDRESS A8H MID-RANGE MEMORY SIZE CD CD CD Ii I ~1 MMCS MPCS CD 1. Upper memory ready bits 2. Lower memory ready bits 3. PCSO-PCS3 ready bits 4. Mid-range memory ready bits 5. PCS4-PCSS ready bits S. MS: 1 ~ Peripherals active in memory space ~ Peripherals active in 1/0 space EX:1 ~ 7 PCS lines o ~ PCS5 ~ A1, PCS6 ~ A2 Starting Address (Base Address) Memory Block Size FFCOO FF800 FFOOO FEOOO FCOOO FBOOO FOOOO EOOOO CODOC 1K 2K 4K 8K 16K 32K 64K 126K 256K UMCS Value (Assuming RO=Rl =R2=O) FFF8H FFB8H FF38H FE38H FC3BH F838H F036H E038H C038H operation. After reset, the UMCS register is programmed for a lK area. It must be reprogrammed if a larger upper memory area is desired. o Any internally generated 20-bit address whose upper 16 bits are greater than or equal to UMCS (with bits 0-5 "0") will cause UCS to be activated. UMCS bits R2-RO are used to specify READY mode for the area of memory defined by this chip-select register. Not all bits of every field are used Figure 2·68 80186 Chip Select Control Registers any of the locations of the integrated 256-byte control register block, If such an overlap condition exists, whenever two chip select lines are programmed to respond to the same area, both will become active during any access to that area. When programmed as such, the ready bits for both areas must be programmed to the same value. If not programmed in this manner, the processor response to an access in this area is indeterminate. If any of the chip select areas overlap the integrated 256-byte control register block, the timing on the chip select line is altered. As always, the CPU ignores any values returned on the external bus from this access. Lower Memory CS· The 80186 provides a chip select for low memory called LCS*. The bottom of memory contains the interrupt vector table, starting at location OOOOOH. The lower limit of memory defined by this chip select is always Oh, while the upper limit is programmable. By programming the upper limit, the size of the memory block is also defined. Table 2-27 shows the relationship between the upper address selected and the size of the memory block obtained. The upper limit of this memory block is defined in the LMCS register (see Figure 2-70). This register is at offset A2H in the internal control block. The legal values for bits 6-15 and the resulting upper address and memory block sizes are given in Table 2-27. Any combination of bits 6-15 not shown in Table 2-27 will result in undefined operation. After reset, the LMCS register value is undefined. However, the LCS* line will not become active until the LMCS register is accessed. Upper Memory CS· The 80186 provides a chip select, called UCS *, for the top of memory, The top of memory is usually used as the system memory because, after reset, the 80186 begins executing at memory location FFFFOH. The upper limit of memory defined by this chip select is always FFFFFH, while the lower limit is programmable. By programming the lower limit, the size of the select block is also defined. Table 2-26 shows the relationship between the base address selected and the size of the memory block obtained. Any internally generated 20-bit address whose upper 16 bits are less than or equal to LMCS (with bits 0-5 "1") will cause LCS* to be active, LMCS register bits R2-RO are used to specify the READY mode for the area of memory defined by this chip-select register. The lower limit of this memory block is defined in the UMCS register (see Figure 2-69). This register is at offset AOH in the internal control block. The legal values for bits 6-13 and the resulting starting address and memory block sizes are given in Table 2-26. Any combination of bits 6-13 not shown in Table 2-26 will result in undefined Mid·Range CS· The 80186 provides four MCS® * lines which are active within a user-locatable memory block. This block can be 2-76 210912-001 80186/80188 CPU 15 OFFSET: 14 13 12 11 10 AOHI 1 I 1 A19 U U U I u 6 2 1 0 I u I u I u I u I 1 I 1 I 1 I R2 I Rl I RO I All Figure 2·69 UMCS Register 15 OFFSET: A2H I 0 A19 14 13 12 11 10 0 u u u u 8 Iu 0 1 6 Iu u u All I 1 I1 I1 R2 I Rl I RO I Figure 2·70 LMCS Register 15 OFFSET: A8H I 1 14 13 12 11 10 9 8 7 2 6 I~I~I~I~I~I~I~I~I~I 1 1 0 I 1 I 1 I R2 I Rl I RO I Figure 2·71 MPCS Register NOTE located anywhere within the iAPX 186 1M byte memory address space exclusive ofthe areas defined by UCS* and LCS*. Both the base address and size of this memory block are programmable. This register is located at A8H in the internal control block. Only one of bits 8-14 must be set at a time or unpredict able operation of the MCS* lines will otherwise occur. The size of the memory block defined by the mid-range select lines (refer to Table 2-28), is determined by bits 8-14 of the MPCS register (see Figure 2-71). Each of the four chip-select lines is active for one of the four equal contiguous divisions of the mid-range block. Therefore, if the total block size is 32K, each chip select is active for 8K of memory with MCSO* being active for the first range and MCS3* being active for the last range. Table 2·27 LMCS Programming Values Upper Address 003FFH 007FFH OOFFFH 01FFFH 03FFFH 07FFFH OFFFFH 1FFFFH 3FFFFH Memory Block Size 1K 2K 4K 8K 16K 32K 64K 128K 256K The base address of the mid-range memory block is defined 15-9 of the MMCS register (see Figure 2-72) located at offset A6H in the internal control block. These bits correspond to bits A19-A13 of the 20-bit memory address. Bits AI2-AO of the base address are always O. The base address may be set at any integer multiple of the size of the total memory block selected. For example, if the mid-range block size is 32K (or the size of the block for which each MCS* line is active is 8K), the block could ocated at 10000H or 18000H, but not at 14000H, since the first few integer multiples of a 32K memory block are OH, 8000H, 10000H, 18000H, etc. After reset, the contents of both of these registers is undefined. However, none of the MCS* lines will be active until both the MMCS and MPCS registers are accessed. LMCS Value (Assuming RO=R1 =R2=O) 0038H 0078H 00F8H 01F8H 03F8H 07F8H OFF8H 1FF8H 3FF8H Table 2·28 MPCS Programming Values Total Block Size Individual Select Size 8K 16K 32K 64K 128K 256K 512K 2K 4K 8K 16K 32K 64K 128K MPCS Bits MMCS bits R2-RO specify READY mode of operation for all mid-range chip selects. All devices in mid-range memory must use the same number of WAIT states. 14-8 00000018 00000108 00001008 00010008 00100008 01000008 10000008 The 512K block size for the mid-range memory chip selects is a special case. When using 512K, the base address would have to be at either locations OH or 80000H. If it were to be programmed at OH when the LCS* line was 2-77 210912·001 80186/80188 CPU o 15 OFFSET: A8H Iu Iu Iu IU ululull1111111111 A19 R2 RllROI A13 Figure 2·72 MMCS Register programmed, there would be an internal conflict between the LCS* ready generation logic and the MCS* ready generation logic. Likewise, if the base address were programmed at 80000H, there would be a conflict with the UCS* ready generation logic. Since the LCS* chip-select line does not become active until programmed, while the UCS* line is active at reset the memory base can be set only at OH. If this base address is selected, however, the LCS* range must not be programmed. tion circuit may be programmed to ignore external READY signals (i.e., only the internal ready circuit will be used) or to factor the external READY signal (i.e., a ready will be returned to the processor only after both the internal ready circuit has gone ready and the external ready has gone ready). Also, when a memory access occurs where there is no programmed chip select, ARDY and SRDY may be used to insert wait states as in the 8086 system. A circuit must be included, however, to generate an external ready since, at reset, the READY generator is programmed to factor external READY to all accesses to the top IK byte memory block. If a READY was not returned on one of the external ready lines (ARDY or SRDY) the processor would wait indefinitely to fetch the first instruction. INPUT/OUTPUT PERIPHERAL CHIP SELECTS Since 80186 memory interfacing is similar to the 8086, the two processors are also similar when interfacing to I/O peripherals. The 80186 contains integral interfacing logic that provides seven discrete chip select lines (PCSO-6*). These seven chip select lines are intended for connection to 110 peripherals in an iAPX86 system. The signals on these lines, PCSO-6*, go active for one of seven contiguous 128-byte areas in memory or 110 space above a programmed base address. READY control consists of 3 bits for each CS* line or group of lines. This allows independent ready generation for each of upper memory, lower memory, mid-range memory, peripheral devices 0-3 and peripheral devices 4-6. The ready bits control an integrated WAIT State Generator that allows a programmable number of WAIT states to be automatically inserted whenever an access is made to the area of memory associated with a chip select area. Each set of ready bits includes a bit which determines whether the internal ready signals (ARDY or SRDY) are used or ignored (i.e., the bus cycle terminates even though a ready has not been returned on the external pins). Two registers in the internal peripheral control block (see Figure 2-68) control the peripheral chip selects. These registers allow the base address of the peripherals to be set, and allow the peripherals to be mapped into memory or 110 space. Both registers must be accessed before any of the peripheral chip selects become active. A bit in the memory/peripheral chip select (MPCS) register allows PCS5* and PCS6* to become latched when outputs Al and A2 occur. When this option is selected, PCS5* and PCS6* indicate the state of Al and A2 throughout the bus cycle. These outputs provide for external peripheral register selection in a system where the address is not latched. On reset, these lines are driven high and only indicate the state of Al and A2 after both PACS and MPCS have been accessed (and are programmed to provide Al and A2-refer to Volume I of this User's Guide). When the externally generated READY is used (R2 = 0), the internal ready generator operates in parallel with the external READY. For example, if the internal ready generator is set to insert two Wait states, but activity on the external READY lines inserts four WAIT states, only four WAIT states will be inserted by the processor. This is because the two WAIT states generated by the internal Table 2·29 80186 WAIT State Programming READY/WAIT STATE GENERATION The 801861188 generates an internal READY signlll for each of the memory or peripheral chip select (CS*) iines. From 0 to 3 WAIT states may be inserted by the internal ready generation unit for each access to any memory or 110 areas to which the chip select circuits respond. Table 2-29 shows how the ready control bits should be programmed to provide this. In addition, the READY genera- 2-78 R2 R1 RO 0 0 0 0 I I I I 0 0 0 I 0 I 0 I 0 I I I 0 0 I 1 Number of Wait States o + external ready I 2 3 + external ready + external ready + external ready o (no external ready required) I (no external ready required) 2 (no external ready required) 3 (no external ready required) 210912·001 80186/80188 CPU CLKIN CLKOUT ~--------------TCLCL------------~~ Figure 2·73 Clock In/Clock Out Timing generator overlapped the first two WAIT states generated by the external READY signal. The external ARDY and SRDY lines are always ignored during cycles accessing internal peripherals. clock signal for use outside the iAPX 186 and may be used to drive other system components. All timings are referenced to the output clock. CRYSTAL CLOCK REFERENCE 2.8.5 Clock Generator/Reset/Ready The 80186 oscillator circuit is designed to be used with a parallel resonant fundamental mode crystal (see Figure 2-75) as the time base. The crystal frequency selected should be double the intended CPU clock frequency. Do not use an LC or RC circuit with this oscillator. If an external oscillator is used, connect it directly to input pin Xl in lieu of a crystal (input pin X2 may be left to float). The output of the oscillator is not directly available outside the 80186. The 80186 clock generator produces the main clock signal (see Figure 2-73) for all 80186 integrated components, and all CPU synchronous devices in. the 80186 system (see Figure 2-74). This clock generator includes a crystal oscillator, a divide-by-two counter, reset circuits, and ready generation logic. The clock generator generates the 50% duty cycle processor clock for the iAPX 186 by dividing the output of a crystal oscillator by two to form the symmetrical clock signal. If an external oscillator is used, the state of the clock generator will change on the falling edge of the oscillator signal. The CLKOUT pin provides the processor The crystal oscillator is a parallel resonant, Pierce oscillator designed to be used as shown in Figure 2-76 (the capacitor values shown are approximate). As the crystal X, CPU CLOCK & x, CLOCKOUT ARDY --------+~r-;;;,=-, SRDY -----------------+----f ~----------------~~~ CPU READY CPU RESET & RESET OUTPUT Figure 2·74 80186 Clock Generator Block Diagram 2-79 210912-001 8086/80186 HARDWARE REFERENCE MANUAL signal if it will occur during T2, T3, or Tw). High-to-LOW transitions of ARDY must be performed synchronously to the CPU clock. x,I---------, ~ 11 MtU CRYSTAL A second ready input (SRDY) is provided to interface with externally synchronized ready signals. This input is sampled at the end ofT2, T3, and again at the end of each Tw until it is sampled HIGH. By using this input rather than the asynchronous ready input, the half-clock cycle resolution time penalty is eliminated. This input must satisfy set-up and hold times to guarantee proper operation of the circuit. X,I----------' 80186 Figure 2·75 Recommended iAPX 186 Crystal Configuration Ready synchronization is discussed in more detail in paragraph 2.5.7. Refer to that discussion and the timing diagram contained in paragraph 2.5.7 for additional detail. frequency drops, the de-coupling capacitor values should be increased, (e.g., at the 4 MHz minimum crystal frequency supported by the 80186 these capacitors should be 30pF). RESET The 80186 provides both a RES* input pin and a synchronized RESET output pin for use with other system components. The RES* input pin is provided with hysteresis to allow a power-on reset signal generated from an RC network. RES* is required to be low for greater than four clock cycles and must occur no sooner than 50 microseconds after power-up. RESET is guaranteed to remain active for at least five clocks, given a RES* input lasting at least six clocks. RESET may be delayed from RES* up to 2.5 clocks. EXTERNAL FREQUENCY CLOCK REFERENCE The 80186 can use an external clock frequency standard (similar to the 8086 when used in conjunction with the 8284A). The external frequency input (EFI) signal connects directly to the Xl input of the oscillator (X2 is left open). This oscillator input drives an internal divide-bytwo counter to generate the CPU clock. The external frequency reference can thus be virtually any duty cycle, as long as the minimum high and low times for the signal are consistent with those specified for the 80186 (refer to the Intel iAPX186 data sheet). The reset input signal also resets the divide-by-two counter. A one clock cycle internal clear pulse is generated when the RES* input signal first goes active. This clear pulse goes active beginning on the first low-to-high transition of the Xl input after RES* goes active, and goes inactive on the next low-to-high transition of the Xl input. In order to insure that the clear pulse is generated on the next EFI cycle, the RES* input signal must satisfy a 25ns setup time to the high-to-low EPI input signal (see Figure 2-77). During this clear, clockout will be high. On the next high-to-low transition of Xl, clockout will go low, and will change state on every subsequent high-to-low transition of EFI. READY SYNCHRONIZATION The 80186 provides both synchronous and asynchronous ready inputs. Asynchronous ready synchronization is accomplished by circuits which samples ARDY in the middle of T2, T3, and again in the middle of each Tw until ARDY is sampled HIGH. One-half CLKOUT cycle of resolution time is used and full synchronization is performed only on the rising edge of ARDY (i.e., the falling edge of ARDY must be synchronized to the CLKOUT 80186 x, x, Crystal Choice Recommendations: ck T ±2~F ±~F Frequency & Tolerance: Temperature Range: ESR (Equivalent Series Resistance): Co (Shunt Capacitance): C L (Load Capacitance): Drive Level: Determined by System Requirements o to 70°C 30 ohms max 7 pfmax 20 pf :!:2pf 1 mwmax Figure 2·76 8018.6. Crystal Connection 2-80 210912-001 80186/80188 CPU Figure 2-77 80186 Clock Generator Reset Table 2-30 80186 Initial Register State After RESET The high-to-Iow transition of the clockout signal of the 80186 synchronizes the reset signal presented to the rest of the 80186, and also the signal present on the RESET output pin of the 80186. This signal remains active as long as the RES* input also remains active. After the RES* input goes inactive, the 80186 will begin to fetch its first instruction (at memory location FFFFOH) after six and a half CPU clock cycles (i.e., Tl of the first fetch will occur six and a half clock cycles later). To insure that the RESET output will go inactive on the next CPU clock cycle, the inactive going edge of the RES* input must satisfy certain hold and setup times to the low-to-high edge of the clockout signal of the 80186 (see Figure 2-78). Status Word Instruction Pointer Code Segment Data Segment Extra Segment Stack Segment Relocation Register UMCS • Initialization and Processor Reset Upon receipt of a RESET pulse from the RES* input, the local bus controller will perform the following actions: Drive DEN*, RD"', and WR* HIGH for one clock cycle, then float. RD* is also provided with an internal pull-up device to prevent the processor from inadvertently entering Queue Status mode during reset. Drive LOCK'" HIGH and then float. Drive HLDA LOW. • All chip-select outputs will be driven high. • Upon leaving RESET, the UCS* line will be programmed to provide chip select to a lk block with the accompanying READY control bits set at 011 to allow the maximum number of internal wait states in conjunction with external Ready consideration (i.e., UMCS resets to FFFBH). • No other chip select or READY control registers have any predefmed values after RESET. They will not become active until the CPU accesses their control registers. Both the PACS and MPCS registers must be accessed before the PCS* lines will become active. ~'~ NOTE • Tristate ADO-I5, AI6-19, BHE*, DT/T*. Upon reset, the Chip-Select/Ready logic will perform the following actions: Local Bus Controller and Reset Drive SO*-S2* to the passive state (all HIGH) and then float. 20FF(H) FFFB(H) Chip Select/Ready Logie and Reset Processor initialization or startup is accomplished by driving the RES* input pin LOW. RES* forces the 80186 to terminate all execution and local bus activity. No instruction or bus activity will occur as long as RES* is active. After RES* becomes inactive and an internal processing interval elapses, the 80186 begins execution with the instruction at physical location FFFFOH. RES* also sets some registers to predefined values (see Table 2-30). • FFFF(H) OOOO(H) OOOO(H) OOOO(H) • Drive ALE LOW (ALE is never floated). • • F002(H) OOOO(H) RES _ _ _ _ ...J RESET ---------"""'L- Figure 2-78 Coming Out of Reset 2-81 210912·001 80186/80188 CPU DMA Channels and Reset Interrupt Controller and Reset Upon RESET, the DMA channels will perform the following actions: Upon RESET, the interrupt controller will perform the following actions: • The Start/Stop bit for each channel will be reset to STOP. • All SFNM bits reset to 0, implying Fully Nested Mode. • Any transfer in progress is aborted. • All PR bits in the various control registers set to 1. This places all sources at lowest priority (leve1111). Timers and Reset Upon RESET, the Timers will perform the following actions: • • All EN (Enable) bits are reset preventing timer counting. 11 SEL (Select) bits are reset to zero. This selects MAX COUNT register A, resulting in the Timer Out pins going HIGH upon RESET. • All LTM bits reset to 0, resulting in edge-sense mode. • All Interrupt Service bits reset to O. • All Interrupt Request bits reset to O. • All MSK (Interrupt Mask) bits are set to 1 (mask). • All C (Cascade) bits reset to 0 (non-cascade). • All PRM (Priority Mask) bits set to 1, implying no levels masked. • Initialized to non-iRMX 86 mode. 2-82 210912-001 8087 Numeric Processor Extension 3 CHAPTER 3 8087 NUMERIC PROCESSOR EXTENSION 3.1 INTRODUCTION software based 8087 emulator is also included. Both the component and the software emulator add extra data types and operations to the iAPX 86/10 family ofmicroprocessors. The hardware component and the software emulator are completely compatible. This chapter provides specific hardware design information on the operation and functions of INTEL's 8087 Numeric Processor Extension (NPX). General information on the NPX coprocessor and its applications is presented, along with a component overview of the architectural and software considerations, and individual device pin functional signal definitions. Detailed descriptions of the NPX operating modes, general operation with the iAPX 86/186 host CPU's, and bus operation artd timing are also presented. In addition, an explanation of the protocols supporting local bus transfers to the host CPU's, and a description of interrupt operation are also provided. For more specific information of any of the 8086 family support circuits, refer to the Microsystem Component Handbook (Order Number: 230843-002). NUMERIC PROCESSOR EXTENSION APPLICATIONS The versatility and performance of the 8087 NPX make it appropriate for a broad array of numerically-oriented applications. Generally, any application that exhibits the following characteristics will benefit by implementing numeric processing on the 8087: 1. Numeric data vary over a wide range of values or include non- integral values; non-integral values; 2. Algorithms produce very large or very small intermediate results; 3.1.1 iAPX 86, 88, 186, 188 Base 3. Computations must be very precise, i.e., a large number of significant digits must be maintained; The 8087 Numeric Processor Extension (NPX) is based on the iAPX861 88/186/188 family of microprocessors. These microprocessors are general purpose devices, designed for general data processing applications that require fast, efficient data movement and control instructions. The actual arithmetic performed on data values is fairly simple in data applications. The iAPX 86 family of microprocessors fills this need in an effective, low cost manner. However, some applications require more powerful arithmetic instructions and data types than provided by a general purpose data processor. Since the real world deals in fractional values and requires arithmetic operations like square root, sine and logarithms, integer data types and their operations may not meet the needed accuracy, speed, and ease of use requirements. 4. Performance requirements exceed the capacity oftraditional microprocessors; 5. Consistently safe, reliable results must be delivered using a programming staff that is not expert in numeric techniques. The 8087 can also reduce software development costs and improve the performance of systems that do not use real numbers, but operate on multi-precision binary or decimal integer values. A few examples, which show how the 8087 might be used in specific numerics applications, are described in the following list. In the past, these types of systems have typically been implemented with minicomputers. The advent of the 8087 brings the size and cost savings of microprocessor technology to these applications for the first time. These advanced functions are not simple to implement and are not inexpensive. General data processors do not provide these features because of their cost to other less-complex applications that do not require such sophisticated features. Therefore a special, easy to use processor which has a high level of hardware and software support is required to implement these functions. 1. Business data processing - The NPX's ability to accept decimal operands and produce exact decimal results up to 18 digits greatly simplifies accounting programming. Financial calculations which use power functions can take advantage of the 8087's exponentiation and logarithmic instructions. The 8087 (NPX) provides these features and supports the data types and operations needed. The NPX allows use of all of the current hardware and software support that is available for the iAPX 86/10, iAPX 88/10, iAPX 186/10 and iAPX 188/10 microprocessors. The following paragraphs present some typical applications for microprocessors using the NPX. In addition, a discussion of the use of the special hardware component, the 8087 NPX, and its 2. Process control - the 8087 solves dynamic range problems auto maticaJly, and its extended precision allows control functions to be fine-tuned for more accurate and efficient performance. Control algorithms implemented with the NPX also contribute to improved reliability and safety, while the 8087's speed can be exploited in real-time operations. 3-1 210912-001 8087 NUMERIC PROCESSOR EXTENSION 3. Numeric control - The 8087 can move and position machine tool heads with extreme accuracy. Axis positioning also benefits from the hardware trigonometric support provided by the 8087. BOB7 BASED LINK/LOCATE COMMANDS LlNKB6 :F1:PROG.OBJ, IO.LlB, BOB7.LlB TO :F1:PROG.LNK LOCB6 :F1:PROG.LNK TO :F1:PROG 4. Robotics - Coupling small size and modest power requirements with powerful computational abilities, the NPX is ideal for on-board six-axis positioning. SOFTWARE EMULATOR BASED LINK/LOCATE COMMANDS 5. Navigation - Very small, light weight, and accurate inertial guidance systems can be implemented with the 8087. Its built-in trigonometric functions can speed and simplify the calculation of position from bearing data. LlNKB6 :F1 :PROG.OBJ, IO.LlB, EB087.LlB, EB087 TO :F1:PROG.LNK LOCB6 :F1:PROG.LNK TO :F1:PROG 6. Graphics terminals - The 8087 can be used in graphics terminals to locally perform many functions which normally demand the attention of a main computer; these include rotation, scaling, and interpolation. By also including an 8089 Input/Output Processor to perform high speed data transfers, very powerful and highly self-sufficient terminals can be built from a relatively small number of 8086/88 family components. Figure 3-1 Submit file Example When the emulator is used, the linker changes all the 2-byte wait-escape, nop-escape, wait-segment override, or nop-segment override sequences generated by an assembler or compiler for the 8087 component with a 2-byte interrupt instruction. Any remaining bytes of the numeric instruction are left unchanged. 7. Data acquistion - The 8087 can be used to scan, scale and reduce large quantities of data as it is collected. This lowers the storage requirements as well as the time required to process the data for analysis. The host executes software interrupt instructions formed by the linker when it encounters numeric and emulated instructions. The interrupt vector table directs the host to the proper entry point in the 8087 emulator. The host then decodes any remaining part of the numeric instruction using the interrupt return address and CPU register set, performs the indicated operation, and returns to the next instruction following the emulated numeric instruction. One copy of the 8087 emulator can be shared by all programs in the host. These examples are all oriented toward the "traditional" numerics applications. There are, however, many other types of systems that do not appear to the end user as "computational" , but can employ the 8087 to advantage. The 8087 presents the imaginative system designer with an opportunity similar to that created by the introduction of the microprocessor itself. Many applications can be viewed as numerically-based if sufficient computational power is available to support this view. This is analogous to the thousands of successful products that have been built around "buried" microprocessors, even though the products themselves bear little resemblance to computers. The decision to use the 8087 or the software emulator is made at link time, when all software modules are brought together. Depending on whether an 8087 or its software emulator is used, a different group of library modules are included for linking with the program. If the 8087 component is used, the libraries do not add any code to the program, they just satisfy external references made by the assembler or compiler. Using the emulator will not increase the size of individual modules, however, other modules requiring about 16K bytes that implement the emulator will be automatically added. 8087 EMULATOR VERSUS COMPONENT USE Two basic implementations of the Numeric Data Processor Extension (NPX) are available. One is using the 8087 component and the other is with its software emulator (E8087). Whether the emulator or the component is used has no effect on programs at the source level. All instructions, data types and features are used in the same way at the source level. Selecting between the emulator or the 8087 can be very easy. Different versions of submit files performing the link operation can be used to specify the different set of library modules needed. See Figure 3-1 for an example of the two different submit files for the same program using the NPX with an 8087 or the 8087 emulator. All numeric instruction opcodes must be replaced with an interrupt instruction when the emulator is used. This replacement is performed by the LlNK86 program. Interrupt vectors in the hosts interrupt vector table will point to numeric instruction emulation routines in the 8087 software emulator. 3.1.2 8087 Mobility In Any iAPX 86, 88, 186 Design The design of any maximum mode iAPX 86/1X, 88/1X, 18611X or 188/1X system can be easily upgraded with an 3-2 210912-001 8087 NUMERIC PROCESSOR EXTENSION can test for the existence of the 8087 by initializing it and then storing the control word. A program segment that illustrates this technique is shown in Figure 3-5. GND~~ (A14) AD14 2 (A13) "013~' (A12)AD12 ·, ·, ·· ... (A11).011I. (.'0)AD10 (A9) ADS (AI) ADa AD7 AOO I ADS AD4 : AOO _ A02 - AD1 ~ ADO I NC, NC 39 J '" " " " "\5 " " .. eLK C 19 GND [ 20 80e7 Vee .,8$3 .,71$4 " " " When no CPU board space has been left for the 8087 component (or memory space for its software emulator), a maximum mode iAPX 86/1X system can be upgraded to a numeric processor using the iSBC 337 MULTIMODULE. The iSBC 337 MULTIMODULE is designed for just such a function. The iSBC 337 provides a socket for the host microprocessor and an 8087. A 40-pin plug is provided on the underside of the 337 to plug into the original host's socket (see Figure 3-6). Two other pins on the underside of the MULTIMODULE allow easy connection to the 8087 INT and RQ/GTl pins. ~ A015 3. Al11S5 : A191S6 " HIS7 ;;am' " 'NT RQ,(fto ,." NC " " " " "u NC ii2 .51 ,iiii : QSO J OS1 2JP BUSY lip 21 J READY RESET 3.2 COMPONENT OVERVIEW The 8087 Numeric Data Processor Extension (NPX) provides arithmetic and logical instruction support for a variety of numeric data types in iAPX 86/20, 88/20 systems. The 8087 executes instructions as a coprocessor to a maximum mode 8086 or 8088 and effectively extends the register and instruction set of (including the addition of several new data types) an iAPX 86/10 or 88/10 based system. The 8087 is an extension to the iAPX 86/10 or 88/10 that provides enhanced register, data types, control, and instruction capabilities at the harJwa,~ level. Figure 3·2 8087 Numeric Data Processor Pin Diagram 8087. Such a system would then be designated an 86/2X, 88/2X, 186/2X or 188/2X. See Figure 3-2 for 8087 DIP pin assignments, Figure 3-3 for local bus interconnections of a typical iAPX 86/20 (or iAPX 88120) system, and Figure 3-4 for local bus interconnects of a typical iAPX 186/2X (or iAPX 188/2X) system. The 8087 shares the maximum mode host's multiplexed address/data bus, status signals, queue status signals, ready status signals, clock and reset signal. Two dedicated signals, BUSY and INT, are used to inform the host of the 8087's status. To ensure that the host will always see a "not busy" status if an 8087 is not installed, a 10K pull-down resistor should be installed on the BUSY signal line. The 8087 extends the capability of an iAPX186/188 system when interfaced to an 80186 or 80188 through the Intel 82188 Integrated Bus Controller. When interfaced to the 80186/88, the combination of components form an iAPXI86(188)/20 system. 3.2.1 Architecture Overview Adding the 8087 to an iAPX 86/88/186/188 design has a minor effect on the system timing. Installing the 8087 adds 15 pF to the total capacitive loading on the shared address/data and status signals. The 8087 can drive a total capacitive load of 100 pF above its own self load and sink 2.0 rnA of DC current on its pins. This AC and DC drive is sufficient for an iAPX 86/21 system consisting of two sets of data transceivers, address latches, and bus controllers for two separate busses, an on-board bus and an off-board MULTIBUS using the 8289 bus arbiter. Refer to paragraphs 3.8 and 3.7 in this chapter for additional information on connecting the 8087 INT and RQ/GT pins. The 8087 is internally comprised of two processing elements (see Figure 3-7), the Control Unit and the Numeric Execution Unit. The numeric execution unit executes all numeric instructions, while the control unit receives and decodes instructions, reads and writes memory operands and executes NPX control instructions. These two elements operate independently of one another; this allows the control unit to maintain synchronization with the CPU while the numeric execution unit is busy processing numeric instructions. CONTROL UNIT A prewired 40-pin socket for the 8087 component can be left on a CPU board. Then, adding the 8087 to such a system would be as easy as plugging in the device. In this case, if a program attempts to execute any numeric instructions when the 8087 is not installed, the instruction will be treated as a NOP instruction by the host. Software The control unit keeps the 8087 synchronized with its host CPU. 8087 instructions intermix with host CPU instructions in a single instruction stream (the CPU fetches all instructions from memory). By monitoring the status signals (SO*-S2 *, S6) of the CPU, the NPX control unit de- 3-3 210912-001 8087 NUMERIC PROCESSOR EXTENSION ... i:: ~ Nol.2m. ~" " 14 ~ DO' DO' DO< :::~ .. DO. ~ DOt :::~ 0" STI " · H ~ ~ !.........!! 'j , " ~ ~ 000 DO' 00' • 16 003 00. 00 • 006 A~ 00' OE ;H ~~ I 010 -: --{II" "" ,, CLK 2 A014 ROIOTI 3 A013 4 A012 " RQlf3Tl 3 'NT " 'NT STB 5 A011 .5V ill !!l 8 A010 7 A09 8 ADB 9 AD7 "~ 10 AD6 11 ADS " ~ ~ , 1 AD' AD> s; AD' '-AD' ~ ~ 16 AOO OS, QSO : : BUSY: ~ . .... ·• ili H±- r!!- I - - "Fi'" RESET DIS 6 016 1 017 8 0" 0" 0" 0" " 11 38 AIIIS3 39 A015 0" 0" 010 M" Vee 37 A17I54 ..la · · 0" 012 READY 3 f'!- " r- " 31 ~1OK 015 6 016 7 017 8 ... m "L-AO , , ~ ~ "" ~~ ~ " . " ,, Ul "" " BO B1 It XI l' ~ ~IS7 ~ ON 38 A'BiSS 000 00' 00' 003 00. DO. 00. 00' OE I . , .IYHC IIIEADY RESET elK OND m 10 • 11 J ,r;[* " 35 A191S8 Vee ~ ~ .JI"" .,. ROVI AENI Ron AI .. 2 DI~~ ~ DO' O' ,] .1~.lII.l9 11 :~ A1 . ... ·· A2 3 '3 AI ", 13 A6 T OE 'I " · 35 36 " " " " aSl OSO RafGT, ::::~ RESET 21 elK 19 ",," IfO/(ffIj 31 rn~1{ 29 3 AOI4(AI4) ~~~~~~~ 4 5 AD11(Al1) 6 H ~ ~ .... AO , A1 , .. 3 A3 • " ~ " ; ~ '" " , ~ eL.!! " " " 11LOE A• • AS , T . ~ READY 33 AI6JS3 3: AOI5(AI5) BO B1 ~ ~SSi$) Bfiii/S7 ~ 31 A17/S4 AD1~Al0) ; ::::: OJ> tlOitmi umK - _. CD CD ;: c- NMI 11 INTR 18 9 AOT :~ :~ 12 13 14 15 16 AD4 AD3 AD2 AD1 ADO S2 28 Sl 2i" SO 26 Vee OND GNDMNIMY 1'~ 'I +5V ~ NM' INTR ,~ , , 1 ClK AEN lOB OND .. 18 S2 351 .. 10-: MeE Vee CEN ~ CD 19 SO = - 2~h,J . ., . iOWC -ATOWC , , ALE DTIR DEN MRDC MWfC AMWC .... '" 16 ~I ~I il ~ ~ ~ iNTA " ~I Figure 3·3 Typical iAPX 86/2X Family System Diagram 3·4 210912-001 TO OPTIONAL THIRD BUS MASTER ~'11D""DATA.J. t ..,.. 12MHz "'1'1 cS' e:: ARDY QSO RD QS1 iil ftI ~ ~ 0' !!!. " i= 'V )( ~ .... CO .fJfD Htt\ HLDA HOLD CSIN HLDA HOLD MCSO ,. ----+ SRDY RESETOUT CLOCKOUT S2 INTO S1 TEST ii3 -< en '< ~ 3 c g.. DI 3 - ...... ~ - ------ STB ~ -- 74LS 373 Il" Z c: s:: m :xl ~ (; 'tJ :xl ADDRESS o o V m I en en o r :xl DT/R I - - DEN I - - - RQ/GTO RO/crr1 RQ/GTO RO/crr1 C I------t ~ DIR OE ~ QSOO QS10 l' 74LS 245 8 ~ m vi i'f z en oz DATA I ADDRESS DATA BUSt ARDY '" ~ CII 82188 RDY QSO QS1 8087 CII QS11 S2 S1 SO CLK RESET ~ SRO )( SO S1 S2 CLK RESET QSOI ALE - SO - ' - BUSY '----- INT COMMAND/CONTROL 'r Q en it' 2, ;L- SRDY 231051-7 8087 NUMERIC PROCESSOR EXTENSION Test for the existence of an 8087 in the system. This code will always recognize an 8087 independent of the TEST pin usage on the host. No deadlock is possible. Using the 8087 emulator will not change the function of this code since ESC instructions are used. The word variable control is used for communication between the 8087 and the host. Note: if an 8087 is present, it will be initialized. Register ax is not transparent across this code. ESC XOR MOV ESC OR JZ 28, bx ax, ax control, ax 15, control ax, control no_8087 FNINIT if 8087 is present. The contents of bx is irrelevant These two instructions insert delay while the 8087 initializes itself Clear intial control word value FNSTCW if 8087 is present Control = 03ffh if 8087 present Jump if no 8087 is present Figure 3-5 Test for the Existence of an 8087 iSBC I BOARD (iSec 86/12ATM) 337'~ MULTIMODULET~ termines when an 8086 instruction is being fetched. At the same time, the control unit monitors the Data bus in parallel with the host CPU to obtain instructions that pertain to the 8087. BOARn The CPU maintains an instruction queue that is identical to the queue in the host CPU. By monitoring the BHE*IS7 line, the control unit automatically determines if the CPU is an 8086 or an 8088 iinmediately after reset and matches its queue length accordingly. Also, by monitoring the OPTIONAL SOLDER MOUNT FiQure 3-6 iSBC® 337 MULTIMODULE Mounting Scheme DATA"--tI T A (5) G W (3) 0 R STATUS ADDRESS (4) REGISTER STACK (2) 0 (1) I L (0) - - - - '- 80 BITS - ~ - - - - - ~ Figure 3-7 8087 Numeric Processor Extension Block Diagram 3"6 210912-001 8087 NUMERIC PROCESSOR EXTENSION MOD CPU's queue status lines (QSO, QS1), the control unit obtains and decodes instructions from the queue synchronously with the CPU. 11 I 1 I 115 114 0 I 1I 1 I 113 112 111 I ItO I 19 11 I 1 I 18 17 16 I IS I I 14 13 I 12 I 11 1 10 Figure 3-8 Non-Memory Reference Escape Instruction Form A numeric instruction for the 8087 appears as an ESCAPE instruction to the 8086 or 8088 CPU; both the CPU and the NPX decode and execute the ESCAPE instruction together. Only the 8087, however, recognizes the numeric instructions. The start of a numeric operation begins when the CPU executes the ESCAPE instruction (the instruction mayor may not identify a memory operand). When the numeric execution unit begins executing an instruction, it activates the 8087 BUSY signal. This signal can be used in conjunction with the CPU WAIT instruction to resynchronize both processors when the numeric execution unit has completed its current instruction. The CPU does, however, distinguish between ESCAPE instructions that refer to memory operands and those that do not. If the instruction refers to a memory operand, the CPU calculates the operand's address using anyone of its available addressing modes, and then performs a "dummy read" of the word at that location. (Any location with the 1M byte address space is allowed.) This read cycle is normal except that the CPU ignores the data it receives. If the ESCAPE instruction does not contain a memory reference (e.g., an 8087 stack operation), the CPU simply proceeds to the next instruction. 3.2.2 Software Overview The following paragraphs discuss the ESCAPE instruction format and discuss the use of the ESCAPE instruction with custom coprocessors. The constraints which the designer must exercise when designing this type of circuit are also discussed. ESCAPE INSTRUCTION FORMAT An 8087 instruction can have one of three memory reference options: There are two basic forms of the ESCAPE instructions. These are the non-memory form (see Figure 3-8) and the memory reference form (see Figure 3-9). All ESCAPE instructions start with the high order 5-bits of the instruction being 11011. The non-memory form ofthe ESCAPE instruction initiates some activity in the coprocessor using the nine available bits of the ESCAPE instruction to indicate which action to perform. 1. not reference memory; 2. load an operand word from memory into the 8087; 3. store an operand word from the 8087 into memory. If the 8087 requires no memory reference, the numeric execution unit simply executes its instruction. If the 8087 does require a memory reference, the control unit uses the "dummy read" cycle initiated by the host CPU to capture and save the address that the CPU places on the bus. If the instruction specifies a register load, the control unit also captures the data word when it becomes available on the local data bus. If the 8087 requires data longer than one word, the control unit immediately obtains the bus from the CPU using the request/grant protocol and reads in the rest of the information in consecutive bus cycles. In a store operation, the control unit captures and saves the store address as in a register load operation, and ignores the data word that follows in the "dummy read" cycle. When the 8087 is ready to perform the store, the control unit obtains the bus from the CPU and writes the operand starting at the specified address. The memory reference forms of the ESCAPE instruction allow the host to point out a memory operand to the coprocessor using any host memory addressing mode. Six bits are available in this form to identify what to do with the memory operand. Note that the coprocessor may not recognize all possible ESCAPE instructions. In this case the coprocessor ignores the unrecognized ESCAPE instructions. In the memory reference forms of the ESCAPE instructions bits 7 and 6 of the byte follow the ESCAPE opcode. These two bits are the MOD field of the 8086 or 8088 effective address calculation. Together with R/M field bits 2 through 0, bits 7 and 6 determine the addressing mode and how many subsequent bytes still remain in the instruction. NUMERIC EXECUTION UNIT The 8087 executes all instructions that involve the numeric register stack. These instructions include arithmetic, logical, transcendental, constant and data transfer operations. The numeric execution unit in the NPX has a 80-bit wide data path (64 fraction bits, 15 exponent bits and a sign bit) that allows internal operand transfers to be performed at very high speeds. The 8086 or 8088 ESCAPE instructions provide 64 memory reference opcodes and 512 non-memory reference opcodes. The 8087 only uses 57 of the memory reference opcodes and 406 of the non-memory reference opcodes. Refer to Figure 3-10 for a list of the ESCAPE instructions not used by the 8087. 3-7 210912·001 8087 NUMERIC PROCESSOR EXTENSION MOD 11 I 1 I ° I 1 I 1 I '15 114 113 1,2 '11 I I '10 19 RIM 1° I ° 1 I Ie '7 '6 15 I 11 I 1 I ° '4 13 12 MOD IH '10 19 Ie '7 '6 15 14 13 '2 MOD 11111011111 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ '15 '14 113 '12 '11 ~ 19 Ie 17 10 ~ 16·blt direct displacement I I I I I I I I ~ 16 15 I I I 14 '3 12 I 07 06 0S 04 03 I I 1 02 I I I De 07 06 Os 04 03 0, DO I I I 02 0, Do a·blt displacement I I I I I I ~ ~ ~ ~ ~ ~ ~ ~ ~ I I 1, De 16·blt displacement I I III I I I I 0,5 014 013 0'2 0'1 ~10 09 I I ~ RIM I 11°1 0 1 I '10 I II '1 III ~ MOD 111110111'1 I 0,5 0'4 013 0'2 0'1 0'0 09 RIM I I 10lljl ~ 10 I I I RIM I 11 1 10 1 I I I I 11111011111 '15 1,4 113 1,2 1, I 10 Figure 3·9 Memory Reference Escape Instruction Form USING THE 8087 WITH CUSTOM COPROCESSORS 1 I 1 I ° I 1 1 1 I 1 1 11 I 1 I 1 1 L ... 1.-1__ 115 '14 113 19 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 110 0 0 0 0 0 0 0 0 0 0 0 0 0 '10 19 18 18 IS 14 1 0 1 1 0 1 1 0 1 1 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 0 1 1 0 1 1 0 1 1 0 1 1 1 '12 1,1 13 0 0 0 0 0 1 0 1 1 0 0 1 12 0 0 1 0 1 1 1 0 1 1 1 17 '6 IS 11 10 0 1 1 14 13 12 '1 to When designing numeric processors with custom coprocessors, the designer should limit the use of ESCAPE instructions to only those not used by the 8087. Using only the unused ESCAPE instructions with custom coprocessors is necessary to prevent ambiguity as to whether any specific ESCAPE instruction is intended for the numeric or custom coprocessor. Note that using any escape instruction for a custom coprocessor may conflict with opcodes chosen for future Intel coprocessors. Available codes - 1 1 1 0 1 1 0 1 Using the 8087 together with other custom coprocessors under the following constraints: ---- 16 ----0 0 0 1 1. All 8087 errors are masked. The 8087 will update its opcode and instruction address registers for the unused opcodes. Unused memory references instructions will also update the operand address value. These changes make software-defined error handling in the 8087 impossible. 32 0 0 1 0 0 1 1 -- ---- 16 105 total 2. If the coprocessors provide a BUSY signal, they must be ORed together for connection to the host TEST pin. When the host executes a WAIT instruction, it does not know which coproces sor will be effected by the following ESCAPE instruction. Typically, all coprocessors must be idle before executing the ESCAPE instruction. Available Non-Memory Reference Escape Instructions MOD 11 1 1°1 1 11 1 I I I I '15 1,4 113 112 "1 110 0 0 0 0 1 1 1 '10 '9 '8 '7 RIM I I I LLL 16 15 '4 13 '2 '1 10 19 18 IS 14 13 0 0 0 1 1 0 0 1 1 1 0 0 1 1 1 0 0 0 1 0 1 0 1 0 0 0 1 1 3.3 DEVICE PIN ASSIGNMENTS A complete functional description of each device pin signal is provided Thble 3-1. This table correlates the description to the pin number and associated signal symbol. Available Memory Reference Escape Instructions Figure 3·10 ESCAPE Instructions Not Used By the 8087 NPX 3.4 OPERATING MODES The following paragraphs describe the operation of the 8087 NPX in conjunction with the 8086(88) and 3·8 210912-001 8087 NUMERIC PROCESSOR EXTENSION Table 3·1 8087 Device Pin Descriptions Type Name and Function AD15-ADO IlO Address Data:These lines constitute the time multiplexed memory address (Tl) and data (T 2, T3, Tw, T4) bus. AO is analogous to SHE for the lower byte of the data bus, pins 07-00. It is LOW during T, when a byte is to be transferred on the lower portion of the bus in memory operations. Eight-bit oriented devices tied to the lower half of the bus would normally use AO to condition chip select functions. These lines are active HIGH. They are input/output lines for 8087 driven bus cycles and are inputs which the 8087 monitors when the 8086/8088 is in control of the bus. A15-A8. do not require an address latch in an iAPX 88/20. The 8087 will supply an address for the T,-T4 period. A19/56, A18/55, A17/54, A16/53 I/O Address Memory: During T, these are the four most significant address lines for memory operations. During memory operations, status information is available on these lines during T2, T3, Tw, and T4. For 8087 controlled bus cycles, 56, 54, and 53 are reserved and currently one (HIGH), while 55 is always LOW These lines are inputs which the 8087 monitors when the 8086/8088 is in control of the bus. SHE/57 I/O Bus High Enable: During T, the bus high enable signal (SHE) should be used to enable data onto the most significant half of the data bus, pins 015-08. Eight-bit oriented devices tied to the upper half of the bus would normally use SHE to condition chip select functions. SHE is LOW during T, for read and write cycles when a byte is to be transferred on the high portion of the bus. The 57 status information is available during T2, T3, Tw, and T4' The signal is active LOW 57 is an input which the 8087 monitors during 8086/8088 controlled bus cycles. I/O Status: For 8087 driven bus cycles, these status lines are encoded as follows: Symbol 52, 51, SO S2 S1 SO X X Unused 1 (HIGH) 0 0 Unused 0 1 Read Memory 1 1 1 0 Write Memory 1 1 1 Passive 5tatus is driven active during T4, remains valid during T, and T2, and is returned to the passive state (1,1, 1) during T3 or during Tw when READY is HIGH. This status is used by the 8288 Sus Controller to generate all memory access control signals. Any change in 52, 51, or 50 during T4 is used to indicate the beginning of a bus cycle, and the return tei the passive state in T3 or Tw is used to indicate the end of a bus cycle. These signals are monitored by the 8087 when the 8086/8088 is in control of the bus. o (LOW) RQ/GTO I/O Request/Grant: This request/grant pin is used by the NPX to gain control of the local bus from the CPU for operand transfers or on behalf of another bus master. It must be connected to one of the two processor request/grant pins. The request grant sequence on this pin is as follows: 1. A pulse one clock wide is passed to the CPU to indicate a local bus request by either the 8087 or the master connected to the 8087 RQ/GT1 pin. 2. The 8087 waits for the grant pulse and when it is received will either initiate bus transfer activity in the clock cycle following the grant or pass the grant out on the RQ/GT1 pin in this clock if the initial request was for another bus master. 3. The 8087 will generate a release pulse to the CPU one clock cycle after the completion of the last 8087 bus cycle or on receipt of the release pulse from the bus master on Ra/GT1. 3·9 2'0912-001 8087 NUMERIC PROCESSOR EXTENSION Table 3·1 8087 Device Pin Descriptions (continued) Symbol ~pe RQ/GTl I/O QS1, QSO I Name and Function Request/Grant:This request/grant pin is used by another local bus master to force the 8087 to request the local bus. If the 8087 is not in control of the bus when the request is made the request/grant sequence is passed through the 8087 on theRQ/GTO pin one cycle later. Subsequent grant and release pulses are also passed through the 8087 with a two and one clock delay, respectively, for resynchronization. R<5/GT"l has has an internal pullup resistor, and so may be left unconnected. If the 8087 has control of the bus the request/grant sequence is as follows: 1. A pulse 1 ClK wide from another local bus master indicates a local bus request to the 8087 (pulse 1). 2. During the 8087's next T4 or Tl a pulse 1 ClK wide from the 8087 to the requesting master (pulse 2) indicates that the 8087 has allowed the local bus to float and that it will enter the "RQ/GT acknowledge" state at the next ClK. The 8087's control unit is disconnected logically from the local bus during "RQ/GTacknowledge." 3. A pulse 1 ClK wide from the requesting master indicates to the 8087 (pulse 3) that the "RQ/GT" request is about to end and that the 8087 can reclaim the local bus at the next ClK. Each master-master exchange of the local bus is a sequence of 3 pulses. There must be one dead ClK cycle after each bus exchange. Pulses are active lOW OS1, OSO: QSl and QSO provide the 8087 with status to allow tracking of the CPU instruction queue. OS1 OSO o (lOW) 0 No Operation 0 1 First Byte of Op Code from Queue 1 (HIGH) 0 Empty the Queue 1 1 Subsequent Byte from Queue INT 0 Interrupt: This line is used to indicate that an unmasked exception has occurred during numeric instruction execution when 8087 interrupts are enabled. This signal is typically routed to an 8259A. INT is active HIGH. BUSY 0 Busy: This signal indicates that the 8087 NEU is executing a numeric instruction. It is connected to the CPU's TEST pin to provide synchronization. In the case of an unmasked exception BUSY remains active until the exception is cleared. BUSY is active HIGH. READY I Ready: READY is the acknowledgment from the addressed memory device that it will complete the data transfer. The ROY signal from memory is synchronized by the 8284A Clock Generator to form READY. This signal is active HIGH. RESET I Reaet: RESET causes the processor to immediately terminate its present activity. The signal must be active HIGH for at least four clock cycles. RESET is internally synchronized. ClK I Clock: The clock provides the basic timing for the processor and bus controller. It is asymmetric with a 33% duty cycle to provide optimized internal timing. Vee Power: Vee is the +5V power supply pin. GND Ground: GND are the ground pins. NOTE: For the pin descriptions of the 8086 and 8088 CPU's reference those respective data sheets (iAPX 86/10, iAPX 88/10). 3-10 210912-001 8087 NUMERIC PROCESSOR EXTENSION r - - .., INT t------;~ INTR 8259A PIC iAPX86 BUS INTERFACE COMPONENTS MUlTiMASTER SYSTEM BUS 8284A CLOCK GENERATOR ClK t-r-----'1~--t ClK ~":: I I '------tr-----i INT I I I r'iar- , I '- - ....,CLK I I: ~-~ ~8~ ... - - ..... Figure 3-11 8087 NPX - 8086/88 CPU System Configuration 80186(188) microprocessors, describe the overall electrical interface and present design considerations relate to the interface. bus with the 8087 on a first come first serve basis, and the second master will be guaranteed to be higher in priority than the 8087. All processors use the same clock generator and system bus interface components (bus controller, latches, transceivers, and bus arbiter - see Figure 3-11). 3.4.1 8087/8086(88) Interface When installed as a coprocessor to the 8086 or 8088, the 8087 connects in parallel with the CPU (see Figure 3-11). The CPU's status lines (SO*-S2 *) and queue status lines (QSO-QS1) allow the 8087 to monitor and decode instructions in synchronization with the CPU and without any CPU overhead. The 8087 can process instructions in parallel with and independent of the host CPU. For resynchronization, the NPX's BUSY signal informs the CPU that the 8087 is executing an instruction; the CPU WAIT instruction tests this signal to insure that the NPX is ready to execute subsequent instructions. The NPX can interrupt the CPU when it detects an error or exception. The 8087's interrupt request line is typically routed to the CPU through an 8259A Programmable Interrupt Controller (see Figure 3-2) for 8087 pinout information. 3.4.2 8087/80186(88) Interface The iAPX186/20 system operates similar to the iAPX86/20. The 80186 contains integral controller devices (refer to Chapter 2) which result in device pin assignments and functions that differ from the 8086. To simplify iAPX186/20 system configuration, Intel provides the 82188 Integrated Bus Controller which enables communication between the 80186 and the 8087 without the need for random logic (see Figure 3-12). The 82188 converts the ARDY and SRDY signals of the 80186 to RDY for the 8087; similarly, it converts HOLD/HLDA of the 80186 to RQ/OTO,1 for the 8087. When configured into an iAPX186/20 system, RD* (pin 62) of the 80186 must be grounded. The 82188 supplies the command and control signals to the devices on the system bus that the 80186 would otherwise provide. These signals include: The 8087 uses one of the request/grant lines of the iAPX86 architecture to obtain control of the local bus for data transfers. The other request/grant line is available for general system use (e.g., an I/O processor in LOCAL mode). A bus master can also be connected to the 8087's RQ*/OTl * line. In this configuration the 8087 will pass the request/grant handshake signals between the CPU and the attached master when the 8087 is in control. Therefore, two additional masters can be configured in an iAPX 86120 or an 88/20 system; one master will share the 8086 ARDY SRDY RD* WR* ALE 3-11 DEN* DT/R* CSOUT* HOLD HLDA 210912-001 8087 NUMERIC PROCESSOR EXTENSION 82188 80186 HOLD HOLD HLDA HLDA 8087 RQ/GTO RQ/GTO RQ/GT1 .r- RQ/GT1 SYSHOLD RQ/GT1 r-NC 231051-4 Figure 3·12 8087 NPX - 801861188 CPU System Configuration 3.5 8086 (80186)/8087 OPERATION COPROCESSOR INTERFACE TO MEMORY The following paragraphs describe 8087 NPX escape sequence (ESCAPE) operation, and also describe the operational sequence where 8087 controls the bus. Coprocessor design is greatly simplified if only the reading of memory values of 16 bits or less is required. The host can perform all the reads with the coprocessor latching the value as it appears on the data bus at the end of T3 during the memory read cycle. The coprocessor does not need to become a local bus master to read or write additional information. 3.5.1 Decoding Escape Instructions The coprocessor must examine all instructions executed by the host to recognize ESCAPE instructions. When the host fetches an instruction byte from its internal queue, the coprocessor must also fetch an instruction byte. If the coprocessor must write information to memory, or deal with data values longer than one word, it must save the memory address and be able to become the local bus master. The read operation performed by the host when executing the ESCAPE instruction places the 20-bit physical address of the operand on the address/data pins during T1 of the memory cycle. The coprocessor can latch the address at this time. If the coprocessor instruction also requires reading a value, it will appear on the data bus during T3 of the memory read. All other memory bytes are addressed relative to this starting physical address. The queue status state, fetch opcode byte, identifies when an opcode byte is being examined by the host. At the same time, the coprocessor will check if the byte fetched from its internal instruction queue is an ESCAPE opcode. If the instruction is not an ESCAPE, the coprocessor will ignore it. The queue status signals for fetch subsequent byte and flush queue let the coprocessor track the host's queue without knowledge of the length and function of host instructions and addressing modes. Whether the coprocessor becomes a bus master or not, it must be able to identify the memory read performed by the host in the course of executing an ESCAPE instruction if it has memory reference instruction forms. Identifying the memory read requires the following conditions be met: HOST ESCAPE INSTRUCTION PROCESSING The host performs one of two possible actions when an ESCAPE instruction occurs. The host may either do nothing or read a word value beginning at that address. The host ignores the value of the word read. ESCAPE instructions change none of the registers in the host except for advancing IP. Therefore, the ESCAPE instruction will effectively be a Nap to the host if no coprocessor exists, or the coprocessor ignores the ESCAPE instruction. Except for calculating a memory address and reading a word of memory, the host makes no other assumptions regarding coprocessor activity. 1. A MOD value of 00, 01 or 10 in the second byte of the ESCAPE instruction executed by the host. 2. This action must be the first data read memory cycle performed by the host after it encountered the ESCAPE instruction (Le., S2-S0 will be 101 and S6 will be 0). The coprocessor must continue to track the host's instruction queue while it calculates the memory address and reads the memory value. This simply requires following the fetch subsequent byte status commands that occur on the queue status pins. Memory reference ESCAPE instructions have two purposes. One identifies a memory operand and the other is, for certain instructions, to transfer a word from memory to the coprocessor. 3-12 210912-001 8087 NUMERIC PROCESSOR EXTENSION tions like jumps, it is given the responsibility for synchronization. To meet this need, a special host instruction exists to synchronization host operation with a coprocessor. The coprocessor must be aware of the host bus characteristics that determine how the host will read the word operand of a memory reference ESCAPE instruction. An 8088 host will always perform two byte reads at sequential addresses, but an 8086 can perform either single word read or two byte reads to sequential addresses. The 8086 places no restrictions on the alignment of word operands in memory. It will automatically perform two byte operations for word operands at an odd address. These two operations are necessary because the two bytes of operand exist in two different memory words. The coprocessor must be able to accept the two possible methods of reading a word value on the 8086. A more detailed discussion of the effects of instruction execution synchronization between the host CPU and the 8087 coprocessor is contained in the following paragraphs under "Instruction Synchronization". COPROCESSOR CONTROL The host has the responsibility for overall program control. Coprocessor operation is initiated by special "ESCAPE" instructions encountered by the host. When the host encounters an ESCAPE instruction, the coprocessor is expected to perform the action indicated by the instruction. The coprocessor determines whether an 8086 performs one or two memory cycles as a part of the current ESCAPE instruction execution. During Tl of the first memory read by the host, the ADO pin tells the coprocessor if this is the only read to be performed as part of the ESCAPE instruction. If ADO is a I during Tl of the memory cycle, the 8086 immediately follows this memory read cycle with another one at the next byte address. The host's coprocessor interface requires the coprocessor to recognize when the host has encountered an ESCAPE instruction. Whenever the host begins executing a new instruction, the coprocessor must look to see if it is an ESCAPE instruction. Since only the host fetches instructions and executes them, the coprocessor must monitor the instructions being executed by the host. 3.5.2 Concurrent Execution of Host and Coprocessor After the coprocessor has started its operation, the host may continue on with the program, executing it in parallel while the coprocessor performs the function started earlier. The parallel operation of the coprocessor does not normally affect that of the host unless the coprocessor must reference memory or I/O-based operands. When the host releases the local bus to the coprocessor, the host may continue to execute from its internal instruction queue. However, the host must stop when it also needs the local bus currently in use by the coprocessor. Except for the stolen memory cycle, the operation ofthe coprocessor is transparent to the host. 3.5.3 Instruction Synchronization Instruction synchronization is required because the 8087 can only perform one numeric operation at a time. Before any numeric operation is started, the 8087 must have completed all activity from previous instructions. When executing a typical NPX instruction, the CPU will complete the ESC long before the 8087 finishes interpretation of the same machine instruction. Upon completion of the ESC, the CPU will decode and execute the next instruction, and the NPX's control unit, tracking the CPU, will do the same. (The NPX "executes" a CPU instruction by ignoring it.) If the CPU has work to do that does not effect the NPX, it can proceed with a series of instructions while the NPX is executing in parallel. The NPX's control unit will ignore these CPU-only instructions as they do not contain the 8087 escape code. This asynchronous execution of the processors can substantially improve the performance of systems that can be designed to exploit it. This parallel operation of the host and coprocessor is called concurrent execution. Concurrent execution of in-' structions requires less total time than a strictly sequential execution would. System performance will be higher with concurrent execution of instructions between the host and coprocessor. SYNCHRONIZATION Two cases, however, make it necessary to synchronize the execution of the CPU to the NPX: In exchange for the higher system performance made available by concurrent execution, programs must synchronize the coprocessor with the host. Synchronization is necessary whenever the host and coprocessor must use information available from the other. Synchronization involves either the host or coprocessor waiting for the other to finish an operation currently in progress. Since the host executes the program, and has program control instruc- 1. An NPX instruction that is executed by the numeric execution unit must not be started if the execution unit is still busy executing a previous instruction. 2. The CPU should not execute an instruction that accesses a memory operand being referenced by the NPX until the NPX has actually accessed the location. 3-13 210912·001 8087 NUMERIC PROCESSOR EXTENSION The host coprocessor synchronization instruction (WAIT) uses the TEST pin of the host. The coprocessor can signal that it is still busy to the host via this pin. Whenever the host executes a wait instruction, it will stop program execution while the TEST input is active. When the TEST pin becomes inactive, the host will resume program execution with the next instruction following the WAIT. While waiting on the TEST pin, the host can be interrupted at 5 clock intervals; however, after the TEST pin becomes inactive, the host will immediately execute the next instruction, ignoring any pending interrupts between the WAIT and the following instruction. To satisfy the second synchronization case, the programmer must explicitly code the FWAIT instruction immediately before a CPU instruction that accesses a memory operand read or written by a previous 8087 instruction. This will ensure that the 8087 has read or written the memory operand before the CPU attempts to use it. (The FWAIT mnemonic causes the assembler to create a CPU WAIT instruction that can be eliminated at link time if the program is run on an 8087 emulator.) A typical sequence of instructions that illustrates the effect of the WAIT instruction and parallel execution of the NPX with a CPU is shown in Figure 3-13). The first two instructions in the sequence (FMUL and FSQRT) are 8087 instructions that illustrate the ASM -86 assembler's automatic generation of a preceding WAIT, and the effect of the WAIT when the NPX is, and is not, busy. The WAIT instruction allows software to synchronize the CPU to the NPX so that the CPU will not execute the following instruction until the NPX is finished with its current (if any) instruction. Whenever the 8087 is executing an instruction, it activates its BUSY line. This signal is wired to the CPU's TEST* input as shown in Figure 3-11. The NPX ignores the WAIT instruction, and the CPU executes it. The CPU interprets the WAIT instruction as "wait while TEST* is active." The CPU examines the TEST* pin every 5 clocks. If TEST* is inactive, execution proceeds with the instruction following the WAIT. If TEST* is active, the CPU examines the pin again. Therefore, the effective execution time of a WAIT can stretch from 3 clocks (3 clocks are required for decoding and setup) to infinity, as long as TEST" remains active. The purpose of the WAIT instruction is to prevent the CPU from decoding the next instruction until the 8087 is not busy. The instruction following a WAIT is decoded simultaneously by both processors. Since the NPX is not busy when the first WAIT is encountered, the CPU executes it and immediately proceeds to the next instruction, and the NPX ignores the WAIT. The next instruction is decoded simultaneously by both processors. The NPX starts the multiplication and raises its BUSY line. The CPU executes the ESC and then the second WAIT. Since TEST* is active (it is tied to BUSY), the CPU effectively stretches execution of the multiply by lowering BUSY. The next instruction is interpreted as a square root by the NPX and another escape by the CPU. The CPU finishes the ESC well before the NPX completes the FSQRT. This time, instead of waiting, the CPU executes three instructions (CMP, JG and MOV) while the 8087 is working on the FSQRT. The 8087 ignores these CPU-only instructions. The CPU then encounters the third WAIT, generated by the assembler immediately preceding the FIST (store stack top into integer word). When the NPX finished the FSQRT, both processors proceed to the next instruction, FIST to the NPX and ESC to the CPU. The CPU completes the escape quickly and then executes an explicit programmer-coded FWAIT to ensure that the 8087 has updated BETA before it moves BETA's new value to the register AX (refer to Figure 3-13). To satisfy the first synchronization case, every 8087 instruction that affects the numeric execution unit should be preceded by a WAIT to ensure that the execution unit is ready. All instructions except the processor control class affect the numeric execution unit. To simplify programming, the 8086 family language translators provide the WAIT automatically, therefore, when an assembly language programmer codes: FMUL FDIV The 8087 control unit can execute most processor control instructions by itself regardless of what the numeric execution unit is doing. Therefore, in these cases the 8087 can potentially execute two instruction at once. The ASM-86 assembler provides separate"wait" and "no wait" mnemonics for these instructions. For example, the instruction that sets the 8087 interrupt enable mask, and therefore disables interrupts, can be coded as FDISI or FNDISI. The assembler does not generate a WAIT if the second form is coded, so that the interrupts can be disabled while the numeric execution unit is busy with a previous instruction. The no-wait forms are principally used in exception handlers and operating systems. ; (multiply) ; (divide) The assembler produces four machine instructions, as if the programmer had written: WAIT FMUL WAIT FDIV ;(multiply) ;(divide) This ensures that the multiply runs to completion before the CPU and the 8087 control unit decode the divide. 3-14 210912·001 8087 NUMERIC PROCESSOR EXTENSION ;ASSUME 8087 REGISTER STACK IS LOADED WITH OPERANDS, , NEU IS NOT BUSY, AND THAT' ALPHA' AND' BETA' ARE WORD INTEGERS. FSQRT CMP JG MOV CONTINUE: FIST FWAIT ALPHA,100 CONTINUE ALPHA, 1 00 BETA MOV BUsv ..fEST: AX,BETA ~_F_M_UL_.....I NDP: __-,I MULTIPLY TOP STACK ELEMENTS SQUARE ROOT OF PRODUCT ALPHA> 100 7 YES, LEAVE UNALTERED NO, SET TO 100 STORE ROOT AS INTEGER WORD WAIT FOR 8087 TO COMPLETE STORE OF BETA PROCEED TO PROCESS BETA I..._____F_S_Q_RT_ _ _ _---'II V FIST I V"""'----''-- NOTES: • [W~iJ = Assembler-generated instruction . • Instruction execution times are not drawn to scale. Figure 3-13 Synchronizing Execution With WAIT NOTE 3.6 BUS OPERATION The 8086/8088 must be the only processor on the local bus to drive S6 low. Connecting the 8087 in tandem with an 8086 (iAPX86/20) or with an 80186 (iAPXI86120), does not change system bus operation from the normal operation of the bus in a iAPX861l0 or iAPX186/1O system. However, some minor differences exist between the iAPX86120 and the iAPX186/20 systems, primarily due the requirement for a 82188 Interface chip in the iAPX186120 system. For additional information on the 82188 Integrated Bus Controller refer to the Preliminary Data Sheet Revision 1.2. The following paragraphs describe the operation and timing of the bus in the various configurations. Line S7 multiplexes with BHE* and has the same value as BHE* for all 8087 bus cycles. When an 8288 Bus Controller is used, status lines SO*-S2 * are used to determine the type of bus cycle being run, as shown in the following list: o Sl* X 1 1 o S2* o 1 1 1 1 SO* X Unused o Unused 1 Memory Data Read o Memory Data Write 1 Passive (no bus cycle) 3.6.1 iAPX86/20 Bus Operation 3.6.2 iAPX186/20 Bus Operation Operation and timing for the 8087 bus structure are identical to all other processors in the maximum mode configuration iAPX 86,88 series and the iAPX 186, 188 series. The address time-multiplexes with the data on the first 16/8 lines of the address/data bus. A16 through A19 are time-multiplex with four status lines S3-S6. Lines S3, S4, and S6 are always high (logical 1) for 8087 driven bus cycles while S5 is always low (logical 0). When the 8087 is monitoring CPU bus cycles (passive mode), the 8087 monitors S6 to discriminate between 8086/8088 activity and that of a local I/O processor or any other local bus master. The 82188 Interface chip provides a local bus arbitration function for an 80186 system consisting of an 80186, an 8087 and a third processor with a HOLD-HLDA type bus exchange protocol. The 82188 also provides the bus control signals otherwise supplied to the system by the 80186 and contains ARDY and SRDY signals to its own integral Ready circuit (refer to paragraph 3.4.2). The 82188 also has an integral queue status circuit which inserts a one-phase delay on the queue status signals to meet the 8087 Queue-Status timing requirements (refer to paragraph 3.4.2). 3-15 210912-001 8087 NUMERIC PROCESSOR EXTENSION BUS ARBITRATION READY CIRCUIT The 82188 defines the priorities for access to the system bus for multiprocessor systems that include an 80186 and an 8087. As indicated in Figure 3-14), HOLD output from the 80186 and HLDA input to the 80186 interconnect directly to the 82188. The 82188 then exchanges its own HOLD output and the HLDA input with the system. In this configuration, the 82188 assigns the highest system bus access priority to the system (third processor in Figure 3-14), second priority to the 8087, and default to the 80186. The system ARDY and SRDY signals are applied to the 82188 inputs for these signals. The 82188 samples SRDY on the rising edge of the clock. Since ARDY is asynchronous, the 82188 contains a one-phase synchronizer at its ARDY input. Using this synchronizer, the 82188 synchronizes only the leading edge of ARDY (the 82188 presumes the trailing edge of ARDY falls on the eLK edge). From the ARDY and SRDY inputs, the 82188 produces a single synchronized Ready signal SRO. The SRO is applied to the 8087 READY input and the 80186 SRDY input (note that the 80186 ARDY input should be tied low). When the 8087 has control of the bus, and the third processor needs the bus, the 82188 asserts RQ* IGTl * to take control of the bus from the 8087 and pass control to the third processor. If the 8087 does not have control of the bus, the 82188 passes control directly to the third processor without exercising the 8087 RQ*/GTl * protocol. The 80186 will not regain control of the bus from the 82188 until both the third processor and the 8087 are finished with the bus. The inherent 82188 propagation delays cause iAPX186120 system timing to differ from that of a iAPX186110 system. The 82188 samples ARDY one clock phase earlier than in a non-iAPX186/20 system. Also, SRDY setup time to the eLK falling edge is 30ns longer than the 80186 requirements (the 82188 changes SRO only when eLK is high). The 82188 inserts three Wait states, by using SRO, in the first 256 80186 bus cycles after a Reset. (This feature is for programmer use to re-program the 80186 Wait State generator to 0 Wait states.) The third processor uses the system HOLD and HLDA (SYSHOLD and SYSHLDA) lines to request bus access from the 82188. Similarly, the 82188 uses the 80186 HOLD and HLDA lines to gain bus control from and return bus control to the 80186. The 82188 also uses the RQ*/GTO* lines from the 8087 for NPX bus control. 3.7 BUS EXCHANGE MECHANISM Two basic decisions must be made when connecting the 8087 to a system: 1.) interconnection of the RQ/GT signals of all of the local bus masters; and 2.) connecting the Interrupt (INT) signal pin. The decision on where to connect the RQ/GT signal that is made at this point affects the response time needed to service local bus requests from other local bus masters, such as an 8089 lOP or other coprocessor. The interrupt connection affects the response time to service an interrupt request and how user-interrupt handlers are written. The implications of how these pins are connected concern both the hardware designer and programmer and must be understood by both. The following paragraphs provide information on making the decision where to connect the RQ/GT signal. Refer to paragraph 3.8 for the discussion on interconnection of the Interrupt (INT) signal. NOTE The 82188 contains weak pull-up devices to set both RQ*/GTl * and RQ*/GTO* high if the 82188 is configured in a system with out an 8087. BUS CONTROL SIGNALS Status line outputs from the 80186 and the 8087 (see Figure 3-12) are sent to the 82188. The 82188 decodes these signal lines and generates bus control signals that would otherwise be generated and output directly by an 80186. The signals decoded by the 82188 include: 3.7.1 8087 RQ/GT Function ALE RD* WR* DT/R* DEN* The presence of the 8087 in the RQ/GT path from the lOP to the host has little effect on the maximum wait time seen by the lOP when requesting the local bus. The 8087 adds two clocks of delay to the basic time required by the host. This low delay is achieved due to a preemptive protocol implemented by the 8087 on RQ/GTl. The 82188 also contains the AEN* input which enables the system command lines. This signal provides the hardware designer with the ability to tri-state RD*, WR *, and DEN* by asserting AEN* high SO*, SI * and S2* decode exactly the same as for the 8086 and the 80186. The 8087 always gives higher priority to a request for the local bus from a device attached to its RQ/GTl pin than to a request generated internally by the 8087. If the 8087 3-16 210912-001 8087 NUMERIC PROCESSOR EXTENSION 80186 82188 8087 HOLD HOLD RQ/GTO HLDA RQ/GTO HLDA 3 RD pROC HLDA SYSHLDA HOLD SYSHOLD RQ/GT1 RQ/GT1 231051-3 Figure 3-14 Three Processor System Bus Signal Connections currently owns the local bus and a request is made to its RQ/GTl pin, the 8087 will finish the current memory cycle and release the local bus to the requestor. If the request from the devices arrives when the 8087 does not own the local bus, the 8087 will then pass the request on to the host via its RQ/GTO pin. An 8086 host will not release the local bus between the two consecutive byte operations performed for odd-aligned word operands. In contrast, the 8088 will never release the local bus between two bytes of a word transfer, independent of its byte alignment. Host operations such as acknowledging an interrupt will not release the local bus for several bus cycles. Using a lock prefix in front of a host instruction prevents the host from releasing the local during the execution of that instruction. The RQ/GT issue can be broken into three general catagories depending on system configuration: 86/20 or 88120,86/21 or 88/21, and 86122 or 88122. Remote operation of an lOP is not effected by the 8087 RQ/GT connection. iAPX 86/22, 88/22 SYSTEM CONFIGURATION An 86/22 system offers two alternatives in regards to which lOP to connect to an 110 device. Each lOP will offer a different maximum delay time to service an 110 request. (See Figure 3-16.) iAPX 86/20, 88/20 SYSTEM CONFIGURATION For an 86/20, 88/20 just connect the RQ/GTO of the 8087 to RQ/GTO (1) of the host (see Figure 3-3). The second 8089 (lOPA) must use the RQ/GTO pin of the host. When using two lOP's the designer must decide which lOP services which 110 devices. This decision is determined by the maximum wait time allowed between the time an 110 device requests lOP service and when the lOP can respond. Since the maximum service delay times of the two lOP's can be very different, it makes very little difference which of the two host RQ/GT pins are used. iAPX 86/21, 88/21 SYSTEM CONFIGURATION For an 86121 or 88121, connect RQ/GTO of the 8087 to RQ/GTO(I) of the host and connect RQ/GT of the 8089 to RQ/GTl ofthe 8087 (see Figure 3-15). The different wait times are due to the non-preemptive nature of bus grants between the two host RQ/GT pins. IOPA and the 8087/IOPB combination cannot communicate about the need to use the local bus. Any request for the local bus by the IOPA must wait (worst case) for the host, the 8087, and the 10PB to finish their longest sequence of memory cycles. 10PB must wait in the worst case for the host and 10PA to finish their longest sequence of memory cycles. The 8087 has little effect on the maximum wait time of 10PB. The RQ/GTl pin of the 8087 exists to provide one 110 processor with a low maximum wait time for the local bus. The maximum wait times to gain control of the local bus for a device attached to RQ/GTl of an 8087 for an 8086 or 8088 host are shown in Table 3-2. These numbers are all dependent on when the host will release the local bus to the 8087. Three factors determine when the host will release the local bus (see Table 3-2): 3.7.2 Delay Effects of the 8087 1. Type of host; 2. Current instruction being executed; The delay effects of the 8087 on 10PA can be significant. When executing special instructions (FSAVE, FNSAVE, 3. Use ofthe lock prefix. 3-17 210912·001 8087 NUMERIC PROCESSOR EXTENSION - ClK ~ !~ r AID 8088 ~ r"' READY RESET STATUS as fHf RC/GTf "'" 7 ROlaTil os r1D~ ill L I (3)8282 I ADDRESS LATCHES ...... ~ BUSY !L- ~ i;L~ AID rv' rv-i7 DATA ~ TRANSCEIVER T DATA ;L 8286 8087 ClK ADDRESS ~=;I STB READY 8284A I I --V ~ \r- READY .., j-- IA fV OE ClK CLOCK GENERATOR REseT RESET STATUS RQIGT1 M \rV t - SYSTEM READY .o!~ 4 -- RQ/GT RESET AID 8089 !L- W\ \r- IV' I DT/R READY ClK I I I I c- ALE STATUS r--l\ IY DEN - 8288 h STATUS V CON:~gLLER ClK I I I I ICOMMANKs I I I I V I I I ISYSTEM' I BUS , L _ _ .J Figure 3·15 iAPX 88/21 System Configuration 3·18 210912-001 8087 NUMERIC PROCESSOR EXTENSION Table 3-2 Worst Case Local Bus Request Wait Times In Clocks System Configuration No Locked Instructions Only Locked Exchange Other Locked Instructions iAPX 86121 even aligned words lSI 3S 1 max (lSI' iAPX 86/21 odd aligned words lSI 43 2 max (43 2• 0 ) iAPX 88121 lSI 43 2 max (43 2• 0 ) 0) Notes: 1. Add two cla<:ks for each wait state inlCl'ted per bus cycle 2. Add four clocks for each wait state inserted per bu. cycle • Execution time of IOlllest loc:ked instruction FRSlDR), the 8087 can perform 50 or 96 consecutive memory cycles with an 8086 or 8088 host, respectively. These instructions do not affect response time to local bus requests seen by an IOPB. respectively). The FSAVE/FNSAVE/FRSlDR instructions, in contrast, perform 50/94 back-to-back memory cycles for an 8086 or 8088 host. COMPATIBILITY WITH FSAVE/FNSAVE If the 8087 is performing a series of memory cycles while executing these instructions, and IOPB requests the local bus, the 8087 will stop its current memory activity, then release the local bus to IOPB. The 8087 cannot release the bus IOPA since it cannot know that IOPA wants to use the local bus, like it can for IOPB. This technique produces a context area of the same format produced by the FSAVE/FNSAVE instructions. Other software modules expecting this type of format will not be affected. All of the same interrupt and deadlock considerations that apply to FSAVE and FNSAVE also apply to FSTENV and FNSTENV. With the exception that the numeric environment is 7 words rather than the 47 words of the numeric context, all factors concerning the use of the FSAVE/FNSAVE also apply. 3.7.3 Reducing 8087 Delay Effects For 86122 or 88122 systems requiring lower maximum wait times for IOPA, it is possible to reduce worst case bus usage. If three 8087 instructions are never executed (namely FSAVE, FNSAVE, or FRSlDR) the maximum number of consecutive memory cycles performed by the 8087 is 10 or 16 for an 8086 or 8088 host respectively. The function of these instructions can be emulated with other 8087 instructions. The state of the NPX registers must be saved in memory in the same as used with the FSAVE/FNSAVE instructions. The program example (see Figure 3-17) starting at the label SMALLJ3LOCK......NP~SAVE illustrates a software loop that will store their contents into memory in the same top relative order as that of FSAVE/FNSAVE. To save the registers the FSTP instructions, the FSTP instructions must be tagged valid, zero, or special. This function will force all the registers to be tagged valid, independent of their contents or old tag, and then save them. No problems will arise if the tag value conflicts with the register's content for the FSTP instruction. Saving empty registers insures compatibility with the FSAVE/FNSAVE instructions. After saving all the numeric registers, they will all be tagged empty, the same as if an FSAVE/FNSAVE instruction had been executed. There are alternative techniques for switching the numeric context without using the FSAVE/FNSAVE or FRSlDR instructions. These alternative techniques are slower than those using these instructions, but they reduce the worst case continuous local bus usage of the 8087. Only an iAPX 86/22 or iAPX 88/22 systems derive any real benefit from these alternatives. By replacing all FSAVE/FNSAVE instructions, the worst case local bus usage of the 8087 will be 6 or 10 consecutive bus cycles for the 8086 or 8088 host, respectively. COMPATIBILITY WITH FRSTOR Instead of saving and loading the entire numeric context in one long series of memory transfers, these alternative routines use the FSTENV/FNSTENV/FLDENY instructions and separate numeric register load/store instructions. Using separate load/store instructions for the numeric registers forces the 8087 to release the local bus after each numeric load/save instruction. The longest series of back-to-back transfers required by these instructions are 8/12 memory cycles (8086/8088 host, Restoring numeric context reverses the procedure described in the preceding paragraphs. This is shown by the code starting at SMALLJ3LOCK-NP~ESlDRE (see Figure 3-18). All eight registers are reloaded in the reverse order. With each register load, a tag value will be assigned to each register. The tags assigned by the register load do not since the tag word will be {)verwritten when the environment is reloaded later with FLDENV. 3-19 210912-001 8087 NUMERIC PROCESSOR EXTENSION r--' I IADDRESS .------ ----- -- I~ READY eLK J\ ADDRESS LATCHES V (3)8282 AID 8089 (IOPA) I '" STB ~ f---J\ STATUS RESET ~ IV RQ/GT SYSTEM RElDY IA RO/GTO READY READY .. t-- IA. j.. I' v AID V I' 8284A STATUS CLK IV 8086 eLK as:==- CLOCK GENERATOR RESET REseT YOrJ ROlm Tm f---J\ DATA TRANSCEIVERS (2)8286 I I I I 1 1 I 1 ~ 1 T DE I I 1 I OT/R DEN ICOMMAN Dsl I 1- ~ IV ALE 8288 STATUS BUS CONTROLLER eLK I I I V I I ISYSTE MI L.!U! .J ! -! - r - t-t-- READyRQ/GTO BUSY ! - 8087 cslA-- eLK AID IrI' t-- J\ V STATUS REseT Allilm I' f---J\ IV r-- '- ifIllill t-t-- READY '-r- eLK AID~ I' ~ V 8089 (IOPB) RESET " STATUS V Figure 3·16 iAPX 86/22 System Two assumptions are required for the correct operation of the restore function. First, all numeric registers must be empty, and second, the TOP field must be the same as that in·the context being restored. These assumptions will be satisfied if a matched set of pushes and pops were performed between saving the numeric context and reloading it. If these assumptions cannot be met, the code example (see Figure 3-19)starting at NP~CLEAN shows how 3-20 210912-001 8087 NUMERIC PROCESSOR EXTENSION Save the NPX context independent of NDP interrupt state. Avoid using the FSAVE instruction to limit the worst case memory bus usage of the 8087. The NPX context area formed will appear the same as if an FSAVE instruction had written into it. The variable save_area will hold the NPX context and must be 47 words long. The registers ax, bx, and cx will not be transparent. small_block_N PX_save: FNSTCW save_area NOP FNDISI ax, save_area MOV MOV cx,8 XOR bx, bx FSTENV save_area FWAIT XCHG save_area + 4, bx FLDENV save_area MOV save_area, ax MOV save_area + 4, bx XOR bx, bx Save current IEM bit Delay while 8087 saves control register Disable 8087 BUSY Signal Get original control word Set numeric register count Tag field value for stamping all registers as valid Save NPX environment Wait for the store to complete Get orig i nal tag val ue and set new tag val ue Force all register tags as valid. BUSY is still masked. No data synchronization needed. Put original control word into NPX environment. Put original tag word into NPX environment Set initial register index reg_store~loop: FSTP ADD LOOP saved_reg [bx) bx, type saved_reg reg_store_loop Save register Bump pOinter to next register All done Figure 3-17 SMALLBLOCLNPLSAVE to force all the NPX registers empty and set the WP of field in the status word. restore operations. These operations appear in time-critical context-switching functions of an operating system or interrupt handler. This technique has no affect on the maximum wait time seen by IOPB or wait time seen by IOPA due to IOPB: These improvements do have a cost. This is the increased execution time of 427 or 747 additional clocks for an 8086 or 8088, respectively, for the equivalent save and Restore the NPX context without using the FRSTOR instruction. Assume the NPX context is in the same form as that created by an FSAVE/FNSAVE instruction, all the registers are empty, and that the TOP field of the N PX matches the TOP field of the N PX context. The variable save_area must be an NPX context save area, 47 words long. The registers bx and cx will not be transparent. small_blocLNPX_restore: MOV cX,8 MOV bx, type saved_reg"7 reg_load_loop: FLO saved_reg [bx) SUB bx, type saved_reg LOOP reg_load_loop FLDENV save_area ; Set register count Starting offset of ST(7) Get the register Bump pOinter to next register Restore N PX context All done Figure 3-18 SMALL_BLOCLNPLRESTORE 3-21 210912-001 8087 NUMERIC PROCESSOR EXTENSION Force the NPX into a clean state with TOP matching the TOP field stored in the NPX context and all numeric registers tagged empty. Save_area must be the NPX environment saved earlier. ; Temp_env is a 7 word temporary area used to build a prototype NPX environment. Register ax will ; not be transparent. NPX_clean: FINIT MOV AND FSTENV ax, save_area + 2 ax, 3800H temp_env FWAIT OR FLDENV temp_env + 2, ax temp_env Put NPX into known state Get original status word Mask out the top field Format a temporary environment area with all registers stamped empty and TOP field =O. Wait for the store to finish. Put in the desired TOP value. ; Setup new NPX environment. ; Now enter small_block_NPX_restore Figure 3·19 NPX_CLEAN Code Example Which lOP to connect to which 110 device in an 86/22 or 88/22 system will depend on how quickly an 110 request by the device must be serviced by the lOP. This maximum time must be greater than the sum of the maximum delay of the lOP and the maximum wait time to gain control of the local bus by the lOP. 3. The 8087 interrupt is a stop everything event. Choose a high priority interrupt input that will terminate all numerics related activity. This is a special case since the interrupt handler may never return to the point of interruption (i.e., reset the system and restart rather than attempt to continue operation). 4. Numeric exceptions or numeric programming errors are expected and all interrupt handlers either do not use the 8087 or only use it with all errors masked. Use the lowest priority interrupt input. The 8087 interrupt handler should allow further interrupts by higher priority events. The PIC's priority system will automatically prevent the 8087 from disturbing other interrupts without adding extra code to them. 3.8 INTERRUPTS One of the most important decisions to make in adding the 8087 to an 8086 or 8088 system is where to attach the 8087 Interrupt (INT) signal. The 8087 INT pin provides an external indication of software-selected numeric errors. This causes the numeric program to stop until something is done about the error. A numeric error occurs in the NPX whenever an operation is attempted with invalid operand or attempts to produce a result which cannot be represented. Deciding where to connect the INT signal can have important consequences on other interrupt handlers. 5. Case 4 holds except that interrupt handlers may also generate numeric interrupts. Connect the 8087 INT signal to multiple interrupt inputs. One input would still be the lowest priority input as in case 4. Interrupt handlers that may generate a numeric interrupt may require another 8087 INT connection to the next highest priority interrupt. Normally the higher priority numeric interrupt inputs would be masked and the low priority numeric interrupt enabled. The higher priority interrupt would be unmasked only when servicing an interrupt which requires 8087 exception handling. 3.8.1 Recommended Interrupt Configurations Five categories cover most of the uses of the 8087 interrupt in fixed priority interrupt systems. The following presents an interrupt configuration for each of these categories. All of these configurations hide the 8087 from all interrupt handlers which do not use the 8087. Only those interrupt handlers that use the 8087 are required to perform any special 8087 related interrupt control activities. 1. All errors on the 8087 are always masked. Numeric interrupts are not possible. Leave the 8087 INT signal disconnected. A conflict can arise between the desired PIC interrupt input and the required interrupt vector of 1016 for compatibility with Intel software for numeric interrupts. A simple solution is to use more than one interrupt vector for numeric interrupts, all pointing at the same 8087 interrupt handler. Design the numeric interrupt handler so that it 2. The 8087 is the only interrupt in the system. Connect the 8087 INT signal directly to the host's INTR input (see Figure 3- 20). A bus driver supplies interrupt vector 10 16 for compatibility with Intel supplied software. 3·22 210912-001 8087 NUMERIC PROCESSOR EXTENSION Disable any possible numeric interrupt from the 8087. This code is safe to place in any procedure. If an 8087 is not present, the ESCAPE instructions will act as nops. These ; instructions are not affected by the TEST pin of the host. Using the 8087 emulator will not convert these instructions into interrupts. A word variable, called control, is required to hold the 8087 "ontrol word. Control must not be changed until it Is reloaded Into the 8087. ESC 15, control NOP NOP ESC 28,cx ; ; ; ; ; ; ; (FNSTCW) Save current 8087 control word Delay while 8087 saves current control register value (FNDISI) Disable any 8087 interrupts Set IEM bit in 8087 control register The contents of cx is Irrelevant Interrupts can now be enabled (Your Code Here) Reenable any pending interrupts in the 8087. This instruction does not disturb any 8087 instruction currently in progress since ail it does is change the IEM bit in the control register. ; Look at IEM bit ; If IEM = 1 skip FNENI ; (FNENI) reenable 8087 interrupts TEST control,80H JNZ $+4 ESC 28,ax Figure 3-20 Inhibit/Enable 8087 Interrupts does not need to know what the interrupt vector was (i.e., do not use specific EO! commands). If an interrupt system uses rotating interrupt priorities, it does not matter which interrupt is used. 3-23 210912·001 8089 Input/Output Processor 4 CHAPTER 4 8089 INPUT/OUTPUT PROCESSOR 4.1 INTRODUCTION 16-bit word and then writes the single word to the addressed memory location. Both 8-and 16-bit peripherals can reside on the same (l6-bit) bus because the lOP transfers bytes with the 8-bit peripheral, and transfers words with the 16-bit peripheral. This chapter contains specific hardware design information on the operations and functions of INTEL's 8089 Input/Output Processor (lOP) when used with the iAPX 86,88 and iAPX 186,188 family of microprocesssors. The chapter contains general information on the lOP, along with a component overview presenting architectural and software considerations, and individual device pin functional signal definitions. Detailed descriptions of the lOP's operating modes, bus operation, bus exchange mechanisms and a description of interrupt operation are also provided. For more specific information of any of the 8086 family support circuits, refer to the Microsystems Components Handbook (Order Number 230843-002). 4.2.1 Architectural Overview The 8089 lOP is internally divided into the functional units described in the following paragraphs (see Figure 4-1). These functional units are connected by a 20-bit data path to obtain maximum internal transfer rates. COMMON CONTROL UNIT (CCU) lOP operations (instructions, DMA transfer cycles, channel attention responses, etc.) are composed of sequences called internal cycles. A single bus cycle takes one internal cycle, therefore, the execution of an instruction may require several internal cycles. There are 23 different types of internal cycles. Each of these take from two to eight clocks to execute, not including possible wait states and bus arbitration resolving. 4.2 COMPONENT OVERVIEW The 8089 Input/Output Processor (lOP) is an intelligent DMA controller that is used with the Intel iAPX 86,88 and iAPX 186,188 family of microprocessors. The processing power of the 8089 lOP can remove 110 overhead from the 8086, 8088, 80186 or 80188 microprocessors. In addition, it may operate concurrently with a CPU, giving improved performance in 110 intensive applications over an iAPX 86,88 or iAPX 186,188 system operating without an 8089. The 8089 provides two 110 channels, each supporting a transfer rate of up to 1.25 megabytes per second at the standard clock frequency of 5 MHz. Memory based communication between the lOP and CPU enhances system flexibility and encourages software modularity for more reliable, easier to develop systems. The Common Control Unit (CCU) coordinates lOP activities by allocating internal cycles to the various processor units, i.e., the CCU determines which unit will execute the next internal cycle. For example, when both channels are active, the CCU determines which channel has priority and lets that channel run; if the channels have equal priority, the CCU "interleaves" their execution. The CCU also initializes the processor. The 8089 lOP combines the functions of a DMA controller with the processing capabilities of a microprocessor. In addition to the normal DMA function of transferring data, the 8089 dynamically translates and compares data as it is transferred. The lOP also supports a number of terminate conditions, including byte count, data compare or miscompare, and the occurrence of an external event. Each of the two separate DMA channels contains its own register set. Depending on the established priorities (both inherent and program determined), the two channels can alternate (interleave) their respective operations. ARITHMETIC/LOGIC UNIT (ALU) The Arithmetic/Logic Unit (ALU) can perform unsigned binary arithmetic on 8-and 16-bit binary numbers. The results of this arithmetic may be up to 20 bits in length. Available arithmetic instructions include addition, increment and decrement. Logical operations ("and," "or" and "not") may be performed on either 8-or 16-bit quantities. ASSEMBLY/DISASSEMBLY REGISTERS The 8089 has transfer flexibility integrally designed into it. It will perform routine transfers between an I/O peripheral and memory, and, in addition, transfer data between two 110 devices or between two areas of memory. The 8089 automatically handles transfers between dissimilar bus widths. When the 8089 transfers data from an 8-bit peripheral bus to a 16-bit memory bus, it reads two bytes from the peripheral, assembles the bytes into a All data entering the chip flows through the AssemblylDissassembly registers. When data is being transferred between different width buses, the 8089 uses the assembly/disassembly registers to effect the transfer in the fewest possible bus cycles. During a DMA transfer from an 8-bit peripheral to 16-bit memory, for example, 4-1 210912·001 8089 INPUT/OUTPUT PROCESSOR CA ~----liil 1/0 CONTROL TASK POINTER ~ I------I~ I/O CONTROL -ADDRESS VALID AD, 5-AO o eK XNJJIX -l rTCSAK ~ TSACK FLOAT ADDRESS VALID WRITE DATA VALID H --- I REA o CYCLE AO'5- A00 I ~ TelDV READ DATA VALID ~ ACK TSACK I \ . - - TCSAK )9 FLOAT ~ \ Figure 5-4 80130 OSP Timing Diagram The propagation delay numbers used in the preceding equation are worst-case values from the appropriate data sheets. The CPU is an 8086-2 operating at 8 MHz. This means the address decode logic must produce stable CS outputs within 140 nanoseconds. Using standard, low power Schottky TTL, it will typically not take longer than 140 nsec. to decode 6 program or 12 110 address bits. Even if these timing specifications are not met the 80130 will work fine, although performance would be degraded some because wait states would be needed until the chip-select signal became active. The second point of concern relates to ready signal timing. The 80130's acknowledge output signal, ACK*, can be used to control the CPU's ready signal. For this case, the chip-select signal must be active early in a memory or I/O cycle to allow activation of ACK* early enough to prevent wait states. There are two schemes for implementc ing ready signals; "normally ready" and "normally not ready". (For more details, refer to AP-67, "8086 System Design.") Chip-select timing is more critical in some "normally not ready" systems. In a "normally not ready" design, acknowledge signals are generated when each resource is accessed. The individual acknowledgements are combined to form a system-wide ready signal which is synchronized by the 8284A clock generator via the RDY and AEN inputs. The 8284A can be strapped to accept asynchronous ready signals (asynchronous operation) or to accept synchronous ready signals (synchronous operation). Synchronous 8284A operation provides more time for address latch propagation and chip-select decoding. In addition, inverting ACK off chip produces an active-high ready signal compatible with the 8284A RDY inputs, which have shorter set-up requirements than AEN inputs. (Also, a NAND gate used like this can combine ACK with the active-low acknowledge signals from other parts of the system.) Based on these assumptions, the time available for address latch propagation and chip-select decoding at 8 MHz is: T cLAv + Tovcs + TCSAK +RRIVCLo5TcLCL + T cLcL T ovcs o52 TCLCL -TcLAv-TcsAK-TRlvcL 05250-60-110-35 0545 nsec. 5-14 210912-001 80130 OPERATING SYSTEM FIRMWARE 8288 80130 8086 as' ALE CPU A19 BDG 8Q A19 7D 70 A17 6D A,. 'A 5D 50 AD15 4D 40 AD14 3D 30 }-DECODe ~ 745373 READY SYSTEM ACKNOWLEDGE Figure 5·5 Hlgh·Speed Address Decoding Circuit The OSP will still operate even if the memory or 110 decoding is slow. The acknowledge signal returned to the host CPU would just be delayed accordingly, so unnecessary wait states would be inserted in the access cycle, but the 80130 would not malfunction. The OSP seldom accesses resources in its own I/O space. Even if slow decode logic were to insert several wait states into every I/O cycle, the overall effect on system performance would be insignificant. A typical circuit (see Figure 5-5) which uses Schottky TTL components leaves approximately 15 nanoseconds to produce MEMCS* from the high order address bits, more than enough for the 74S 138 one-of-eight decoders. This type of circuit allows a minimum of time to fully decode the 110 bits. Also, a 12-input NAND gate on ADl5-AD4 could be used. This introduces only a single propagation delay, but forces the 110 register to start at OFFFOH. Incomplete decoding is also allowable; it is safe to drive IOCS* with the (latched) AD15 signal directly, provided all other ports in the system are disabled when this bit is low. In this case, the effective address of the I/O block (which must be specified during the system configuration step) could be OOOOH, or any other multiple of 16 between OOOOH and 7FFOH. The designer must exercise caution, though, if the 8284A is strapped for synchronous operation. In this case, external circuits must guarantee that ready-input transitions do not violate the latch set-up requirements. Also, the chip-select signal must not remain low so long after the address changes that the 80130 could respond to a non-80130 access cycle. 5-15 210912·001 Index INDEX 1 16-bit External Data Bus, 1-1 16-bit I/O Decode, 1-88 16-bit to 8-bit Bus Conversion, 1-88 16-byte Memory Boundaries, 1-8 2 2118 Family Timing, 1-87 2-byte Wait Escape, 3-2 4 4-byte Instruction Queue, 1-2 5 5 MHz 8086 System Using An 8202 Dynamic RAM Controller, 1-85 6 6-byte Instruction Queue, 1-2 8 8-bit Transfer, 1-85 80130 ARCHITECTURE, 5-1 80130 OSP Pinout Diagram, 5-3 80130 OSP Timing Diagram, 5-14 80130 Pin Descriptions, 5-4 80130 Simplified Functional Block Diagram, 5-2 80130/80150 Operating System Firmware, 5-1 80186 Address Generation Timing, 2-43 80186 and 8086 Queue Status Generation, 2-29 80186 Baud Rate Generator, 2-64 80186 Bus Drive Capabilities, 2-26 80186 Bus Signals, 2-42 80186 Cascaded Interrupt Acknowledge Timing, 2-75 80186 Chip Select Control Registers, 2-76 80186 Clock Generator Block Diagram, 2-79 80186 Clock Generator Reset, 2-81 80186 CPU/DMA Channel Internal Model, 2-51 80186 Crystal Connection, 2-80 80186 DMA Register Layout, 2-52 80186 Event Counter, 2-65 80186 Generated Signals ALE, 2-32 RD*,2-32 WR*,2-32 80186 Idle Bus HOLD/HLDA Timing, 2-48 80186 Initial Register State After RESET, 2-81 80186 Interrupt Controller Registers, 2-66 80186 Interrupt Sequencing, 2-67 80186 Interrupt Vector Types, 2-73 80186 IRMX 86 Mode Interface, 2-72 80186 IRMX-86 Mode Interrupt Acknowledge Timing, 2-74 80186 Memory Areas and Chip Selects, 2-75 80186 Non-Cascaded Interrupt Connection, 2-69 80186 Queue Status, 2-28 80186 Real Time Clock, 2-64 80186 Status Line Interpretation, 2-31 80186 Synchronization, 2-46 80186 SYNCHRONIZERS, 2-47 80186 Timer Out Signal, 2-59 80186 WAIT State Programming, 2-78 80186, CLOCKOUT Drive Capacity, 2-24 801861188 Interrupt Vectors, 2-50 80186/80130 IRMX 86 Mode Interface, 2-72 80186/80188 Device Pin Descriptions, 2-20 80186/80188 DIP Pin Assignments, 2-19 80186/80188 Functional Block Diagrams, 2-2 80186/80188 INSTRUCTION SET, 2-6 80186/8258A Interrupt Cascading, 2-70 80186/8288 Bus Controller Interconnection, 2-32 80186/8288/8289· Interconnection, 2-34 80186/Extemal Chip Select/Device, 2-35 8086 (80186)/8087 OPERATION, 3-12 8086 and Coprocessor On the Local Bus, 1-129 8086 Bus, 2-24 8086 Bus Timing -Maximum Mode System, 1-103 8086 Bus Timing -Minimum Mode System, 1-101 8086 Family Multiprocessor System, 1-98 8086 Family Support Circuits, 3-1 8086 Memory, 1-80 8086 Simplified Functional Block Diagram, 1-5 8086 System Configurations, 1-90 8086/80186 Bus Operation Differences, 2-24 8086/8088 Central Processing Units, .1-1 8086/8088 Device Pin Descriptions, 1-61 8086/8088 DIP Pin Assignments, 1-65 8086/8088 Instruction Sequence, 1-109 8086/8088 INSTRUCTION SET, 1-13 8086/8088 MEMORY ACCESS DIFFERENCES, 1-11 8086/8088 Memory Array, 1-83 8086/8088 Memory Organization, 1-82 8086/8088/8089 Multiprocessing System, 1-3 8086/88-80186/188 Operating Mode Comparisons, 2-12 8086/88 Bus Conditioning On Reset, 1-119 8086/88 Clock Waveform, 1-127 8086/88 Instruction Encoding, 1-46 8086/88 Lock Activity, 1-78 8086/88 Maximum Mode System, 1-77 8086/88 Minimum Mode System, 1-77 8086/88 Minimum System, 8257 On System Bus, 1-115 8086/88 Queue Tracking Circuit, 1-78 8086/88 Reset and System Reset, 1-130 8087 BUSY Signal, 3-7 8087 Component, 3-2 8087 Device Pin Descriptions, 3-9 8087 EMULATOR VERSUS COMPONENT USE, 3-2 8087 Instructions Exponentiation, 3-1 Logrithmic, 3-1 8087 INT, 3-3 8087 Mobility In Any IAPX 86,88, 186 Design, 3-2 8087 NPX -80186/188 CPU System Configuration, 3-12 8087 NPX -8086/88 CPU System Configuration, 3-11 8087 Numeric Co-processor, 1-52 8087 Numeric Data Co-Processor, 2-1 8087 Numeric Data Processor Pin Diagram, 3-3 Index-1 210912-001 INDEX 8087 Numeric Processor Extension Block Diagram, 3-6 8087 Numeric Processor Extention, 3-1 8087 READY Input, 3-16 8087 RQ/GT Function, 3-16 8087/80186(88) Interface, 3-11 8087/8086(88) Interface, 3-11 8088 Simplified Functional Block Diagram, 1-5 8089 DIP Pili Assignments, 4-23 8089 DMA COMMUNICATION PROTOCOL, 4~33 8089 I/O Processor Pinout Diagram, 4-22 8089 Input/Output Processor, 3-2 8089 Instruction Encoding, 4-15 8089 Machine Instruction Decoding Guide, 4-21 8089 NON-DMA INTERRUPTS, 4-33 8089 Simplified Functional Block Diagram, 4-2· 8202 Timing Information, 1-86 8203 Dynamic RAM Interface, 2-38 8203/2164A-15 Access Time Calculation, 2-39 8208 Differentiated Reset Circuit, 2-41 8208 Dynamic RAM Controller Interfaces, 2-40 8208 Dynamic RAM Interface, 2-39 8208 Memory Iilitialization, 2-40 8208 Processor Address Interfaces, 2-40 82188,3-11 82188 Integrated Bus Controller, 3-11 8237A DMA Controller Block Diagram, 1-143 8237A Internal Registers, 1-145 8237A Programmable DMA Controller, 1-125, 1-142 8257-5 DMA Controller, 1-112 . 8259A Interrupt Controller, 1-91 8259A Priority Interrupt Controllers, 1-122 8259A Programmable Interrupt Controller, 1-123, . 1-124, 1-134 82730 CRT Controller, 2-26 8284 With 8086/88 Ready Timing, 1-110 8284A, CPU Clock Drive Capacity, 2-24 8284A Clock Generator and Driver, 1-125 8284A Clock Generator/Driver Block Diagram, 1-127 8284A Frequency Outputs Oscillator (OSC) , ·1·128 Peripheral Clock (PCLK), 1-128 System Clock (CLK), 1-128 8284A Interfaced to An 8086/88, 1-127 8284A OUTPUTS, 1-128 8284A Reset Circuit, 1-130 8286 Bi-directional Bus Driver, 1-142 8286 Buffer A Side, 2-29 B Side, 2-29 8288-Generated ALE Pulse, 2-34 8288 Bus Controller, 1-23, 1-38, 1-130,2-24,2-31 8288 Bus Controller Block Diagram, 1-131 8288 Outputs During Passive Modes, 1-119 8289 Bus Arbiter, 1-98, 1-133,4-38 8289 Bus Arbiter Block Diagram, 1-133 8289 Multi-master Bus Arbiter, 1-113 A AA Field Encoding, 4-21 A.C. Characteristics, 1-98, 1-131 A.C. Characteristics Chip-Select, 2-25 A.C. Characteristics CLKIN Requirements, 2-26 A.C. Characteristics CLKOUT Requirements, 2-26 A.C. Characteristics Master Interface, 2-25 A.C. Characteristics Timing Requirements, 2-24 A.C. Characteristics Timing Requirements, 1-43 A.C. Characteristics Timing Responses, 1-43 A.C. Timing Requirements For Maximum, 1-69 A.C. Timing Requirements For Minimum, 1-67 A. C. Voltage Characteristics, 2-12 Access Time: CS Gated with AD*IWR *, 1-94 Accessing a Stacked Array with Based Index Address, 1-21 Accessing a Structure With Based Addressing, 1-20 Accessing An Array with Indexed Addressing, 1-20 Active Cycle, 1-144 Active States, Seven Possible, 2-31 Active-Inactive Status Transitions, 2-32 ADD Immediate Instruction, 1-109 ADDITIONAL INTERRUPTS, 2-6 Address and Data Bus Concepts, 1-66 Address Bus, 1-64 20-bit, 1-71 Address ENable (AEN*), 1-115 Address Information, 2-23 Address Latch Enable (ALE), 1-93 Address Latches, 2-26 Address Operands, 1-71 Address Spaces 1/0,1-64 Memory, 1-64 Address 16-bit Offset, 1-76 16-bit Segment, 1-76 Physical, 1-8 Addresses 20-bit, 2-1 Even-numbered, 1-11 110, 1-64 I/O Port Operands, 1-17 Logical, 1-8 Memory, 1-17, 1-64 Odd-numbered, 1-11 Physical, 1-8 Addressing Direct, 1-21 Indirect 110 Port, 1-20 Register Indirect, 1-21 . Advanced Write Lower TAVWLA, 1-91 Advanced Write Signal, 1-83 AL Register, 1-66, 1-85, 2-7 ALE,3-16 ALU, 2-1 Applications, 16-bit, 1-46 Arbitration Circuit, 1-118 Arbitration Devices Bus Controlled, 2-33 Multi-master Bus, 2-34 Arbitration Techniques, 1-98 Architecture Overview, 1-2, 2-1, 3~3, 4-l ARDY, 3-12, 3-16 Index-2 210912"()01 INDEX Arithmetic Instructions, 1-14,2-8,4-4 Arithmetic Interpretation of8-Bit Numbers, 1-14,2-9 ARITHMETIC/LOGIC UNIT (ALU), 4-1 Arithmetic Shifts, 1-14 Array Bounds (BOUND) Instruction, 2-6 Array Elements, 1-20 Array Matrices, 1-20 Structures, 1-20 ASM-86 Assembler, 3-22 Assembler, 8086/80186, 2-5 Assembly Code Instruction, 1-12 ASSEMBLY/DISASSEMBLY REGISTERS, 4-1 Asynchronous Bus Interface, 1-88 Asynchronous Handshake, 2-12 Asynchronous Ready Circuits For the 80186, 2-46 Asynchronous Ready Synchronization Circuits, 2-39 Automatic EO! Mode, 1-139 Automatic Initialization, 2-36 Automatic Rotation - Equal Priority, 1-139 Auxilary Flag (AF), 1-6 AX Register, 1-86 B Bank Select Input BS, 2-49 Bank Selection Decoding and Word Expansion, 2-49 Base Address, Current Code Segment, 2-9 Base Address and Base Word Count Registers, 1-146 Base Point Register (BP), 1-9 Base Register Sum, 1-18 Base Register Content, 1-16 Based Addressing, 1-18 Based Index Addressing, 1-19, 1-20 Based Variable Operations, 2-8 Basic 8086/88 Bus Cycles, 1-80 Basic 8086/88 Instruction Set, 2-5 Baud Rate Counter Values (16X), 5-11 Baud Rate Generators, 2-58, 5-11 BHE*/S7 Line, 3-3 Bi-directional Buffer, 2-30 Binary Numbers Divide, 1-14,2-9 Division, 1-13 Multiplication, 1-13 Multiply, 1-14, 2-9 Signed, 1-13 Unsigned, H3 Bipolar PROM Decoder, 1-88 Bit Manipulation Instructions, 1-14,2-9 Logicals, 1-14 Rotates, 1-14 Shifts, 1-14 Block Input/Output (INS/OUTS) Instructions, 2-5 Block Transfer Mode, 1-144 Block Transfer to 16-bit lIO Using, 1-92 Block Transfer to 8-bit I/O Using, 1-92 Boolean Operators "and", 1-14 "inclusive Or", 1-14 "not", 1-14 Boundaries 16-byte, 1-70 Even Address, 1-70 Odd Address, 1-70 Bounds Lower, 2-6 Upper, 2-6 Buffered Data Bus, 1-93 Buffered Devices, 2-30 Buffered Mode, 1-142 Buffering Devices with OE*/RD*, 1-97 Buffering Devices Without OE*/RD* And, 1-97, 1-98 Buffering the 8284 CLK Output, 1-129 Bus Access Control, 1-64 Bus Access Request, 2-1 BUS ACTIVITY DURING a HARDWARE INTERRUPT, 1-124 BUS ARBITRATION, 3-16, 4-37 BUS ARBITRATION FOR lOP CONFIGURATIONS, 4-39 Bus Arbitration Requirements and Options, 4-39 Bus Contention, 1-96, 2-26 Bus Control and Command Outputs, 1-60 BUS CONTROL SIGNALS, 2-25, 3-16 Bus Cycle Decoding, 4-37 Bus Cycle Definition, 1-65 Bus Cycle, 2-36 Asynchronous Event, 1-65 Minimum, 1-65 Bus Cycle T2, 2-23 BUS DRIVE, 2-30 BUS EXCHANGE MECHANISMS, 1-110,2-54,3-16, 4-36 BUS INTERFACE UNIT, 1-3, H08, 1-110,2-5 Bus Interface Unit (BID), 2-1, 4-2 Bus Interface 16-bit, 2-1, 2-5 Bus Load Limit, 4-39 Bus Lock, 4-39 Bus Master Peripheral Devices, 2-25 Bus Master Type Controllers, 1-60 Bus Masters, 1-110 Bus Mastership, 2-25 BUS OPERATION, 1-64,2-24,3-15,4-34 Bus Parity Detection Logic, 1-120 Bus Request Line (BREQ*), 1-135 Bus Time Percentage, 2-24 Bus Transceiver Control, 1-95 Bus Usage Amount, 2-24 Bus Address, 1-65 Command,I-65 Data, 1-65 Status, 1-65 Time-multiplexed, 1-64 Twenty-bit Time Multiplexed, 1-65 Business Data Processing, 3-1 BUSY Signal, 3-8 Byte Data, 2-7 Byte Units, 2-3 C Index-3 210912-001 INDEX Carry Flag (CF), 1-6, 1-14 Cascade and Special Fully Nested Mode Interface, 2-69 Cascade Input Mode, 2-69 Cascade Mode, 1-141, 1-144 Cascade-Buffered Mode Example, 1-143 Cascaded 8237As, 1-145 Cascaded 8259A's 22 Interrupt Levels, 1-141 CE to WR* Setup and Hole, 1-94 Channel Attention Decoding Circuit, 4-28 Channel Command Word Encoding, 4-28 Channel Commands, 4-27, 4-29 Channel Transfer Delay Timing, 1-117 Channel Register Set, 4-3 Channel Register Summary, 4-2 Channel State Save Area, 4-30 CHANNELS, 4-3 Chip Enable/select, 1-68 Chip Enable/select Encoding, 1-68 CHIP SELECT AND READY GENERATION UNIT, 2-1 Chip Select Decoding, 1-64 Chip Select Generation For Devices Without Output, 1-83 Chip Select, 1-97 Active, 1-64 High Active, 1-64 Low Active, 1-64 Signals, 2-30, 2-31 Chip Select/Ready Logic and Reset, 2-81 Chip Select/Wait State Generation Unit, 2-74 Chip Selection For Devices With Output Enables, 1-84 Circuit Holding LOCK* Active Until, 2-33 Circuit to Translate HOLD Into AEN Disable, 1-118 Classes ofInterrupts, 1-120 Clear First/Last Flip/Flop, 1-148 CLOCK GENERATION, 1-125 CLOCK GENERATOR, 2-3 Clock Generator/Reset/Ready, 2-79 Clock High Phase, 2-24 Clock In/Clock Out Timing, 2-79 Code For Block Transfers, 1-63 Column Address Strobe (CAS*) Pair, 2-49 Coming Out of Reset, 2-81 Command Activation, 1-65 Command Communication Blocks, 4-24 Command Inputs, 1-64 Command Lines 1/0, 1-65 Memory, 1-65 Command Signals Ready, 2-31 Write, 2-31 Command Register, 1-146, 1-147 Commands Interrupt Acknowledge, 1-65 Read, 1-64, 1-65 Write, 1-64, 1-65 COMMON CONTROL UNIT (CCU), 4-1 Common IAPX186 System Components, 2-4 Common Word Address, 2-33 Communication Chips, 1-2 COMPATIBILITY WITH FRSTOR, 3-19 COMPATIBILITY WITH FSAVE/FNSAVE, 3-19 Compatible Peripherals For a 5 MHz 8086188, 1-90 COMPONENT OVERVIEW, 1-1,2-1,3-3,4-1 Concurrent Execution of Host and Coprocessor, 3-13 Condition of 8086/88 Bus and Output Signal, 1-119 Conditional Jumps SHORT, 2-10 Conditional Transfers, 1-16, 2-10 Constant Current Power Up Reset Circuit, 1-130 CONTROL REGISTERS, 2-67, 2-68 CONTROL SIGNALS, 2-29 ALE*,2-32 DEN, 2-33 DT/R*,2-33 LOCK*,2-33 RD*, 2-29, 2-32 TEST"', 2-33 WR*, 2-29, 2-32 CONTROL UNIT, 3-3 Controlling System Transceivers with DEN and DT/R"', 1-97 Count Register (CX), 1-14 COPROCESSOR CONTROL, 3-13 COPROCESSOR INTERFACE TO MEMORY, 3-12 Count Operand Value, 2-8 CPU Bus Bandwidth, 1-106 CPU Clock, 1-98,2-3 50% Duty Cycle, 2-24 Duty Cycle, 2-3 Speed, 2-3 CPU DUTY CYCLE AND CLOCK GENERATOR, 2-24 CPU ENHANCEMENTS, 2-4 CPU Execution Speed, 2-4 CPU Local Bus, 1-88, 1-131 CPU Not Ready, 1-66 CPU Processing Sections, 2-1 CPU WAIT Instruction, 3-7 CPU/lOP Communications, 4-22 Crystal Choice Recomendations, 2-80 CRYSTAL CLOCK REFERENCE, 1-126, 2-79 Crystal Oscillator, 2-25 CS Register, 1-123, 1-124 CS*/Bus Driving Device Timing, 1-95 CSYNC Setup and Hold to EPI, 1-116 Current Address Register, 1-145 Current Code Segment, 1-5 Current Extra Segment, 1-5 Current Word Register, 1-145 Currently Addressable Segments, 1-8, 1-9 CX Register, 2-10 Cycle Dependent Write Parameters For RAM Memories, 1-84 D D-type Latches, 1-94 D.C. Characteristics, 1-66,2-23 Data Access Period, 2-39 Data Acquistion, 3-2 Data Buffers, 2-29 Index-4 210912-001 INDEX Data Bus Interface, 8-bit, 2-1, 2-4 Data Bus Usage, 4-37 Data Bus 16-bit, 1-66, 1-67, 1-85, 1-86, 1-123,2-1,2-34 8-bit, 2-1 Arithmetic Logic Unit (ALU), 1-3,2-1 DO-D7,2-34 D8-DI6,2-34 Lower 8 Bits, 2-34 Lower Half, 1-86 Lower Half (D7-0), 1-67 Multiplexed Address/data, 2-34 Upper 8 Bits, 2-34 Upper Half, 1-86 Upper Half (DI5-8), 1-67 Data Byte, 1-13 Data Element 16-bit, 1-67 Eight Bit, 1-67 Data Hold Time, 1-106 Data Operands, 1-76 Data Path, 16-bit, 1-46 Data Paths 16-bit External, 1-65 16-bit Internal, 1-65 Data Propagation Direction, 2-29 Data Registers 16-bit, 1-4 Lower Half, 1-4 Two 8-bit, 1-4 Upper (high) Half, 1-4 Data Strobe, 1-66 Data Throughput, 1-142 Data Tranceivers, 1-117 Data Transfer, 2-34 Data Transfer Instructions, 1-13, 1-14,4-4 Address Object, 1-13, 2-7 Flag Transfer, 1-13, 2-7 General Purpose, 1-13, 2-7 Input/output, 1-13,2-7 Data Transfers 16-bit, 1-86 8-bit, 1-86 Data Transmit/Receive (DT/R*), 1-93 Data Word, 1-12 Data Types, 5-8 Decimal Operands, 3-1 Decoding Escape Instructions, 3-12 Delay Effects of the 8087, 3-17 Delay of Valid Address, 1-99 De-multiplexing Address and Data From the Processor Bus, 1-96 Demultiplexing the 80186 Address Bus, 2-44 DEN*, 3-16 Decoding Memory and I/O RD* and WR * Commands, 1-79 Definition of Register Codes, 1-147 Demand Transfer Mode, 1-144 Demultiplexed Address Bus, 1-96, 1-99 Demultiplexed Buffered System Bus, 1-105 Destination Index, 1-15 Destination Synchronized DMA Transfers, 2-56 Destination Synchronized Transfer Cycle, 4-32 Device Architecture, 801861188, 2-1 Device Assignment, 1-91 Device Output Drivers, 1-92 DEVICE PIN ASSIGNMENTS, 3-8, 4-20, 5-1 DEVICE PIN DEFINITIONS, 1-42,2-12 Device Pin Signal, 1-43,2-12 Device Reliability, 1-43,2-12 Device Specifications, 1-43,2-12 Devices, 8MHz, 2-1 Devices With Output Enable On the Multiplexed Bus, 1-93 Devices With Output Enable On the System Bus, 1-95 Devices Without Output Enable On the Multiplexed B, 1-94 Differences Between 80130 and 8259A, 5-8 Differences Between 80130 Timers and 8253/8254, 5-11 Differences, 80186 and 80188, 2-1 Direct Addressing, 1-18, 1-19 Direct Input Mode, 2-68 Direct Memory Access (DMA) Unit, 2-51 Direct Memory Access Transfers, 4-30 Direction Controls, 1-99 Direction Flag (DF), 1-7, 1-15 Discrete Data Buffer, 2-36 Displacement Summing, 1-18 Displacement Value Sum, 1-18 Divide Error -Type 0, 1-121 Divide Error Interrupt Service Routine, 1-121 DMA ACKNOWLEDGE, 2-54 DMA Acknowledge Synthesis, 2-55 DMA Assembly Register Operation, 4-31 DMA Channels and Reset, 2-82 DMA Control Register, 2-51 DMA Cycle, 2-3, 2-4 DMA Latency Time, 2-24 DMA OPERATION, 1-142 DMA REGISTERS, 1-145 DMA Request Inactive Timing, 2-57 DMA Request Logic, 2-55 DMA Request Timing, 2-55 DMA REQUEST TIMING AND LATENCY, 2-54 DMA Requests, 2-4, 2-53 DMA Termination, 4-32 DMA Transfer, 2-24 DMA TRANSFERS, 2-52 DMA Transfer Cycles, 4-32 DMA Unit, 2-24 DMA Using the 8237-2, 1-114 DRAM Controller 8203,2-31 8207,2-31 DS Register, 1-18 DT/R*, 3-16 Dynamic Code Relocation, 1-11 Dynamic RAM, 1-81 Dynamic RAM Controllers 8202, 1-81 Index-5 210912-001 INDEX 8203, 1-81 8207, 1-81 8208, 1-81 Dynamic Reconfiguration, 1-142 DYNAMICALLY RELOCATABLE CODE, 1-10 Dynamically Relocatable Program, 1-10 E Edge Sensitive Input, 1-140 Edge Triggered Mode, 1-140,5-12 Effective Address Calculation Time, 1-24 EFI From 8284A Oscillator, 1-129 Eight Bit Data Element, 1-67 Eight Levels of Interrupts, 1-134 Eight-Bit I/O, 1-86 Electrical Description of Pins, 1-43,2-12 Element Byte, 2-9 Word,2-9 Elementary Maximum Mode System, 1-76 End of HOLD Timing, 2-48 End of HOLD Timing Diagram, 2-49 End ofInterrupt (EOI), 1-139 End-OF-Interrupt Formats, 1-139 EOI Formats, 1-139 ENTER and LEAVE Instructions, 2-6 ENTER Instruction Algorithm, 2-6 ENTER Instruction Stack Frame, 2-7 EPROM/ROM Bus Interface, 1-83 EPROM/ROM Parameters, 1-82 ES Register, 1-18 ESCAPE Instruction, 3-7, 3-8 ESCAPE INSTRUCTION FORMAT, 3-7 ESCAPE Instructions Not Used By the 8087 NPX, 3-8 Escape Opcode, 2-6 EU,2-1 EU Bus Request, 1-4 Even Word Boundaries, 1-109 Event Counter, 2-59 Example 2186/80186 Interface, 2-37 Example 2764/80186 Interface, 2-35 Example 80186 Buffered/Unbuffered Data Bus, 2-30 Example 80186 Bus Cycle, 2-43 Example 8203/DRAM/80186 Interface, 2-38 Example DMA Transfer Cycle, 2-53 Example Interrupt Controller Interface Code, 2-71 Example Timer Interface Code (Sheet 1 of 4), 2-60 Execution Speed Improvements, 2-4 EXECUTION UNIT, 1-3,2-23 EXECUTION UNIT AND BUS INTERFACE UNIT, 2-1 External Bus 16-bit 80186, 2-1 8-bit 80188, 2-1 External Clock Generator, 2-24 External DMA Controller, 2-35 EXTERNAL FREQUENCY CLOCK REFERENCE, 1-126,2-80 External Frequency For Multiple 8284's, 1-128 External Frequency Source, 1-125 EXTERNAL INTERFACE, 2-68 External Interrupt Controller, 2-19 External Interrupt Sources, 2-66 External Oscillator, 2-3 External Ready Signals, 2-3 External Refresh Requests After RESET, 2-41 External Synchronization Instructions, 2-11 External Vectoring, 2-74 EXTERNALLY SYNCHRONIZED DMA TRANSFERS, 2-54 Extra Segment, 1-8 F F/C* Strapping Option, 1-128 Faster Effective Address Calculation, 2-4 FDIV, 3-14 Field D, 1-41 Immediate, 1-41 MOD (mode), 1-41 Optional, 1-41 R/M (register/memory), 1-41 REG, 1-41 REG (register), 1-41 S, 1-41 Single-bit, 1-41 V, 1-41 W,1-41 Z, 1-41 Financial Calculations, 3-1 Flag Operations, 2-11 Flag Store Formats, 2-8 Flag Storage Formats, 1-13 FLAGS, 1-5 Flags Register, 1-123, 1-124 Flags Control, 1-3 Status, 1-3 Updates, 1-17 FMUL,3-14 FSQRT,3-14 Full Machine Cycle Execution, 1-144 Fully Buffered System, 1-96 Fully Nested Mode, 1-136 Functional Description of All Signals, 1-43,2-12 FWAIT,3-14 G General Design Considerations, 1-64 GENERAL INFORMATION, 5-1 GENERAL REGISTERS, 1-7 Generating I/O and Memory Read Signals, 2-30 Generating Queue Status Information, 2-28 Graphics Terminals, 3-2 H HALT,2-24 HALT Bus Cycle, 2-23 Hardware Chip Select Signals, 2-34 Hardware-initiated Interrupts, 2-11 HARDWARE LOCK, 1-52 Hardware-initiated Interrupts, 1-17 Hardware Trigonometric Support, 3-2 High-Level Instructions, 2-11 Index-6 210912-001 INDEX High-level Languages, 2-11 High-Speed Address Decoding Circuit, 5-15 High Address, 1-7 Higher Priority Arbiter Obtaining the Bus, 1-135 HOLD Response, 2-47 HOLD/HLDA, 3-11 HOLD/HLDA INTERFACE TO MAXIMUM MODE SYSTEMS, 1-115 HOLD/HLDA Sequence Timing Diagram, 1-112 HOLD/HLDA Timing, 1-98,2-48 HOLD/HLDA Timing and Bus Latency, 2-47 HOLD/HLDA-to/from-RQ*/GT* Conversion Circuit, 1-116 HOLD/HLDA-to/from-RQ*/GT* Conversion Timing, 1-116 HOLD/HLDA VERSUS RQ*/GT*, 2-26 HOST ESCAPE INSTRUCTION PROCESSING, 3-12 Host TEST Pin, 3-8 Hosts Interrupt Vector Table, 3-2 I 110 Address Space, 1-64 110 BUS MODE, 1-133 110 Control, 4-3 110 Device Chip Select Techniques, 1-88 110 DEVICE COMPATIBILITY, 1-88 110 Devices 16-bit, 1-88 8-bit, 1-86 110 Input Request Code Example, 1-92 110 Interfacing, 1-69 I/O Modules, 1-64 110 Peripheral Address, 1-64 110 PERIPHERAL INTERFACE, 1-85 I/O Port Addressing, 1-20, 1-21 I/O Port Access, 1-21 Memory Mapped, 1-20 110 Read, 1-4 110 Space, 2-3, 2-4 64K-byte, 1-46 I/O Write, 1-4 1I0-intensive Data Processing Systems, 1-1 I/O-to-memory DMA Transfers, 1-143 IAPX 186/10 Microprocessors, 3-1 IAPX 188/10 Microprocessors, 3-1 IAPX186 Integrated Devices, 3-1 IAPX 86,88, 186, 188 Base, 3-1 IAPX 86/10 Microprocessors, 3-1 IAPX 86/11, 88/11 Configuration with 8089 In Local, 4-25 IAPX 86/20,88/20 SYSTEM CONFIGURATION, 3-17 IAPX 86121,88121 SYSTEM CONFIGURATION, 3-17 IAPX 86/22 System, 3-20 IAPX 86/22,88/22 SYSTEM CONFIGURATION, 3-17 IAPX 88/10 Microprocessors, 3-1 IAPX 88/21 System Configuration, 3-18 IAPX186/20 Bus Operation, 3-15 IAPX186/20 System, 3-11 IAPX86/20 Bus Operation, 3-15 Idle Cycle, 1-142 Idle Cycles (Tl), 1-66 Idle Status, 1-115 Idle T States (Ti), 2-19 IF Flag, 1-122 Immediate Operand, 8-bit Port Number, 1-21 Immediate Operands, Limitations, 1-18 Implicit Use of General Registers, 1-7 IMUL,2-5 In-Service Register (ISR), 1-137 Index Register, Content, 1-18 Inertial Guidance Systems, 3-2 Indexed Addressing, 1-19, 1-20 Inhibit/Enable 8087 Interrupts, 3-23 Initialization Command Word 1 (ICW1), 5-2 Initialization Command Word 2 (lCW2), 5-3 Initialization Command Word 3 (ICW3, 5-3 Initialization Command Word 4 (ICW4), 5-5 Initialization Command Word 5 (ICW5), 5-5 Initialization Command Word 6 (ICW6), 5-5 Initial Program Loading Routine, 1-76 Initializing the Timers, 5-11 Initialization and Processor Reset, 2-81 Input/output Memory Devices, 2-1 INPUT/OUTPUT PERIPHERAL CHIP SELECTS, 2-78 Input/output Peripheral Devices, 2-1 Input Request, 1-92 Instruction Execution, 2-23 Immediate-to-memory, 1-21 Register-to-register, 1-21 Instruction Execution Times, 2-4 Instruction Fetch Bus Cycle, 1-2,2-3 Instruction Fetch Overlap, 1-2 Instruction Fetch Timings (Clock Periods), 4-15 INSTRUCTION FETCH UNIT, 4-2 Instruction Loop Sequence, 1-111 Instruction Object Code Byte, 2-1 INSTRUCTION POINTER, 1-5,2-1,2-9 Instruction Queue 4-byte, 1-2 6-byte, 1-2 Instruction Set Extension, 1-98 Instruction Set Reference Data, 1-21, 1-24, 4-6 Instruction Set Summary, 1-13, 1-21,2-12,2-13,4-3 Instruction Set 80186/88,2-1 Assembly Level, 1-13 Machine Level, 1-13 Two Levels, 1-13,2-7 Instruction Synchronization, 3-13 Instruction/function Format, 1-1 Instructions 80186,2-23 Actual Execution Time, 1-23 ADD Immediate, 1-109 ADD Memory Indirect to AX, 1-109 Address Object, 2-7 Arithmetic, 2-7, 2-8 ASM-86, 1-42 Assembly-level, 2-7 Auto-decrement, 1-7 Index-7 210912-001 INDEX Bit Manipulation, 2-7, 2-8 BOUND, 2-6 CALL, 1-18 Clock Cycles, 2-12 CLI, 1-122 Conditional, 1-16 Conditional Repeat, 1-41 Conditional Transfer, 1-16,2-10 Control Transfer, 1-23,2-7 Data, 1-64 Data Move, 2-23 Data Transfer, 2-7 Displacement, 1-18 Divide, 2-4 ENTER, 2-6 ENTER, 2-6 ESCAPE, 1-52 Fetch, 1-65 FWAIT,2-33 HALT, 1-64, 1-107 High Level, 2-7 HLT,2-23 Immediate-to-memory, 1-41 IMUL,2-5 INC, 1-13 INS, 2-5 INT Nn, 1-122 Interrupt, 1-17, 2-11 Interrupt On Overflow, 1-6 Interrupt-related, 1-16 INTO, 1-121 IRET, 1-122 Iteration Control, 1-17,2-10 JC, 1-15,2-9 JMP, 1-18 JMP, 1-109, 1-118 JNC, 1-15,2-9 LAHF,2-7 LDS,I-15 LEA, 1-15 LEAVE, 2-6 LES,I-15 LOCK* Prefix, 1-52 LOCKED, 2-33 Locked, 1-64 Locked Exchange, 1-64 Logical, 1-14,2-8 Long, 2-23 Machine Level, 1-13,2-7 Master Clear, 1-146 MOV, 1-13, 1-41, 1-109, 1-122 MOV Immediate, 1-109,2-9 MOVS,I-122 Multibyte, 1-41 Multiple-bit Shift, 2-4 Multiply, 2-4 Non-immediate 16-bit Read/write, 2-1 OUTS, 2-5 POP, 1-122 POPA,2-5 Prefetched, 1-3, 1-23,2-1,2-23 Process Control, 1-17 Processor Control, 2-7, 2-11 Program Transfer, 2-9 PUSH AX, 1-109 PUSHA,2-7 PUSHI,2-7 Queue, 1-24 Reset, 1-146 RET, 2-6 Rotate, 1-14,2-4,2-9 Shift, 2-9 Shift/rotate, 2-5 Short, 2-23 String, 1-15,2-9 String Manipulation, 2-7 String Move, 2-4, 2-5 Target, 1-23 TEST, 1-14,2-8 Timing Cycles, 1-12,2-12 Unconditional, 1-16 Unconditional Transfer, 1-16,2-10 WAIT, 1-64, 1-105, 1-122,2-33 INTO/INTI Control Register Formats, 2-66 INT2/INT3 Control Register Format, 2-67 Integer Immediate Multiply (IMUL), 2-5 Integrated Circuits, 80186/188,2-3 Integrated DMA Unit, 2-3, 2-26 Integrated Wait State Generator, 2-4 Intel Hardware Products, 1-11 Intel Software Products, 1-11 Intellec Microcomputer Development System, 1-2 Interfacing the 8089 to the 8086 and 80186, 4-24 INTERFACING WITH THE 8086/88,5-1 Internal 256-byte Control Block, 2-4 Internal Architecture, 16-bit, 2-1, 2-4 Internal CPU Registers, 1-118 Internal Data Path, 1-65 Internal Interrupt Sources, 2-65 INTERNAL PERIPHERAL INTERFACE, 2-4 Internal Pre-fetch Queue, 2-12 Internal Source Priority Level, 2-65 Internal Vectoring IRMX 86 Mode, 2-73 Master Mode, 2-73 Interpolation, 3-2 Interpretation of Conditional Transfers, 1-17, 2-11 Interpreting the 80186/80188 Bus Timing Diagrams, 2-41 Interpreting the 8086/8088 Bus Timing Diagrams, 1-98 Interrupt Acknowledge, 1-104, 1-123 Bus Cycle, 1-17,2-11 Cycle, 1-118 Sequence, 1-112, 1-122, 1-123 Timing, 1-123 Timing Cycles, 1-104 INTERRUPT CASCADING, 1-140 Interrupt Classes, 1-120 Interrupt Controller, 2-59, 5-10 Interrupt Controller and Reset, 2-82 Index-8 210912-001 INDEX Interrupt Controller Block Diagram, 2-65 Interrupt Controller Control Register, 2-68 Interrupt Controller Operating Modes, 2-19 Interrupt Controller Pins, 2-19 Interrupt Controller Registers, 2-3 Interrupt Enable Flip-flop, 2-26 Interrupt Instructions, 1-17, 2-11, 3-2 Interrupt Latency, 2-70 Interrupt On Overflow -Type 4, 1-121 INTERRUPT PRECEDENCE, 1-124 INTERRUPT PRIORITIES, 1-136 Interrupt Processing, 1-11, 1-76 Interrupt Processing Timing, 1-121 Interrupt Request Register (lRR), 1-137 Interrupt Requests External (maskable), 1-7 External Sources, 2-3 Internal Sources, 2-3 INTERRUPT RESPONSE TIMING, 2-73 Interrupt Service Routine, 1-120, 1-124 Interrupt Sequence, 5-13 INTERRUPT SOURCES, 2-65 Interrupt-related Transfers, 2-9 INTERRUPT TRIGGERING, 1-140 INTERRUPT TYPE PROCESSING, 1-124 Interrupt Types, 1-120 256 Possible, 1-76 Interrupt Vector Byte, 1-139 Interrupt Vector Table, 1-120 INTERRUPT VECTORING, 1-135 Interrupt Vectors, 1-64, 3-2 Interrupt-enable Flag (IF), 1-7 Interrupt-related Instructions, 1-16 INTERRUPTS, 1-120, 3-22, 4-40 CPU, 1-120 Escape Opcode, 2-6 Hardware, 1-120 Hardware-initiated, 1-17, 2-11 Internal, 1-7 Internally Generated, 1-7 Maskable, 1-120 Non-maskable External, 1-7 Nonmaskable, 1-120 Response, 1-11 Single-step, 1-120 Software, 1-17, 1-120,2-11 Software-initiated, 1-120 Unused Opcode, 2-6 Intersegment Transfer FAR, 1-16 Intrasegment Transfer NEAR, 1-16 SHORT, 1-16,2-5 lOP Initialization, 4-26 IR Level, 1-139 IR Triggering Timing Requirements, 1-141 IRMX 86 Interrupt Controller Interconnection, 2-66 IRMX 86 Mode, 2-19 IRMX 86 MODE OPERATION, 2-64 IRMX Mode, 2-70 IRMX Mode Sources, 2-68 ISBC 337 MULTIMODULE, 3-3 ISBC 337 MULTIMODULE Mounting Scheme, 3-3 ISBC 86/30 Board, 1-24 ISBC 88/25 Board, 1-24 Iteration Control, 1-17, 2-10 J JMP Instruction, 1-109 K Key to Flag Effects, 1-23 Key to Instruction Coding Formats, 1-22 Key to Machine Instruction Encoding, 1-45 Key to Operand Types, 1-23 L Language Translators, 1-42 Late Write Signal, 2-27 LATENCY OF HLDA TO HOLD, 1-112 Level Triggered Mode, 1-91, 1-140,5-12 Linear Select For 110, 1-79 LINK86 Program, 3-2 LMCS Programming Values, 2-77 LMCS Register, 2-77 Local Bus, 8086, 1-52 LOCAL BUS CONTROLLER AND CONTROL SIGNALS, 2-25 Local Bus Controller and Reset, 2-81 Local Bus Controller Outputs, 2-12 Local Interrupt Requests, 5-13 LOCAL Mode, 3-11, 4-25 LOCK*,1-98 Locked Data Transfer, 2-33 Locked Exchange Instruction, 1-64 Logical, 1-14, 2-8 Lower 8 Data Bits, 2-4 Logical Addresses, 1-8 Logical Addresses Sources, 1-10 Logical and Bit Manipulation Instructions, 4-4 Logical and Physical Addresses, 1-9 Lower Bank Write Strobe, 1-81 Lower Bounds, 2-6 Lower Memory CS*, 2-76 Lower Memory For Interrupt Vectors, 2-3 Lower Memory Starting Location, 2-3 Lowest-addressed Byte, 1-8 M Machine Instruction Decoding Guide, 1-52 MACHINE INSTRUCTION ENCODING AND DECODING, 1-24,4-6 Machine Instruction Encoding Matrix, 1-44 Machine Instruction Formats, 1-24 8086, 1-41 8086/8088, 1-42 8088, 1-41 Decode, 1-12 Encode, 1-12 Length, 1-41 MOV,2-7 Machine Language Instruction Decoding, 1-21 Instruction Encoding, 1-21 Index-9 210912-001 INDEX Major Cycle Timing Waveforms, 2-12, 2-27 M~or Modes of Operation, 2-19 Mask Bits, 1-148 Mask Register, 1-147, 1-148 Master Clear, 1-148 Master System Interrupt Controller, 2-19 External, 2-3 Max Mode 8086 with Master 8259A 1-107, 1-138 Maximum and Minimum Mode Command Timing, 1-132 Maximum CPU Bus Bandwidth, 1-107 Maximum Mode (RQ*/GT*), 1-113 Maximum Mode Address and ALE Timing, 1-105 MAXIMUM MODE BUS TIMING, 1-105 Maximum Mode Interrupt Acknowledge Timing, 1-106 Maximum Mode Operation Waveforms, 1-43 Maximum Mode Read Cycle Timing, 1-105 Maximum Mode Ready Timing, 1-106 MAXIMUM MODE SYSTEM INTERRUPT, 1-124 Maximum Mode System Overview/Description, 1-52 Maximum Mode System Bus, 2-12 Maximum Mode Values, 1-105 Maximum Mode Waveforms, 1-74 Maximum Mode Write Cycle Timing, 1-106 Maximum Parameter Values, 1-98 Maximum Write Data Delay, 1-99 MCE Timing to Gate 8259A CAS Address, 1-138 Memory -I/O Block Transfers Example, 1-91 Memory Address Computation, 1-19 Memory Address Space, 1-64 Memory Address, Odd, 1-23 Memory Addressing Modes, 1-18 Memory and 110 Peripherals Interface, 1-71, 2-34 Memory Chip Select Lines, 2-3 MEMORY CHIP SELECTS, 2-75 Memory Components, 1-8 Memory Device, 1-42,2-3 Memory Even and Odd Data Byte Transfers, 1-81 Memory Even and Odd Data Word Transfers, 1-82 MEMORY INTERFACE, 1-78,2-34 Memory Interfacing, 1-71 Memory Mapped, 1-64,2-3 Memory Mapped 8-bit I/O, 1-87 Memory Mode, Effective Address Calculation, 1-41 Memory Modules, 1-64 Memory Operands, 1-17, 2-7 Displacement Value, 1-41 Read, 1-18 Register Indirect Addressing, 1-21 Write, 1-18 Memory Organization, 2-4 Memory Read, 1-4 Memory Read Signals, 1-105 Memory Reference Escape Instruction Form, 3-8 Memory Reference Opcodes, 3-7 Memory Space, 2-3 8086, 1-5 8086/8088, 1-8 8088, 1-5 Memory Writes, 1-11,2-31 Memory High, 1-11 Low, 1-11 Memory-based Semaphore Variables, 2-33 Memory-To-Memory Transfer Timing, 1-145 Memory-to-Memory Transfers, 1-142, 1-145, 1-148 Microprocessor Control Pins, 1-1 Microprocessors 80186,2-1 80188,2-1 8080/8085, 1-12 Mid-Range CS*, 2-76 Min Mode 8086 with Master 8259A, 1-137 Minimum Execution Time, 2-12 Minimum Mode, 1-1 Minimum Mode (HOLD/HLDA), 1-110 Minimum Mode 8086 Systems, 1-134 MINIMUM MODE BUS TIMING, 1-99 MINIMUM MODE DMA CONFIGURATION, 1-112 Minimum Mode Interrupt Acknowledge Timing, 1-104 Minimum Mode Operation Waveforms, 1-43 Minimum Mode Read Cycle Timing, 1-99 Minimum Mode Ready Timing, 1-104 MINIMUM MODE SYSTEM INTERRUPT, 1-124 Minimum Mode System Overview/Description, 1-44 Minimum Mode TEST* Timing, 1-105 Minimum Mode Waveforms, 1-72 Minimum Mode Write Cycle Timing, 1-104 Minimum Parameter Values, 1-98 Minimum/Maximum Mode Pin Assignments, 1-71 MM Field Encoding, 4-22 MMCS Register, 2-78 MN/MX* Input Pin, 1-43 MN/MX* Pin, 1-7 Mnemonic Codes For Exceptions, 5-9 MOD Field, 3-7 Mode (MOD) Field Encoding, 1-42 Mode Register, 1-146, 1-147 MODE SELECTION, 1-7 Mode Addressing, 1-20 Single-step, 1-7 Modes of Operation IRMX 86, 2-19 Non-iRMX 86, 2-19 Modes Late Cycle, 2-36 Pulse, 2-36 Most-significant Byte, 1-41 Move Word Immediate to Register, 2-7 MOVS Instruction, 1-122 MPCS Programming Values, 2-77 MPCS Register, 2-77 Multi-CPU System Performance, 1-131 Multi-master Bus Arbitration, 1-119 Multi-master Bus System, 1-134, 2-34 MULTIBUS APPLICATIONS, 2-33 MULTIBUS Protocol, 1-98 Index-10 210912-001 INDEX MULTIBUS System Bus, 1-97, 1-107 MULTIBUS Systems, 1-131 Multibyte Numbers Add, 1-6 Subtract, 1-6 Multiple Bit Rotates, 2-5 Multiple Bit Shifts, 2-5 Multiple Communications Lines Example, 1-91 Multiple Processor Considerations, 1-119 Multiple-processor Designs, 1-1 Multiplexed Address and Data Bus, 1-64, 1-96, 1-104 Multiplexed AddresslData Bus, 2-34, 2-36 Multiplexed AddresslData Bus (186/188), 2-29 Multiplexed Address/Status Lines, 1-104 Multiplexed Bus, 1-79, 1-92 Multiplexed Bus With Local Address Demultiplexing, 1-96 Multiplexed Data Bus, 1-93 Multiprocessing Functions, 1-44 Multiprocessor Environments, 1-131 Multiprocessor/Coprocessor Applications, 1-97 N Navigation, 3-2 NEW 80186/80188 INSTRUCTIONS, 2-4 New Instructions, 2-1 NMI ACKNOWLEDGE, 1-124 NMI During Single Stepping and Normal, 1-125 NMI, INTR, Single Step and Divide Error, 1-125 Non-existant Banks, 2-39 Non-immediate Data Read/write Instruction, 2-4 Non-integral Values, 3-1 NON-iRMX 80 MODE, 2-64 Non-iRMX 86 Mode, 2-19 Non-Maskable Interrupt -Type 2, 1-121 Non-memory Reference, 3-7 Non-Memory Reference Escape Instruction Form, 3-7 Non-Specific EO! Command, 1-139 NOP Instruction, 3-3 Normal Bus Cycle, 2-23 Normally Not Ready System Avoiding a Wait State, 1-108 Normally Ready System Inserting a Wait State, 1-108 NPX, 3-lNPX Coprocessor Application, 3-1 NP~CLEAN Code Example, 3-22 Numeric Control, 3-2 NUMERIC EXECUTION UNIT, 3-7 Numeric Instruction Emulation, 3-2 Numeric Instruction Opcodes, 3-2 NUMERIC PROCESSOR EXTENSION APPLICATIONS, 3-1 Numerically Based Applications, 3-1 o Odd Address Boundary, 1-117 Odd Memory Address, 1-23 Offset, Memory Variable, 1-9 One Byte Interrupt - Type 3, 1-121 Opcode Fetch, 1-109 Opcode Extension OPERAND ADDRESSING MODES, 1-18 Operand Addressing Immediate Mode, 1-18 Register Mode, 1-18 Operand Identifiers Definitions, 4-5 Operand Names, 1-14 Operand Type Definitions, 4-14 Operands 16-bit Memory, 1-23 Additional, 1-23 Address, 1-71 Data, 1-71 Destination, 1-15 Extension, 2-9 110 Port, 1-17 Immediate, 1-21 Memory. 1-13, 1-18 Register, 1-13 Source, 1-15 Word, 1-21, 1-71 OPERATING MODES, 1-43,2-12,3-8,4-20 Maximum, 1-1 Minimum, 1-1 OPERATING SYSTEM PRIMITIVES SUMMARY, 5-1 Operation Command Word 1 (OCWl), 5-5 Operation Command Word 2 (OCW2), 5-5 Operation Command Word 3 (OCW3), 5-5 Operations Arithmetic, 1-4, 1-5 Block Input, 2-5 Block Output, 2-5 Byte, 1-41,2-5 Compare, 1-12 Logic, 1-4, 1-5 Move, 1-12 Scan, 1-12 Stack, 1-5 Word, 1-24,2-5 Oscillator Crystal, 2-24 External, 2-24 Oscillator to CLK and CLK to PCLK Timing, 1-128 Oscillators Feedback Circuit, 1-126 OSP Primitives, 5-1 OSP MEMORY USAGE, 5-11 OSP Primitives, 5-6 OSP Typical Configuration With An 8086, 5-10 Other Maximum Mode Considerations, 1-107 Output Request, 1-91 Outputs Local Bus Controller, 2-25 Queue Status, 2-26 Status, 2-26 Overflow Error Service Routine, 1-121 Overflow Flag (OF), 1-6 Overlapped Instruction Fetch and Execution, 1-6 p Parallel Priority Resolving Technique, 1-135 Parity Flag (PF), 1-6 Parity, Even, 1-6 Partitioning Memory By Segment, 1-65 PCLK Output, 2-24 Index-11 210912-001 INDEX Performance Penalty, I-II Peripheral Compatibility Parameters, 1-89 Peripheral Control Block Relocation Register, 2-19 Peripheral Devices, 2-3 8086 Family, 1-81 Peripheral Interfacing, 4-33 Peripheral Requirements For Full Speed, 1-91 Peripherals Cycle Dependent Parameter Requirements, 1-89 Physical Address, 1-8 PHYSICAL ADDRESS GENERATION, 1-8, 1-10 Physical Address, 20-bit, 1-18 Physical/Logical Bus Combinations, 4-2 Physical Memory Byte/Word Addressing, 2-35 PIC Commands, 5-2 Pin Assignments Maximum Mode, 1-43 Minimum Mode, 1-43 Pipelined Architecture, 1-1 Pointer, 2-8, 32-bit, 1-122 POWER UP RESET, 1-130 Prefetch Queue 4-byte, 2-1 6-byte, 2-1 Prefetched Instructions, 1-1, 1-2,2-1 Preventing Erroneous Write Operations, 1-65 Priority Resolution, 1-65 Priority Structure Variations -Fully Nested Mode, 1-139 Process Control, 3-2 Processor Control Instructions, 1-17, 1-18, 2-11, 4-6 Processor Extension, 2-19 Processor Preemption (RQ*/GT*), 1-64 Two Prioritized Levels, 1-52 Processor Ready Synchronization, 2-3 Processor 80186,2-1 80188, 2-1 Program Condition, 1-148 Program Counter (PC), 1-5 Program Execution Errors, 2-6 Program Status Word, 4-40 Program Transfer Instructions, 1-16,2-9,2-10,4-4 Conditional Transfer, 1-16 Interrupt-related, 1-16 Iteration Control, 1-17 Unconditional Transf, 1-16 Program Transfers, Four Groups, 1-16 Programs 8086,1-7 8088, 1-7 Disk-resident, 1-10 Dynamically Relocatable, 1-10 Inactive, 1-10 Position-independent, 1-10 Programmable 16-bit Timer/counters, 2-3 PROGRAMMABLE DIRECT MEMORY ACCESS UNIT,2-3 Two Channel, 2-1 Programmable Interrupt Controller, 2-1, 2-3 PROGRAMMABLE INTERRUPT CONTROLLER (PIC),5-2 Programmable Ready Bits, 2-3 PROGRAMMABLE TIMERS, 2-3, 5-8 16-bit, 2-1 Programming the 80130 OSP's Onchip Peripherals, 5-1 PROGRAMMING THE DMA UNIT, 2-51 Propagation Delay, 1-118 Protocol HOLD/HLDA,2-26 RQ*/GT*, 2-26 Push All/Pop All (PUSHA, POPA) Instructions, 2-5 Push Immediate (PUSH!) Instruction, 2-5 Q QSO, QSI, 1-98 QUEUE STATUS, 1-52 Queue Status (QSO, QSl), I-52 Queue Status Bit Decoding, 1-99 Queue Status Lines, 2-19 Queue Status Mode, 2-12 Queue Status Mode of Operation, 2-12 Queue Status Outputs, 2-26 Queue 4-byte Instruction, 2-3 6-byte Instruction, 2-1 8086, 1-3 8088 Instruction, 1-3 CPU Instruction, 1-16,2-9 Depth, 1-52 Instruction, 1-23,2-1,2-23 Instruction Object Code, 1-3,2-1 Instruction Stream, 1-3 Internal, 1-52,2-23 Internal Instruction, 1-66, 1-98 Internal Pre-fetch, 2-12 Pre-fetch, 2-23 Prefetch, 2-1 Sizes, 1-3 Status, 1-52 R R/B/P Field Encoding, 4-21 RIM Field Bits, 3-7 RAM Bank, 2-40 RAM Interface, 2-36 RAM Wakeup Cycles, 2-40 RAS* Drivers, 2-40 RAS* Strobes, 2-40 RD*, 3-11, 3-16 RD* Active to Output Device Valid TRLDV, 1-89 RD* AND WR*, 2-29 RD* Status, 2-4 Read Bus Cycle (8-bit Bus), 4-35 Read Command, 1-99 Read Control Signal, 1-64 Read Cycles, 1-82, 1-99 Read Cycle Times, 2-37 Read Cycle Timing, 2-29 Read Pulse Width TRLRH, 1-89 READ/WRITE SIGNALS, 2-27 Index-12 210912·001 INDEX Read-from Memory, 1-143 Reading the Count Value, 5-11 Reading the Interrupt Mask Register (IMR), 5-8 Ready Bits, 2-3 Ready Input Asynchronous, 2-24 Synchronous, 2-24 OREADY CIRCUIT, 3-16 Ready Inputs to the 8284 and Output, 1-108 READY SYNCHRONIZATION, 2-80 Ready Timing, 1-98 READY/WAIT STATE GENERATION, 2-78 Real Time Clock, 2-58 Recommended Crystal Clock Configuration, 1-127 Recommended IAPX 186 Crystal Configuration, 2-80 Recommended Interrupt Configurations, 3-22 Reducing 8087 Delay Effects, 3-19 Refresh, 2-40 Refresh and Control Circuits, 2-37 Refresh Period Programming Option, 2-40 REG (Register) Field Encoding, 1-42 Register Address Coding, 1-147 Register and Immediate Operands, 1-18 Register Indirect Addressing, 1-18, 1-19 Register Operands, 2-7 Register Operands In Arithmetic Instructions, 4-5 Register Operands In Logical Instructions, 4-6 Register Operands In MOV Instructions, 4-5 Register/Memory Field Encoding, 1-43 Registers, 4-3 16-bit, 2-4, 2-7 16-bit Address, 1-144 16-bit Base Address, 1-145 16-bit Base Word Count, 1-145 16-bit Current Address, 1-145 16-bit Current Word, 1-145 16-bit General, 1-4 4-bit Mask, 1-147 4-bit Request, 1-147 6-bit Mode, 1-146 8-bit Command, 1-146 8237A Current Address, 1-144 8237A Current Word Count, 1-144 8237A Internal Memory, 1-145 AL, 1-13, 1-67, 1-85,2-7 AX, 1-13, 1-85,2-5,2-7 Base, 1-18 BP, 1-18, 1-20,2-6 BX, 1-18, 1-91,2-5 CL, 1-14, 1-15,2-5,2-9 Clear Mask, 1-148 Code Segment, 1-118 Command, 1-148 Communications, 1-3,2-1 Count (CX), 1-16 CS, 1-5, 1-120, 1-123, 1-124,2-9 Current Address, 1-45 Current Code Segment, 1-124 CX, 1-17, 1-68,2-5,2-9 Data, 1-7 01, 1-15, 2-5 DS,I-5 DX, 1-21, 1-85, 1-91,2-5,2-6 Eight General, 1-5 ES, 1-5 Flag, 1-3, 1-121, 1-122, 1-123, 1-124, 1-125,2-1, 2-5, 2-6 General, 1-4, 1-5,2-1 General Purpose, 2-5, 2-6 Index, 1-5, 1-18 Integrated Peripheral, 2-5 Internal, 2-4, 2-5 Internal First/Last Flip-Flop, 1-148 Internal CPU, 1-116 Interrupt Controller, 2-19 IP, 1-120, 1-123, 1-124 Mask, 1-148 P&I,I-4 Pointer, 1-4 Request, 1-148 Segment, 1-4, 1-5, 1-8, 1-122, 1-124,2-1,2-5,2-26, 2-33 SI, 1-15, 1-91,2-5,2-6 Single, 1-41 Sp, 1-122,2-5,2-9 SS, 1-4, 1-122 Status, 1-148 Temporary, 1-145, 1-148 Word Count, 1-144 Relationship of ALE to READ, 1-94 REMOTE MODE, 4-25 Repeat (REP) Prefix, 1-122 Repeated String Operation, 1-122 Representative Instruction Execution Sequence, 1-111 Request Register, 1-147 REQUEST/GRANT LINE, 3-11, 4-38 Request/Grant Sequence Timing, 1-117 Requests HOLD, 1-64 RQ*/GT*, 1-64 RESERVED MEMORY, 1-11 Reserved Memory and 110 Locations, 1-12 Reserved Memory Locations, 1-82 RESET, 1-118,2-41,2-80 Reset Bus Conditioning, 1-118 RESET-CA Initialization Timing, 4-27 Reset Disable For Max Mode 8086/8088 Bus, 1-119 Reset Disable For Max Mode 8086/88 Bus, 1-120 Reset Startup, 1-65 Resident Bus, 1-134 Resident Bus (RESB) Mode, 1-134 Resident Bus Arbitration Logic, 1-64 Robotics, 3-2 ROM and EPROM, 1-82 ROM and EPROM Interface, 2-35 Rotate In Automatic EOI Mode, 1-139 Rotate On Automatic EOI Mode, 1-140 Rotate On Non-Specific EOI Command, 1-139 Rotate On Specific EOI Command, 1-140 Rotates, 1-14,2-9 Index-13 210912·001 INDEX Rotation, 3-2 RQ/GTO, 1,3-11 RQ/GTI Pins, 3-3 RQ*/GT* LATENCY, 1-115 RQ*/GT* OPERATION, 1-114 RQ*/GT* Timing, 1-98 RQ*/GT* TO HOLD/HLDA CONVERSION, 1-113 RQ*/GT* USAGE, 1-113 S S Field, 1-41 Sample Compatibility Analysis Configuration, 1-84 Scaling, 3-2 Schottky TTL Flip-flops, 2-26 Segment Base Value, 1-8 Segment Base Values, 1-8 Segment Locations In Physical Memory, 1-8 Segment Offset Values, 1-8 Segment Override Prefix, 1-9, 1-20 Segment Register Loading Instructions, 1-10 SEGMENT REGISTERS, 1-5, 1-71,2-1 CS,2-5 DS, 2-5, 2-6 ES, 2-5, 2-6 SS,2-5 Segment Values, 2-1 SEGMENTATION,I-7 Segments Adjacent, 1-8 Currently Addressable, 1-8 CS, 1-5 Current Code, 1-5 Current Data, 1-5, 1-15 Current Extra, 1-5, 1-15 Current Stack, 1-5 Disjoint, 1-8 Fully Overlapped, 1-8 Locations, 1-8 Logical, 1-8 Overlapping, 1-65 Partially Overlapped, 1-8 Serial Priority Resolving., 1-136 Set Priority Command, 1-139 Seven Contiguous 128 Byte Blocks, 2-3 Shared Bus Architecture, 1-1 Shared System Priority, 1-64 Shifts and Rotates Single-bit, 1-41 Variable-bit, 1-41 Shifts, 1-14,2-5 Arithmetic, 1-14 Logical,I-14 Shifts/Rotates By An Immediate Value, 2-5 Sign Flag (SF), 1-6 Signal Float/HLDA Timing, 2-47 Signed Binary Numbers (integers), 1-14,2-8 Single Step -Type 1,1-121 Single T-State, 2-42 Single Transfer Mode, 1-144 Single-Bit Field Encoding, 1-42 Single-processor Systems, 1-1 Single-step Flags, 1-124 Single-step Mode, 1-7 Sixteen-Bit I/O, 1-88 Small8088-Based System, 1-2 SMALL~LOCK-NP~ESTORE, SMALL~LOCK-NPX-SAVE, 3-21 3-21 software Based 8087 Emulator, 3-1 Software Command Codes, 1~147 Software Commands, 1-148 Software Emulator, 3-1 Software Emulator (E8087), 3-2 Software Overview, 1-12,2-4,3-7,4-3 Software Single Stepping, 1-121 Source & Destination Synchronized DMA, 2-56 Source Pointers, 2-4 Source String, 1-15 Source Synchronized DMA Transfers, 2-54 Source Synchronized Transfer Cycle, 4-31 Spare Bus Cycles, 1-1 Specially Fully Nested Mode, 1-142,2-69 Special One-byte Prefix, 2-9 Specific EO! Command, 1-139 Specific Rotation -Specific Priority, 1-140 Specified Cycle Termination, 1-64 SRDY, 3-11, 3-16 Stack Frames Build,2-6 Tear Down, 2-6 STACK IMPLEMENTATION, 1-10 Stack Layout, 2-6 Stack Operation, 1-12 Stack Pointer Register (SP), 1-10 Stack Pointer Registers, 1-122 Stack Reference Point Offset, 1-20 Stack Segment's Base Address, 1-10 Stack Current, 1-10 Directly Addressable, 1-10 Starting Locations, 1-5 Standard 5 MHz 8086, 2-1 Static RAM, 1-79 Status Bit Decoding, 1-71 Status Bit Output SO*, 1-130 SI*, 1-130 S2*, 1-130 Status Bits, S3-S5, 2-26 Status Bus, 1-65 Status Flags, 1-5 Status Information, 1-72,2-26 Status Line Activation and Termination, 1-132 Status Line Decode Chart, 1-131 Status Line Decoders, 1-52 Status Line Encodings Interpretations, 2-31 STATUS LINES, 2-31, 4-34 Status Read, 1-148 Status Register, 1-148 Status Signals SO*-S2*, 2-29, 3-3 Index-14 210912-001 INDEX SO-S2,4-34 S3-S6,4-34 S3,2-33 S4,2-33 S5,2-33 S6, 2-29, 2-32, 3-3 S7,2-32 String Addressing, 1-20 String Instruction Register and Flag Use, 1-15 String Instructions, 1-15,2-10 Compare, 1-15 Destination Operand, 1-9 Move, 1-15 Scan, 1-15 String Operand Addressing, 1-21 String Operation Interrupted, 1-64 Repeated, 1-64 String Destination, 1-15 Source, 1-15 Strings of Bytes, 2-9 Strings of Words, 2-9 Submit File Example, 3-2 SUPPORT COMPONENTS, 1-125,2-51 Switch, $modI86, 2-5 Synchronization, 1-85, 3-13 SYNCHRONIZER REQUIREMENTS, 2-46 Synchronizing CSYNC With EPI, 1-128 Synchronizing Execution With WAIT, 3-15 Synchronizing Multiple 8284As, 1-129 Synchronizing the 8086 Or 8088, 1-17 Synchronous Interface, 2-41 Synthesizing Delayed Write From the 80186, 2-32 System Architecture, Minimum Mode, 1-44, 1-46 System Bus Arbitration, 1-113 System Bus Control Signals, 2-12 System Bus Interface, 1-52 SYSTEM BUS MODE, 1-133 System Bus Resources, 2-34 System Cost Reduction, 2-4 System Design Alternatives, 1-92 System Reset Processing, 1-11 System Status Outputs, 2-12 System Timing, 80186, 2-3 Systems 8086-based, 1-11 Multi-tasking, 1-10 Multiprogramming, 1-10 T Tl, 1-65 Target Instruction Offset, 1-8 Thrget Location, 1-8 Thrget Relative Displacement, 2-10 Task Pointer, 4-3 Temporary Register, 1-148 TEST* AND LOCK*, 2-33 Test For the Existence of An 8087, 3-6 THE 8284A RESET FUNCTION, 1-129 The Effective Address, 1-18 Third Generation Microprocessors, I-I Three Processor System Bus Signal Connections, 3-16 Time-multiplexed, 1-1 TIMER APPLICATIONS, 2-58 Timer Block Diagram, 2-57 Timer Control Block Format, 2-57 TIMER INPUT PIN OPERATION, 2-57 TIMER OUTPUT PIN OPERATION, 2-58 Timer Unit, 2-56 Timers, 5-10 Timers and Reset, 2-82 TIMING, 5-13 Top of Stack (TOS), 1-10 Transceiver Enable Delay, 1-106 Transfer Count, 2-4 TRANSFER TYPES, 1-145 Transfers, SHORT, 1-16 Trap Flag (TF), 1-7, 1-121 Tri-state Pin, 2-19 Type of Cycle Decoding, 4-37 Typical 8086/88 Machine Instruction Format, 1-41 Typical 8089 Machine Instruction Format, 4-21 Typical 8089 Remote Configuration, 4-26 TypicalIAPX 18612X Family System Diagram, 3-5 Typical IAPX 86/2X Family System Diagram, 3-4 Typical Medium Complexity CPU Circuit, 1-136 Typical Static RAM Write Timing Parameters, 1-84 U UMCS Programming Values, 2-76 UMCS Register, 2-77 Unconditional Transfers, 1-16,2-10 Unformatted Memory Dumps, 1-25 Unsigned Binary Numbers, 1-14,2-8 Unsigned Packed Decimal Numbers, 2-8 Unsigned Unpacked Decimal Numbers, 1-14,2-8 Unused Opcode, 2-6 Upper Address Lines, 1-66 Upper Bank Write Strobe, 1-81 Upper Byte, 2-34 Upper Memory CS*, 2-76 Upper Memory Ending Location, 2-3 User Interrupt Routines, 1-120 User Programmable Areas, 2-3 User-Defined Hardware Interrupts, 1-122 User-Defined Software Interrupts, 1-122 Using AENI */AEN2* to Generate Ready, 1-110 USING THE 8087 WITH CUSTOM COPROCESSORS, 3-8 Using RDY 1/RDY2 to Generate Ready, 1-110 V V Field, 1-41 Valid & Invalid Latch Input, 2-33 Valid Address Information, 2-23 Valid SRDY Transitions On the 80186, 2-46 Valid/Invalid ARDY Transitions, 2-45 Values Compare, 2-9 Move, 2-9 Offset, 1-3 Scan For, 2-9 Index-15 210912-001 INDEX Segment, 1-3 Variables, Memory Based, 1-13 Vector CS Address Pointer, 1-124 Vector IP Address Pointer, 1-124 Voltage Characteristics A.C.,2-24 D.C., 2-23 W WAIT, 3-14 WAIT Instruction, 3-11 Wait State Generator, 2-44 Wait State Insertion, 1-107 Wait State Timing, 4-38 WB Field Encoding, 4-21 Wait State Required Indication, 1-107 Wait States (TW), 1-66 Word Memory Location, 2-6 Word Memory Read, 1-109 Word Memory, 16-bit, 1-78 Word Operations, 2-5 Word Transfer, 1-112 Worst Case Local Bus Request Wait Times In Clocks, 3-28WR*, 3-26WR* Status, 2-4 Write Bus Cycle (l6-bit Bus), 4-36 Write Commands Advanced, 1-106 Normal, 1-106 Write Cycle, 1-83, 1-99 Write Cycle Address Setup Times, 2-37 Write Cycle Address Times, 2-37 Write Cycle Timing, 2-31 Write Strobe Technique, 1-81 Write timing requirements, 1-81 Write-to-memory, 1-144 Z Z field, 1-41 Zero flag (ZF), 1-6 Index-16 210912-001

  • Source Exif Data:
    File Type                       : PDF
    File Type Extension             : pdf
    MIME Type                       : application/pdf
    PDF Version                     : 1.3
    Linearized                      : No
    XMP Toolkit                     : Adobe XMP Core 4.2.1-c041 52.342996, 2008/05/07-21:37:19
    Create Date                     : 2015:09:30 19:21:47-08:00
    Modify Date                     : 2015:09:30 19:03:49-07:00
    Metadata Date                   : 2015:09:30 19:03:49-07:00
    Producer                        : Adobe Acrobat 9.0 Paper Capture Plug-in
    Format                          : application/pdf
    Document ID                     : uuid:fcb48f4b-311a-b64e-bddd-b90412bf0da3
    Instance ID                     : uuid:19d42638-973a-df4c-bbd7-9eef02d717cd
    Page Layout                     : SinglePage
    Page Mode                       : UseNone
    Page Count                      : 353
    
    EXIF Metadata provided by EXIF.tools

    Navigation menu