Archiv der Kategorie: 68000

68k Assembler in Perfektion

Assembler ist manchmal einfach wunderbar. Warum wunderbar? Es gibt Dinge, die man nicht erwartet, gerade beim 68000-Prozessor von Motorola. Eigentlich der (Private)Workstation-Prozessor genutzt in den ersten richtig leistungsstarken PCs wie dem Macintosh und danach in den 16/32Bit Homecomputern. Davor in vielen Arcades (Foodfight Atari 1983+) und danach in Consolen (Megadrive etc.) Seine Nachfolger 68030 waren für wichtige andere Meilensteine der Geschichte der Computerindustrie verantwortlich etwa die NExT.

Und hier ein kleines Müsterchen:

In der ersten Zeile wird ein Word (2Bytes) von einer Speicherstelle a4 (Adresse) in eine zweite verschoben a3 (Adresse). Mit move.w (a4)+ kann man verschieben und die Adresse ein Byte hochzählen. Leider ist nun ein Word 2 Bytes lang und so muss man nochmals hochzählen. Und siehe da der Prozessor kann das mit ++. Diese einfach Sache macht weiteres hinzfügen mit add.l #1,a4 und add.l #1,a3 unnötig.

Natürlich bleibt dadurch die Programmierung in Assembler weitere eine Konzentrationssache. Dennoch ist in dieser einen Zelle soviel klar lesbar.

// ToDo: Woher kommt das i++ ? .-)

move.l: Verschieben oder Kopieren?

Der Move-Befehl ‚verschiebt‘ einen Wert von A nach B – so sagt es zumindest das Naming. Eigentlich verschiebt er den Wert nicht nur, sondern er kopiert ihn. Aber selbstverständlich wird er damit auch ‚verschoben‘. Es wäre auch eine gute Frage, falls er ihn ‚verschieben‘ würde, was an dessen Stelle wäre am alten Ort. Das wäre ja ein ‚echtes‘ Verschieben.