Les 3: De addressing modes en een inleiding in de syntax. Dit is een beetje de zure appel van het programmeren in assembler. Het is makkelijk om in de war te raken. Maar voor wie de uitleg stap voor stap volgt is het niet moeilijk, alleen veel. We hebben de vorige keer gezien dat de 68000 processor bestaat uit 16 registers, (8 dataregisters en 8 adresregisters) en dat hij verder toegang heeft tot maximaal 16 megabyte geheugen. De inhoud van de registers en van het geheugen kan op vele manieren door de processor worden gebruikt. Om een getal, register of geheugenadres te specificeren hebben we de zogenaamde 'addressing modes'. Er zijn er een stuk of tien. We zullen ze een voor een bespreken, en tussendoor vast iets over de syntax van de assembler zeggen en wat voorbeelden geven. Dat gooit de systematiek van de inleiding een beetje in de war maar maakt de addressing modes wel veel begrijpelijker. 1) Immediate data. Dit is gewoon een getal dat door de programmeur in het programma wordt geschreven als: #getal Bijvoorbeeld : #17, of #$F1, (Wat tussen haakjes hetzelfde getal voorstelt) De '#' is nodig, zoals we straks zullen zien heeft '17' een andere betekenis dan '#17'. 2) Register direct Ook niet zo moeilijk, hierbij schrijf je gewoon de naam van het register. dus bijvoorbeeld d0, a0, a7. De processor gebruikt dan de inhoud van het betreffende register. Met deze twee modes kunnen we al instructies maken: move.l #$FF120233,d0 Dit betekent: zet het getal $FF120233 in register d0. Let eens op hoe deze regel in elkaar zit. We zien dat we inspringen van de kantlijn, dan komt de instructie, die hier 'move' is. Dit is in alle programma's de meest gebruikte instructie, en we zullen hem goed leren kennen. Na de naam van de instructie volgt de lengte- specificatie, hier '.l' (long). Dat wil zeggen dat de instructie alle 32 bits van d0 in de operatie moet betrekken. Na het uitvoeren van deze instructie is de inhoud van d0 gelijk aan $FF120233. Als we daarna de opdracht geven: move.w #$1000,d0 ; let op de '.w' Dan wordt het getal $1000 in d0 gezet, maar alleen in de onderste 16 bits! De nieuwe inhoud van d0 is dan dus $FF121000, omdat de bovenste 16 bits niet zijn veranderd door de '.w' instructie. De bronoperand is hier het getal, de bestemming is d0. De notatie is zo dat de source(bron) steeds links van de komma staat, en de destination (bestemming) rechts, in tegenstelling tot de conventie bij veel andere processors, zoals de 8086. Ook de komma is verplicht. De syntax van de move instructie is: [