La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Système d’exploitation : Assembleur Semaine 08 Instructions arithmétiques.

Présentations similaires


Présentation au sujet: "Système d’exploitation : Assembleur Semaine 08 Instructions arithmétiques."— Transcription de la présentation:

1 Système d’exploitation : Assembleur Semaine 08 Instructions arithmétiques

2 Instruction arithmétique : ADD (1/3) ADD opérande 1,opérande 2 (addition d’entiers) où opérande 1 devient opérande 1 + opérande 2 – Exemples ADD AX, BXavec AX= 1234h (par exemple) ADD AX, [BX] ADD [BX], AX ADD AL, 20h ADD CX, 0ABCDh ADD BYTE PTR[3],12h ADD WORD PTR ES:[3], 1235h Addition purement binaire d’où pas de distinction entre signés et non-signés – Possibilités d’utilisation ADD reg (8 ou 16 bits), reg (8 ou 16 bits) ADD reg(8 ou 16), mem (8 ou 16) ADD mem(8 ou 16), reg (8 ou 16) ADD reg(8 ou 16), imm (8) ADD reg(16),imm(16) ADD mem(8 ou 16), imm(8) ADD mem(16), imm(16)

3 Instruction arithmétique : ADD (2/3) Les indicateurs d’état affectés par ADD sont CF, ZF, OF, SF, AF, PF OF = 0 : résultat correct pour des entiers signés = 1 : résultat incorrect pour des entiers signés (overflow) SF = 0 : bit de gauche à 0 (résultat >= 0 si signé) = 1 : bit de gauche à 1 (résultat <0 si signé) ZF = 0 : indique un résultat différent de 0 (signé ou non) = 1 : indique un résultat égal à 0 AF = 0 : pas de report auxiliaire du quartet de droite sur le suivant = 1 : report auxiliaire du quartet de droite sur le suivant PF = 0 : nombre impair de bits à 1 dans le byte de droite = 1 : nombre pair de bits à 1 dans le byte de droite CF = 0 : pas de report au-delà du bit le plus significatif = 1 : report au-delà du bit le plus significatif Pour les entiers signés, les indicateurs les plus utiles sont : OF, SF, ZF Pour les entiers non-signés, les indicateurs les plus utiles sont : CF, ZF

4 Instruction arithmétique : ADD (3/3) Exemple : Que valent les indicateurs d’état ? (sur 8 bits) 9A + 3E = D OF= 0SF=1ZF=0AF=1PF=1CF=0 non signé : = 216 signé : = -40

5 Instruction arithmétique : ADC ADC (ADd with Carry) : – Idem ADD, mais carry ajouté à la somme – (valeur du Carry Flag) Exemple ADC AX,0FFAh avec AX= 2000 et CF=1 résultat : AX contient FFA+1 = 2FFB Exemple d’utilisation : addition de nombres codés sur 32 bits additionner les nombres 84536d et d soit 14A38h + 1CE3Bh mov ax, 4A38h mov dx, 0001h add ax, 0CE3Bh adc dx, 0001h résultat : AX contient 1873h et DX contient 0003h ( ) le résultat de l’addition vaut 31873h, soit d

6 Instruction arithmétique : INC INC additionne 1 à l’opérande destination – Exemples : INC AL INC byte ptr [BX] Possibilités d’utilisation : – INC reg(8 ou 16 bits) – INC mem(8 ou 16 bits) Attention : INC modifie les mêmes indicateurs que ADD sauf le CF

7 Instruction arithmétique : SUB (1/3) SUB opérande 1,opérande 2 (soustraction d’entiers) – où opérande 1 devient opérande 1 - opérande 2 Exemples – SUB AX, BXavec AX= 1234h (par exemple) – SUB AX, [BX] – SUB [BX], AX – SUB AL, 20h – SUB CX, 0ABCDh – SUB BYTE PTR[3],12h – SUB WORD PTR ES:[3], 1235h Soustraction purement binaire d’où pas de distinction entre signés et non-signés Possibilités d’utilisation – SUBreg (8 ou 16 bits), reg (8 ou 16 bits) – SUB reg(8 ou 16), mem (8 ou 16) – SUB mem(8 ou 16), reg (8 ou 16) – SUB reg(8 ou 16), imm (8) – SUB reg(16),imm(16) – SUB mem(8 ou 16), imm(8) – SUB mem(16), imm(16)

