在CodeView中单步执行时,EBX的高位被清零

时间:2019-03-13 17:32:56

标签: assembly x86 masm real-mode code-view

我有以下用于i386处理器的用MASM编写的简单程序:

        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-s:

enter image description here

执行(2)指令不仅将值加载到EAX中,而且在EBX的上半部分也为零:

enter image description here

为什么会真正发生?

1 个答案:

答案 0 :(得分:4)

根据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或更高版本。