0

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

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

[CPU ]prefetch: 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:错误发生在*

代表存储

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

4

1 回答 1

-1

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

我的解决方案?在 32 位模式下,可以访问 32 位寄存器,我只是将 CX 寄存器替换为 ECX,这确实有效,并且屏幕被完美清除。

于 2013-08-08T16:26:20.620 回答