Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
HAIRY
0 / 0 / 0
Регистрация: 24.01.2011
Сообщений: 231
1

Флаг переполнения и переноса

27.06.2016, 01:36. Просмотров 2153. Ответов 10
Метки нет (Все метки)

Объясните, пожалуйста в чем разница, не совсем понимаю. И как записать последовательность двух команд, чтобы при выполнении одновременно устанавливались флаги CF и OF.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2016, 01:36
Ответы с готовыми решениями:

Инкремент, не работает флаг переполнения
Доброго времени суток. Буду краток. Есть код: mov eax, 0ffffffffh inc eax...

Вспомогательный флаг переноса (AF)
Доброго всем дня. Буду краток. Требуется Сегодня вдруг с удивлением обнаружил...

Флаг переноса и таймеры
Помогите пожалуйста подправить в программе у меня проблема с флагом переноса и...

переполнения деления
Почему когда запускаешь еxe пишет переполнения деления?

Проверка на ноль и переполнения
Здравствуйте, помогите, пожалуйста, реализовать проверку деления на ноль и...

10
Constantin Cat
1960 / 1048 / 365
Регистрация: 28.02.2015
Сообщений: 2,324
Завершенные тесты: 1
27.06.2016, 09:11 2
Цитата Сообщение от HAIRY Посмотреть сообщение
как записать последовательность двух команд, чтобы при выполнении одновременно устанавливались флаги CF и O

Никак. Каждый раз выполняя команду, которая влияет на флаги, к примеру сложение, процессор устанавливает флаги в соответствии с результатом.
Потом используя соответствующие команды переходов: JC, JZ, JO, JNC, JNZ, JNO и т.д. программист реагирует на ситуацию. Сами команды переходов флаги не меняют, поэтому можно использовать несколько команд переходов последовательно.
0
tahir_
159 / 100 / 25
Регистрация: 18.05.2015
Сообщений: 474
27.06.2016, 09:18 3
Constantin Cat, а разве нельзя подобрать команды которая меняет один флаг не трогая второй, потом второй командой изменить второй флаг не трогая первый ?

HAIRY, Это нужно ?
0
Constantin Cat
1960 / 1048 / 365
Регистрация: 28.02.2015
Сообщений: 2,324
Завершенные тесты: 1
27.06.2016, 09:48 4
Assembler
1
2
mov al,81h
shl al,1
такой код меняет оба флага одновременно.

Цитата Сообщение от tahir_ Посмотреть сообщение
а разве нельзя подобрать команды
подобрать можно, вот только заданние слишком разплывчатое.
1
ФедосеевПавел
Модератор
3670 / 2038 / 843
Регистрация: 01.02.2015
Сообщений: 6,777
27.06.2016, 10:51 5
А команды прямой записи в регистр флагов?
Assembler
1
2
        push 0000100000000001b
        popf
Добавлено через 1 минуту
И ещё, кажется, существуют команды обмена регистра флагов с регистром ax.
2
HAIRY
0 / 0 / 0
Регистрация: 24.01.2011
Сообщений: 231
27.06.2016, 12:20  [ТС] 6
всем спасибо, за ответы, но вы так и не рассказали в чем разница флагов.
Цитата Сообщение от Constantin Cat Посмотреть сообщение
такой код меняет оба флага одновременно.
а есть еще варианты? просто на момент этого задания, в книге еще не изучались побитовые сдвиги.
0
Constantin Cat
1960 / 1048 / 365
Регистрация: 28.02.2015
Сообщений: 2,324
Завершенные тесты: 1
27.06.2016, 12:46 7
Цитата Сообщение от HAIRY Посмотреть сообщение
но вы так и не рассказали в чем разница флагов
CF - флаг контролирующий выход значения за пределы разрядной сетки, может устанавливатся/сбрасыватся/инвертироватся программно.
OF - флаг контролирующий изменения знакового разряда, т.е. если при сложении двух отрицательных чисел, получился положительный результат, т.е. ошибка.
Эти флаги используются программистами, для контроля результата при работе с знаковыми числами. Почитайте Юрова, там есть раздел посвященный этому.

Цитата Сообщение от HAIRY Посмотреть сообщение
а есть еще варианты?
Это зависит от поставленной задачи, т.е. задание в студию.
0
HAIRY
0 / 0 / 0
Регистрация: 24.01.2011
Сообщений: 231
27.06.2016, 13:16  [ТС] 8
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Почитайте Юрова, там есть раздел посвященный этому.
мне Юров не очень понравился, читаю Ирвина
вот задание
0
Миниатюры
Флаг переполнения и переноса  
tahir_
159 / 100 / 25
Регистрация: 18.05.2015
Сообщений: 474
27.06.2016, 13:25 9
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Assembler
1
2
mov al,81h
shl al,1
HAIRY,
а чем не вариант?
0
liv
553 / 474 / 143
Регистрация: 07.10.2015
Сообщений: 1,590
Завершенные тесты: 1
27.06.2016, 13:42 10
Лучший ответ Сообщение было отмечено HAIRY как решение

Решение

HAIRY, не хотите сдвиг, нате Вам сложение.
Результат тот же
Assembler
1
2
mov al,80h
add al,al
Добавлено через 5 минут
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
И ещё, кажется, существуют команды обмена регистра флагов с регистром ax
Не пойдет, т.к. с помощью команды SAHF можно установить только CF, OF так не установишь
2
R71MT
3729 / 1353 / 295
Регистрация: 29.07.2014
Сообщений: 2,400
Записей в блоге: 5
27.06.2016, 15:13 11
Лучший ответ Сообщение было отмечено Constantin Cat как решение

Решение

HAIRY, запусти какой-нить отладчик (тот-же дзебуг) и посмотри на флаги.
Кстати, виндовый отладчик именует флаги по-своему. Вот их список с именами:
Код
   Флаг                Снят              Установлен            
   ---------------------------------------------------------
   OF (переполнение)   NV                OV 
   DF (направление)    UP (увеличение)   DN (уменьшение)  
   IF (прерывание)     DI (выключено)    EI (включено)  
   SF (знак)           PL (+)            NG (-)  
   ZF (ноль)           NZ                ZR
   AF (доб/перенос)    NA                AC  
   PF (чётность)       PO (нечётный)     PE (чётный)  
   CF (перенос)        NC                CY
Теперь пишешь код, и смотришь на флаги воочию (в твоём случае NV/NC):
Код
C:\>debug
-a
13A2:0100  mov al,7E
13A2:0102  sub al,80
13A2:0104  nop
13A2:0105
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13A2  ES=13A2  SS=13A2  CS=13A2  IP=0100   NV UP EI PL NZ NA PO NC
13A2:0100 B07E          MOV     AL,7E
-t
AX=007E  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13A2  ES=13A2  SS=13A2  CS=13A2  IP=0102   NV UP EI PL NZ NA PO NC
13A2:0102 2C80          SUB     AL,80
-t
AX=00FE  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13A2  ES=13A2  SS=13A2  CS=13A2  IP=0104   OV UP EI NG NZ NA PO CY
13A2:0104 90            NOP
-
0
27.06.2016, 15:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2016, 15:13

Сложить X1 и X2 с анализом арифметического переполнения
X1 и X2 - 8-битные числа без знака, находящиеся в ОЗУ по адресам ADR1 и ADR2....

Исправить ошибку пишет переполнения деления
(А+В)/С+5model small .stack 100h .data a dw 5 b dw 15 c dw 10 zero db...

Как избежать переполнения при работе с большими числами
При написании программы возникла проблема с большими числами. У меня есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru