Professional Documents
Culture Documents
microprocesseur 8086.
Bus d'adresse:
Le 8086 utilise un bus d'adresse de 20 bits, ce qui lui permet d'atteindre 220 = 1M
cases mmoire de 1 octet chacune. Les 16 bits de poids faible du bus d'adresse
sont multiplexs avec les 16 bits du bus de donnes, alors que les 4 bits de poids
fort sont eux aussi multiplexs avec 4 bits de statut.
Jelassi Khaled
0000
Microprocesseurs
Mode dadressage
Mode dadressage
Jelassi Khaled
Microprocesseurs
Mode dadressage
Les instructions de transfert
adressage index.
Exemple:
MOV AX,Tab[SI]
Exemple:
MOV AX,Compte[BX][SI]
Jelassi Khaled
Microprocesseurs
Linstruction LEA
;AX reoit AX + BX
;ces 2 instructions additionnent la
;valeur immdiate 0F00H la paire de
;registres DX:AX (32 bits).
Les instructions de soustraction SUB et SBB.
SUB AX,DX
SBB SI,100
Jelassi Khaled
Microprocesseurs
Jelassi Khaled
Microprocesseurs
AND Destination,Source
OR Destination,Source
XOR Destination,Source
Destination = registre/case mmoire
Source = registre/valeur immdiate/case mmoire condition que Destination
ne soit pas une case mmoire.
Jelassi Khaled
Microprocesseurs
AND AX,0FFF0H
;met 0 les 4 bits de faible poids de AX
OR AL,1
;met 1 le bit de faible poids de AL
AND AX,Masque
;fait un ET logique entre le contenu de AX
;et celui de Masque, le rsultat est dans AX
XOR AX,-1
;fait le complment 1 de AX
TEST BX,0FFFE
; fait un ET logique entre le contenu de BX
;et 0FFFE sans modifier BX. Permet de
;tester le bit 1 de BX
0011
OR 0 1 0 1
0111
AND
0011
0101
XOR
0001
0011
0101
0110
CMP Destination,Source
TEST Destination,Source
Destination = registre / case mmoire
Source = registre / case mmoire / valeur
Exemples:
CMP AL,CL
; compare AL CL
CMP AL,0
; compare AL 0
TEST AL,AH
; ET logique entre AL et AH
Remarque: TEST laisse les oprandes du ET logique inchanges; les indicateurs sont
positionns en fonction du rsultat du ET logique.
Jelassi Khaled
Microprocesseurs
Saut conditionnel:
Les instructions de saut testant un flag.
JC / JNC
JS / JNS
JO / JNO
JP / JNP
JZ / JNZ
Jump if Equal
Jump if Not Equal
Jump if Greater
Jump if Greater or Equal
Jump if Less
Jump if Less or Equal
Jump if Above
Jump if Above or Equal
Jump if Below
Jump if Below or Equal
Microprocesseurs
LOOP
LOOPE
LOOPNE
etiquette
etiquette
etiquette
CX,100
AX,0
AX,CX
Boucle
langage C:
int near sommation(void) {
int x=0;
_CX=100;
do {
x=x+_CX;
_CX=_CX-1;
} while (_CX!=0);
return(x);
Jelassi Khaled
Microprocesseurs
.model small
.data
table_1 db 5 dup(?)
table_2 dw 4 dup(?)
initial_1 db 1,2,5,4,9
initial_2 dw 1000,1002,1005,1008
.code
programme proc near
mov ax,@data
; initialisation segment de donnees
mov ds,ax
mov es,ax
mov cx,5
; 5 lment transferer
cld
; transfert dans le sens croissant
mov si,offset initial_1 ; adresse du tableau source dans SI
mov di,offset table_1
; adresse du tableau destination dans DI
rep movsb
; transfert des lments de initial_1 vers table_1
mov
cx,4
; nombre dlments transfere
mov si,offset initial_2 ; adresse du tableau source dans SI
mov di,offset table_2
; adresse du tableau destination dans DI
rep movsw
; transfert des lments de initial_2 vers table_2
mov
ax,4c00h
int
21h
; Fin du programme et retour au systme dexploitation
programme endp
end
programme
Jelassi Khaled
Microprocesseurs
10
Notion de procdure
Instructions CALL et RET.
RET
Calcul
PROC
near
ENDP
CALL address
PC
(SP)
(SP) 1
SP
PC
Jelassi Khaled
(PC) + 3
(PC)H
(PC)L
(SP) - 2
address
PCL
PCH
SP
Microprocesseurs
;Retour de sous-prog
((SP) + 1)
((SP) + 2)
(SP) + 2
11
Microprocesseurs
12
Jelassi Khaled
Microprocesseurs
13
Interfaage assembleur-langage C
Directives USES et arg
near pascal addition PROC NEAR C USES di si, arg1:WORD, arg2:WORD,
arg3:WORD
push bp
;sauvegarde de BP
mov bp, sp
;faire pointer BP sur SP
push di
;sauvegarde de di
push si
;sauvegarde de si
mov si,arg1
mov di,arg2
mov ax,arg3
add ax,di
add ax,si
pop si
;rcupration de si
pop di
;rcupration de di
mov sp, bp
;remettre sp sa valeur initiale
pop bp
;rcupration de bp
ret 6
;nettoyage de la pile
addition endp
; en cas daddition de 1, 2 et 3
Addition(1,2,3);
Jelassi Khaled
Microprocesseurs
14
Assembleur et langage C
Appel de procdures C depuis lassembleur
Cas de Printf: int Cdecl printf(const char *__format, ...);
.MODEL small, c
.
printf PROTO NEAR,
Jelassi Khaled
Microprocesseurs
15
Le compilateur Assembleur
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
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
Jelassi Khaled
Microprocesseurs
16
Le compilateur Assembleur
.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
.WHILE (buf1[bx] != '$')
mov al, buf1[bx]
mov buf2[bx], al
inc bx
.ENDW
Jelassi Khaled
; mise zero de bx
; Lire un caractre
; le placer dans buf2
; incrementation de bx
Microprocesseurs
17
Jelassi Khaled
Microprocesseurs
Procdure (5)
Procdure (2)
18
Initialisation
Procdure transfert
Procdure minimum
Jelassi Khaled
Microprocesseurs
19
Procdure maximum
Programme principal
Appel de printf
call TRI
mov ah,4ch
int 21h
_main endp
end _main
Jelassi Khaled
Microprocesseurs
20
PUSH
MOV
SUB
PUSH
XOR
48E3:1C4D C746FE0000 MOV
do {48E3:1C52 8BDE MOV
48E3:1C54 D1E3
SHL
48E3:1C56 8B46FE
MOV
48E3:1C59 03870000 ADD
48E3:1C5D 8946FE
MOV
48E3:1C63 46
INC
48E3:1C64 83FE04
CMP
48E3:1C67 7EE9
JLE
BP
BP,SP
SP,+02
SI
SI,SI
Word Ptr [BP-02],0000
BX,SI
BX,1
AX,Word Ptr [BP-02]
AX,Word Ptr [BX+0000]
Word Ptr [BP-02],AX
SI
SI,+04
1C52
48E3:1C69 FF76FE
48E3:1C6C 1E
48E3:1C6D B8C400
48E3:1C70 50
48E3:1C71 90
48E3:1C72 0E
48E3:1C73 E875E8
PUSH
PUSH
MOV
PUSH
NOP
PUSH
CALL
48E3:1C76 83C406
48E3:1C79 8B46FE
48E3:1C7C EB00
48E3:1C7E 5E
48E3:1C7F 8BE5
48E3:1C81 5D
48E3:1C82 CB
ADD
MOV
JMP
POP
MOV
POP
RETF
SP,+06
AX,Word Ptr [BP-02]
1C7E
SI
SP,BP
BP
Jelassi Khaled
; int i=0;
; int somme =0;
; somme+TAB1[i];
; i++
; while(i<=4) ;
Appel de printf
CS
04EB
Microprocesseurs
; return(somme);
21