EMU86变量声明编译异常:MOV指令未正确加载变量值求助
问题分析与解决
你的问题出在COM程序的入口点与数据定义的位置冲突:
org 100h指定了程序的入口偏移是0x100,CPU会从这个位置开始执行指令。- 你把变量
var1定义在了main标签(程序逻辑起始)之前,这意味着var1占据了入口点0x100的位置。CPU会把var1的数值0x0021当成机器码来执行——0x0021对应的是ADD [BX+SI+0x21], AL这条指令,这会导致程序执行流程混乱,寄存器值被意外修改,最终出现你看到的AX=0xA100这种非预期结果。
修复方案
你需要确保CPU跳过数据区,直接执行代码逻辑,有两种常见写法:
方案1:将数据放在代码之后
org 100h ; start of the program main: mov ax, var1 ret ; 退出程序(EMU86中需要这条指令结束仿真) ; variables var1 dw 21
方案2:用跳转指令跳过数据区
org 100h jmp main ; 跳过数据区,直接进入代码逻辑 ; variables var1 dw 21 ; start of the program main: mov ax, var1 ret
这样修改后,CPU会正确执行 mov ax, var1,将 var1 的值 0x0021 加载到AX寄存器中。
内容的提问来源于stack exchange,提问作者MIGHTY_FLUFFY
相关产品推荐
相关产品推荐

