首页 > 编程语言 >《程序是怎样跑起来的》——第11章 硬件控制方法

《程序是怎样跑起来的》——第11章 硬件控制方法

时间:2024-02-24 12:45:07浏览次数:21  
标签:11 控制器 端口 程序 硬件 指令 外围设备 CPU

一、应用和硬件
1、在用C语言等高级编程语言开发的Windows应用中,大家很少能接触到直接控制硬件的指令。这是因为硬件的控制是由Windows全权负责的。Windows提供了通过应用来间接控制硬件的方法。利用操作系统提供的系统调用功能就可以实现对硬件的控制。
示例:应用通过操作系统间接控制硬件

Windows直接控制了作为硬件的显示器。但Windows本身也是软件,由此可见,Windows应该向CPU传递了某些指令,从而通过软件控制了硬件。
2、支撑硬件输入输出的 IN指令和 OUT 指令:IN指令通过指定端口号的端口输入数据,并将其存储在CPU内部的寄存器中。OUT指令则是把CPU寄存器中存储的数据,输出到指定端口号的端口。
示例:IN指令和 OUT指令的语法

3、端口号和端口:
计算机主机中,附带了用来连接显示器及键盘等外围设备的连接器。而各连接器的内部,都连接有用来交换计算机主机同外围设备之间电流特性的IC。这些IC,统称为I/O控制器。
I/O是 Input/Output 的缩写。显示器、键盘等外围设备都有各自专用的 I/O控制器。I/O控制器中有用于临时保存输入输出数据的内存。这个内存就是端口。端口(port)的字面意思是“港口”。由于端口就像是在计算机主机和外围设备之间进行货物(数据)装卸的港口,所以因此得名。I/O控制器内部的内存,也称为寄存器。虽然都是寄存器,但它和 CPU 内部的寄存器在功能上是不同的。CPU 内部的寄存器是用来进行数据运算处理的,而I/O寄存器则主要是用来临时存储数据的。
在实现I/O控制器功能的IC中,会有多个端口。由于计算机中连接着很多外围设备,所以就会有多个I/O控制器,当然也会有多个端口。一个I/O控制器既可以控制一个外围设备,也可以控制多个外围
设备。各端口之间通过端口号进行区分。端口号也称为I/O地址。IN 指令和 OUT指令在端口号指定的端口和 CPU之间进行数据的输入输出。
示例:
(1)以端口为桥梁来实现CPU和外围设备之间的数据传递

I/O装置,有的直接附带在计算机主机的主板(用来放置CPU的基板)上,有的则是各自独立的扩张板卡。键盘、鼠标、打印机等常用的I/O,一般都在主板上,而显示高速图形的显示器及网卡等特殊的I/O,通常是独立的扩张板卡。
(2)通过控制面板查看软盘驱动器的端口号

二、编写测试用的输入输出程序
利用IN/OUT指令来控制蜂鸣器的程序示例


(1)部分是控制蜂鸣器发音的部分。
(2)部分是一个重复100万次的空循环,主要是为了在蜂鸣器开始发音和停止发音之间稍微加上一些时间间隔。
(3)部分是用来控制蜂鸣器发音停止的部分。
三、中断处理
1、在“I/O范围”下面有一个“IRQ”项目,对应的值是0x00000006(06)。IRQ(Interrupt Request)是中断请求的意思。IRQ是用来暂停当前正在运行的程序,并跳转到其他程序运行的必要机制。该机制称为中断处理。中断处理在硬件控制中担当着重要角色。因为如果没有中断处理,就有可能出现处理无法顺畅进行的情况。

2、中断控制器:假如同时有多个外围设备进行中断请求的话,CPU也会为难。为此,我们可以在I/O控制器和 CPU 中间加入名为中断控制器的 IC来进行缓冲。中断控制器会把从多个外围设备发出的中断请求有序地传递给CPU。
示例:中断控制器的功能

3、中断请求的顺序

在主程序运行的过程中,大部分的外围设备,都会频繁地发出中断请求。其原因就是为了实时处理从外围设备输入的数据。虽然不利用中断也可以从外围设备输入数据。

标签:11,控制器,端口,程序,硬件,指令,外围设备,CPU
From: https://www.cnblogs.com/Li204217/p/18030951

