Микропроцессор содержит регистр флагов. Флаги ставятся ALU по результатам операций и используются в операциях условных переходов. Как правило практически любой микропроцессор содержит флаги: Carry Переноса Zero Нуля Overflow Переполнения Sign Знака Пример регистра флагов для Zilog Z80:
Пример регистра флагов для Intel 8086:
Для сравнения чисел обычно используют команду COMPARE (СРАВНЕНИЕ), которая вычитает второй операнд из первого, но результат никуда не записывается, а просто устанавливаются флаги. CMP A,B ; Set_Flags(A-B) Рассмотрим условия переходов и их связь с флагами и сравнениями на примере нескольких процессоров:
Флаги: CF - carry OF - overflow ZF - zero SF - sign PF - parity Условия в IA-32
Условия: -------------------------------------------------------------------------- Abbr Unsigned Signed Condition Description -------------------------------------------------------------------------- A/NBE > (CF==0) and (ZF==0) Above/Not Below Equal AE/NB/NC > = CF==0 Above Equal/Not Below/Not Carry B/NAE/C < CF==1 Below/Not Above Equal/Carry BE/NA < = (CF==1) or (ZF==1) Below Equal/Not Above E/Z == == ZF==1 Equal/Zero NE/NZ != != ZF==0 Not Equal/Not Zero G/NLE > (SF==OF) and (ZF==0) Greater/Not Less Equal GE/NL >= (SF==OF) Greater Equal/Not Less L/NGE < SF!=OF Less/Not Greater Equal LE/NG <= (SF!=OF) or (ZF==1) Less Equal/Not Greater NO OF==0 Not Overflow O OF==1 Overflow NP/PO PF==0 No Parity/Parity Odd P/PE PF==1 Parity/Parity even NS SF==0 No Sign S SF==1 Sign ---------------------------------------------------------------------------
Регистр флагов для Motorola MC68000: Условия в 68K
Флаги: C - carry V - overflow Z - zero N - sign
Условия: --------------------------------------------------------------------------- Abbr Unsigned Signed Condition Description --------------------------------------------------------------------------- NE != != Z==0 Not Equal EQ == == Z==1 Equal HI > (C+Z)==0 Higher LS < = (C+Z)==1 Less Equal HS > = C==0 Higher Equal LO < C==1 Lower GE >= (N xor V) == 0 Greater Equal LT < (N xor V) == 1 Less That GT > Z + (N xor V) == 0 Greater LE <= Z + (N xor V) == 1 Less Equal PL N == 0 Plus MI N == 1 Minus VC V == 0 Overflow Clear VS V == 1 Overflow Set T always 1 True F always 0 False --------------------------------------------------------------------------- TODO: Регистр флагов может содержать группы наборов арифметических флагов как у PowerPC. TODO: Команды могут быть условные от флагов как в IA-64, HP-PA, ARM TODO: Флаги есть у FPU тоже - их мы опишем в соответствующей секции