Electronic – Accessing odd address memory locations in 8086

clockmicroprocessorx86

I am a beginner in microprocessors. Apologies if my question is too naive.

The memory section of the 8086 processor is divided into two segments: even and odd to allow the CPU to fetch 16 bits in one clock cycle. When a 16 bit word is to be read from memory at an odd memory address say 125, the CPU first puts 124 on the address bus and gets the contents at location 125 in the higher order byte. In the next clock cycle the CPU puts 126 on the address bus and gets the contents at location 126 in the low order byte. These two bytes are then swapped by the processor because these values entered the CPU in the wrong half of the data bus.

The above operation takes 2 clock cycles. Why can't the CPU simply put the address 125 on the address bus and compute the next address and put the contents of that address ( 126 in this case ) onto the low order byte of the data bus? The low order and the high order byte can be swapped later allowing the processor to fetch a 16 bit value from memory in only 1 clock cycle.

Best Answer

Word-wide memory is addressed with a single address bus. When a word is read from an odd address, one byte is in one word, the other byte in another. You cannot address both bytes at the same time. Even if the memory had a separate address bus for each byte, the processor does not have the pins to address both address busses at the same time.