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
相关产品推荐
相关产品推荐

