Аритметични операции и флагове

Аритметичните инструкции оставят след изпълнението си някои характеристики на резултатите от операциите под формата на 6 стойности на флага. Повечето от тях могат да бъдат анализирани чрез последващи инструкции за условен скок; може да се използва и инструкцията за прекъсване при препълванеINTO. Ефектът на всяка инструкция върху флаговете е посочен в описанието на инструкцията.

Съществуват обаче следните общи правила:

1. Флагът за пренасянеCF е зададен на 1, ако резултатът от операция за добавяне е пренасяне от най-значимия бит или резултатът от операция за изваждане е заемане към най-значимия бит от резултата. Ако не е имало пренасяне или заемане,CF е зададено на 0. Имайте предвид, че подписано пренасяне се характеризира с различни стойности на флаговетеCF иOF. ФлагътCF може да се използва за откриване на неподписано препълване. Обърнете внимание, че двете инструкции,ADC (добавяне на пренос) иSBB (изваждане назаем) включватCF в своите операции и следователно могат да се използват за многобайтово (32-, 64-битово) събиране и изваждане.

2. Флагът за междинно пренасянеAF е настроен на 1, когато се пренася от ниската хапка на резултата по време на добавяне или когато се заема в ниската хапка на резултата по време на изваждане. Ако няма пренасяне или заемане,AF се задава на 0. ФлагътAF се въвежда за извършване на десетична настройка и обикновено не се използва за други цели.

3. Знаковият флагSF се задава чрез аритметични и логически инструкции на най-значимия (7-ми или 15-ти) бит от резултата. За двоични числа със знакSF ще бъде 0, ако резултатът е положителен, и 1, ако е отрицателен (ако няма препълване). Стойността на флагSF може да бъде анализирана след товасъбиране или изваждане чрез инструкции за условно разклоняване. Програмите, които извършват операции без знак, обикновено игнориратSF, тъй като най-значимият бит от резултата се интерпретира като двоична цифра вместо знак.

4. Нулевият флагZF е настроен на 1, ако резултатът от аритметична или логическа операция е 0, и е настроен на 0, ако резултатът не е 0. Стойността на флага може да бъде анализирана чрез инструкции за условно прескачане.

5. Флагът за четностPF е настроен на 1, ако долните 8 бита на резултата от аритметична или логическа операция съдържат четен брой единици, и е настроен на 0, ако броят на единиците е нечетен. ФлагътPF може да се използва за проверка на знаците в ASCII кода за правилен паритет.

6. Флагът за препълванеOF е зададен на 1, ако резултатът е твърде голям за положително число или твърде малък за отрицателно число и не се побира в целевия операнд (без да се брои знаковият бит). В противен случай стойността на OF е 0. Състоянието на този флаг отразява наличието на знаково аритметично препълване. Може да бъде анализиран чрез инструкции за условно разклоняване или чрез инструкциятаINTO. При операции без знакOF обикновено се игнорира.