x86: ZF не всегда обновляется AND? - PullRequest
7 голосов
/ 22 января 2009

Я отлаживаю свой код на x86, и проблема сводится к инструкции AND иногда не очищает флаг ZF, если результат не равен нулю. Вот проблемный кусок кода:

0257A9F9  mov         edx,dword ptr [ecx+18h] 
0257A9FC  and         edx,80000h 
0257AA02  int         3    
0257AA03  je          0257AA2A 

Я добавил точку останова после AND для отладки. Когда он останавливается на точке останова EDX == 0x80000 и ZF == 1. Но ZF должен быть очищен, если EDX! = 0. Код прекрасно работает, когда один шаг в отладчике, но при нормальном запуске происходит сбой.

Вот скриншот сеанса отладчика.

Есть подсказки?

Если это имеет значение, код генерируется JIT, поэтому я выполняю данные.

Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 22 января 2009

Спасибо всем. Это была моя вина, извините, что беспокою вас. Есть ветка для 'int 3' из другого места. Вот почему флаги несовместимы с инструкциями до 'int 3'. Я был смущен тем, что всегда имел edx == 0x80000 в этот момент. Снова извините.

2 голосов
/ 22 января 2009

Вы можете легко проверить обработчик int 3, чтобы увидеть, возвращается ли он с помощью iret (то есть возвращаются ли флаги вызывающих абонентов) или он возвращается с retf 2 (т.е. сохраняют флаги из обработчика).

1 голос
/ 22 января 2009

Согласно справочному набору инструкций Intel, ZF всегда устанавливается в соответствии с результатом. Может ли что-то в обработчике int 3 манипулировать этим?

Редактировать: После дальнейшего изучения руководств (слава богу, что Intel разослал бесплатные копии!), Я единственная идея состоит в том, что либо обработчик int 3 его настраивает, либо процессор смотрит только на dx вместо edx при настройке флаги. И то, и другое кажется маловероятным, но последнее кажется совершенно неправдоподобным. В каком режиме вы работаете? (Реальный, защищенный, нереальный, длинный?)

0 голосов
/ 22 января 2009

Возможно, ваш отладчик делает что-то особенное, например синхронизирует memeroy и регистры. Вы говорите, что когда вы запускаете его без отладчика, он терпит неудачу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...