Click here to load reader

Résumé du cours précédent

  • View
    218

  • Download
    0

Embed Size (px)

Text of Résumé du cours précédent

  • Assembleur

  • Djamal Rebane*Niveaux de programmation

    Niveaux de programmation

    circuit logiques 0/1--------------------------------------------------------------------------------- unit de traitement micro-instructions (UAL, chemins de donnes) = suite de 0/1 (Unit de commande) micro-pgme = suite de micro-instructions------------------------------------------------------------------------------------Codop111111 000011101010101 langage machine = suite de 0/1------------------------------------------------------------------------------------ ADD A,20 assembleur = remplacer les codop JZ 13 par des mnmoniques

    Djamal Rebane

  • Djamal Rebane*Structure dun programme assembleur 8086TITLE nom ; donner un nom au programmePILE SEGMENT STACK ; dclaration dun segment de pile ; dont le nom est pile .......... ..........PILE ENDS ; fin de la dclaration de la pileDONNEE SEGMENT ; dclaration dun segment de donnes qui va ; contenir les variables ...........DONNEE ENDS ; fin de la dclaration de donnesLECODE SEGMENT ; dclaration du segment de code qui va contenir ; le codeDebut: ; tiquette dindication du point dentre du code.................................LECODE ENDS ; fin de la dclaration du codeEND Debut ; fin du point dentre du code

    Djamal Rebane

  • ExempleDjamal Rebane*TITLE prog2.asm: Exemple sur ROL, Pile segment stack ; dw 100 dup(?) Pile ends

    DATA segment DATA1DW5F97H COMPTEDB?DATA ends

    CODE segment MAIN: ASSUME CS:CODE, DS:DATA MOV AX,DATA MOV DS, AX XOR BL, BL; Mettre BL 0 (ou bien SUB) MOV DL, 16; rotation 16 foisMOV AX, DATA1 ENCORE: ROL AX, 1; Rotation a gauche (a droite aussi si on prfre) JNC PROCHAIN ; Test si CF=0 INC BL; Si CF = 1, incrmenter le compteur du nombre de 1PROCHAIN: DEC DL; rpter 16 fois JNZ ENCORE; encore une fois si ce nest pas fini MOV COMPTE, BL; sauvegarder le rsultat dans la case mmoire COMPTE

    MOV AH, 4Ch INT 21h MAIN ENDS END MAIN

    Djamal Rebane

  • Pourquoi les segments? l'origine - Pour pouvoir adresser plus de 64 Ko de mmoire dans un programme car les registres sont sur16 bits

    En pratique aujourd'hui - Permet de sparer clairement des zones mmoires selon leur rle

    Exemple : la pile ne peut pas tre crase par des donnes ou dborder sur des donnes / code Mais cela est contraignant ...Djamal Rebane*

    Djamal Rebane

  • Suite Adressage sur 20 bits avec 2 registres 2 registres 16 bits : peut coder adresses sur 32 bitsPour uniquement 20 bits - Dcale le premier registre de 4 bits et l'additionne au second - Adresse note A:B - Adresse relle : A * 16 + B Exemple (les nombres sont en hexa) 3100:27EE correspond l'adresse 31000 + 27EE = 337EE Dcaler de 4 bits en binaire revient dcaler d'un chiffre en hexa

    Djamal Rebane*

    Djamal Rebane

  • Suite 2Nous avons 4 segments d'adresses : CS, DS, SS, ES utiliser 2 registres pour adresser des mots mmoires

    - Le premier est le registre de segment - Le second un registre gnralOn l'appelle l'offset (dcalage) Addresse : segment:offsetExemples

    - CS:IP : adresse de la prochaine instruction excuter - DS:SI : adresse d'une donne - SS:SP : adresse du haut de la pileDjamal Rebane*

    Djamal Rebane

  • Djamal Rebane*Vos programme sources, crits en assembleur, doivent avoir lextension

    .asm pour ASseMbler

    Djamal Rebane

  • Djamal Rebane*Dclaration de variablesLes variables se dclarent de la manire suivante: datas1 db ? ; datas1 est un byte non initialisdatas2 db 0FFh ; datas2 est un byte initialis FF (255 en hexadcimal)datas3 dw ? ; datas3 est un word (16 bits)datas4 db 5 dup (?) ; datas4 est un tableau de 5 bytes non initialissdatas5 dw 10 dup (15) ; datas5 est un tableau de 10 byte initialiss 15De manire gnrale: DB : 1 byte (8 bits) (Declare Byte)DW: 1 word (16 bits) (Declare Word) DD: 2 words (32 bits) (Declare Double) DF,DP : 6 bytesDQ: 8 bytes (64 bits)DT: 10 bytesLes constantes peuvent tre crites en: - dcimal: 1, 2, 3, 123, 45 - hexadcimal : 1h,2h,3h,12h,0Fh,0AD4h (noter la prsence du 0 quand le le premier chiffre du nombre en hexadcimal commence par une lettre) - binaire : 1b,0b,1010b,111101b

    Djamal Rebane

  • Djamal Rebane*Les entres Sorties en assembleurPour raliser les oprations standards (affichage, saisie), le systme dexploitation (ici DOS) fournit les fonctions pr-crites suivantes:

    Affichage dun caratre: mov DL, A; caractre A est transfre dans DL

    mov AH, 2; fonction no. 2 int 21h ; appel au DOS Affichage dune chaine de caractres:

    mov DX, offset chaine; pointe vers ladresse du premier caractre de la chane de caractres chaine mov AH, 09h; fonction no. 9 int 21h;Saisie dun caratre: mov AH, 1; fonction no. 1

    (avec cho) int 21h ; rsultat est mis dans AL

    Djamal Rebane

  • Djamal Rebane*Saisie dun caractre mov AH, 7; fonction no. 7

    (sans cho) int 21h ; rsultat dans AL

    Arrt de programme: mov AX, 4C00h;

    int 21h; mettre la fin de chaque fin programme; cest lquivalent du return (0) en C. Ces instructions ont pour effet de retourner au DOS

    Djamal Rebane

  • Djamal Rebane*Lquivalent de quelques instructions du langage C en assembleurif then else Assembleur

    If ax =1 if: CMP AX, 1 bx = 10; JNZ Elseelse { bx = 0; Then: MOV BX,10 cx = 10; JMP endif } Else: MOV BX,0 MOV CX,10 endif: ..............

    Djamal Rebane

  • Djamal Rebane*Instruction iSi condition alorsInstructions jSinonInstruction mFin siInstructions k

    Djamal Rebane

  • Djamal Rebane*La boucle FOR AssembleurFor (k=0; k
  • Djamal Rebane*WHILE Assembleurbx = 5 MOV BX,5while (bx >0) while: CMP BX,0

    bx = bx -1; JLE Endwhile DEC BX JMP while Endwhile:

    Djamal Rebane

  • Djamal Rebane*SWITCH Assembleurswitch (n) { CMP n,1

    case 1: ....; break; JNE case2 case 2: .....; break; ............ default: .....; JMP endswitch } case2: CMP n,2 JNE default .......... JMP endswitch default: ........... endswitch: ...........

    Djamal Rebane

  • Djamal Rebane*crire le code de linstruction En assembleur if (a>b) && (c b) || (c > d)) 2. for (i=1; i < 10; i++) { { } }

    Djamal Rebane

  • Djamal Rebane*Liste des registres les plus utilissA. Registres gnrauxAX (A pour accumulateur): joue le rle doprande implicite dans plusieurs oprations: MUL, DIV, INC, etc. CX (C pour compteur): est utilis pour les boucles (instruction LOOP).DX: utilis dans les multiplications et divisions comme registre dextension.SI (Source Index): souvent utilis comme pointeur sur une adresse mmoire (exemple: MOV AL, [SI]). Il est trs utilise avec les instructions de traitement de chanes de caractres (LODS).DI (Destination Index): pareil que SI (instruction STOS)BP (base pointeur): sert de pointeur sur la base de la pile, et permet datteindre nimporte quel lment de la pile (exemple:

Search related