• 自制操作系统日记(6):静态桌面初步


    代码仓库地址:https://github.com/freedom-xiao007/operating-system

    简介

    在上篇中我们成功的加载跳转执行了C语言的代码,本篇中将跟随书籍,初步展示了一个系统页面的初步界面,看到桌面那刻还是有点意思的

    最终结果展示

    不多啰嗦,这里先直接展示结果,最终的运行界面如下:

    在这里插入图片描述

    可以看到有点模样了,令人激动啊。当最终到这一步的时候,心里开心极了,哈哈

    相关代码说明

    本篇中的代码修改基本上是抄《30天自制操作系统》中的,但可能是nask和nasm的区别问题,我们需要单独修改的地方也不少,下面我们详细说明下需要修改的地方

    setup.asm文件修改

    这个文件需要添加界面相关的参数设置,我们将其插入到start的下面,如下:

    start:
        ; 画面モードを設定
        MOV		AL,0x13			; VGA显卡,320x200x8bit
        MOV		AH,0x00
        INT		0x10
        MOV		BYTE [VMODE],8	; 屏幕的模式(参考C语言的引用)
        MOV		WORD [SCRNX],320
        MOV		WORD [SCRNY],200
        MOV		DWORD [VRAM],0x000a0000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    func.asm文件修改

    这次新增了比较多的函数,但不复杂,也不多,这个文件的内容如下:

    [BITS 32]                          ; 制作32位模式用的机器语言
            GLOBAL  _io_hlt, _io_cli, _io_sti, io_stihlt
            GLOBAL  _io_in8,  _io_in16,  _io_in32
            GLOBAL  _io_out8, _io_out16, _io_out32
            GLOBAL  _io_load_eflags, _io_store_eflags
    [SECTION .text]
    _io_hlt:     ; void io_hlt(void);
            HLT
            RET
    _io_cli:     ; void io_cli(void);
            CLI
            RET
    _io_sti:     ; void io_sti(void);
            STI
            RET
    _io_stihlt: ; void io_stihlt(void);
            STI
            HLT
            RET
    _io_in8:     ; int io_in8(int port);
            MOV      EDX, [ESP+4]      ; port
            MOV      EAX,0
            IN       AL, DX
            RET
    _io_in16:   ; int io_in16(int port);
    
            MOV      EDX, [ESP+4]      ; port
            MOV      EAX,0
            IN       AX, DX
            RET
    _io_in32:   ; int io_in32(int port);
            MOV      EDX, [ESP+4]      ; port
            IN       EAX, DX
            RET
    _io_out8:   ; void io_out8(int port, int data);
            MOV      EDX, [ESP+4]      ; port
            MOV      AL, [ESP+8]       ; data
            OUT      DX, AL
            RET
    _io_out16:  ; void io_out16(int port, int data);
            MOV      EDX, [ESP+4]      ; port
            MOV      EAX, [ESP+8]      ; data
            OUT      DX, AX
            RET
    _io_out32:  ; void io_out32(int port, int data);
            MOV      EDX, [ESP+4]      ; port
            MOV      EAX, [ESP+8]      ; data
            OUT      DX, EAX
            RET
    _io_load_eflags:     ; int io_load_eflags(void);
            PUSHFD       ; 指PUSH EFLAGS
            PO
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
  • 相关阅读:
    Paper Reading: RSPrompter,基于视觉基础模型的遥感实例分割提示学习
    数字集成电路设计(四、Verilog HDL数字逻辑设计方法)(二)
    【力扣】21. 合并两个有序链表
    九种常见UML图
    面对新的测试框架不要慌看这里~
    相机数据恢复!详细步骤解析(2023新版)
    企业级AI大模型如何落地?
    程序员必读书籍有哪些值得推荐?
    2.5 注释
    AI歌手:新晋挑战者还是未来主流的替代者?
  • 原文地址:https://blog.csdn.net/github_35735591/article/details/127877255