You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:45:17