format pe gui 4.0
xor eax, eax
mov ax, 9
xor cx, cx
@:
stc ; устанавливаем cf
rcr ah, 1 ; сдвигаем и получаем 01
rcr ah, 1 ; сдвигаем влево, так как cf не установим получим 10
stc ; устанавливаем cf
rcr ah, 1 ; в ah - получаем число Ah = 10d = 1010b
rol ax, 4 ; получаем число 9Ah в al
rol al, 4 ; сдвигаем и получаем A9h = 169d
rol al, 2 ; сдвигаем и получаем A6h = 166d
xor al, 166 ; сравниваем, в результате в al ноль -> ZF = 1
jnz @ ; иначе уходим на метку
pushf ; сохраняем состояние флагов в стеке
pop dx ; сохраняем состояние флагов в регистре
push dx ; восстанавливаем флаги в стеке
popf ; достаём из стека регистр флагов
flags_check: ; проверяем флаги порядке of, sf, zf, pf, cf
of_check: ; of
jo of_true
sf_check: ; sf
push dx
popf
js sf_true
zf_check: ; zf
push dx
popf
jz zf_true
pf_check: ; pf
push dx
popf
jp pf_true
cf_check: ; cf
push dx
popf
jc cf_true
rol al, 1 ; сдвигаем сразу, если cf не установлен полседний бит al = 0
ret
of_true:
inc al
jmp sf_check
sf_true:
rol al, 1
xor ax, 0001b
jmp zf_check
zf_true:
rol al, 1
xor al, 0001b
jmp pf_check
pf_true:
rol al, 1
xor al, 0001b
jmp cf_check
cf_true:
xor al, 0001b
ret