Консультация № 70741
13.01.2007, 13:55
0.00 руб.
0 1 1
Привет экспертам...

Я недавно давал вопрос - как считать флаги регистра SR сопроцессора... увидел ответы и понял, что не во всей полноте поставил вопрос... написал пояснение в мини-форуме - ответа пока нет...
ID моего вопроса 70663. Дайте ответ пожайлуста...

Обсуждение

Неизвестный
13.01.2007, 17:02
общий
это ответ
Здравствуйте, BugZex!

> Все не так ПРОСТО!....
> Я пишу на СИ ( BCB ) и делаю asm вставки...
| В С3 TOP С2 С1 С0 ES РЕ UE ОЕ ZE DE IE |
все советы остаются в силе. флаги сохраняются в переменную, после чего в коде С с помощью логических операндов проверять на наличие или отсутствие флага.
& это and (применятся для обнуления бит и проверки на наличие установленного бита)
| это or (используется для установки бит)
^ это xor (используется для инвертации нужных битов)

примерный пример в приложении

> Так как компилятор от Borland, то там нет команд условного перехода. Поэтому здесь надо как-то по другому поступить...
команды условного перехода во встроенном ассемблере борланда тоже есть.
пример 2 делает тоже что и 1 только силами ассемблера


Приложение:
unsigned int fpu_flags; /* подразумевается что int 16 битный */asm { fdtsw ax mov fpu_flags, ax}/* проверяем установлен ли, например, флаг деления на 0*/if (fpu_flags & 0x04){ /* тут делаем все что нужно если флаг установлен */}пример 2:asm { fdtsw ax test ax, 4 ;/* проверяем установлен ли, например, флаг деления на 0*/ jz end ;/* тут делаем все что нужно если флаг установлен */end:}
Форма ответа