Accueil > Forum > > > > Besoin d'explications sur les flags
Besoin d'explications sur les flags
dimanche 13 février 2005 à 10:47:21 |
Besoin d'explications sur les flags

teknocrack
|
salut à tous, je programme habituellement en VB, donc je n'ai pas vraiment la notion de flags, même si en réalité on peut comparer un IF avec un flags->saut...!! Bref, j'ai du mal à comprendre avec quelle instruction ils sont actifs! Par exemple: -je crois savoir que l'instruction ADD n'a pas de retenue (CF) mais que l'instruction ADC en propose une, alors que faut-il faire pour activer cette retenue? -si AX vaut 10 et que BX vaut 10, avec l'instruction ADD AX,BX j'ai un overflow? Si vous connaissez une tuto qui décrit tres clairement a quel moment un flag est actif avec des exemples, merci de me l'indiquer. merci par avance @+
|
|
lundi 14 février 2005 à 11:18:10 |
Re : Besoin d'explications sur les flags

patatalo
|
salut, la documentation intel est ce qu'il y a de mieux: [ Lien ]un overflow ce produit quand tu dépasse la capacité de l'accumulateur de destination. ADD AX,BX ne provoque un overflow que si AX+BX > 65535. @++
|
|
samedi 5 mars 2005 à 13:13:24 |
Re : Besoin d'explications sur les flags

CoreBreaker
|
C'est les bases de l'arithmétique binaire que tu as aussi en VB les plus importants à connaitre sont CF (retenue), ZF (zéro), et OF (overflow) CF est mis à un lorsqu'une opération à pour résultat une valeur supérieure à la valeur max, qui sont: BYTE: >255 WORD: >65535 DWORD: >4294967295 en valeur non signée, et pour les valeur signée tout résultat >-1 donc positif ou nul met à 1 le flag CF car les valeur max non signée ont la même représentation que -1 En effet, que tu sois en signé ou non cela ne change rien pour le processeur, c'est toi dans ta programmation, qui défini si les nombre seront signé ou non, le processeur s'en fout ZF est mis à un lorsque le résultat d'une opération est nul OF sert surtout d'indicateur losque tu veux travailler en nombres signés OF est mis à un lorsque le MSB du résultat a changé par rapport au MSB des opérandes et ceci quand le MSB des opérandes sont les mêmes mais en pratique il est mis à un lorsque le résultat d'une opération déborde, donc: BYTE: <-128 ou >127 WORD: <-32768 ou >32767 DWORD: <-2147483648 ou >2147483647 donc pour répondre à ta question 10+10=20 donc pas d'overflow car le MSB de 20 est 0 et le MSB de 10 est 0, il n'a pas changé, par contre 127+127 produit un overflow si on utilise des octets (BYTE) mov al, 127 mov ah, 127 add al, ah ; OF=1 mais mov ax, 127 mov bx, 127 mov ax, bx ; OF=0 de plus mov al, 255 mov ah, 1 add al, ah ; ZF=1,CF=1, mais OF=0 Core Breaker 
|
|
samedi 5 mars 2005 à 16:48:08 |
Re : Besoin d'explications sur les flags

teknocrack
|
Merci à tous les 2 pour votre aide, c'est beaucoup plus clair maintenant! Je crois qu'il ne me reste plus qu'a faire quelques manip. Encore merci pour m'avoir aidé à démarrer dans ce langage @+
|
|
lundi 7 mars 2005 à 01:41:19 |
Re : Besoin d'explications sur les flags

