Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > значение флагов


Автор: Гость_инга 20.6.2005, 15:28
Какое значение будут иметь флаги(CF,ZF,SF) после выполнения фрагмента программы:
POLE DW 5H
DD 15
...
MOV AL,POLE
ADD AL,5

Автор: Payne 20.6.2005, 23:04
Во-первых, компилятор выдаст ошибку при попытке поместить в регистр al (это всего один байт - byte) значение переменной POLE типа dw (word - слово, а это уже два байта!). Поэтому либо значение нужно помещать в регистр ax, а не в младшую его часть, либо переменная должна быть объявлена как

POLE DB 5h.

Далее, флаги я проверил даже в отладчике. Устанавливается после операции только флаг PF (все перечисленные вами не изменяются и остаются сброшенными). PF - флаг паритета. Он устанавливается, если результат имеет четное число единиц и сбрасывается, если нечетное. Действительно, 5h + 5h = Ah, что равно 1010b.
CF - флаг переноса. В результате операции переноса не было, следовательно он остается сброшенным.
ZF - флаг нуля. Результат операции равен единице, следовательно он сброшен.
SF - флаг знака. Он установлен, если старший бит результата равен 1 и сброшен в противном случае. Результат - 1010 - старший бит равен нулю, значит - SF сброшен.

Автор: Akina 21.6.2005, 07:39
А еще я бы потребовал гарантии, что содержимое POLE не изменилось от старта программы до выполнения кода.

Цитата(Payne @ 21.6.2005, 00:04)
ZF - флаг нуля. Результат операции не равен единице, следовательно он сброшен.

таки нулю...

Цитата(Payne @ 21.6.2005, 00:04)
Результат - 1010 - старший бит равен нулю, значит - SF сброшен.

Результат равен 00001010 ...

Автор: Payne 21.6.2005, 08:05
Akina, признаю свои ошибки. Но если насчет

Цитата
Результат операции не равен единице, следовательно он сброшен


просто описка, то насчет

Цитата
1010 - старший бит равен нулю


я просто ступил smile .

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)