zoukankan      html  css  js  c++  java
  • [汇编学习笔记][第十四章 端口]

    第十四章 端口

    和CPU相连的芯片,除了各种储存器外,还有一下三种芯片。

    • 各种接口卡(网卡,显卡)上的接口芯片,他们控制接口卡进行工作。
    • 主板上的接口芯片,CPU通过它们对部分外设进行访问。
    • 其他芯片,用来存储相关的系统信息,或进行相关的输入输出处理。

    CPU可以直接读写一下三个地方数据

    • CPU内部的寄存器
    • 内存单元
    • 端口

    14.1 端口的读写

    • CPU最多可以定位64KB个不同的端口
    • 端口的读写只能用inout两条命令

    • 访问端口

      in al,60h //从60h号端口读入一个字节
    • inout 指令中只能用al或ax读或写入端口。

    • 对256~65535端口进行读写时,端口号要放在dx

      mov dx,3f8h
      in al,dx
      out dx,al

    14.2 CMOS RAM 芯片

    PC机中,有一个CMOS RAM芯片,一般简称为CMOS,该芯片有如下特征。

    • 包含一个实时钟和一个有128个存储单元的RAM存储器
    • 该芯片靠电池 供电,所以关机后其内部的实时钟仍可工作,RAM信息不丢失。
    • 128个字节RAM中,内部实时钟占用0~0dh单元保存时间信息, 其余大部分单元用于保存系统配置信息,供系统启动时BIOS程序读取,BIOS也提供了相关的程序,使我们在开机的时候配置CMOS RAM的系统信息。
    • 该芯片由两个端口,端口地址为70h,和71h。CPU通过这两个端口来读写CMOS RAM
    • 70h地址端口,存放要访问的CMOS RAM单元的地址; 71h数据端口,存放从特定的CMOS RAM单元中读取的数据,或要写入其中的数据。可见,CPU对CMOS RAM的读写分两步进行,比如,读CMOS RAM的2号单元

      - 将2送入端口地址70h
      - 从端口71h读出2号单元的内容
      

    14.3 shl和shr指令

    • shl al,1
    • 如果移动位数大于1,必须将移动位数放在cl

    14.4 CMOS ROM中存储的时间信息

    在CMOS ROM中,存放着当前的时间,这6个信息长度都为一个字节。

    存放单元

    • 秒:0
    • 分:2
    • 时:4
    • 日:7
    • 月:8
    • 年:9

    且这些数据都以BCD码存储

    问:如何在屏幕显示月份信息

    • 从CMOS RAM的8号单元读出当前月份的BCD码

      mov al,8
      out 70h,al
      in al 71h
      
    • BCD码表示的月份以十进制的形式显示到屏幕上

      • BCD码值+30h=十进制对应的ASCLL码低
  • 相关阅读:
    Hibernate3 第一天
    Struts2第四天
    Struts2第二天
    Struts2第一天
    【剑指offer】数字在排序数组中出现的次数,C++实现
    【剑指offer】两个链表的第一个公共结点,C++实现
    【剑指offer】数组中的逆序对。C++实现
    [Python]定时任务框架 APScheduler
    [pandas] SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
    alicode35-找出二叉搜索树的第2大的数
  • 原文地址:https://www.cnblogs.com/zy691357966/p/5480513.html
Copyright © 2011-2022 走看看