We gaan diep!
Arnout van Kempen over rommelen in een digitale wereld.
We hebben inmiddels al aardig wat besproken in deze rubriek. Linux, C, Rust en COBOL met name en wat uitstapjes naar verwante onderwerpen. In de komende weken ga ik dieper de machine in, we gaan programmeren in assembly. Dat betekent de taal die het dichtst bij de nullen en enen staat die de computer begrijpt en die nog net voor mensen leesbaar is. Daarmee is assembly de programmeertaal die je de meeste mogelijkheden biedt. Immers, alles wat een computer kan, kan in assembly worden geprogrammeerd. We zagen dat talen als Rust en zeker COBOL betrekkelijk veel beperkingen opleggen. Rust doet dat vooral door je te verbieden fouten te maken, COBOL doet dat meer doordat het een oude taal is die heel dicht bij menselijke teksten probeert te blijven. In C hadden we bijzonder veel vrijheid, inclusief de vrijheid om fouten te maken die je systeem plat kunnen leggen of open kunnen zetten voor hackers. Maar toch is C nog steeds niet zo vrij en zo krachtig als assembly. Maar het zit er dicht bij.
Computers zijn tegenwoordig zo krachtig en zo ruim bemeten in opslagcapaciteit en geheugen, dat je eigenlijk nauwelijks meer assembly nodig hebt. De tijd van woekeren met iedere byte is nauwelijks meer aan de orde en ook het behalen van de ultieme snelheidswinst doet er vaak niet meer toe. Dat een taal als Python immens populair is, laat dat al zien. Het is namelijk ook een immens trage taal, maar wie merkt dat nog?
Waarom ga ik dan toch in assembly duiken? Daar zijn drie redenen voor.
1.Assembly is de enige taal die je dwingt de computer tot op het bot, of zoals het onder liefhebbers wordt genoemd "tot op het kale metaal", te kennen en te begrijpen. Wie wil klooien met computers, moet dieper willen gaan dan e-mail, browser en Python. Voor het echte klooien moet je TCP/IP begrijpen en assembly. Al is het maar basaal.
2.Van alle programmeertalen die ik ooit leerde, genoot ik het meest van Z80 en 8086 assembly. Het is gewoon fascinerend leuk. Als elfjarige was mijn eerste assembly programmaatje geen "hello world", maar een extreem simpel programmaatje dat het scherm van mijn computer op zwart zette. Dat ging zo:
ld hl, 0x4000 ; Beginadres van het videogeheugen
ld de, 0x4001 ; Doeladres, één byte verder.
ld bc, 0x17FF ; Aantal bytes - 1 (6144 voor ZX Spectrum)
ld (hl), 0xFF ; Zet de eerste byte op FFh
ldir ; Kopieer BC bytes van (HL) naar (DE)
ret ; Keer terug naar BASIC
Serieus, hoe kan dat niet leuk zijn?
3.Doel van deze rubriek is dat ik zelf ook wat leer, ik probeer vooral te delen waar ik zelf mee bezig ben. Nu ben ik redelijk thuis in de Z80, de processor van de 8-bits revolutie uit mijn jonge jaren, en in de 8086, de processor van de pc-revolutie. Maar waar ik al tijden tegenop zie is de ARM; de processor van Apple, van veel mobiele telefoons en tablets, van de Raspberry Pi en "van de toekomst".
Dus wat we gaan doen is dit:
• Een inleiding over de geschiedenis van de CPU op één chip vanaf de allereerste 4004, via het enorme succes van de 8080 en de Z80, naar de CPU die vandaag de dag nog steeds in essentie vrijwel alle computers ter wereld bestuurt: de 80x86. Waarbij het aardig is te weten dat dat min of meer per ongeluk ging. Intel zag de 8086 als een tijdelijke tussenvorm tussen de 8080 en de gedroomde 8800 ofwel iAPX 432.
• Bespreking van de basisconcepten van de 8080 en de Z80, om de wat rare eigenschappen van de 8086 te begrijpen.
• Programmeren in assembly op een 80x86 in real mode.
• Nut en noodzaak van protected mode en de overgang van de int 21h naar syscall.
• Verschil tussen Posix systemen zoals Linux en MacOS enerzijds en MS Windows anderzijds.
• Leren programmeren in ARM assembly.
Wie mee wil doen met #klooienmetcomputers kan dat doen via GitHub. Maak een account op github.com en zoek naar Abmvk/kmc. Het account Abmvk volgen kan ook. Lezers zijn vrij te gebruiken wat ze willen en om zelf zaken toe te voegen of aan te passen, vragen te stellen of commentaar te leveren.
Gerelateerd
De basis van de 8080: registers en de ALU
Arnout van Kempen over rommelen in een digitale wereld.
De basis van de 8080: pinnen en interrupts
Arnout van Kempen over rommelen in een digitale wereld.
De lijst der lijsten
Arnout van Kempen over rommelen in een digitale wereld.
Van 4004 naar 86-64
Arnout van Kempen over rommelen in een digitale wereld.
Herhalingen
Arnout van Kempen over rommelen in een digitale wereld.