Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
Mode dadressage
Les instructions peuvent avoir 0, 1, ou 2 oprandes.
Exemples :
adressage immdiat.
Exemples: MOV AX, 0A1EBH ; AX:= valeur hexa A1EB
ADD CL, 25 ; CL:= CL + 25
OR AH,11000000 ; forcer les 2 bits de fort poids de AH 1
adressage direct.
adressage index.
Linstruction LEA
L'instruction XCHG.
Exemple: XCHG AX,Somme ;change des contenus de AX et de Somme
Exemples:
Exemples:
Saut conditionnel:
JE Jump if Equal
JNE Jump if Not Equal
JG Jump if Greater
JGE Jump if Greater or Equal
JL Jump if Less
JLE Jump if Less or Equal
JA Jump if Above
JAE Jump if Above or Equal
JB Jump if Below
JBE Jump if Below or Equal
Assembleur:
_sommation proc near
MOV CX,100
Boucle: MOV AX,0
ADD AX,CX
LOOP Boucle
_sommation endp
langage C:
int near sommation(void) {
int x=0;
_CX=100;
do {
x=x+_CX;
_CX=_CX-1;
} while (_CX!=0);
return(x);
.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
ASSUME cs:_TEXT
_ma_fonction PROC near
PUSH bp
MOV bp,sp
; return x + y;
MOV ax, [bp+4]
ADD ax, [bp+6]
POP bp
RET
_ma_fonction ENDP ;
Addition(1,2,3);
.DATA
format BYTE '%i %i', 13, 0 ; chane de caractres afficher par printf
.CODE
_main PROC PUBLIC ; Procdure assembleur qui fait appel
printf
.
INVOKE printf, OFFSET format, ax, bx
.
.
.
_main endp
END _main ; Fin de la procdure
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 mme 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
.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 caractre
mov buf2[bx], al ; le placer dans buf2
inc bx ; incrementation de bx
.ENDW
Exemples de programmation:
Procdure 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