| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 не изменилось от старта программы до выполнения кода.
таки нулю...
Результат равен 00001010 ... |
| Автор: Payne 21.6.2005, 08:05 | ||||
Akina, признаю свои ошибки. Но если насчет
просто описка, то насчет
я просто ступил |