8 Instruction arithmétique : SUB (2/3) Les indicateurs d’état affectés par SUB : OF = 0 : résultat correct pour des entiers signés = 1 : résultat incorrect pour des entiers signés (overflow) SF = 0 : bit de gauche à 0 (résultat >= 0 si signé) = 1 : bit de gauche à 1 (résultat <0 si signé) ZF = 0 : indique un résultat différent de 0 (signé ou non) = 1 : indique un résultat égal à 0 AF = 0 : pas d’emprunt auxiliaire du quartet de droite sur le suivant = 1 : emprunt auxiliaire du quartet de droite sur le suivant PF = 0 : nombre impair de bits à 1 dans le byte de droite = 1 : nombre pair de bits à 1 dans le byte de droite CF = 0 : pas d’emprunt au-delà du bit le plus significatif = 1 : emprunt au-delà du bit le plus significatif

9 Instruction arithmétique : SUB (3/3) Exemple : Que valent les indicateurs d’état ? (sur 8 bits) 9A - 3E = 5C – = OF=1SF=0ZF=0AF=1PF=1CF=0 non signé : = 92 signé : = 92

10 Exemple d’utilisation.model small.code mov ax,1234h add ax,20h;ok dans les 2 cas mov ax,0E123h add ax,2000h;ok si signés - dépassement de capacité si non-signés mov ax,8000h add ax,8000h;résult =0 - erreur si signés et si non-signés add word ptr ds:[3],0D123h ; mov ax,0FFF0h adc ax,0Fh ; mov ax,0A00h sub ah,2;ok dans les 2 cas mov ax,0100h sub ah,2;ok si signés - erreur si non-signés sub ax,ds:[2] ; mov bx,1111h mov cx,2222h sub bx,cx ;

11 Instruction arithmétique : SBB SBB (SuB with Borrow) Idem SUB, mais carry retiré au résultat Exemple SBB AX,0FFFh avec AX= 2000 et CF=1 résultat : AX contient FFF-1 = 1000h Exemple d’utilisation : soustraction de nombres codés sur 32 bits – soustraire les nombres d et d soit 2CE3Bh-1DA38h mov ax, 0CE3Bh mov dx, 0002h sub ax, 0DA38h sbb dx, 0001h – résultat : AX contient F403h et DX contient 0000h ( ) le résultat de la soustraction 0F403h, soit 62467d CF

12 Instruction arithmétique : DEC DEC soustrait 1 à l’opérande destination – Exemples DEC AL DEC [BX] Possibilités d’utilisation : – DEC reg(8 ou 16 bits) – DEC mem(8 ou 16 bits) Attention : DEC modifie les mêmes indicateurs que SUB sauf le CF

13 Instruction arithmétique : NEG NEG remplace l’opérande destination par son complément à 2 – destination devient 0-destination Exemples – NEG AXsi AX = 1234h, AX devient EDCCh – NEG byte ptr [BX] Possibilités d’utilisation : – NEG reg(8 ou 16 bits) – NEG mem(8 ou 16 bits) NEG modifie les mêmes indicateurs que SUB

14 Instruction arithmétique : CMP CMP compare les 2 opérandes – positionne les indicateurs OF, SF, ZF, AF, PF, et CF en fonction du résultat de la comparaison ( destination – source ) Exemples :CMP AL, BL Possibilités d’utilisation : CMP reg(8 ou 16), reg(8 ou 16) CMP reg(8 ou 16), mem(8 ou 16) CMP mem(8 ou 16), reg(8 ou 16) CMP reg(8 ou 16), imm(8) CMP reg(16), imm(16) CMP mem(8 ou 16), imm(8) CMP mem(16), imm(16) L’instruction CMP est toujours utilisée en relation avec l’instruction de branchement conditionnel Jcond

15 Overflow Flag OF=1 si pour le bit de poids fort: – 0+0=1 – 1+1=0 – 0-1=1 – 1-0=0


Télécharger ppt "Système d’exploitation : Assembleur Semaine 08 Instructions arithmétiques."

Présentations similaires


Annonces Google