système d’exploitation : assembleur

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

Upload: julie-welch

Post on 02-Jan-2016

35 views

Category:

Documents


2 download

DESCRIPTION

Système d’exploitation : Assembleur. Semaine 08 Instructions arithmétiques. 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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Système d’exploitation : Assembleur

Système d’exploitation : Assembleur

Semaine 08Instructions arithmétiques

Page 2: Système d’exploitation : Assembleur

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, BX avec 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)

Page 3: Système d’exploitation : Assembleur

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

Page 4: Système d’exploitation : Assembleur

Instruction arithmétique : ADD (3/3)• Exemple :

Que valent les indicateurs d’état ? (sur 8 bits)9A + 3E = D8 111111001101000111110++++++++11011000

OF= 0 SF=1 ZF=0 AF=1 PF=1 CF=0

non signé : 154 + 62 = 216signé : -102 + 62 = -40

Page 5: Système d’exploitation : Assembleur

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 2000+0FFA+1 = 2FFB

• Exemple d’utilisation : addition de nombres codés sur 32 bits• additionner les nombres 84536d et 118331d

soit 14A38h + 1CE3Bhmov ax, 4A38hmov dx, 0001hadd ax, 0CE3Bhadc dx, 0001h

• résultat : AX contient 1873h et DX contient 0003h (0001+0001+0001)le résultat de l’addition vaut 31873h, soit 202867d

Page 6: Système d’exploitation : Assembleur

Instruction arithmétique : INC

• INC additionne 1 à l’opérande destination– Exemples :

INC ALINC 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

Page 7: Système d’exploitation : Assembleur

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, BX avec 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– SUB reg (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)

Page 8: Système d’exploitation : Assembleur

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

Page 9: Système d’exploitation : Assembleur

Instruction arithmétique : SUB (3/3)• Exemple :

Que valent les indicateurs d’état ? (sur 8 bits)9A - 3E = 5C10011010 – 0011 1110 =

1111 11001 10100011 1110--------------0101 1100

OF=1 SF=0 ZF=0 AF=1 PF=1 CF=0

non signé : 154 - 62 = 92signé : -102 - 62 = 92

Page 10: Système d’exploitation : Assembleur

Exemple d’utilisation.model small.code

mov ax,1234hadd ax,20h ;ok dans les 2 cas

mov ax,0E123hadd ax,2000h ;ok si signés - dépassement de capacité si non-signés

mov ax,8000hadd ax,8000h ;résult =0 - erreur si signés et si non-signés

add word ptr ds:[3],0D123h;-----------------------------------------------------------------------

mov ax,0FFF0hadc ax,0Fh

;-----------------------------------------------------------------------mov ax,0A00hsub ah,2 ;ok dans les 2 cas

mov ax,0100hsub ah,2 ;ok si signés - erreur si non-signés

sub ax,ds:[2];-----------------------------------------------------------------------

mov bx,1111hmov cx,2222hsub bx,cx

;-----------------------------------------------------------------------...

Page 11: Système d’exploitation : Assembleur

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 2000-0FFF-1 = 1000h

• Exemple d’utilisation : soustraction de nombres codés sur 32 bits– soustraire les nombres 183867d et 121400d

soit 2CE3Bh-1DA38hmov ax, 0CE3Bhmov dx, 0002hsub ax, 0DA38hsbb dx, 0001h

– résultat : AX contient F403h et DX contient 0000h (0002-0001-0001)le résultat de la soustraction 0F403h, soit 62467d

CF

Page 12: Système d’exploitation : Assembleur

Instruction arithmétique : DEC

• DEC soustrait 1 à l’opérande destination– Exemples

DEC ALDEC [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

Page 13: Système d’exploitation : Assembleur

Instruction arithmétique : NEG

• NEG remplace l’opérande destination par son complément à 2– destination devient 0-destination

• Exemples– NEG AX si 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

Page 14: Système d’exploitation : Assembleur

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

Page 15: Système d’exploitation : Assembleur

Overflow Flag

• OF=1 si pour le bit de poids fort:– 0+0=1– 1+1=0– 0-1=1– 1-0=0