2.3 显示模式

本文详细解析了计算机启动初期的80x25文本显示模式,包括其显存布局、颜色编码和通过修改显存数据或BIOS中断调用来显示字符的方法,并提供了一个使用汇编语言在该模式下输出文本的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

显示模式

工具

首先,需要的工具软件列表:

虚拟机 qemu: qemu

显示模式

计算机在加电自检之后,会将显示初始化为80 x 25的文本模式。此时,我们可以进行文本显示了。

而计算机的显示一般有2种模式,可以通过中断来修改显示模式

  • 文本模式
  • 图形模式

文本模式只能显示字符,无法显示图形。

文本模式下显示字符有2种方式

  1. 直接修改显存数据的方式来显示字符。
  2. 通过BIOS中断调用显示字符。

2. 80 x 25文本模式

刚开始启动计算机时,系统默认进入文本模式。在计算机在加电自检完成之后,会默认将显示初始化为80 x 25的文本模式

在 80 x 25的文本模式,屏幕可以显示25行80列。显示地址段是位于0xB8000-0xBFFFF的地址段。

我们可以通过修改0xB8000-oxBFFFF地址段的值,来在屏幕上显示文本。

此模式下每2个内存地址为一组,32位代表一个文字输出: 高地址16位为颜色信息,低地址16位为文字信息

因此我们可以通过修改这段显示地址区域的值,从而来控制屏幕输出文字。

例如:80x25文本模式的颜色如下:

在 80 x 25的文本模式,显存地址是位于0xB8000-oxBffff。

背景色颜色(背景),4位分别为 KRGB,K为是否闪烁

颜色颜色
0黑色4红色
1蓝色5紫色
2绿色6黄色
3青色7白色

前景色颜色(文字),4位,分别为 IRGB

颜色颜色
0黑色8灰色
1蓝色9淡蓝色
2绿色A淡绿色
3青色B淡青色
4红色C淡红色
5紫色D淡紫色
6黄色E淡黄色
7白色F亮白色

显示字符

1. 通过修改显存数据来显示字符

启动后实模式下-文本模式下的初始显存地址范围为[0xB8000-0xBFFFFF]。

显存地址的值对应屏幕的显示数据,我们可以修改显存值来改变屏幕显示。

我们使用段和偏移来表示这段显存信息,段基本地址为0xB800,偏移为0x0000到0xFFFF。

代码如下:

mov ax,0xb800
mov ds,ax                ;配置显存段地址
mov byte [0x00],'r'      ;输出字符,内存地址为 DS<<4 + 0x00
mov byte [0x01],0x17     ;设置颜色(背景色蓝,前景色白)

2. 实现代码

新建一个目录boot,新建文件boot/boot.asm,代码如下

;RatsOS
;TAB=4
[bits 16]
    org     0x7c00              ;指明程序的偏移的基地址

;boot程序
    jmp     Entry

;程序核心内容
Entry:
    mov ax,0xb800
    mov gs,ax                   ;显存段地址
    mov byte [gs:0x00],'r'      ;输出字符
    mov byte [gs:0x01],0x74     ;设置颜色(背景色蓝,前景色白)
    mov byte [gs:0x02],'a'
    mov byte [gs:0x03],0x74
    mov byte [gs:0x04],'t'
    mov byte [gs:0x05],0x74
    mov byte [gs:0x06],'s'
    mov byte [gs:0x07],0x74
    mov byte [gs:0x08],'o'
    mov byte [gs:0x09],0x74
    mov byte [gs:0x0a],'s'
    mov byte [gs:0x0b],0x74
                    
    jmp $                       ;进入死循环,不再往下执行。

Fill_Sector:
    resb    510-($-$$)          ;处理当前行$至结束(1FE)的填充
    db      0x55, 0xaa

编译成ratsos.ima镜像文件。

创建run.sh脚本

#!/bin/bash

NASM=nasm
QEMU=qemu-system-x86_64

$NASM -f bin -o ratsos.ima boot/boot.asm
$QEMU -m 128 -rtc base=localtime -fda ratsos.ima

3. 在虚拟机运行

使用qemu虚拟机运行(当然了也可以使用vitualbox运行)结果如下:

1573351-20190303105633019-1151505022.gif

在最开始的位置输出ratsos.由于没有清屏,其他位置的输出字符忽略就好。

转载于:https://www.cnblogs.com/mlzrq/p/10223020.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值