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

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

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

#include 

.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

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

显示字符串如下:

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

你可能感兴趣的:(操作系统)