What Is An 8-bit Processor?

69 views
Skip to first unread message

Julian Skidmore

unread,
Feb 13, 2015, 2:46:12 AM2/13/15
to FIGnition
Hi folks,

I've recently come across something astounding. When you Google "What is an 8-bit microprocessor" most of the top hits are wrong, deeply misguided. I'm shell-shocked!

OK, so let's start with the correct definition:

An 8-bit microprocessor is a single-chip CPU which performs arithmetic on, at most, 8-bit quantities in a single instruction. An 8-bit processor may have 16-bit registers (the 1802 and SC/MP both had 16-bit registers, but were 8-bit MPUs); it may also have a 16-bit or more address bus (the 8080, 6502, Z80 and 6809 were popular 8-bit CPUs with a 16-bit address bus); it may also have a 16-bit data bus or even a 4-bit data bus, but this is not the defining characteristic of an 8-bit CPU. The defining characteristic is the number of bits that an arithmetic or logic instruction can operate on, not the address or data bus width, not even the size of registers!

That's the correct definition.

Yet I'm seeing lots of links on the internet which define an 8-bit CPU in terms of the register size, or the data bus size or the address bus size - I never would have believed such nonsense was so prevalent!

-cheers from Julz


--
                             
                  The DIY 8-bit computer from nichemachines™

NmLogoMini.jpg
FIG - black on whiteMini.jpg

Mark Wills

unread,
Feb 13, 2015, 5:57:50 AM2/13/15
to fign...@googlegroups.com

Oh no!  Now you've gone and stirred up a hornet's nest!

I've had the same conversations/arguments many times over the years. For example I consider the 6502 to be an 8 bit CPU. However there's a good argument for saying that the Z80 is a 16 bit CPU since you can do things ADD BC, HL (full 16 bit add).

The CPU that I use in my hobby, the Texas Instruments TMS9900 is described by TI as a 16-bit CPU yet it's MPY and DIV instructions operate on 32-bit operands.

How would you classify something like the 68K family which is equally at home operating with bytes, words, and long-words? ;-)

Cheers

Mark

--
You received this message because you are subscribed to the Google Groups "FIGnition" group.
To unsubscribe from this group and stop receiving emails from it, send an email to fignition+...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Julian Skidmore

unread,
Feb 13, 2015, 6:33:35 AM2/13/15
to FIGnition
Hi Mark,

CPUs designs are rarely pure. Strictly speaking, the Z80 is part of a class of 8/16 bit CPUs, with limited support for 16-bit operations, namely:

load/store 16-bit (absolute locations and constants); push/pop 16-bit; exchange 16-bit; add, adc, sbc 16-bit. I think that basically sums it up. Because it doesn't support 16-bit logical operations, it's predominantly an 8-bit CPU.

The 6809 is fairly similar in that respect, it has 16-bit support for add, adc, sub and sbc as well as load/store and push/pop (because it can push a whole set of registers in one go). It also has extensive 16-bit index registers, which themselves can do 16-bit computation (e.g. LEAX Const16,Y means X=Y+Const16). Because 16-bit operations aren't fully supported it's still an 8-bit CPU, but it's more 16-bit than a Z80.

Similar arguments apply to the AVR. It can copy register pairs in one instruction and add/subtract small 16-bit constants. It also has an 8x8=>16-bit multiply. But 16-bits is only partially supported, so it's an 8-bit CPU.

The TMS9900 is a 16-bit CPU, with limited 32-bit support. 32-bit operations aren't fully supported (no add/sub/logical or test operations).

Even the venerable 6800 had some 16-bit support in the form of its 16-bit Index register and stack pointer. But it's very, very limited. It's an 8-bit CPU.

The 68000 is definitely a 32-bit CPU, because all the arithmetic, logic and test operations work on 32-bit operations... with the exception of multiply and divide which were partially 32-bit (16-bit inputs=>32-bit result or 32-bit/16-bit inputs => 16-bit results). This was improved upon in later versions of the processor.

The 8088, of course, is a 16-bit CPU despite the 8-bit data bus. 16-bit operations are fully supported (though again, multiply and divide were hybrid 16-bit/32-bit operations). In a similar vein, the 80386sx was a proper 32-bit CPU despite only having a 16-bit data bus. The 68008 in my cuddly Sinclair QL is a 32-bit CPU, despite only having an 8-bit data bus crippled further by 50% video contention (aaargghhh, what were they thinking ;-) ).

In one sense, then, the bitness of a CPU is defined by the convenience of programming it. 8-bit CPUs handle 16-bit data inconveniently; so if you're programming in assembler, you get a strong feeling for its bitness.

This also means that the bitness of a CPU is independent of its internal implementation of its architecture. So, for example, the Z80 is 8 (and slightly 16) bits despite only internally implementing a 4-bit ALU. The Data General Nova was 16-bit despite also having a single 4-bit ALU. The pdp-8/s was 12-bit despite only having a 1-bit ALU (and in turn the Manchester SSEM was 32-bit despite only having a 1-bit ALU and a mere 5-bit address space. That's because all its arithmetic operations, all three of them, operated on 32-bits).

FIGnition is an 8-bit computer, despite having a 16-bit Forth VM, because VMs don't count when it comes to defining the bitness of a computer (software <> microcode). However, FIGnition is a 16-bit system, because users don't have access to a FIGnition's internal 8-bit CPU.

The bitness fightback begins now!

-cheers from Julz
NmLogoMini.jpg
FIG - black on whiteMini.jpg

Julian Skidmore

unread,
Feb 13, 2015, 6:35:09 AM2/13/15
to FIGnition
But basically, it looks like we'd both define the bitness of a processor by how it's able to *process* data. So, the clue is in the question :-)
NmLogoMini.jpg
FIG - black on whiteMini.jpg
Reply all
Reply to author
Forward
0 new messages