解决x86中mov指令的问题

时间:2015-02-21 17:20:55

标签: assembly x86

我正在尝试编写一个代码,在VGA显示器上打印一个字符(在QEmu窗口上看到)。这是我的代码:
(此文件为putInMemory.asm)

;Put the charcter in cx at the beginning of line number given by dx
printInMemory:
pusha
mov es, 0xb000
mov ax, 0x8000
mult:
cmp dx, 0x1
je done
add ax, 160
jmp mult
done:
mov [es:ax], cx
add ax, 1
mov [es:ax], 0x7
popa
ret

我想将寄存器cx中包含的ascii代码复制到内存位置0xb80a0,这是显示中第二行开头的地址。这是代码:

[org 0x7c00]
mov cx, 'e'
mov dx, 0x2
call putInMemory
jmp $

%include "putInMemory.asm"

times 510-($-$$) db 0
dw 0xaa55

当我使用nasm汇编上述代码时,我在第一个代码中收到以下错误:
putInMemory.asm:12:错误:无效的有效地址
如何在mov指令中使用分段寻址?

1 个答案:

答案 0 :(得分:3)

在16位代码中指定有效地址时,不能使用ax(请参阅名为&#34的表格;使用ModR / M字节的#16位寻址表格&#34 ; 在英特尔软件开发人员手册中)。请改用bxbpsidi