相关文章

  • 《程序是怎样跑起来的》第六章——尝试亲自压缩数据
    回答章前问题:1、字节,一字节等于八位2、DOC和TXT肯定不是,DOC是word文档的后缀,TXT是文本文件的后缀。答案是LZH。(压缩文件扩展名)3、?      注:不会,问题:数据的值*循环次数来表示的压缩方法是RLE算法还是哈夫曼算法? (什么是RLE算法?哈夫曼算法?)4、一个半角英数为一字......
  • 第10章通过汇编了解程序的实际构成
    汇编语言的源代码组成:由转换成本地代码的指令(操作码)与针对会汇编器的伪指令构成伪指令:负责把程序的构造及汇编的方法指示给汇编器,伪指令本身无法转换成本地代码。段定义:用来划定范围区域,是一个连续的内存空间,在程序中表示一段命令和数据等程序构成的集合体,一个程序由多个段构成......
  • P4119 Ynoi2018 未来日记
    P4119Ynoi2018未来日记lxl出的题好duliu啊。感谢来自fr200110217102的博客题解P4119【Ynoi2018未来日记】。下标分块+值域分块+并查集其实一开始的方向应该是尝试线段树或者其它的动态维护的算法,直到时间复杂度和空间复杂度对不上,你才会想到——要分块!区间第\(k\)......
  • 《程序是怎样跑起来的》第七章读后感
    这一章让我对不同操作系统的API有了更深入的理解。API是应用程序接口的缩写,它就像是操作系统和程序之间的桥梁,使得程序能够利用操作系统提供的各种功能。不同的操作系统可能有不同的API,这也导致了在不同操作系统上开发程序时需要做出相应的调整。关于虚拟机,我觉得它就像是一......
  • 程序是怎么跑起来的第三章
    在上一章学习了二进制的运算,在本章将学习计算机小数运算的方法,通常认知下,我们认为计算机是不会出现错误的,但实际上小数运算就是一个典型的例子,通常我们所知道的计算机的所有信息都用二进制形式来处理,但是使用二进制来表示整数和小数的方法却有很大不同,二进制转化为十进制,只需要将......
  • 陪玩程序源码,如何引导用户进行点赞操作?
    引导点赞我们需要让按钮做出一些视觉效果来引导用户进行点赞操作,那持续震动无疑是一种好的选择。//love.jsconstlikeBtn=document.getElementById('likeBtn');constheart=document.getElementById('heart')likeBtn.addEventListener('mousemove',()=>{heart.cl......
  • 刘铁猛C#学习笔记11 索引器、常量
    一、索引器[]概述使一个对象可以像数组一样用方括号[]去访问其元素ex:字典的声明 1.索引器的声明首先像上文那样声明一个字典Dictionary<,>在VS中输入indexer,然后敲两下tab就能得到:(按下tab可以跳到下一个可编辑项上)第一个类型参数为返回值的类型,第二个类型参数为......
  • 《程序是怎样跑起来的》第六章读后感
    我是计应232班的赵精艺。第六章讲的主要是亲自尝试压缩数据。在正文前的几个问题中我知道了一些有关于本章的内容,并且了解到了可逆压缩与不可逆压缩的不同点:压缩后的数据能够复原的是可逆压缩,无法复原的是不可逆压缩。文件是以字节为单位保存的,文件是将数据存储在磁盘等存储媒介中......
  • 程序是怎样跑起来的第五章观后感
    读完第五章,我了解到了内存和磁盘之间的关系。磁盘缓存,是通过使用内存来提高磁盘访问速度的,虚拟内存是指把磁盘的一部分作为假想内存来使用的,一般来说,程序需要被解读出来,然后运行,如果不读入内存就无法运行这一机制,我们称为储存程序方式。由于WINDOWS具有多重任务,有时同时运行多个......
  • 硬件控制方法
        1、在汇编语言中是用IN指令和OUT指令同外围设备进行输入输出操作的。2、用来识别外围设备的编号称为I/O地址或I/O端口号。  在C语言等高级编程语言开发的Windows应用中,大家几乎接触不到能直接控制硬件的指令,这是因为硬件的控制是Windows利用其操作系统提供的API......