Sommaire 1. Déclaration de variables 2. Traitement tableaux et chaines de carac
Sommaire 1. Déclaration de variables 2. Traitement tableaux et chaines de caractères 3. Vecteurs d’entiers 4. Tableaux a deux dimensions (matrices) 5. Les entrées sorties en ASM (interruptions) 6. L’équivalent de quelques instructions du langage C en assembleur 7. Quelques instructions de base 8. Comparaison 9. Mode d’adressage 10. Quelques remarques 11. Les piles Manuel Déclaration de variables Les variables se déclarent comme suit: donnee1 db ? ; donnee1 est un byte (octet) non initialisé donnee2 db 0FFh ; donnee2 est un byte initialisé à FF (255 en hexadécimal) donnee3 dw ? ; donnee3 est un word (16 bits) donnee4 db 5 dup (?) ; donnee4 est un tableau de 5 bytes (octets) non initialisés donnee5 dw 10 dup (15) ; donnee5 est un tableau de 10 byte (octets) initialisés à 15 De manière générale: DB : 1 byte (8 bits) (Declare Byte) DW : 1 word (16 bits) (Declare Word) DD : 2 words (32 bits) (Declare Double) Les constantes peuvent être écrites en: - décimal: 1, 2, 3, 123, 45 - hexadécimal : 1h,2h,3h,12h,0Fh,0AD4h (noter la présence du 0 quand le le premier chiffre du nombre en hexadécimal commence par une lettre) - binaire : 1b,0b,1010b,111101b Traitement des tableaux et chaînes de caractères Une chaîne de caractères ASCII est constiuée d’une suite de caractères terminée par le ‘$’. Ce type de caractères est utilisé par le MS DOS. Une chaîne de caratères ASCII se déclare à l’aide de la directive DB Exemple: mesg DB ‘bonjour$’ Message DB 'Bonjour$' est la même chose que Message DB 'B', 'o', 'n', 'j', 'o', 'u', 'r', '$' ou que Message DB 66, 111, 110, 106, 111, 119, 114, 36 La seule obligation est le caractère '$' qui indique la fin de la chaîne (sinon les octets situés à la suite du message en mémoire sont aussi affichés comme caractères). Zone DB 30 DUP(?), ‘$’; chaîne de 30 caratères de valeur non définie Tamp DB 25 DUP (‘ ‘); chaîne de 25 espaces blancs Les registres SI, DI, BX peuvent être utilisés pour accéder aux éléments d’une chaîne. • La déclaration d’une chaîne de caractères est mise en '' '' ou ' ' . • Le caractère '$' indique la fin d’une chaîne de caractères. Son omission implique que les octets en mémoire qui viennent après cette chaîne sont aussi affichés comme des caractères. • L’assembleur ne fait pas de différence entre une majuscule et une minuscule dans l’écriture de ses instructions et la notation des registres. Vecteur d’entiers Le principe est le même pour un vecteur d’entiers où chaque élément est stocké sur un entier. Pour un vecteur d’entiers stockés sur deux octets nous devons tenir compte de la longueur d’un élément du vecteur. Exemple: T dw 1, 4, 7,-1; vecteur de 4 entiers initialisés respectivement ; aux valeurs 1, 4, 7 et -1 T1 dw 100 dup (?); vecteur de 100 éléments non initialisés. Il est impossible d'affecter une variable directement à une autre variable, il faut obligatoirement passer par un registre. Il est également impossible d'affecter une constante directement à une variable, il faut également passer par un registre. ………………………………………………………………………………………………………………………… Tableau à deux dimensions • Pour représenter un tableau de taille nxm, je réserve n*m bytes (ou word ..) : N EQU 12 M EQU 32 tableau DB N*M DUP (?) • J ’accède à l ’élément (i,j) : MOV SI,i MOV DI,j MOV AL,tableau[SI*M+DI] …………………………………………………….. Affectation d’une adresse d’un tableau ou chaine de caractère Mov registre, offset tab Ou bien Lea registre, tab Mov registre(par exemple BX),offset (veut dire adresse) tab(le tableau) Lea (instruction de chargement d’adresse) registre, tab (le tableau « il ne faut pas mette offset ») Les entrées Sorties en assembleur Pour réaliser les opérations standards (affichage, saisie), le système d’exploitation (ici DOS) fournit les fonctions pré-écrites suivantes: Affichage d’un caratère: mov DL, “A”; caractère A est transfére dans DL mov AH, 2; fonction no. 2 int 21h ; appel au DOS Affichage d’une chaine de caractères: mov DX, offset chaine; pointe vers l’adresse du premier caractère de la chaîne de caractères chaine mov AH, 09h; fonction no. 9 int 21h; Saisie d’un caratère: mov AH, 01h; fonction no. 1 (avec écho) int 21h ; résultat est mis dans AL Saisie d’un caractère mov AH, 07H; fonction no. 7 (sans écho) (sans écho=veut dire sans affichage a l’ecran (non visible)) int 21h ; résultat dans AL Arrêt de programme: (retoure au DOS) mov AX, 4C00h; int 21h; À mettre à la fin de chaque fin programme; c’est l’équivalent du return (0) en C. Ces instructions ont pour effet de retourner au DOS L’équivalent de quelques instructions du langage C en assembleur • if then else Assembleur If ax =1 if: CMP AX, 1 bx = 10; JNZ Else else { bx = 0; Then: MOV BX,10 cx = 10; JMP endif } Else: MOV BX,0 MOV CX,10 endif: .............. • La boucle FOR Assembleur For (k=0; k<=10; k++) MOV BX,0 bx = bx + k; MOV CX,0 For: CMP CX,10 JA Endfor ADD BX,CX INC CX JMP For Endfor: WHILE Assembleur bx = 5 MOV BX,5 while (bx >0) while: CMP BX,0 bx = bx -1; JLE Endwhile DEC BX JMP while Endwhile: Écrire le code de l’instruction En assembleur if (a>b) && (c <= d) if: cmp a, b { jng endif ................ } cmp c, d jnle endif .............. endif: Quelques instructions de base • Affectations ; Registres <-- Valeurs MOV AX, 65535 ; (décimal) MOV Cl, 01101b ; (binaire) MOV DH, 0FAh ; (hexa) ; Entre registres MOV AX, BX MOV CL, DH ; Entre Registres et Variables MOV CX, variable_de_deux_octets MOV variable_de_un_octet, DL ;Registres <-- Adresses Mémoire Mov AX, Offset variable ; AX <- adresse de variable Mov CX, [ 5Ah ] ; CX <- valeur à l'adresse 5A en hexa Quelques instructions de base • Arithmétique ; Incrémentation INC AX ; AX <- AX + 1 Inc ma_variable ; Décrémentation DEC AX Dec ma_variable ; Addition ADD AX, 5 ; AX <- AX + 5 ADD BH, t ; BH <- BH + t Add t, Cx ; t <- t+ Cx ; Soustraction SUB AX, 5 ; AX <- AX – 5 SUB BH, t ; BH <- BH – t SUB t, CX ; t <- t - CX Quelques instructions de base • Logique ; AND bit à bit MOV AH, 0101b ; AH <- 5 MOV BH, 1001b ; BH <- 9 AND AH, BH ; AH <- AH AND BH; AH vaut 0001b, soit 1 ; OR bit à bit MOV AH, 0101b ; AH <- 5 MOV BH, 1001b ; BH <- 9 Or AH, BH ; AH <- AH OR BH; AH vaut 1101b, soit 13 (8+4+1) ; XOR bit à bit MOV AH, 0101b ; AH <- 5 MOV BH, 1001b ; BH <- 9 XOR Ah, BH ; AH <- AH XOR BH; AH vaut 1100b, soit 12 (8+4) ; NOT bit à bit MOV AH, 0101b ; AH <- 5 Not AH ; AH <- NOT AH; AH vaut 1010b, soit 10 (8+2) Comparaison: ; Egalité (Jump if Equal) CMP AX, 5 JE label_1 ;label_1==etiquette ; Différence (Jump if Not Equal) CMP AX, ma_variable JNE label_2 ;Inférieur, Supérieur, Inf. ou égal, Sup. ou égal ; (Jump if Lower, Greater, Lower or Equal, Greater or Equal) CMP CH, 0 JL label_1 CMP DH, Ah JG label_2 CMP AL, 01001b JLE label_3 JZ Saut si zéro. ZF = 1 JNZ JE Saut si égal. JNE JC Saut si Retenue (inférieur). CF = 1 JNC JB Saut si inférieur. JNB JNAE Saut si ni supérieur ni égal. JAE JS Saut si signe négatif. SF = 1 JNS JO Saut si débordement. OF = 1 JNO JPE Saut si parité paire. PF = 1 JPO JP Saut si parité. JNZ Saut si pas zéro. ZF = 0 JZ JNE Saut si différent. JE JNC Saut si pas de retenue. CF = 0 JC JNB Saut si pas inférieur. JB JAE Saut si supérieur ou égal. JNAE JNS Saut si aucun signe (positif). SF = 0 JS JNO Saut si pas de débordement. OF = 0 JO JPO Saut si parité impaire. PF = 0 JPE JNP Saut si pas de parité. JP Modes d’adressage • Mode immédiat L’opérande est codée avec l’instruction mov AX, 568 • Mode registre L’opérande est un registre de donnée ou d’adresse mov AX,BX • Mode mémoire direct L’opérande est désigné par l’adresse donnée dans l’instruction mov [adresse],AL Modes d’adressage pour accéder aux données • Mode mémoire indirect L’opérande est désignée par une adresse placée dans les registres d’adresses donnée dans l’instruction mov AX,[SI] BX,BP,SI,DI peuvent servir de registre pointeur 1. Indirect avec déplacement L’adresse = contenu du registre d’adresse + déplacement (le registre d’adresse n’est pas modifié) mov AX, [DI] mov BX,[DI+6] Indirect avec index L’adresse = contenu du registre d’adresse + contenu du registre d’index (le registre d’adresse n’est pas modifié) uploads/Sante/ guide-l2-asm 1 .pdf
Documents similaires










-
41
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Aoû 31, 2022
- Catégorie Health / Santé
- Langue French
- Taille du fichier 0.5886MB