首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取VESA BIOS信息

如何获取VESA BIOS信息
EN

Stack Overflow用户
提问于 2018-06-12 17:42:06
回答 1查看 1.1K关注 0票数 13

我正在通过Phil教程编写一个用Rust编写的操作系统,在玩了一会儿之后,我想在屏幕上显示真实的图形。

我已经知道,我可能应该开始使用线性帧缓冲区,与VESA。我发现了一些关于osdev.org 这里这里的教程,但是他们一直在谈论“函数代码”和es:di。第二个链接是这样的:

功能:获取VESA BIOS信息 函数代码: 0x4F00 描述:返回VESA信息,包括制造商、支持模式、可用视频存储器等。输入: AX = 0x4F00 输入: ES:DI =Segment:偏移指针,指向存储VESA信息结构的位置。 输出: AX = 0x004F (如果成功),其他值表示不支持VESA。 无论如何,上面的函数返回以下结构,并将其存储在ES:DI中,因为它们是在输入时使用的。在输入时,ES:DI应该包含指向以下结构的指针: vbe_info_structure: .signature db "VBE2" ; indicate support for VBE 2.0+ .table_data: resb 512-4 ; reserve space for the table below

虽然我看过一些汇编语言教程,但我不知道什么是“函数代码”。据我所知,如果我mov ax, 0x4f00,并创建一个像上面这样的结构,它会神奇地覆盖这个结构,然后我可以把它作为参数传递给我的锈菌代码?我如何设置,或者需要设置我的es:di?(通过研究,我认为它只是自动设置在现代处理器上)

我应该在内联程序集中做所有这些事情吗?我应该使用UEFI重写我的内核吗?我希望您能给出一个示例,说明如何在锈蚀代码中访问vbe_info_structure (我运行在long mode中)。

到目前为止,这是我的boot.asm文件,但是它还没有工作:https://gist.github.com/nebrelbug/5a0042d4de32f942bb72e71fe282bdd2。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-08-06 11:03:37

在您的boot.asm文件中,您有:

代码语言:javascript
复制
get_vesa_info:
    mov ax, 0x4f00
    mov [es:di], vbe_info_structure
    int 0x10
    ret

第三行必须改为

代码语言:javascript
复制
    mov di, vbe_info_structure

说明:就像现在一样,它试图在es:di所指向的地址(在您的情况下未定义)上写入常量vbe_info_structure。相反,您想要的是将地址vbe_info_structure加载到di中,从而将其传递给int0x10例程。

顺便说一下,int0x10执行几个功能。为了告诉它您要调用哪个函数,您需要在ax寄存器中传递“函数代码”。将函数代码看作函数的名称(程序集中没有名称,只有数字和地址)。

此外,您还需要正确设置es。两者都是

代码语言:javascript
复制
push ds
pop es

假设ds已经指向了section.data,或者使用了汇编程序指令(assume es section.data?--不确定这一点,我已经很久没有使用汇编程序了)。或者像这样:

代码语言:javascript
复制
mov ax, @section.data
mov es, ax

当然,在将0x4f00加载到ax之前应该这样做。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50822889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档