【发布时间】:2019-08-04 11:48:09
【问题描述】:
我有以下用 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-s:
执行(2)指令不仅将值加载到EAX中,而且将EBX的上半部分归零:
为什么会发生?
【问题讨论】:
-
这绝对不正常。你在哪里执行这个?
-
我使用安装了 Win98 和 MASM 6.11 的 VirtualBox 虚拟机。屏幕截图来自 MASM 分发中包含的 ProgrammersWorkBench (PWB) 以及 CodeView 调试器。这只发生在 EBX 上,所有其他 GP 寄存器都保存 32 位值。首先,我认为这可能是由于段字大小设置为 16 位,因为我在 .386 指令之前使用 .MODEL 。但现在我看不到任何依赖。
标签: assembly x86 masm x86-16 code-view