从零开发操作系统(2) —— 实模式下操作显卡内存打印字符串

前一节通过BIOS显示字符串中断实现字符串打印功能。

此处修改为通过汇编指令直接操作显卡内存来实现字符串打印功能,实现代码如下

#include <inc/boot.h>

.code16
.global start
start:
    xorw %ax, %ax
    movw %ax, %ds
    movw %ax, %es
    movw %ax, %fs
    movw %ax, %ss
    movw $BOOTSECT_ADDR, %sp

    movw $0xb800, %ax
    movw %ax, %gs

    #####################################################
    #   写显卡内存实现字符串打印
    #   显卡内存基地址: 0xb8000 
    #####################################################
    movw $boot_msg, %si
    movw len, %cx

    movw $0x540, %di
print_char:
    movb (%si), %al     # 待显示字符
    movb $0x04, %ah     # 显示属性
    movw %ax,   %gs:(%di)
    addw $2,    %di
    incw %si
    decw %cx            # 显示字符个数减1
    jnz print_char

1:
    jmp 1b  

boot_msg:
    .asciz  "Boot Loading..."
len:
    .int    . - boot_msg    
    
    .org    0x1fe, 0x90
    .word   0xaa55

编译以及运行方法同前一节介绍方法。

显示字符串如下:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值