Thread: How Could the Intel 8088 Have a 20 bit Adress Bus?

  1. #1
    Set Apart -- jrahhali's Avatar
    Join Date
    Nov 2002
    Posts
    256

    How Could the Intel 8088 Have a 20 bit Adress 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!

  2. #2
    (?<!re)tired Mario F.'s Avatar
    Join Date
    May 2006
    Location
    Ireland
    Posts
    8,446
    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.

  3. #3
    Registered User
    Join Date
    Dec 2006
    Location
    Canada
    Posts
    3,229
    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.

  4. #4
    Set Apart -- jrahhali's Avatar
    Join Date
    Nov 2002
    Posts
    256
    thanks guys, that answers it.
    Clear the mines from our Shazbot!
    Get the enemy Shazbot!

  5. #5
    Programming Wraith GReaper's Avatar
    Join Date
    Apr 2009
    Location
    Greece
    Posts
    2,738
    Quote Originally Posted by jrahhali View Post
    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?
    Quote Originally Posted by cyberfish View Post
    This (having wider address bus than CPU bus) is very common in 8-bit CPUs, because 256 bytes of memory is often not enough.
    ??? 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...

  6. #6
    (?<!re)tired Mario F.'s Avatar
    Join Date
    May 2006
    Location
    Ireland
    Posts
    8,446
    Quote Originally Posted by Sipher View Post
    ??? Nah, I'm just tripping...
    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.

  7. #7
    Registered User VirtualAce's Avatar
    Join Date
    Aug 2001
    Posts
    9,607
    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.

  8. #8
    (?<!re)tired Mario F.'s Avatar
    Join Date
    May 2006
    Location
    Ireland
    Posts
    8,446
    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.

  9. #9
    Banned
    Join Date
    Aug 2010
    Location
    Ontario Canada
    Posts
    9,547
    Quote Originally Posted by VirtualAce View Post
    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 20 bit address buss was actually two overlapping 16 bit registers, offset by 4 bits...

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. NUMA Virtual Adress Space / Physical Adress Space
    By NUMA Orly in forum Windows Programming
    Replies: 0
    Last Post: 03-14-2011, 03:19 AM
  2. MAC adress
    By crvenkapa in forum Tech Board
    Replies: 1
    Last Post: 02-10-2008, 11:24 AM
  3. Tell adress of object from adress of member
    By TriKri in forum C++ Programming
    Replies: 5
    Last Post: 10-07-2007, 05:04 AM
  4. Intel 64 vs AMD 64
    By siavoshkc in forum Tech Board
    Replies: 6
    Last Post: 07-28-2007, 01:00 PM
  5. Intel on a Mac?
    By Syneris in forum A Brief History of Cprogramming.com
    Replies: 19
    Last Post: 02-19-2006, 07:45 PM