FONT_SEG=regs.r_es;
时间: 2024-04-02 15:37:51 浏览: 16
在这段代码中,regs.r_es 保存了获取到的字体数据的段地址,即 BIOS ROM 中存储字体数据的段地址。通过将 regs.r_es 的值赋给变量 FONT_SEG,就可以在程序中使用这个段地址来访问字体数据。
具体来说,这段代码可能是用于在屏幕上显示字符时,需要将字符的字体数据加载到显存中。在这个过程中,需要知道字体数据在 BIOS ROM 中的地址,才能将它加载到显存中。通过获取到的 regs.r_es 值,就可以确定字体数据的段地址,从而将它加载到显存中。
需要注意的是,在使用 regs.r_es 的值时,需要确保它的值是正确的,并且可访问的。如果 regs.r_es 的值不正确或者不可访问,可能会导致程序出错或者崩溃。因此,在使用这个值时,需要进行错误处理和验证。
相关问题
void GetFontAdd() { struct REGPACK regs; regs.r_bx=0x0300; regs.r_ax=0x1130; intr(0x10,®s); FONT_SEG=regs.r_es; FONT_OFF=regs.r_bp; }
这段代码是用于获取 BIOS 中字体数据的地址,以便在屏幕上显示字符时使用。
在这段代码中,使用了一个叫做 REGPACK 的结构体来保存寄存器的值。regs.r_bx 和 regs.r_ax 分别保存 BX 和 AX 寄存器中的值。
通过设置 BX 和 AX 寄存器的值,将 0x1130 和 0x0300 分别赋给 AX 和 BX 寄存器,然后调用中断 0x10,即 BIOS 的视频中断。视频中断是由 BIOS 提供的一个功能强大的中断服务例程,可以用来在屏幕上输出字符、设置视频模式等操作。
在中断返回后,regs.r_es 和 regs.r_bp 分别保存了字体数据的段地址和偏移地址。这些地址就是在屏幕上显示字符时需要用到的字体数据的地址。实际上,字体数据就存储在 BIOS ROM 中,通过调用视频中断,可以获取到字体数据的地址。
void GetFontAdd() { struct REGPACK regs; regs.r_bx=0x0300; regs.r_ax=0x1130; intr(0x10,®s); FONT_SEG=regs.r_es; FONT_OFF=regs.r_bp; }程序说regs的存储大小不知道
在这段代码中,结构体 REGPACK 的大小取决于具体的编译器和编译选项,因为它的成员类型和顺序可能会影响结构体的大小。
假设这个结构体是在 MS-DOS 的开发环境中使用 Borland C++ 编译器定义的,那么它的大小应该是 20 个字节。因为在这个编译器中,REGPACK 结构体的定义通常如下:
```c
typedef struct _REGPACK {
unsigned int r_ax;
unsigned int r_bx;
unsigned int r_cx;
unsigned int r_dx;
unsigned int r_bp;
unsigned int r_si;
unsigned int r_di;
unsigned int r_ds;
unsigned int r_es;
unsigned int r_flags;
} REGPACK;
```
在这个结构体中,每个成员都是一个 unsigned int 类型,占用 2 个字节的内存空间。因此,整个结构体的大小为 20 个字节。
在调用 intr 函数时,将 REGPACK 结构体传递给它,以便将寄存器的值传递给 BIOS 中断服务程序。在这个过程中,regs 结构体的大小应该与实际的硬件寄存器大小相同,以确保数据能够正确地传递。
因此,在这段代码中,需要确保 REGPACK 结构体的大小与编译器和硬件寄存器的大小相同,以确保程序能够正确地获取到字体数据的地址。