MEMO Assembleur
MEMO ASSEMBLEUR --------------- Ce qui suit n'est pas une initiation … l'assembleur ni mˆme une documentation technique, mais plut“t un aide m‚moire sur l'assembleur 68000. Ce document vous sera utile imprim‚, ou bien charg‚ en m‚moire dans un ‚diteur de textes r‚sident, de maniŠre … l'avoir en permanence sous les yeux. Les registres ------------- Registres de donn‚es. 8 registres de 32 bits : D0, D1, D2, D3, D4, D5, D6, D7. Registres d'adresses. 7 registres de 32 bits : A0, A1, A2, A3, A4, A5, A6. 1 pointeur de pile : A7 (SP). Compteur d'instructions sur 32 bits : PC Registre d'‚tat de 16 bits : SR. 5 bits de mode utilisateur : Bit 0 : Drapeau de retenue (Carry). Bit 1 : Drapeau de d‚passement (oVerflow). Bit 2 : Drapeau du valeur nulle (Zero). Bit 3 : Drapeau de n‚gativit‚ (Negative). Bit 4 : Drapeau d'extension (eXtend). 5 bits de mode superviseur : Bit 8-10 : Masque d'interruption (7 niveaux). Bit 13 : Mode superviseur. Bit 15 : Mode Trace. Les modes d'adressages. ----------------------- La syntaxe g‚n‚rale est : [Commande] [Op‚rande source], [Op‚rande destination]. Le format des donn‚es est : .L : mot long (32 bits) .W : mot court (16 bits) .B : octet (8 bits) Registre direct. ----------------- L'op‚rande se trouve dans un registre. Ex : move.w D0,D1 => Mettre le contenu de D0 dans D1. Adressage absolu. ----------------- L'op‚rande se trouve dans une adresse de la m‚moire. Ex : move.l $FF8240,A0 => Mettre le contenu de l'adresse $FF8240 dans A0. Adressage relatif au PC. ------------------------ L'op‚rande se trouve dans une adresse m‚moire calcul‚e par rapport au compteur d'instructions. Ex : move.l $1000(PC),D0 => Mettre le contenu d'une adresse se trouvant … PC + $1000 octets. Il est ‚galement possible d'ajouter … ce d‚calage le contenu d'un re- gistre. Ex : move.l A0,10(PC,D0) => Mettre le contenu de A0 dans une adresse se trouvant … PC + 10 octets + le contenu de D0. Dans tous les cas, le d‚calage de l'op‚rande destination ne porte sur que sur 8 bits, et la taille du registre ajout‚ doit ˆtre un mot de 16 bits. Adressage indirect. ------------------- L'adresse de l'op‚rande se trouve dans un registre d'adresse. Ex : move.l A0,(A1) => Mettre le contenu du registre A0 dans l'adresse que contient le re- gistre A1. Adressage indirect post incr‚ment‚. ----------------------------------- L'adressage s'effectue comme un adressage indirect, mais le contenu du registre d'adresse est incr‚ment‚ de la taille de l'op‚rande APRES l'ex‚cution de la commande. Ex : move.b D0,(A0)+ => Mettre le contenu du registre D0 dans l'adresse que contient le registre A0, puis l'adresse que contient le registre A0 est augment‚e de 1 octet (.B). Ex : move.l (A1)+,(A0)+ => Mettre le contenu de l'adresse que contient le registre A1 dans l'adresse que contient le registre A0, puis les adresses que contiennent A1 et A0 sont augment‚es de 4 octets (.L). Adressage indirect pr‚ d‚cr‚ment‚. ---------------------------------- L'adressage s'effectue comme un adressage indirect, mais le contenu du registre d'adresse est d‚cr‚ment‚ de la taille de l'op‚rande APRES l'ex‚cution de la commande. Ex : move.l D0,-(A7) => D‚cr‚menter de 4 octets l'adresse que contient le registre A7, et mettre le contenu de D0 dans cette adresse. Le registre A7 servant de pointeur de pile, cette op‚ration ‚quivaut … ranger le contenu de D0 au sommet de la pile. Adressage indirect avec d‚calage. --------------------------------- L'adressage s'effectue comme un adressage indirect, mais on rajoute un d‚calage de 16 bits au contenu du registre d'adresse. Ex : move D0,2(A0) => Mettre le contenu de D0 dans l'adresse + 2 octets que contient le registre A0. Adressage indirect ind‚x‚ avec d‚calage. ---------------------------------------- L'adressage s'effectue comme un adressage indirect avec d‚calage, mais on rajoute le contenu d'un autre registre au contenu du registre d'adresse. Ex : move.l 10(A0,D0),D1 => Prendre l'adresse contenue dans A0, lui ajouter 10 + le contenu de D0; prendre le contenu de cette adresse et le mettre dans le registre D1. Adressage imm‚diat. ------------------- L'op‚rande source est prise comme telle. Ex : move #$10000,A2 => Mettre la valeur $10000 dans le regisre A2. Il existe une variante QUICK qui permet d'adresser des valeurs imm‚diates plus rapidement (la commande prend moins de cycles); pour cela, il faut que la valeur tienne sur 3 bits, sauf pour la commande MOVE o— elle peut tenir sur 8 bits, … condition que la destination soit un registre de donn‚es. Ex : moveq #100,D0 Ex : addq.l #1,A0 Les instructions. ----------------- Variantes : ----------- Les variantes des instructions sont des suffixes qui sont plac‚s … la fin de la commande. A : Indique que l'op‚rande destination est un registre d'adresse. La plupart des assembleurs le font automatiquement. Ex : movea.l D0,A1 I : Indique que l'op‚rande source est une donn‚e imm‚diate. La plupart des assembleurs le font automatiquement. Ex : addi.l D0,A1 Q : Indique que l'adressage imm‚diat doit ˆtre trait‚ en QUICK (cf plus haut). Ex : moveq #$C0,D0 X : Sert … reconnaŒtre les op‚rations arithm‚tiques qui se servent du drapeau X (extend). En g‚n‚ral, ce drapeau prend la valeur de la retenue (carry); mais il arrive que la retenue soit modifi‚e par des op‚rations de transfert de donn‚es sur 32 bits. Dans ce cas, le drapeau X, lui, n'est pas modifi‚ et reste disponible pour la suite des calculs. Sens des op‚rations : --------------------- Dans le cas d'op‚rations arithm‚tiques ou logiques, le r‚sultat de l'op‚ration se trouve toujours dans l'op‚rande de destination. Ex : add D0,D1 => Ajoute le contenu de D0 au contenu de D1; le r‚sultat est dans D1. Format des op‚rations : ----------------------- Toutes les instructions peuvent poss‚der une extension de type .B, .W ou .L. Celle-ci pr‚cise la taille du traitement de l'op‚ration. Par exemple, bien qu'un registre de donn‚e porte sur 32 bits, la commande clr.b D0 n'effacera que l'octet le plus faible de ce registre. La plupart des assembleurs considŠrent la taille .W comme ‚tant implicite. Ex : move #1,D0 ‚quivaut … move.w #1,D0. Les commandes : --------------- ABCD (Add Decimal with Extend) Aditionner deux valeurs de type Binaire Cod‚ D‚cimal. Ex : abcd #$34,D0 ADD (Addition binary) Additionner les deux op‚randes. Ex : adda.l D1,A2 AND (Logical And) Effectuer un ET logique entre les deux op‚randes. Ex : andi #$7F,D0 ASL (Arithmetic Shift Left) Effectuer un d‚calage de bits vers la gauche. Le nombre de bits d‚cal‚s est sp‚cifi‚ par l'op‚rande source. Le bit de poids le plus fort est plac‚ dans C et X, le bit de poids le plus faible est remplac‚ par un 0. La taille de l'op‚rande source est de 3 bits en adressage imm‚diat, ou de 16 bits s'il est dans un regis- tre. Pour la plupart des assembleurs, l'absence d'op‚rande source ‚quivaut … un d‚calage de 1 bit. Ex : asl #2,D0 ASR (Arithmetic Shift Right) Effectuer un d‚calage de bits vers la droite. Le nombre de bits d‚cal‚s est sp‚cifi‚ par l'op‚rande source. Le bit de poids le plus faible est plac‚ dans C et X, le bit de poids le plus fort est remplac‚ par le bit de signe. La taille de l'op‚rande source est de 3 bits en adressage imm‚diat, ou de 16 bits s'il est dans un registre. Pour la plupart des assembleurs, l'absence d'op‚rande source ‚quivaut … un d‚calage de 1 bit. Ex : asr A1 Bcc (Branch Condionally) G‚rer des sauts conditionnels. La destination du saut est toujours une adresse relative allant de -128 … +127 octets. L'ex‚cution ef- fective du saut d‚pend de la condition pos‚e par les drapeaux du registre SR. BRA : BRanch Always => Saut inconditionnel. BCC : Branch Clear Carry => Saut si C=0. BCS : Branch Carry Set => Saut si C=1. BEQ : Branch EQual => Saut si Z=1. BGE : Branch Greater or Equal => Saut si (N=1 ET V=1) OU (N=0 ET V=0) BGT : Branch Greater Than => Saut si (N=1 ET V=1 ET Z=0) OU (N=0 ET V=0 ET Z=0) BHI : Branch HIgher => Saut si (C=0 OU Z=0) BLE : Branch Lesse or Equal => Saut si Z=1 OU (N=1 ET V=0) OU (N=0 ET V=1) BLS : Branch Lower or Same => Saut si C=1 OU Z=1 BMI : Branch MInus => Saut si N=1 BNE : Branch Not Equal => Saut si Z=0 BPL : Branch PLus => Saut si N=0 BVC : Branch oVerflow Clear => Saut si V=0 BVS : Branch oVerflow Set => Saut si V=1 BCHG (Bit Test and Change) Le bit donn‚ par l'op‚rande source de l'op‚rande destination est invers‚. L'‚tat d'origine est enregistr‚ dans Z. La taille de l'op‚rande source est .B si elle se trouve en m‚moire ou .L si elle se trouve dans un registre. Ex : bchg #1,D1 BCLR (Bit Test and Clear) Le bit donn‚ est effac‚. Le reste est identique … BCHG. Ex : bclr #3,$1234 BSET (Bit Test and Set) Le bit donn‚ est mis … 1. Le reste est identique … BCHG. Ex : bset (A0) BSR (Branch to Subroutine) Saut inconditionnel … un sous programme. La destination du saut est toujours une adresse relative allant de -128 … +127 octets. Ex : bsr truc BTST (Bit Test) Test de l'‚tat du bit donn‚, sans le modifier. Le reste est iden- tique … BCHG. Ex : btst D0 CHK (Check Register against Boundaries) V‚rification si le contenu d'un registre de donn‚es est plus grand que l'op‚rande source; si tel est le cas, le processeur se bran- che sur le vecteur d'exception No 6, et le programme se poursuit … l'adresse qui est indiqu‚e … l'adresse $18. Dans les autres cas, il ne se passe rien. Ex : chk #$FE,D0 CLR (Clear Operand) L'op‚rande donn‚e est effac‚e. Ex : clr.l D0 CMP (Compare) L'op‚rande source est soustraite de l'op‚rande destination, sans que celle-ci soit modifi‚e. Les drapeaux du registre SR sont positionn‚s selon le r‚sultat. Avec la variante CMPM, les deux op‚randes sont adress‚es selon le mode (Ax)+. Ex : cmp #2,D0 DBcc (Test Condition Decrement and Branch) Un registre de donn‚es est d‚cr‚ment‚ et le saut est effectu‚ selon le test des drapeaux de SR, ou si le registre est diff‚rent de -1. Les conditions et l'‚tendue du saut sont identiques … Bcc. Ex : dbra D0,truc DIVS (Divide Signed) L'op‚rande destination est divis‚e par l'op‚rande source, avec consid‚ration des signes. AprŠs cette op‚ration, l'op‚rande destination renferme dans sa partie inf‚rieure la partie entiŠre du r‚sultat, et dans sa partie sup‚rieure, le reste ‚ventuel qui pr‚sente le mˆme signe que le quotient. Ex : divs #2,D0 DIVU (Divide Unsigned) Mis … part le signe qui n'est pas utilis‚ ici, tout est identique … DIVS. EOR (Exclusive Or) Effectuer un OU exclusif logique entre les deux op‚randes. Ex : eor #$7F,D0 EXG (Exchange Register) Interversion de deux registres. Ex : exg D0,D1 EXT (Sign Extend) L'op‚rande est compl‚t‚e avec son bit 7 (.W) ou avec son bit 15 (.L) pour ˆtre mise au format de traitement. Ex : ext.l D0 JMP (Jump) Saut inconditionnel … l'adresse donn‚e. La diff‚rence avec BRA est que l'adresse n'est pas relative, mais repr‚sente effectivement la destination du saut. Ex : jmp (A2) JSR (Jump to Subroutine) Saut inconditionnel … un sous-programme. la diff‚rence avec BSR est la mˆme qu'entre JMP et BRA. LEA (Load Effective Address) Chargement d'un registre d'adresse avec l'adresse elle-mˆme, et non pas avec le contenu de l'adresse. Ex : lea truc, A1 LINK (Link Stack) Cette instruction place tout d'abord le registre d'adresse donn‚ en op‚rande source sur la pile. Le contenu du pointeur de pile (SP) est ensuite transf‚r‚ dans ce registre, et il est ‚ventuellement additionn‚ au d‚calage donn‚ par l'op‚rande destination et plac‚ su le pointeur de pile. Ex : link a6,#0 LSL (Logical Shift Left) Identique … ASL. LSR (Logical Shift Right) Identique … ASR, mais le bit de poids le plus fort est remplac‚ par un 0 et non par le bit de signe. MOVE L'op‚rande source est transf‚r‚e dans l'op‚rande destination. MOVEM (Move Multiple Registers) Dans ce cas particulier, l'op‚rande peut ˆtre constitu‚e d'une liste de registres. De cette maniŠre, une liste complŠte de registres peuvent ˆtre empil‚s en une seule instruction. Ex : movem.l D0-D4,-(SP) MOVEP (Move Peripheral Data) Transfert de donn‚es pour l'emploi de p‚riph‚riques. L'op‚rande source est toujours un registre de donn‚es, et l'op‚rande destina- tion un registre d'adresse indirect avec d‚calage. Ex : movep d0,12(A0) MULS (Multiply Signed) Multiplication des deux op‚randes avec respect du signe. Ex : muls #2,D1 MULU (Multiply Unsigned) Multiplication des deux op‚randes sans consid‚ration du signe. NBCD (Negate Decimal with Extend) N‚gation d'une op‚rande BCD avec le drapeau X. Ex : nbcd D1 NEG (Negate Binary) N‚gation de l'op‚rande donn‚e. Correspond … (0 - op‚rande). Ex : neg D1 Variante : NEGX qui correspond … (0 - op‚rande - X). NOP (No Operation) Instruction qui n'a aucun effet, mais qui consomme deux cycles. NOT (Logical Not) Effectue un NON logique sur l'op‚rande. Ex : not D0 OR (Logical Or) Effectue un OU logique entre les deux op‚randes. Ex : or #$3F,D0 PEA (Push Effective Address) L'adresse d‚sign‚e, et non son contenu, est empil‚e. Ex : pea truc(pc) RESET (Reset External Devices) Provoque la remise … z‚ro de tous les composants p‚riph‚riques connect‚s. C'est une instruction privil‚gi‚e. ROL (Rotate Left) Provoque une rotation vers la gauche de l'op‚rande destination. Le nombre de rotations est d‚sign‚ par l'op‚rande source. Le ou les bits perdus sont r‚introduits par la droite. Cette instruction modifie le drapeau C. Ex : rol #2,D0 ROR (Rotate Right) Mˆme action que ROL, … la diff‚rence que la rotation s'effectue par la droite. ROXL (Rotate Left with Extend) Semblable … ROL, … la diff‚rence que le bit ‚ject‚ est recopi‚ dans le drapeau X, qui prend sa place. Ex : roxl #4,(A0) ROXR (Rotate Right with Extend) Mˆme action que ROXL, … la diff‚rence que la rotation s'effectue par la droite. RTE (Return from Exception) Retour de la routine d'exception, … l'endroit o— l'exception a ‚t‚ rencontr‚e. C'est une instruction privil‚gi‚e. RTS (Return from Subroutine) Retour d'un sous-programme, … l'endrit o— celui-ci a ‚t‚ appel‚. RTR (Return and Restore) Semblable … l'instruction pr‚c‚dente, mais avant le saut de re- tour, l'instruction prend le mot au sommet de la pile pour le met- tre dans SR. SBCD (Subtract Decimal With Extend) L'op‚rande source est soustraite de l'op‚rande destination. le format des donn‚es est BCD. Scc (Set Conditionally) L'op‚rande (qui ne peut ˆtre que .B) est plac‚e … $FF si la condition est remplie. Dans les autres cas, elle est effac‚e. les tests sont semblables … Bcc. Ex : sne D0 STOP Interrompt le traitement du processeur qui ne peut ˆtre r‚activ‚ que par une interruption externe. C'est une instruction privil‚- gi‚e. SUB (subtract Binary) L'op‚rande source est soustraite de l'op‚rande destination. Ex : sub #10,D1 SWAP (Swap Register Halves) Interversion des deux moiti‚s d'un registre. Ex : swap d0 TAS (Test and Set) L'op‚rande (qui ne peut ˆtre que .B) est test‚e par rapport … z‚ro et sur son signe (C et N), puis son bit 7 est mis … 1. Ex : tas D0 TRAP D‚clenche un exception de fa‡on fictive, et le programme se pour- suit … l'adresse pr‚cis‚e par le num‚ro du vecteur donn‚. Par cet- te commande, on peut appeler les fonction du systŠme d'exploita- tion (GEMDOS, BIOS, XBIOS, AES et VDI). Ex : trap #1 TRAPV (Trap on Overflow) D‚clenche une exception si le drapeau V est … 1, et le programme continue … l'adresse donn‚e par le vecteur d'exception No 7 ($1C). TST (Test) Mˆme action que TAS, mais l'op‚rande n'est pas modifi‚e. Ex : tst D0 UNLK (Unlink) Cette instruction est l'inverse de LINK. Le pointeur de pile est charg‚ avec le registre d'adresse donn‚, et ce dernier est rempli avec le dernier enregistrement de la pile.
Back to Assembly_language