# How does using memory with more bits allow you to reduce the address bus?

If you are using a CPU to address one 2MB memory module, then since 1MB = 220 and 2ยท220 = 221 = 2MB, you need 21 address lines.

If you use a 2MB 16-bit memory module instead, you can remove address line 0. Why is that?

With 16-bit wide memory a read of address xxx0 gives you two bytes: the byte at address xxx0 and the byte at address xxx1. So the addresses ending in "1" are superfluous; you only read address xxx0, never xxx1. Now, since the last address bit will always be zero, we can drop it, ending up with an address 1 bit shorter.

One way to think about this is that the memory module consists of a set of blocks, and that the address identifies a specific block in memory.

So, for memory with an 8 bit block, an address would define 1 byte, and in the 2MB memory case you would need the 21 address lines for 2^21 addressable blocks. An address of '4' points to the 4th byte in memory.

If instead you have a 16 bit block, an address would define 2 bytes, and there would be only 2^20 addressable blocks. An address of 4 points to bytes 7 and 8 in memory.

That said, I would suspect that any decrease in address lines is more then made up for by the doubling of data lines.

• Would it point to bytes 8 and 9? If you were to remove the address line corresponding to the MSB, then wouldn't that cut the number of addresses in half? – 200ok404notfound Mar 23 '11 at 8:19
• You could do two transfers for each address instead of one and not need any additional data lines. But then of course it's slower – AngryEE Mar 23 '11 at 14:08
• @200ok It depends on how you choose to count, starting at index 1 you'd get 1-2,3-4,..,7-8; index 0 would give 6-7. And, yes, removing a bit from address line cuts the number of addresses in half. – CoderTao Mar 23 '11 at 14:16