Question

I recently started off with a course on Computer Architecture from an online resource. I read from one of the books I picked up, that x86 processors have 32 address lines and can read in data 4 bytes at a time on the data bus. Now I understand that 32 address lines place a limit on the addressable memory to 4 billion unique addresses. What I'm having difficulty wrapping my head around is the fact that if the CPU can read in 4 bytes of data at each cycle, from each of those 4 billion unique addresses, why is the RAM on x86 systems limited to 4 GB. Shouldn't it instead be 16 GB (4 times 4 GB)? Could someone clear this up for me? Also when I talk about 32-bit or 64-bit microprocessors, does 32/64 refer to the number of address lines or the number of data lines on the CPU? (For my first question, I should probably mention that I'm assuming a system with no physical address extension.)

Was it helpful?

Solution

x86 microprocessors is a broad category of processors that has evolved over decades from the 8086 to today's 64-bit multi-core CPUs. One of the strengths of the x86 processors is that they are backward compatible, meaning that the latest processors in the family understand the instructions of the 8086 (they would have to run in a special mode called Real Mode). The 8086 had 16-bit registers and a 16-bit bus to memory and I/O, it was byte addressable meaning the address used by the program was that of an individual byte. The 8086 could load either 1 or 2 bytes (known as a word) from memory. Over time newer x86 processors added more bits to the address lines, and added virtual memory, and added larger words. So a 32-bit data item was called a double word and a 64-bit data item became known as a quad word and then SSE came along and we had 128-bit octaword or double quadword, here's a table of data sizes. The newer x86 processors can access data in any of those sizes, in fact the latest have AVX instructions which have 256-bit vector registers. Addressing memory, from the point of view of the program, is still done by giving the address of the byte at the lowest address.

You can read more about 64-bit computing here. Here's a good summary:

Without further qualification, a 64-bit computer architecture generally has integer and addressing registers that are 64 bits wide, allowing direct support for 64-bit data types and addresses. However, a CPU might have external data buses or address buses with different sizes from the registers, even larger (the 32-bit Pentium had a 64-bit data bus, for instance).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top