To the best of my understanding, the Intel 8086/88 had 16 bit registers. How, then, could it have had a 20 bit address bus?
To the best of my understanding, the Intel 8086/88 had 16 bit registers. How, then, could it have had a 20 bit address bus?
Clear the mines from our Shazbot!
Get the enemy Shazbot!
See: 8086 Memory segmentation.
Originally Posted by brewbuck:
Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.
This (having wider address bus than CPU bus) is very common in 8-bit CPUs, because 256 bytes of memory is often not enough.
They usually have 256 bytes regular/fast RAM, and up to 65K "extended" RAM that can only be accessed indirectly through a pair of 8-bit registers (high and low). Typically slower, too.
Last edited by cyberfish; 08-14-2011 at 09:47 PM.
thanks guys, that answers it.
Clear the mines from our Shazbot!
Get the enemy Shazbot!
??? Nah, I'm just tripping...
About the OP's question, the Intel 8086/8088 16-bit CPU could access up to 1MB of memory. "How" would someone ask, "this processor has 16-bit registers!".
This processor, until the 80286 when protected mode was introduced, used two registers for the memory address: A segment and an offset.
The real address could be calculated by: segment*16+offset : Multiplying by 16 extends "segment" 4 bits to the left, resulting in a 20-bit address. That is the reason for the "extra" addressing lines.
Devoted my life to programming...
What you read is correct. The 8088 was an hybrid 8086 processor with 16 bit registers but an 8 bit data bus. It was neither a 16-bit cpu or an 8-bit cpu. It was a bit of both. A processor isn't defined exclusively by its registers size.
Meanwhile, because the 8086 was the first true 16 bit processor from Intel, it's very natural it would inherit some of the principles of earlier 8 bit architecture. Namely the requirements to address a larger memory space than that possible through a single register. And especially because 65k was even at the time a rather small memory space. So cyberfish comment nicely complements the information already given by giving it an historic context. It was indeed very common for 8 bit (but also 16 bit) processors to address larger memory spaces than those apparently made possible with those register sizes. They simply had to.
Originally Posted by brewbuck:
Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.
AFAIK it had an internal 32-bit bus and external 16-bit bus. This was my first processor and while it was only about 80% IBM compatible it was a fairly decent processor for its time.
The internal data bus was 16 bit on both processors. It was the external data bus that was different. 16-bit on the 8086 and 8-bit on the 8088.
The 8086 was my first PC processor too. It was the processor for the Amstrad PC 1512, my first personal computer. The 8088 I only know from much more recently, from when I was studying the Z80 a couple years ago and one interesting book at the time (available here, but I can't remember exactly which title) made extensive comparisons to the 8088.
Originally Posted by brewbuck:
Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.