CoreBreaker
|
De rien. Je me suis aperçu que j'ai oublié un flag important dont le processeur se sert, c'est le flag SF qui est l'image du bit de signe (le MSB) du résultat d'une opération.
J'ai oublié de dire aussi que les instructions de saut (jxx) se sert des flags pour déterminer s'il y a saut ou pas.
Voici quelques intructions de saut conditionnel: JA: (Jump if After) saut si CF OR ZF = 0 JAE: (Jump if After or Equal) saut si CF = 0 JB: (Jump if Before) saut si CF = 1 JBE: (Jump if Before or Equal) saut si CF OR ZF = 1 JE: (Jump if Equal) saut si ZF = 1 JG: (Jump if Greater) saut si (SF XOR OF) OR ZF = 0 JGE: (Jump if Greater or Equal) saut si SF XOR OF = 0 JL: (Jump if Less) saut si SF XOR OF = 1 JLE: (Jump if Less or Equal) saut si (SF XOR OF) OR ZF = 1 JNA: (Jump if Not After) saut si CF OR ZF = 1 JNAE: (Jump if Not After or Equal) saut si CF = 1 JNB: (Jump if Not Before) saut si CF = 0 JNBE: (Jump if Not Before or Equal) saut si CF OR ZF = 0 JNE: (Jump if Not Equal) saut si ZF = 1 JG: (Jump if Not Greater) saut si (SF XOR OF) OR ZF = 1 JGE: (Jump if Not Greater or Equal) saut si SF XOR OF = 1 JL: (Jump if Not Less) saut si SF XOR OF = 0 JLE: (Jump if Not Less or Equal) saut si (SF XOR OF) OR ZF = 0
Les instructions CMP AL, BL et SUB AL, BL font la soustration AL-BL, à la différence que le résultat est placé dans AL pour l'instruction SUB, mais que l'instruction CMP ne modifie pas AL
CMP AL, BL JB dest ; saute si AL<BL, donc si AL-BL produit une retenue (CF=1) En effet, si AL<BL, AL-BL<0, et si le résultat est négatif, une retenue est forcément produite
CMP AL, BL JL dest ; saute si AL<BL
pour JB et JL, ce ne sont pas les même flag qui sont utilisé JB est utilisé pour les nombres non signés, et JL pour les nombres signés: si AL=10 et BL=250, il y a un saut avec JB mais pas avec JL La raison est simple, si on considère les valeurs non signées, AL-BL=10-250=-240, le résultat est négatif, il y a donc saut. Mais si on considère les valeurs non signées, alors AL=+10, et BL=-6, on a donc AL-BL=(+10)-(-6)=+16, le résultat est positif, il n'y a pas de saut Donc pour les nombres signés on ne peut se fier à CF
J'ai aussi oublié de répondre à une autre de tes questions: ADD peut produire une retenue, tout comme ADC, mais ADD n'utilise pas CF, alors ADC le fait. ADC AX, BX ; effectue l'intruction AX=AX+BX+CF En fait, la combinaison ADD/ADC permet de faire l'addition de grands nombre, voici comment additionner 2 nombre de 1024 octets (1Ko)
data segment nb1 db 1024 dup(?) nb2 db 1024 dup(?) result db 1024 dup(?) data ends
code segment mov ax, data mov ds, ax mov es, ax cld
mov si, offset nb1 mov bx, offset nb2 mov di, offset result
mov cx, 1024 / 2 ; on travaille en WORD donc on divise par 2 clc ; on met CF à zéro
boucle: lodsb adc ax, word ptr [bx] stosb lea bx, [bx+2] loop boucle code ends
et de manière plus classique voici comment additionner 2 nombres de 32bit en 16bits:
data segment nb1 dd 654644 nb2 dd 44485457 result dd ? data ends
code segment word public use16 mov ax, word ptr [nb1][0] mov bx, word ptr [nb2][0]
mov cx, word ptr [nb1][2] mov dx, word ptr [nb2][2]
add ax, bx ; addition des word de poids faible adc cs, dx ; addition des word de poids fort en tenant compte ; de la retenue produit par l'addtion des word de poids faible
mov word ptr [result][0], ax mov word ptr [result][2], cx code ends
Core Breaker 
|
|
Cette discussion est classée dans : add, instruction, explications, flags, retenue
Répondre à ce message
Sujets en rapport avec ce message
# Export Table - Kernel32.dll - GetProcessAddress # [ par joanna ]
Voici le code qui devrait récupérer l'adresse de la fonction "GetProcessAddress" connaissant l'ImageBase du module "kernel32.dll".Malheureusement à la
# Export Table --- Kernell32.dll --- GetProcAddress # [ par joanna ]
Voici le code qui devrait récupérer l'adresse de la fonction "GetProcessAddress" connaissant l'ImageBase du module "kernel32.dll".Malheureusement à la
Instruction SYSENTER et WRMSR ??? [ par toto8966 ]
Utiliser l'instruction Pentium SYSENTER pour exécuter du code en Ring0 au départ de Ring3, c'est normalement possible !Seulement, y'a un problème.Quan
instruction MID(vb) en ASM [ par flagyg ]
Bonjour,J'essaye de traduire des codes que j'ai fait en vb en asm. mais je n'arrive pas à programmer la fonction mid.Qqn pourrait me la programmer svp
Instructions ASM [ par BarthOlivier ]
Salut a tous.Je voudrais savoir où je pourrais trouver tout le jeux d'instruction disponible pour un processeur recent (type P3 ou P4 par exemple).Est
pb avec l'instruction loop ( bla..ro de 1ere) ! [ par vinc1008881 ]
bonjour tlm voila mon pb ( pour moi s'en n'est un ..) : a:mov ecx, 00000000hloop aet le pb c 'est que le b
Flags dans le registre INTCON [ par tahiti_bob ]
Bonjour,J'ai trouvé sur cette page une excellente routine de communication RS232 entre un PIC et un PC.http://www.electronic-engineering.ch
Faire des conditions sans instruction J* [ par grandvizir ]
Bonjour,Quand je fais un programme Delphi, je dois souvent faire des IF : if MaVariable then {quelque chose};<
probleme instruction assembleur [ par kadwin ]
bonsoir!! j'ai un petit probleme de comprehension!! si eax = 1001101010 (en binaire) je fais ensuite l'instruction: shl eax, 7 quelle sera la vale
assembleur [ par unionx ]
Bonjour a tousbon;j'aime bien apprendre la programmation en assembleur , sous ms-dos :) , mais j'ai pas trouvé des bonnes tutorial , il est vraiment d
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : PIC 16F84RE : PIC 16F84 par pont
Cliquez pour lire la suite par pont RE : PIC 16F84RE : PIC 16F84 par belounis
Cliquez pour lire la suite par belounis RE : PIC 16F84RE : PIC 16F84 par pont
Cliquez pour lire la suite par pont
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|