自己动手从零写桌面操作系统GrapeOS系列教程——15.用汇编向屏幕输出字符 - 成宇佳
source link: https://www.cnblogs.com/chengyujia/p/17222031.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
学习操作系统原理最好的方法是自己写一个简单的操作系统。
在上一讲中我们介绍了屏幕显示的原理,本讲我们来实战一下。
一、向屏幕输出一个字符mbr4.asm
mbr4.asm中的代码如下:
;将屏幕第一行的第一个字符显示为‘G’。
mov ah,0x07 ;黑底白字
mov al,'G' ;G的ASCII码是0x47,此时ax的值为0x0747。
mov bx,0xb800
mov es,bx
mov [es:0],ax ;文本模式显存地址从0xb8000开始。
stop: ;标号
hlt
jmp stop
times 510-($-$$) db 0 ;将从上条指令结束到最后2个字节前的空余字节全部置为0。
db 0x55,0xaa
上面代码中的注释比较详细,结合之前介绍过的内容,大家应该能看懂。下面我们来演示一下。
首先我们回顾一下上节课QEMU中默认显示的内容:
从上面截图中可以看到,QEMU中默认显示的第一行第一个字符是‘S’。
下面我们编译运行mbr4.asm。
从上面这个截图可以看到QEMU第一行第一个字符已经变为了字符‘G’,这是我们第一次向屏幕输出字符。
二、将字符显示到屏幕的任意位置mbr5.asm
在默认的文本模式中,一屏能显示25行80列,共2000个字符。每个字符占用2个显存地址,2000个字符共占用4000个显存地址。所以第一屏的显存地址范围是(0xb8000+0)~(0xb8000+4000)。每行显示80个字符,也就是每行对应160个显存地址。在实际使用中,我们需要能将字符输出到屏幕的任意位置。比如上面的例子中,我们将字符输出到了QEMU本来就有字符的地方,这样混在一起不好。我们看到第二行是空白的,我们下面将字符输出到第二行。
mbr5.asm的代码如下:
mov ax,0xb800
mov es,ax
mov ah,0x07
mov al,'G'
mov [es:160],ax ;将字符'G'显示在屏幕第二行第一个字符的位置
stop:
hlt
jmp stop
times 510-($-$$) db 0
db 0x55,0xaa
编译运行截图如下:
从上面截图可以看到,我们将字符‘G’显示在了QEMU第二行第一个字符的位置。
三、向屏幕显示字符串mbr6.asm
mbr6.asm的代码如下:
mov ax,0xb800
mov es,ax
;在屏幕第2行显示字符串“GrapeOS"
mov ah,0x07 ;ah中的值一直保持不变
mov al,'G'
mov [es:160],ax
mov al,'r'
mov [es:162],ax ;每个字符对应显存中的2个字节,依次递增2个字节。
mov al,'a'
mov [es:164],ax
mov al,'p'
mov [es:166],ax
mov al,'e'
mov [es:168],ax
mov al,'O'
mov [es:170],ax
mov al,'S'
mov [es:172],ax
stop:
hlt
jmp stop
times 510-($-$$) db 0
db 0x55,0xaa
编译运行截图如下:
从上面截图中可以看到,我成功的在QEMU屏幕第二行显示出了字符串“GrapeOS”。
本讲视频版地址:https://www.bilibili.com/video/BV1VY411v7y2/
本教程代码和资料:https://gitee.com/jackchengyujia/grapeos-course
GrapeOS操作系统QQ群:643474045
博客主页:http://www.cnblogs.com/chengyujia/
欢迎转载,但请保留作者和本文链接,谢谢!
欢迎在下面的评论区与我交流。
Recommend
-
2
学习操作系统原理最好的方法是自己写一个简单的操作系统。 在上一讲中我们已经安装配置了开发环境,在本讲中我们来测试一下开发环境是否正常。 我们的测试流程如下: 1.在Visual Studio Code中编写Gr...
-
3
自己动手从零写桌面操作系统GrapeOS系列教程——8.x86介绍 ...
-
2
自己动手从零写桌面操作系统GrapeOS系列教程——9.实模式介绍 ...
-
1
学习操作系统原理最好的方法是自己写一个简单的操作系统。 写程序不免需要调试,写不同的程序调试方式也不同。如果做应用软件开发,相应的程序调试方式是建立在有操作系统支持的基础上的。而我们现在是要开发操作...
-
2
学习操作系统原理最好的方法是自己写一个简单的操作系统。 一、外设和I/O接口 前面我们介绍过冯·诺依曼结构包含5部分,其中输入设备和输出设备统称为外部设备,简称外设。常见的外...
-
4
学习操作系统原理最好的方法是自己写一个简单的操作系统。 一、硬盘控制器 我们前面已经讲过硬盘控制器是一种I/O接口,CPU通过它就能间接的读写硬盘。硬盘控制器主要有IDE和SATA两种...
-
2
学习操作系统原理最好的方法是自己写一个简单的操作系统。 新买的硬盘和优盘在第一次使用时需要格式化,有时候还需要分区。这是为什么呢?分区和格式化到底是干啥呢?本讲将为大家解开这些疑惑。
-
2
学习操作系统原理最好的方法是自己写一个简单的操作系统。 本讲代码文件为boot.asm,要读取的文件为data.txt。 一、在FAT16文件系统中读取文件的流程 在...
-
3
学习操作系统原理最好的方法是自己写一个简单的操作系统。 之前我们在电脑的启动过程中介绍过boot程序的主要任务就是加载并运行loader程序,本讲我们就来实现。 本讲代码文件共2个: boot.asm...
-
7
学习操作系统原理最好的方法是自己写一个简单的操作系统。 GrapeOS操作系统之前一直运行在模拟器和虚拟机中,今天我们来演示一下GrapeOS在真机上运行的情况。
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK