Assemblage x86: instructions INC et DEC et indicateur de débordement

En x86 assemblée, le débordement de l'indicateur est défini lorsqu'un add ou sub opération sur un entier signé de débordements, et le porte drapeau est défini lors d'une opération sur un nombre entier non signé de débordement.

Cependant, quand il s'agit de la inc et dec instructions, la situation semble s'être quelque peu différente. Selon cette site weble inc instruction n'a pas d'incidence sur le drapeau de portage à tous.

Mais je ne trouve aucune information sur la façon inc et dec incidence sur l'indicateur de débordement, si à tous.

Ne inc ou dec définir l'indicateur de débordement lors d'un dépassement d'entier se produit? Et est ce comportement identique pour les entiers signés et non signés?

============================= MODIFIER =============================

Ok, donc, essentiellement, le consensus est que l'INC et DEC devrait se comporter de la même AJOUTER de la et SOUS, en termes de définition des drapeaux, à l'exception de la retenue. C'est aussi ce qu'il dit dans l'Intel manuelle.

Le problème est que je ne peut pas reproduire ce comportement dans la pratique, quand il s'agit des entiers non signés.

Envisager l'assemblage suivant le code (en utilisant GCC assembly en ligne pour le rendre plus facile d'imprimer les résultats.)

int8_t ovf = 0;

__asm__
(
    "movb $-128, %%bh;"
    "decb %%bh;"
    "seto %b0;"
    : "=g"(ovf)
    :
    : "%bh"
);

printf("Overflow flag: %d\n", ovf);

Ici, nous décrémentation signé de 8 bits de la valeur de -128. Depuis -128 est la plus petite valeur possible, un débordement est inévitable. Comme prévu, cette affiche: Overflow flag: 1

Mais lorsque nous faisons la même chose avec un unsigned valeur, le comportement n'est pas que j'attends:

int8_t ovf = 0;

__asm__
(
    "movb $255, %%bh;"
    "incb %%bh;"
    "seto %b0;"
    : "=g"(ovf)
    :
    : "%bh"
);

printf("Overflow flag: %d\n", ovf);

Ici, je incrémenter un entier non signé de 8 bits valeur de 255. Depuis 255 est la plus grande valeur possible, un débordement est inévitable. Cependant, cette affiche: Overflow flag: 0.

Hein? Pourquoi n'a t il pas de définir l'indicateur de débordement dans ce cas?

source d'informationauteur Channel72