Chapitre 3 PPT
Chapitre 3 PPT
Chapitre 3 PPT
Addition(1,2,3);
Microprocesseurs
1
Assembleur et langage ’C’
Appel de procédures ‘C’ depuis l’assembleur
.DATA
format BYTE '%i %i', 13, 0 ; chaîne de caractères à afficher par printf
.CODE
_main PROC PUBLIC ; Procédure assembleur qui fait appel à
printf
.
INVOKE printf, OFFSET format, ax, bx
.
.
.
_main endp
END _main ; Fin de la procédure
Microprocesseurs
2
Le compilateur Assembleur
Un petit programme réalisé avec DEBUG :
C:\DOS>debug
-a
24A2 : 0100 ORG 200
24A2 : 0200 DB "Bien le bonjour de la part de DEBUG!$"
24A2 : 0225 ORG 100
24A2 : 0100 MOV AH,09
24A2 : 0102 MOV DX,200
24A2 : 0105 INT 21
24A2 : 0107 MOV AX,4C00
24A2 : 010A INT 21
24A2 : 010C [Return]
-g
le même programme écrit pour MASM/TASM :
DOSSEG
.MODEL SMALL
.STACK 50
.DATA
LIGNE DB "Bien le bonjour de la part de MASM/TASM!$"
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AH,09H
MOV DX,OFFSET LIGNE
INT 21H
MOV AX,4C00H
INT 21H
END
Microprocesseurs
3
Le compilateur Assembleur
Déclaration de variables initialisées:
.DATA
octet db -2
octets db 8 dup(0)
chaine db "Bonjour",0
mot dw 7FFFh
doubleMots dd 2 dup(0FFFFFFFFh)
nombre_reel real4 1.0
.DATA
buf1 BYTE "This is a string",'$‘
buf2 BYTE 100 DUP (?)
.CODE
sub bx, bx ; mise à zero de bx
.WHILE (buf1[bx] != '$')
mov al, buf1[bx] ; Lire un caractère
mov buf2[bx], al ; le placer dans buf2
inc bx ; incrementation de bx
.ENDW
Microprocesseurs
4
Thèmes de programmation variés
Exemples de programmation:
Remarque: Les procédures (2) et (5) doivent être écrites en langage ‘C’:
Microprocesseurs
5
Thèmes de programmation variés
.model small
.stack 256
.data
TAB1 dw 3,2,1,5,4
Initialisation
tab2 dw 5 dup(?)
message byte 0ah,0dh,' le resultat est: %d',0
.code
public TAB1
extern SOMME:far ; procédure ‘C’
extern _printf:far ; procédure ‘C’
extern TRI:near ; procédure ‘C’
Microprocesseurs
7
Traduction en assembleur de procédures ‘C’
Procédure SOMME
48E3:1C44 55 PUSH BP
48E3:1C45 8BEC MOV BP,SP
48E3:1C47 83EC02 SUB SP,+02
48E3:1C4A 56 PUSH SI
48E3:1C4B 33F6 XOR SI,SI ; int i=0;
48E3:1C4D C746FE0000 MOV Word Ptr [BP-02],0000 ; int somme =0;
do {48E3:1C52 8BDE MOV BX,SI
48E3:1C54 D1E3 SHL BX,1
48E3:1C56 8B46FE MOV AX,Word Ptr [BP-02]
48E3:1C59 03870000 ADD AX,Word Ptr [BX+0000] ; somme+TAB1[i];
48E3:1C5D 8946FE MOV Word Ptr [BP-02],AX
48E3:1C63 46 INC SI ; i++
48E3:1C64 83FE04 CMP SI,+04 ; while(i<=4) ;
48E3:1C67 7EE9 JLE 1C52
Microprocesseurs
8