Верхние биты EBX обнуляются при пошаговом переходе в CodeView - PullRequest
3 голосов
/ 13 марта 2019

У меня есть следующая простая программа, написанная на MASM для процессора i386:

        TITLE   BLA
        .MODEL  SMALL
        .386
        .STACK
        .DATA
        .CODE
MAIN    PROC    FAR
        .STARTUP
        MOV     EBX,0FFFFFFFFH; (1)
        MOV     EAX,0EEEEEEEEH; (2)
       .EXIT
MAIN    ENDP
END

Я запутался в поведении регистра EBX.После инструкции (1) EBX устанавливается на 1 с:

enter image description here

Выполнение инструкции (2) не только загружает значение в EAX,но также обнуляет верхнюю половину EBX:

enter image description here

Почему это действительно происходит?

1 Ответ

4 голосов
/ 13 марта 2019

Согласно Microsoft это известная ошибка в Codeview.См. Статью базы знаний Q87548 :

СИМПТОМЫ

При пошаговом или трассировке кода в версиях Microsoft CodeView 4.0, 4.01,и 4.05, нижняя половина 32-битных регистров (eax, ebx, edi и т. д.) всегда сохраняется, но верхняя половина может быть повреждена.Другие специфичные для 386 регистры, такие как регистры gs и fs, также могут быть повреждены.Эта проблема также возникает при анимации.Эта проблема не возникает, если инструкции не выполняются по одной за раз.

СОСТОЯНИЕ

Microsoft подтвердила, что это проблема в CodeView версии 4.0, 4.01,и 4.05.Эта проблема была исправлена ​​в CodeView версии 4.1.

В соответствии с этой статьей исправление заключается в использовании Codeview 4.1 или выше.

...