Автор Тема: вопрос по флагам процессора  (Прочитано 5625 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ALEX_230_VOLT

  • Модератор
  • Сообщений: 7645
  • Пол: Мужской
    • Просмотр профиля
вопрос по флагам процессора
« : 17 Апрель 2011, 21:34:51 »
Вообщем в универе на контрольной достался такой вопрос: "что делать если процессор не поддерживает флаг OF(а может и CF. я точно не помню формулировки вопроса)? Можно ли его как то заменить?" (ну я конечно не слово в слово, но смысл такой) На месте я ничего толкового не ответил (ну кроме того, что без этого флага уменьшится диапозон чисел) и препод, так сказать, дал время подумать.
Увы, но в инете я ответа не нашёл. Понимаю что этот форум специализируется на другом, но всё же попытка не пытка - может ктонибуть из вас придумает достойный ответ :) Заранее спасибо.
« Последнее редактирование: 17 Апрель 2011, 21:40:28 от ALEX_230_VOLT »

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #1 : 17 Апрель 2011, 21:44:48 »
http://ru.wikipedia.org/wiki/Флаг_переполнения
Не совсем понял "перенос в старший разряд", но заменить можно. CF xor (флаг переноса в старший разряд). Остаётся только определить факт этого переноса.

А вот CF процессор уж вряд ли не поддерживает.

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #2 : 17 Апрель 2011, 21:54:24 »
ALEX_230_VOLT, CF/OF это флаги переполнения, флаг также используется при логических операциях, как ты думаешь что делать если процессор не может ничего сравнивать, можно ли его заменить ? Можно ли такой процессор назвать процессором?
Хотя я не такой уж фанат asm'а посему могу где и ошибаться с регистрами, ну и написанное мной касается intel only, можешь ещё у Хардыча спросить для убедительности.

Добавлено позже:
Прогуглил (с рассчётом может что забил  за пол года  :) ): переполнение - OF, перенос - CF.

Добавлено позже:
Об их использовании читай здесь.

Онлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #3 : 18 Апрель 2011, 07:58:28 »
Значение флагов OF и C разное (именно С а не CF! Ибо OverFlow и Carry). А вот "имитировать" их можно. Правда, С участвует в сравнении больше-меньше, что облегчает математику и его эмуляция будет громоздкой. А вот переполнение эмулировать легко, т.к. для этого всего-лишь надо анализировать старший бит числа, который является его знаком.
« Последнее редактирование: 18 Апрель 2011, 08:00:57 от HardWareMan »

Оффлайн ALEX_230_VOLT

  • Модератор
  • Сообщений: 7645
  • Пол: Мужской
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #4 : 24 Апрель 2011, 13:33:29 »
Всем спасибо за ответы, но хотелось бы конкретизации. Я что-то не очень понимаю как OF может быть связано со знаком  :-\ можно показать это на конкретном примере?



Добавлено позже:
и ещё вопрос: что делают строки?
mov byte ptr [SI],C2
mov word ptr [SI],1234h
а конкретно byte ptr и word ptr

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #5 : 24 Апрель 2011, 14:24:26 »
Насколько я понимаю смысл флага переполнения, OF выставляется, как частный случай, если старший бит переходит в 1 при сложении.
Т.е., на примере 8 бит, было у нас 0111111 (127), прибавляем 1, становится 10000000 (-1) - вот это и есть переполнение. С беззнаковыми числами переполнения быть не может, т.е. знак не сменится.


Истинная таблица установки флагов переноса и переполнения для сложения:
Перенос из разрядной сетки Перенос в знаковый бит      Флаги
Есть Есть CF=1, OF=0
Есть Нет CF=1, OF=1
Нет Есть CF=0, OF=1
Нет Нет CF=0, OF=0
Разрядная сетка - это N битов N-разрядного регистра. Знаковый бит - старший бит регистра.

Добавлено позже:
Цитата
и ещё вопрос: что делают строки?
mov byte ptr [SI],C2
mov word ptr [SI],1234h
а конкретно byte ptr и word ptr
Ох, ассемблер x86 уже не помню... По-моему, они записывают по адресу в SI значения C2h (байт) и 1234h (слово).
byte ptr - значит байт, word ptr - значит слово (2 байта).
« Последнее редактирование: 24 Апрель 2011, 14:32:10 от HoRRoR »

Онлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #6 : 25 Апрель 2011, 07:54:01 »
byte ptr - значит байт, word ptr - значит слово (2 байта).
КО уточняет, что "ptr" означает "pointer", или "указатель". Т.е., команду mov byte ptr [SI],0C2h надо читать так: перенести байт 0C2h в память, указателем байта которой является [si]. Для второй команды смысл тот же, только указатель уже на слово а не байт.

Оффлайн ALEX_230_VOLT

  • Модератор
  • Сообщений: 7645
  • Пол: Мужской
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #7 : 25 Апрель 2011, 20:51:27 »
а есть ли разница если например сделать просто
mov [SI],0C2h
« Последнее редактирование: 25 Апрель 2011, 20:55:54 от ALEX_230_VOLT »

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #8 : 26 Апрель 2011, 08:07:23 »
Конечно, тип указателя не указан, неясен размер данных, куда заносится это значение. Я точно не знаю, что произойдёт, но либо ошибка, либо возьмётся размер по умолчанию (скорей всего, в зависимости от разрядности системы под которую ассемблер).
Вот если бы ты так регистр записывал - то указатель указывал был бы на область размера регистра, а тут константа и неизвестно какого она типа.

Вот как будут выглядеть два байта по адресу SI после записью разными способами:
mov byte ptr [SI],0C2h   ; [SI]: C2 ?? (второй байт не изменился)
mov word ptr [SI],0C2h   ; [SI]: C2 00 (второй байт 00, потому что значение теперь занимает 2 байта и выглядит как 00C2h)
Т.е. в первом случае указатель был на байт, во втором - на слово.

Онлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #9 : 26 Апрель 2011, 08:18:46 »
Конечно, тип указателя не указан, неясен размер данных, куда заносится это значение. Я точно не знаю, что произойдёт, но либо ошибка, либо возьмётся размер по умолчанию (скорей всего, в зависимости от разрядности системы под которую ассемблер).
Зависит от ассемблера. Касаемо константа<>память - большинство потребует указать размер. Касаемо регистр<>память - возьмет автоматом по разрядности регистра (al/ax/eax).

Оффлайн ALEX_230_VOLT

  • Модератор
  • Сообщений: 7645
  • Пол: Мужской
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #10 : 26 Апрель 2011, 21:37:46 »
сегодня вот словил препода, сказал ему смесь того что подсказали мне вы, привёл пример 01111111+1. Препод сказал что я иду в правильном направлении, но надо это всё грамотно сформулировать. Вот он например спросил что будет если числа отрицательны - там же по идее старший бит будет 1
ещё потом что то сказал нечто вроде такого: "надо следить за двумя орепандами и одним битом чтобы засечь это самое переполнение"

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #11 : 26 Апрель 2011, 22:05:03 »
Цитата: ALEX_230_VOLT
надо следить за двумя орепандами и одним битом чтобы засечь это самое переполнение
Наверное всё же  операндами, а вообще круто у тебя кр работы сдавать можно, вторая неделя уж пошла.

Оффлайн ALEX_230_VOLT

  • Модератор
  • Сообщений: 7645
  • Пол: Мужской
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #12 : 27 Апрель 2011, 22:08:44 »
Цитата
Наверное всё же  операндами
возможно
Цитата
а вообще круто у тебя кр работы сдавать можно, вторая неделя уж пошла.
как говорится - сам тащуся :D я сам удивился такому подходу препода, т.к. вообще по закону переписывтаь модульные КР нельзя, но конерктно этот препод разрешает :) Хотя на самом деле в таком подходе есть рациональное зерно, т.к. это меня таки заставит реально разобратся во всём материале и честно заработать оценку

Добавлено позже:
так что, посоветуете ли какие нибуть уточнения на эту тему?

Оффлайн ALEX_230_VOLT

  • Модератор
  • Сообщений: 7645
  • Пол: Мужской
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #13 : 30 Апрель 2011, 16:47:27 »
зависит ли это от чётности и переноса?

Оффлайн gepar

  • Пользователь
  • Сообщений: 10150
  • Пол: Мужской
  • ▂ ▃ ▄ ▅ ▆ ▇ █
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #14 : 30 Апрель 2011, 19:29:45 »
ALEX_230_VOLT,что зависит?

