我正在尝试编写一个代码,在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指令中使用分段寻址?
答案 0 :(得分:3)
在16位代码中指定有效地址时,不能使用ax
(请参阅名为&#34的表格;使用ModR / M字节的#16位寻址表格&#34 ; 在英特尔软件开发人员手册中)。请改用bx
,bp
,si
或di
。