• 3.3让我们直接对显示器说点什么吧


    3.3让我们直接对显示器说点什么吧

    MBR环节我们利用BIOS提供的0x10中断来实现的滚屏和打印字符

    3.3.1CPU如何与外设通信-IO接口

    IO作用就是在 CPU 和外设之间相互爹故协调转换, 如 CPU和外设速度不匹配, 它就是变速箱, CPU和外设信号不通用它就是翻译机。
    IO接口是连接 CPU与外部设备的逻辑控制部件, 既然称为逻辑, 就说明可分为硬件和软件两部分。
    硬件部分处理的是协调CPU和外设之间的种种不匹配。
    软件部分指的是控制接口电路工作的驱动程序以及完成内部数据传输的所需要的程序。
    IO接口功能:
    1.设置数据缓冲 解决 CPU 与外设的速度不匹配
    2. 设量信号电平转换电路
    3. 设置数据格式转换
    4. 设置时序控制电路来同步 CPU 和外部设备
    5. 提供地址译码
    IO接口要被设计成通用寄存器的方式同CPU进行通信,在IO接口中的通用寄存器一般称之为端口。
    in指令用于从端口中读取数据, 其一般形式是=
    (1) in al,dx
    (2) inax,dx
    out指令用于往端口中写数据, 其一般形式是
    (l) out dx,a1.
    (2) out dx,ax
    (3) out 立即数,al
    (4) out 立即数,ax

    3.3.2显卡概述

    在实模式下通过中断向量表进行对显示屏操作,也是对显示屏中的显卡操作。而在未来保护模式下并不会有中断向量表。所有我们后面会直接对显示屏的显存进行操作。

    3.3.3显存,显卡,显示器

    显存是显卡提供给我们的接口。
    显存地址分布
    ![请添加图片描述](https://img-blog.csdnimg.cn/08c577ae003e4de2881d21504355b62b.png请添加图片描述
    上面表示的是显存里面地址对应的各种模式。
    在显示器上显示一个字符需要两个byte位,0-8位用来进行字符本体的描述,9-15位用来进行字体颜色等属性的演示。
    如图所示:
    请添加图片描述
    请添加图片描述

    3.3.4改进的MBR,直接操作显卡

    ;主引导程序 
    ;
    ;LOADER_BASE_ADDR equ 0xA000 
    ;LOADER_START_SECTOR equ 0x2
    ;------------------------------------------------------------
    SECTION MBR vstart=0x7c00         
       mov ax,cs      
       mov ds,ax
       mov es,ax
       mov ss,ax
       mov fs,ax
       mov sp,0x7c00
       mov ax,0xb800
       mov gs,ax
    
    ; 清屏
    ;利用0x06号功能,上卷全部行,则可清屏。
    ; -----------------------------------------------------------
    ;INT 0x10   功能号:0x06	   功能描述:上卷窗口
    ;------------------------------------------------------
    ;输入:
    ;AH 功能号= 0x06
    ;AL = 上卷的行数(如果为0,表示全部)
    ;BH = 上卷行属性
    ;(CL,CH) = 窗口左上角的(X,Y)位置
    ;(DL,DH) = 窗口右下角的(X,Y)位置
    ;无返回值:
       mov     ax, 0600h
       mov     bx, 0700h
       mov     cx, 0               ; 左上角: (0, 0)
       mov     dx, 184fh	       ; 右下角: (80,25),
    			       ; 因为VGA文本模式中,一行只能容纳80个字符,25行。
    			       ; 下标从0开始,所以0x18=24,0x4f=79
       int     10h                 ; int 10h
    
       ; 输出背景色绿色,前景色红色,并且跳动的字符串"1 MBR"
       mov byte [gs:0x00],'1'
       mov byte [gs:0x01],0xA4     ; A表示绿色背景闪烁,4表示前景色为红色
    
       mov byte [gs:0x02],' '
       mov byte [gs:0x03],0xA4
    
       mov byte [gs:0x04],'M'
       mov byte [gs:0x05],0xA4   
    
       mov byte [gs:0x06],'B'
       mov byte [gs:0x07],0xA4
    
       mov byte [gs:0x08],'R'
       mov byte [gs:0x09],0xA4
    
       jmp $		       ; 通过死循环使程序悬停在此
    
       times 510-($-$$) db 0
       db 0x55,0xaa
    
    • 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
    • 52
    • 53
    • 54
    • 55

    关键字byte表示操作数的数据宽度为1
    关键字word表示操作数的数据宽度为2
    关键字dword表示操作数的数据宽度为4

  • 相关阅读:
    Linux 基础(一)——Linux简介、目录管理、文件管理
    SOLIDWORKS Electrical 3D--精准的三维布线
    【毕业设计】基于深度学习卷积神经网络的手势识别算法 - python opencv 机器视觉
    综合实验高级网络—— 配置三层 热备等网络技术
    C++ 11 知识积累
    如何监控文件已成功通过EDI系统发给客户(三)-997回写
    【华为OD机考B卷 | 100分】整数编码(JAVA题解——也许是全网最详)
    Django:二、模板、静态文件及请求相应
    讯飞星火大模型 与New Bing实测对比
    8个视频剪辑素材网站,免费下载
  • 原文地址:https://blog.csdn.net/holdtao/article/details/127724933