Оффлайн ALEX_230_VOLT

  • Модератор
  • Сообщений: 7645
  • Пол: Мужской
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #15 : 30 Апрель 2011, 23:20:28 »
ну я уже ставил вопрос: чем заменить флаг CF? с положительными числами понятно, а как с отрицательными быть?

Оффлайн HoRRoR

  • Пользователь
  • Сообщений: 983
  • Пол: Мужской
  • Ромхакер
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #16 : 01 Май 2011, 00:03:57 »
Насколько я понимаю, если абстрагироваться от тонкостей ассемблера, то A + B даёт переполнение в случаях:
  • A + B > MAX (2N-1-1, где N - разрядность)
  • A + B < MIN (-2N-1)
Вычитание - это сложение с инвертированным знаком второго операнда, так что для него те же правила.
Собственно, проблема стоит лишь в проверке этих условий самым эффективным способом, при чём, как я понял по условию, унифицированно для сложения и вычитания.
Вот у нас выражение X = A + B, где X обладает той же разрядностью, что A и B. В голову приходят такие возможные варианты переполнения:
  • A >= 0, B >= 0. OF = 1 при X < 0.
  • A < 0, B < 0. OF = 1 при X >= 0.
При разных знаках не могу представить переполнение...
« Последнее редактирование: 01 Май 2011, 00:06:48 от HoRRoR »

Оффлайн ALEX_230_VOLT

  • Модератор
  • Сообщений: 7645
  • Пол: Мужской
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #17 : 01 Май 2011, 19:00:53 »
а можно пример сложения отрицательных чисел чтобы было переполнение?

Оффлайн ALEX_230_VOLT

  • Модератор
  • Сообщений: 7645
  • Пол: Мужской
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #18 : 02 Май 2011, 14:07:05 »
правильно ли я поннимаю что -1+(-1) 11111111+11111111 это будет переполнение? или нет? вообще ведь -2 входит в диапазон допустимых значений  :-\

Онлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #19 : 02 Май 2011, 17:16:16 »
правильно ли я поннимаю что -1+(-1) 11111111+11111111 это будет переполнение? или нет? вообще ведь -2 входит в диапазон допустимых значений  :-\
Нет, -2 это 11111110. А вот -128+(-128) 10000000+10000000 уже переполнение.

Оффлайн ALEX_230_VOLT

  • Модератор
  • Сообщений: 7645
  • Пол: Мужской
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #20 : 02 Май 2011, 19:12:12 »
ну а как при этих операциях ведёт себя CF? (который перенос)? Просто меня же спросили как определить что есть переполнение, и сказали что надо следить за тремя операндами - вот я пытаюсь понять что это за 3 операнда :)

Онлайн HardWareMan

  • Модератор
  • Сообщений: 7422
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #21 : 03 Май 2011, 07:17:57 »
вот я пытаюсь понять что это за 3 операнда :)
A, B и C. :3

Оффлайн ALEX_230_VOLT

  • Модератор
  • Сообщений: 7645
  • Пол: Мужской
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #22 : 09 Май 2011, 11:19:48 »
Ещё тут такой вопрос. Надо расписать шинные и машинные циклы для команды, но я не очень понимаю как это делать. Пытался найти в инете, но не нашёл. пример у меня в тетради как бы есть, но другой команды и я не уверен что всё правильно переписал. на сколько я понял, к каждому машинному циклу должен быть список из шинных, а у меня не так. вообщем вот что есть

mov [120], AX;
1) IP+CS -> ША               где ША - шина адреса
2) чт -> ШУ                       чт - чтение ШУ- шина управления
3) Пр -> ШД                     ШД - шина данных, а вот что такое Пр я сам хз :-\

1 мц. чтение команды, дешифрация
2 мц. запись


Но это было для примера. мне надо подобным образом расписать команду
sub ES, [120]
ну машинные циклы вроде как такие (хотя я не уверен что это правильно)
1 мц. чт. ком, дш.
2 мц. выч.
3 мц. зп. рез.
а вот как к ним шинные писать...

вообщем надеюсь что ктонибуть на этом форуме в подобном шарит и сможет мне помочь :)

Оффлайн ALEX_230_VOLT

  • Модератор
  • Сообщений: 7645
  • Пол: Мужской
    • Просмотр профиля
Re: вопрос по флагам процессора
« Ответ #23 : 28 Май 2011, 17:29:57 »
всё, экзамен благополучно сдал :) тему можно закрывать