Why is this microprocessor referred to as "8-Bit" when it has an address bus of 16-bits?
Solution 1:
"Bitness" is determined by available mode of operation. While there is some (awkward) dealing with 16-bit values, it sure has a distinctive 8-bit flavor.
Operands/registers are 8-bit only, ALU is 8-bit. Even the stack pointer register S is only 8-bit (internally prefixed with 0x01__ in the high byte to move the stack from the "zero page"... and yes, the maximum stack size is 256 bytes). Only the program counter (PC
) is 16 bit.
To make use of the 16-bit addressable RAM - other than for loading instructions - with computed addresses (as opposed to fixed ones, which can be included in the machine code), one would have to use a zero page address... like in LDA ($24),Y
, which would take the 16-bit base "pointer" stored at 0x24 and 0x25, add the 8-bit Y
(think of that as an index or byte offset), and then move the 8-bit content from this address into A
. So two adjacent bytes on the "zero page" (0x00-0xff) unused by the "operating system" and available to your program are a hot commodity on a 6502 ;)
Similar goes with the Z80 processor family. Two 8-bit registers can be used together (e.g. HL
, aptly named high and low) to form a 16-bit address... but the processor is still considered to be 8-bit. Intel 8068 had a 20-bit address bus, but was a 16-bit processor. So address bus "bitness" doesn't determine processor bitness at all. Register size/load instructions are much more important :)