COMPUTER ORGANIZATION TOPIC FOR THE WEEK: 8086/8088 Architecture NOTES: History of Intel Microprocessor The 4-bit Microprocessors Intel released the world’s first p in 1971. The 4004 is a 4-bit p with maximum memory of only up to 4,096 4-bit memory locations (2,048 bytes). It only has 45 instructions and was used in very limited applications such as early video games and small p-based controllers. The 8-bit Microprocessors 1. In 1972, Intel released the 8008 which is an 8-bit p capable of addressing 16,384 bytes and has 48 instructions. It can execute an ADD instruction in 20 s. 2. In 1973, Intel released the 8080. The 8080 can address a total of 65,536 bytes and can execute an ADD instruction in 2 s only. 3. In 1977, the 8085 was released. It addresses the same amount of memory as the 8080 but it can execute an ADD instruction in 1.3 s. It also has a built-in clock generator and system controller. The 16-bit Microprocessors In 1978, Intel released the 8086 p and a year later the 8088. Both are 16-bit p’s and can execute instructions in as little as 400 ns. Both can address a total of 1,048,576 bytes or 524,288 16-bit words. These 16-bit microprocessors have multiplication and division instructions. These functions were not available in most 8-bit p’s. The main difference between the 8086 and the 8088 is the size of their external data bus. The external data bus of the 8088 is only 8-bits wide while that of the 8086 is 16-bits wide (take note the internal data bus of the 8088 is 16-bits wide). The reason for this is that many designers still wanted to use the cheaper 8-bit support and peripheral chips in their 16bit systems. The 8088 was the p used by IBM in their Personal Computer (PC), the PC XT, and the Portable Computer. CODE: CSP107 Page 1 of 11 COMPUTER ORGANIZATION Basic 8086/8088 Architecture EU BIU NOTES: Figure 1. A Sample Diagram of 8086/8088 Architecture Bus Interface Unit (BIU). This is responsible for fetching an instruction, the operand of an instruction or data from the MM. The bus interface unit is the part of the CPU that interfaces with the rest of the PC. Its name comes from the fact that it deals with moving information over the processor data bus, the primary conduit for the transfer of information to and from the CPU. It has bus controller that is responsible for responding to all signals that go to the processor, and generating all signals that go from the processor to other parts of the system. Specifically, it has the following functions: ▪ instruction fetch ▪ instruction queuing ▪ operand fetch and storage ▪ address relocation ▪ bus control The BIU is also responsible for generating bus control signals such as those for memory read or write and I/O read or write. These signals are needed for control of the circuits in the memory and I/O subsystems. Instruction Pointer (IP). This is the program counter. Prefetch Queue. The 8086/8088 prefetches the succeeding instructions while executing the current one. The prefetch queue simply acts as a buffer between the instruction register and the bus controller. This unit helps improve system performance by eliminating some conflicts for the bus (bus contention). Execution Unit (EU). This is responsible for executing the instructions. The execution unit is responsible for decoding and executing all instructions. It consists of an ALU, status and control flags, eight generalpurpose registers, temporary registers, and queue control logic. CODE: CSP107 Page 2 of 11 The EU extracts instructions from the top of the queue in the BIU, decodes them, generates operand addresses if necessary, passes them to the BIU and requests it to perform the read or write bus cycles to memory or I/O, and performs the operation specified by the instruction on the operands. COMPUTER ORGANIZATION NOTES: During execution of the instruction, EU tests the status and control flags and updates them based on the results of executing the instruction. If the queue is empty, the EU waits for the next instruction byte to be fetched and shifted to the top of the queue. When the EU executes a branch or jump instruction, it transfers control to a location corresponding to another set of sequential instructions. Whenever this happens, the BIU automatically resets the queue and then begins to fetch instructions from this new location to refill the queue. 8086/8088 Bus Structure Address Bus A0 to A19 Data Bus D0 to D15 8086 System Control Bus To Memory and I/O RD, WR, M/IO A0 to A19 Address Bus To Memory and I/O D0 to D7 8088 System Data Bus RD, WR, IO/M Control Bus Figure 2. The Bus Structure of 8086/8088 Architecture The M/IO’ (or IO/M’) signal is for selecting the memory or I/O of the system. If it is logic 0, then memory is selected; if it is logic 1, I/O is selected. Logical Memory Logical memory is the memory viewed by the programmer. FFFFFH FFFFEH FFFFDH 1M Bytes 00002H 00001H 00000H CODE: CSP107 Page 3 of 11 Figure 3. Logical Memory Map COMPUTER ORGANIZATION NOTES: It starts at memory location 00000H and extends to location FFFFFH. The logical memory is 8 bits wide. A 16-bit word of memory begins at any byte address and extends for two consecutive bytes. For example, the word at location 00122H is stored at byte 00122H and 00123H with the least significant byte stored in location 00122H. Physical Memory The physical memory is the actual organization of the memory that the hardware designers see. The physical memory map of the 8088 is identical to its logical memory map. Odd Bank Even Bank FFFFFH FFFFEH FFFFCH FFFFAH FFFFDH FFFFBH 512 K Bytes 512 K Bytes 00005H 00004H 00002H 00003H 00001H 00000H 16 bits Figure 4. The Physical Memory Map The physical memory of the 8086 contains two banks of memory. The advantage of this organization is that the 8086 can read or write a 16-bit word in one operation (provided the addresses of the data are even). The 8088 requires two reads or writes to transfer 16 bits of data. Dedicated and General Use of Memory Addresses 00000H to 00013H (20 memory locations) are dedicated while addresses 00014H to 0007FH (108 memory locations) are reserved. • These 128 bytes or memory locations are used for storage or pointers to interrupt service routines. Addresses FFFF0H to FFFFBH (12 memory locations) are dedicated for functions such as storage of the hardware reset jump instruction. Addresses FFFFCH to FFFFFH (4 memory locations) are reserved for use with future products. CODE: CSP107 Page 4 of 11 COMPUTER ORGANIZATION Register Structure of the 8086/8088 All forms of programming depend upon a clear understanding of the internal register structure of the p. NOTES: 8 Bits 8 Bits AH BH AL BL AX BX Accumulator Base CH DH CL DL CX DX Count Data SP Stack Pointer BP Base Pointer SI Source Index DI IP Destination Index Instruction Pointer General Purpose Register CS Code Segment DS Data Segment SS Stack Segment Extra Segment ES Pointer and Index Registers Segment Registers Flags 16 Bits Figure 5. Hierarchy of the Registers in 8086/8008 General Purpose Registers General Purpose Registers. These are used in any manner that the programmer wishes. Each is addressable as a 16-bit register (AX, BX, CX, DX) or as two 8-bit registers (AH, AL, BH, BL, CH, CL, DH, and DL). CODE: CSP107 Page 5 of 11 1. AX (Accumulator). This is often used to hold temporary result after an arithmetic and logic operation. 2. BX (Base). This is often used to hold the base address of data located in the memory. 3. CX (Count). This holds the count for certain instructions such as shift count (CL) for shifts and rotates, the number of bytes (CX) operated upon by the repeated string instructions, and a counter (CX) with the LOOP instruction. 4. DX (Data). This holds the most significant part of the product after a 16-bit multiplication and the most significant part of the dividend before a division. COMPUTER ORGANIZATION NOTES: Pointer and Index Registers Pointer and Index Registers. Although the pointer and index registers are also general purpose in nature, they are more often used to index or point to the memory location holding the operand data for many instructions. 1. SP (Stack Pointer). This is used to address data in a LIFO (last-in first-out) stack memory. This occurs most often when the PUSH and POP instructions are executed. 2. BP (Base Pointer). This is often used to address an array of data in memory. 3. SI (Source Index). This is used to address source data indirectly for use with string instructions. 4. DI (Destination Index). This is normally used to address destination data indirectly for use with the string instructions. Status Register or Processor Status Word Status Register or Processor Status Word. This contains 16 bits, but 7 of them are not used. Each bit in the PSW is a flag. These flags are divided into the conditional flags (they reflect the result of the previous operation involving the ALU) and the control flags (they control the execution of special functions). The conditional flags are: CODE: CSP107 Page 6 of 11 1. Sign Flag (SF) - b7 This is equal to the MSB of the result of the previous operation. 0 if positive, 1 if negative. 2. Zero Flag (ZF) - b6 This is set to 1 if the result of the previous operation is zero and 0 if the result is nonzero. 3. Parity Flag (PF) - b2 This is set to 1 if the low-order 8 bits of the result of the previous operation contain an even number of 1s. Otherwise, it is reset to 0. COMPUTER ORGANIZATION Conditional Flags (cont…) 4. NOTES: Carry Flag (CF) - b0 An addition causes this flag to be set to 1 if there is a carry out of the MSB, and a subtraction causes it to be set to 1 if a borrow is needed. 5. Overflow Flag (OF) - b11 This is set to 1 if an overflow occurs, i.e., a result is out of range. More specifically, for addition this flag is set to 1 when there is a carry into the MSB and no carry out of the MSB or vice-versa. For subtraction, it is set to 1, when the MSB needs to borrow and there is no borrow from the MSB, or vice-versa. 6. Auxiliary Carry Flag (AF) - b4 This flag is used exclusively for BCD arithmetic. It is set to 1 if there is a carry out of bit 3 (b3) during an addition or borrow by bit 3 during a subtraction. Example 1 1. + 0010 0011 0100 0101 0011 0010 0001 1001 0101 0101 0101 1110 SF = 0 ZF = 0 PF = 0 CF = 0 AF = 0 OF = 0 In this example, the sign flag (SF) is 0 since the MSB is 0, the zero flag (ZF) is 0 since the result is nonzero, the parity flag (PF) is 0 since the low-order 8 bits or the first 8 bits from the least significant bit (LSB) has odd number of ones, the carry flag (CF) is 0 since there is no carry out of the most significant bit (MSB), the auxiliary flag (AF) is 0 since there is no carry out of bit 3 and overflow flag (OF) is 0 since there is no carry into the MSB and no carry out of the MSB. 2. + 0101 0100 0011 1001 0100 0101 0110 1010 1001 1001 1010 0011 SF = 1 ZF = 0 PF = 1 CF = 0 AF = 1 OF = 1 In this example, the sign flag (SF) is 1 since the MSB is 1, the zero flag (ZF) is 0 since the result is nonzero, the parity flag (PF) is 1 since the low-order 8 bits or the first 8 bits from the least significant bit (LSB) has even number of ones, the carry flag (CF) is 0 since there is no carry out of the most significant bit (MSB), the auxiliary flag (AF) is 1 since there is a carry out of bit 3 (b3) and overflow flag (OF) is 1 since there is a carry into the MSB and no carry out of the MSB. CODE: CSP107 Page 7 of 11 COMPUTER ORGANIZATION Example 2 1. 0101 0100 0011 1001 + NOTES: SF = 1 0100 0101 0110 1010 1001 1001 1010 0011 ZF = 0 PF = 1 CF = 0 AF = 1 OF = 1 In this example, the sign flag (SF) is 1 since the MSB is 1, the zero flag (ZF) is 0 since the result is nonzero, the parity flag (PF) is 1 since the low-order 8 bits or the first 8 bits from the least significant bit (LSB) has even number of ones, the carry flag (CF) is 0 since there is no borrow by the most significant bit (MSB), the auxiliary flag (AF) is 1 since there is a borrow by bit 3 (b3) and overflow flag (OF) is 1 since there is a borrow by the MSB and no borrow from the MSB. 2. + SF = 0 0001 0010 0011 0100 0100 1010 1110 0000 0101 0101 0001 0100 ZF = 0 PF = 0 CF = 0 AF = 0 OF = 0 In this example, the sign flag (SF) is 1 since the MSB is 1, the zero flag (ZF) is 0 since the result is nonzero, the parity flag (PF) is 0 since the low-order 8 bits or the first 8 bits from the least significant bit (LSB) has odd number of ones, the carry flag (CF) is 1 since there is a borrow by the most significant bit (MSB), the auxiliary flag (AF) is 0 since there is no borrow by bit 3 (b3) and overflow flag (OF) is 0 since there is a borrow by the MSB and a borrow from the MSB. Example 3 Perform the following arithmetic operation and determine the state of the conditional flags. 1. 2. 70A3H + E757H FE58H + 01A8H The first thing to do is to convert the given hexadecimal numbers to their equivalent binary values (disregard the letter H; it only refers to the number system used which is hexadecimal). Then, perform the indicated arithmetic operation. After that, determine the values of the conditional flags. CODE: CSP107 Page 8 of 11 COMPUTER ORGANIZATION Exercises Perform the following arithmetic operation and determine the state of the conditional flags. NOTES: 1. 2. 3. AA45H + 4678H 234FH + 34CDH + SF = 0 0110 0010 1010 0000 1001 1101 0110 0000 0000 0000 0000 0000 ZF = 1 PF = 1 CF = 1 AF = 0 OF = 0 The first thing to do is to convert the given hexadecimal numbers to their equivalent binary values (disregard the letter H; it only refers to the number system used which is hexadecimal). Then, perform the indicated arithmetic operation. After that, determine the values of the conditional flags. Control Flags The control flags are: 1. Direction Flag (DF) - b10 This flag is used by string manipulation instructions. If clear, the string is processed from its beginning with the first element having the lowest address. Otherwise, the string is processed from the high address towards the low address. 2. Interrupt Enable Flag (IF) - b9 If set, a certain type of interrupt (a maskable interrupt) can be recognized by the CPU; otherwise, these interrupts are ignored. 3. Trap Flag (TF) - b8 If set, the 8086/8088 will enter into a single-step mode. In this mode, the CPU executes one instruction at a time. CODE: CSP107 Page 9 of 11 COMPUTER ORGANIZATION Segment Registers and Memory Segmentation Even though the 8086/8088 has a 1MB memory address space, not all this memory can be active at any one time. NOTES: 64 KB Segment Base Address The MM can be partitioned into 64K (65,536) byte segments where each segment represents an independently addressable unit of memory consisting of 64K consecutive byte-wide storage locations. Each segment is assigned a base address that identifies its starting point, that is, its lowest-addressed byte storage location. Generating a Memory Address A logical address in the 8086/8088 is identified by a segment (its base address) and an offset. The offset identifies the distance in bytes that the storage location of interest resides from this starting address. . . . Data Offset 64 KB Segment . . . Base Address Both segment base address and offset are 16 bits long. Therefore, the lowest-addressed byte in a segment has an offset of 0000H and the highest-addressed byte has an offset of FFFFH. However, the physical addresses that are used to access memory are 20 bits long. The generation of the physical address involves combining a 16-bit offset value and a 16-bit segment base address value that is shifted-left by 4 bits with its LSB’s being filled with 0s. CODE: CSP107 Page 10 of 11 COMPUTER ORGANIZATION Example 1 Determine the physical address of the following: NOTES: 1. Segment Base Address = 1234H Offset Address = 0022H Computing for the physical address is just getting the sum of the physical segment base address and the offset address. The physical segment base address is the segment base address shifted 4 bits to the left or simply appends 0 before the least significant bit (LSB). If the segment base address is 1234H then the physical segment base address is 12340H. + Physical Segment Base Address Offset Address Physical Address 12340H + 0022H = 12362H Note: Remind the students that hexadecimal addition is different from the usual addition process. The students may convert the given hexadecimal values to binary numbers first and then perform the addition process and then convert it back to the hexadecimal notation. Take note that the offset address is sometimes called the effective address. Logical addresses are often written following the segment base address:offset format. Example: 1234H:0022H Example 2 2. Segment Base Address = 123AH Offset Address = 341BH Computing for the physical address: + Physical Segment Base Address Offset Address Physical Address = 123A0H = 341BH = 157BBH Exercise Determine the physical address of the following addresses: 1. Segment Base Address = 4321H Offset Address = 1266H 2. Segment Base Address = ABCDH Offset Address = 3623H 3. Segment Base Address = AE6DH Offset Address = 43A1H CODE: CSP107 Page 11 of 11