x86视频内存清除屏幕崩溃

时间:2013-08-08 14:48:20

标签: assembly nasm osdev

我目前正在为我的操作系统编写一个32位内核,但我偶然发现了一个问题。

尝试使用here中的方法清除屏幕时,bochs崩溃并显示以下消息:

  

[CPU]预取:getHostMemAddr否决直接读取,pAddr = 0xa0000

clear_screen32方法(在保护模式下运行):

;================================;
; Clears the screen (in 32 bits) ;
;================================; 
clear_screen32:

    pusha
    cld
    mov edi, vmem
    mov cx, 2000
    mov ah, c_attrib

    mov al, ' ' 
    rep stosw

    mov byte [_xpos], 0
    mov byte [_ypos], 0
    popa
    ret

这里可能有什么问题?

编辑:我输入错误,是getHostMemAddr而不是getHostByAddr

* EDIT2:错误发生在*

  

rep stosw

如果我删除它,代码运行正常(但当然没有屏幕清除)

1 个答案:

答案 0 :(得分:-1)

Welp,似乎bochs开发人员(或者我可能)有点愚蠢,因为在bochs中不存在CX寄存器。
当我在调试时将注册信息转储到屏幕时,我发现了。 CX寄存器根本就不存在。

我的解决方案?由于处于32位模式,并且可以访问32位寄存器,我只需将CX寄存器替换为ECX,这样就可以正常工作,屏幕也能完全清除。