Sorry das der Thread schon ein paar Tage alt ist, muss aber drauf Antworten:
Vergiss es, du wirst keinen CPU Programieren können.
Cpu's werden in Assembler Geschrieben, wobei Byte für Byte bewegt wird. außerdem kenn ich dich, nie im leben wirklich NIE im leben würdest du dir soviel zeit nehmen und DAS lernen. 
Nun zu den Fragen:
1)
Bestimmen? Du Checkst ob das das ist, wenn das so ist, wird zu einem anderem teil des Codes Gesprungen, und blah.
2)Sprache: Assembler, Es hat nur 11(?) befehle, und es gibt nicht viel was man lernen muss, nur die Hardware wo es rein soll, muss man lernen. 
3) Verbindung? Du kannst damit z.b. einen roboter machen, der Wesentlich Lag Freier ist als ein Wackelndes teil mit ca: 4000 Equal Chips, die immer and und aus gehen.
Wenn du wirklich Assembler Lernen willst, versuch erstmal in Gmod einen CPU zum laufen zu bringen, Tutorial ist im Jeweiligen programm. ( garrysmod/garrysmod/addons/wire/data/CPUChips/ )
Beispiel: ( + ErKlärung. )
Code:
// Screen test using ports
// Spawn 1 cpu, 1 digital screen, und 1 input.
// Wire CLK an Button.
// Wire Digital Screen CLK an Button.
// Wire Digital Screen PixelG an CPU's Port2.
// Wire Digital Screen PixelX an CPU's Port0.
// Wire Digital Screen PixelY an CPU's Port1.
mov eax,0; // EAX = 0
loopx: // Wiederhohlt die X Achse.
mov ebx,0; // EBX = 0
loopy: // Wiederhohlt die Y Achse.
mov port0,eax; // Port[0] = EAX
mov port1,ebx; // Port[1] = EBX
mov edx,eax; // EDX = EAX
mul edx,ebx; // EDX = EDX*EBX (aka EDX = EAX*EBX)
mov port2,edx; // Port[2] = EDX (aka Port[2] = EAX*EBX)
inc ebx; // EBX = EBX + 1
cmp ebx,32; // Vergleiche EBX und 32
jl loopy; // Springt wenn weniger als 32
inc eax; // EAX = EAX + 1
cmp eax,32; // Vergleiche EAX und 32
jl loopx; // Springt wenn weniger als 32