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

Intel x86汇编中mov al,[dx]报无效有效地址而[si]可用的原因

问题原因说明

你遇到的编译错误是Intel x86 16位实模式的寻址寄存器限制导致的:

  • 你现在写的是16位实模式汇编代码(通常是引导扇区类程序),8086架构最初设计指令集的时候,就只给4个寄存器开放了间接内存寻址的支持,也就是可以放在[]里作为内存地址访问的寄存器只有这四个:bx、bp、si、di。
  • dx不在允许的寻址寄存器列表里,CPU指令集里没有对应的编码可以表示[dx]这个操作,所以nasm汇编的时候会直接抛出invalid effective address的错误。

如果你确实需要用dx存储要访问的内存地址,可以先把dx的值转存到支持寻址的寄存器里再操作,示例代码如下:

mov bx, dx
mov al, [bx]

补充提示:你当前代码里的int 0x16是BIOS的键盘服务中断,如果你要实现ah=0x0e对应的TTY模式打印字符的功能,正确的BIOS中断号应该是int 0x10,你这里大概率是笔误写错了中断号。


内容的提问来源于stack exchange,提问作者user2138149

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:27:03