其实问题很简单,软件在工作的时候也是实体,软件的实质就是电流信号,用电压的高低代表不同是信息,用这些电流信号去控制逻辑电路的通断,靠逻辑电路的通断来控制硬件的工作。
说到底软件就是起到一个开关信号的作用,开关要工作,必需保证硬件是加电的,没有接通电源的硬件是无法用软件来控制的。就好比没有插上电源的台灯,你怎么按开关都是不会亮的。
任何软件在运行前都要有一个将其转化为电流信号的实体化过程,你写在纸上的软件代码是永远也不能控制硬件的。早期电脑用人工接线输定程序,相当于用人体的力量将软件代码实体化为电信号;现在我们用的软盘、硬盘是通过磁头将程序代码转化为电信号,光盘需要通过光头将程序代码转化为电信号等等。
问题二:软件到底是怎样控制硬件的 软件是如何控制硬件的? 软件在工作的时候也是实体,软件的实质就是电流信号,用电压的高低代表不同是信息,用这些电流信号去控制逻辑电路的通断,靠逻辑电路的通断来控制硬件的工作。 说到底软件就是起到一个开关信号的作用,开关要工作,必需保证硬件是加电的,没有接通电源的硬件是无法用软件来控制的。就好比没有插上电源的台灯,你怎么按开关都是不会亮的。 任何软件在运行前都要有一个将其转化为电流信号的实体化过程,你写在纸上的软件代码是永远也不能控制硬件的。早期电脑用人工接线输入程序,相当于用人体的力量将软件代码实体化为电信号;现在我们用的软盘、硬盘是通过磁头将程序代码转化为电信号,光盘需要通过光头将程序代码转化为电信号等等。
麻烦采纳,谢谢!
问题三:软件是怎么控制硬件的 说的具体一点,,,,, 我的理解是这样的:软件和硬件配合工作的过程,就好比司机开车。司机是软件,方向盘、排挡、油门、刹车、雨刮器等等就执行具体功能的是硬件。只有在司机软件的有序组织和正确命令之下,硬件才会做出正确的动作,完成正确的任务。没有软件,再好的硬件也只是死的摆设而已。
具体来说,以通用计算机系统为例:内存、CPU、显卡、显示器、声卡等等这些硬件通过主板(主板本身也是硬件)接口和数据线链接合理地组织在一起之后,加载电压,通过软件的组织和协调,各个硬件执行相应的任务。 *** 作系统(例如Windows 7/8)就是一个最大的软件系统。我们看到的软件,都有漂亮的界面和颜色,选择软件上的选项和按钮,然后执行,软件就会按照编程时设定好的逻辑产生电流控制信号,通过数据线传道到相应的硬件那里,去控制逻辑电路的“接通”和“断开”状态,从而控制硬件执行相应的动作。每个硬件都有自己的地址和名称,软件发出的电流控制信号会准确地找到相关硬件,二进制代码的控制信号就是一些列0和1的组合。例如:软件想让显卡在显示器的某个区域显示红色,就会把显示区域的位置信息和颜色编码组合起来告诉显卡,显卡接到这个命令以后,就照章执行,把执行命令也是通过数据线传到显示器上,显示器接到控制信号后,在相应的区域显示红色。再比如我们要在软件上播放一首MP3的歌曲,就会选择这首歌,然后点播放按钮,这是软件界面上执行的动作。而软件后台执行的则是先通过地址去硬盘上读取这首歌的内容,把它临时存在内存中,然后把这首MP3的内容加上播放的命令一起组合成0和1的电流控制信号传给声卡,声卡接到信号后,处理声音,根据声卡硬件的工作流程,其处理的结果就会传到音箱硬件上播放出来。
硬件本身可能是很复杂的,例如电脑的中央处理器CPU,上面集成了上亿个处理和计算单元。复杂归复杂没关系,软件控制它的原理和逻辑是很简单的,就是上面描述的发出电流信号去控制它计算单元的工作状态和接收计算结果就行了。
不知道这样说有没有说清楚。有点嗦^_^
问题四:软件为什么可以控制硬件? 问题一,举个最简单的例子,就是在“软件空间”,也就是所谓的地址空间中的一些特殊区域,是通过“一根导线”,连接到某个外部引脚上面的,这样,这个“地址空间”里面的数据发生改变,这个引脚对应就有软件上面的“0”、“1”两个值,比如高电平和低电平。
这只是一个非常形象的例子,实际硬件运作过程比较复杂,但是核心差不多就是这样,一般是通过特定的地址实现对硬件的控制――比如软件的存在是依赖存储器的,那么存储器硬件上的一种是电容,只要在这个电容上连接除了起存储作用的“引线”,还连接别的东东,就可以起到相应的作用了,比如点亮一个发光的东东。
疑问二:你说的赋予相应的脉冲,应该是给控制信号吧。大概过程可以描述下:首先软件写入特定的特殊地址,硬件检测到这种写入后反馈给硬件固化的“软件”(也可以叫固件,芯片们工作往往不只有硬件电路的参与,还有硬件本身带有的软件的参与),这种“软件”再“写回”给软件,这就完成了一次通信的过程。
实际硬件软件协同工作的过程非常复杂,《单片机原理》里面有比较细致的描述。所有回答中使用引号的词句表示这只是真实情况的一种近似或形容,不代表其真实工作过程。
问题五:软件与硬件是怎么结合的 Hardware 硬件
信息处理系统的所有或部分物理组件,如计算机或外部设备等
电脑里除了软件都是硬件
拿人体做比喻,人体就是硬件,思维是软件。大脑发出一个命令,你才能做相应的动作
简单的说,硬件就是实物(例如鼠标,键盘,显示,器主机等),看得见摸得着的东西!软件就是虚物(例如程序,系统等),看得见摸不着的东西!
电脑计算机系统:
软件:
应用软件:应用程序包,面向问题的程序设计语言等
系统软件: *** 作系统,语言编译解释系统服务性程序
硬件:
主机:中央处理装置(运算器,控制器),内存储器
外部设备:输入设备,输出设备,外存储器,模数转换器`数模转换器,数据终端等
计算机的硬件是计算机系统中各种设备的总称。计算机的硬件应包括5个基本部分,即运算器、控制器、存储器、输入设备、输出设备,上述各基本部件的功能各异。运算器应能进行加、减、乘、除等基本运算。存储器不仅能存放数据,而且也能存放指令,计算机应能区分是数据还是指令。控制器应能自动执行指令。 *** 作人员可以通过输人、输出设备与主机进行通信。计算机内部采用二进制来表示指令和数据。 *** 作人员将编好的程序和原始数据送人主存储器中,然后启动计算机工作,计算机应在不需干预的情况下启动完成逐条取出指令和执行指令的任务。
什么是软件?
电脑的外观、主机内的元件都是看得见的东西,一般称它们为电脑的「硬件」,那么电脑的「软件」是什么呢?即使打开主机,也看不到软件在哪里。既看不见也摸不到,听起来好像很抽象,但是,如果没有软件,就像植物人一样,空有躯体却无法行动。 当你启动电脑时,电脑会执行开机程序,并且启动系统」,然后你会启动「Word」程序,并且打开「文件」来编辑文件,或是使用「Excel」来制作报表,和使用「IE」来上网等等,以上所提到的 *** 作系统、打开的程序和文件,都属于电脑的「软件」。
103回答者: 君特・格拉斯 - 九级 2005-10-22 13:21
我来评论>>
提问者对于答案的评价:具体,明了,谢谢!
软件
编辑本段名称诠释
1、软件[software](中国大陆及香港用语,台湾作软体)是一系列按照特定顺序组织的计算机数据和指令的 *** 。 2、软件并不只是包括可以在计算机(这里的计算机是指广义的计算机)上运行的电脑程序,与这些电脑程序相关的文档一般也被认为是软件的一部分。简单的说软件就是程序加文档的 *** 体。 3、泛指社会结构中的管理系统、思想意识形态、思想政治觉悟、法律法规等等。
编辑本段类型划分
一般来讲软件被划分为系统软件、应用软件,其中系统软件包括 *** 作系统和支撑软件(微软近期又发布嵌入式系统,即硬件级的软件,是电脑及其它设备运算速度更快更节能) 软件的真正含义 程序设计的最终结果是软件。 软件界面
软件是用户与硬件之间的接口界面。用户主要是通过软件与计算机进行交流。软件是计算机系统设计的重要依据。为了方便用户,为了使计算机系统具有较高的总体效用,在设计计算机系统时,必须全局考虑软件与硬件的结合,以及用户的要求和软件的要求。 1.运行时,能够提供所要求功能和性能的指令或计算机程序 *** 。 2.程序能够满意地处理信息的数据结构。 3.描述程序功能需求以及程序如何 *** 作和使用所要求的文档。
系统软件
系统软件为计算机使用提供最基本的功能,可分为 *** 作系统和支撑软件,其中 *** 作系统是最基本的软件; 系统软件是负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。系统软件使得计算机使用者和其他软件将计算机当作......>>
问题六:电脑是怎么实现用软件控制硬件的? 知道电灯是怎么开关的吗??
电脑开关机是电灯开关基本上是一样的
区别主要是电脑内部的多条电路被焊接到了电路板上,这基本上与所提的软件控制硬件无关
至于软件控制硬件
软件程序主要是一连串的(0与1)代码,这与三极管的高低电平对应。三极管的电平高低主要是通过开关来完成,即硬件实现
问题七:软件是怎么控制硬件的? 通过一些指令,这个看似简单,其实涉及到一些很底 层的内容和原理。对于一般计算机爱好者 来讲,又没有办法说明白,原因就是我们 从来没有考虑过电路在物理上的实现。 计算机软件说到底,不过就是一些指导电 子元件工作的指令序列,那么你一定又会 问电子元件为什么会按这些序列工作呢? 指令序列的在电路中的实质就是一些有规 律且有一定意义的电脉冲,电脉冲控制电 子元件的各种状态。工作过程非常复杂。 最简单最基本的就是几个逻辑门电路的实 现:比如“或”电路,“与”电路等等。
这些逻辑门电路的组合和协同,就能实现 电脑整体上的运算和处理能力。因为这是 十几个数量级的基础电路的有机 *** 的对 外的体现,如奔腾系列CPU集成了上亿个 半导体元件,要想把各个元件的功能彻底 认知,是非常困难的。可以把它们比作每 个人的活动合在一起就构成了社会。
问题八:最底层的最基本的,软件如何控制硬件? 硬件有读取二进制指令的功能,编程语言写的代码通过编译生成二进制文件,然后给硬件读取执行,即可对硬件进行控制。
问题九:软件层面的东西怎么控制硬件 通过驱动程序来控制硬件的。
大家都知道我们可以使用C语言写一段程序来控制硬件工作,但你知道其工作原理吗?以下仅供参考!
c语言在实际运行中,都是以汇编指令的方式运行的,由编译器把C语言编译成汇编指令,CPU直接执行汇编指令。
所以这个问题就变成,汇编指令是如何 *** 作硬件的?
如果把硬件平台限制在x86环境下,那么汇编指令 *** 作硬件基本上只有两种方式:
方式一:
通过向内存空间写数据。硬件会把硬件上的各种寄存器(外行可以理解为访问硬件的接口或者 *** 作硬件的工具)映射到某一块内存地址空间上,之后只要用汇编指令,甚至C语言去读写这一段内存地址空间(并非真正 *** 作物理内存),就可以达到 *** 作硬件的目的了。
如果题主还有WindowsXP环境(虚拟机也可以),就可以用汇编指令直接 *** 作显存:
MOV AX,B800
MOV ES,AX
XOR DI,DI
MOV CX,0800
MOV AX,5555
REPZ STOSB
硬件的各种寄存器会被映射到某一块物理内存中,这种方式称为MMIO,在Windows的设备管理器里,右键点设备,看属性-》资源里,不少硬件设备都有“内存范围”的参数,这里的内存范围就表示这个硬件的资源可以通过访问这一段内存来控制它。
方式二:
x86汇编中,还有两个特殊的指令是IN和OUT,这是x86平台上独有的,上面图里的I/O范围,就是用IN/OUT这两个指令来访问和控制的。
以上两种访问硬件的方式,第一种是可以用C语言实现的,上面一段汇编,本质上类似于C语言代码:
char ptr = 0xB8000
int i
for (i = 0i 《0x800i++)
{ptr + i = 0x55
}
第二种IN/OUT方式没有直接的C语言语法对应,需要自己封装汇编。
那么为什么平时很难用C语言 *** 作硬件呢?这是因为平时写的代码大多数都在保护模式下,保护模式下,直接访问物理地址会受到限制,C语言 *** 作的地址都是虚地址。
对于Windows来说,要访问物理地址,需要工作在内核模式,也就是的写驱动才行。
而在显存方面,首先,题主要先明白物理地址和虚拟地址的概念。
原来的8086cpu设计的时候,地址空间有一块区域(640K-1M)之间,有一块作为显存使用
这里你说的预留的地址,是指物理地址,这一段地址的准确范围是000A0000-000BFFFF,不管是32位还是64位CPU,这一段物理内存地址一直都保留给显存使用,不区分32位还是64位,也不区分保护模式还是实模式。
可见这一段内存至今仍然是留给显卡使用的。
那么现在为什么不能直接用这段内存了?
因为现在的软件都运行在保护模式下,访问的地址都是虚拟地址,而并非物理地址,包括你使用cmd命令打开的环境,都是虚拟地址,虽然32位XP里能用debug命令向000B8000上写数据并能显示在cmd的界面里,但本质上,这都是虚拟出来的。
如果要想用这段显存怎么办?
自己写一个简易的 *** 作系统,不启动显卡的各种图形加速功能,CPU进入保护模式后在GDT里映射一个4G的数据段,与物理地址一致,那么向000B8000上写数据,就会像过去DOS一样显示在屏幕上,所以保护模式下也可以访问这一段内存。所以,保护模式下,也可以用它。
显卡那么多显存是怎么映射的?
有很多内存地址被映射给显存了,就是通过这种映射关系,把一些物理地址留给显存,使得CPU能像访问内存一样访问显存资源。
当然,实际情况是,2G显存未必完全映射,而是只映射一部分地址,显卡有一些开放的寄存器能够控制哪部分显存映射过来,这样就能使得CPU在使用比较少的物理地址范围的情况下,访问全部的显存。
还有一个很有意思的事情:在虚拟机里,找到映射的高地址部分的第一块内存区域,写一个能直接访问物理地址的程序(比如一个驱动),去读这一块内存,然后写到文件里,再用屏幕截图,也写到文件里,会发现截图的内容和显存里读出来的内容基本上是一样的。
网友awayisblue
要回答你的问题,我们需要要知道:
硬件是一种什么样的存在
什么是驱动。
C语言怎么 *** 作硬件
我就不严格去定义这些概念了,我就以一个例子来通俗地讲解一下吧。
首先讲硬件:
先介绍一款单片机芯片STM8。
这款芯片里面有cpu, 内存,寄存器(先不要觉得看到新名词压力大,继续往下看)等等,相当于我们的电脑了,但还要外接其它硬件。
这里你需要知道的概念是:
芯片的引脚跟寄存器是相对应的,寄存器是8位的内存单元(对,存在于内存上面),当你往这个内存单元里面写入数据时,芯片的引脚的电压会发生变化,比如说我写入的是01100001,则芯片上与之对应的8个引脚的电压状态(分为高电平与低电平两种)会输出:低高高低低低低高。
cpu可以执行代码指令,指令可以 *** 作内存。
结论:所以从上面两点可以我们可以知道,cpu可以执行指令,使芯片的引脚电平(电压)发生变化。
关于这款显示器,我们需要知道的是:
它是有引脚的,这些引脚可以跟到前面介绍的那款单片机芯片的引脚相连。
该显示器有自带的内存,用于存储要显示的字符,显示器从该内存里面读取字符来来显示。
单片机芯片与该显示器相连后,可以通过引脚往该显示器的内存里写数据(通过多个引脚电平的高低不同来代表不同的数据,比如说:低高高低低低低高 代表01100001,这个数据写在显示器的.内存里面,被显示器所显示,当然,会根据ASCII来显示数字对应的字符,01100001对应的字符是‘a’),除了接收数据的引脚外,还有控制显示器的引脚(这个我们会在驱动那里介绍,继续往下看)。
结论:单片机芯片与显示器相连,可以通过引脚输出的电平来控制显示器的字符显示。
那么,综合上面,也就是说,单片机芯片cpu可以通过执行指令来控制显示器的字符显示。
而这里,题主所说的硬件,指的就是这个显示器了。
接下来讲驱动:
那么,什么是驱动呢?驱动无非就是硬件跟软件的中间层,但我们不纠结这种关系,直接来看一下,对于我们这个例子,驱动指的是什么。首先我们要知道:
显示器支持很多种 *** 作,比如说清除显示,光标移动,读取数据,写数据等等。
这些 *** 作数据引脚和控制引脚来实现。
引脚可以通过单片机芯片来控制。
结论:我们可以通过在单片机芯片里面写显示器的“驱动”程序来屏蔽掉硬件(显示器硬件)层。
于是这里驱动程序,指的是显示器所支持 *** 作的程序表示。比如说清除显示,我们可以编写一个clear()函数,光标移动,我们编写一个move_cursor()函数,读取数据和写数据分别为read()和write(),然后分别实现就可以了(通过向寄存器里写数据的形式,进而控制引脚的电平变化,再而控制显示器,这个过程前面已有介绍)。这些函数就是驱动程序了。为什么上面说驱动程序可以屏蔽掉硬件呢?因为程序员可以使用前面的驱动程序来直接 *** 作显示器(硬件),而不用知道太多关于硬件的事情,而一般的驱动程序也可以由厂家来提供。
再说明一点:一般这些驱动程序可以用汇编写(出于运行效率的考虑),也可以用C语言来编写的,比如说我上面的例子,就可以直接用C语言来编写。当然C语言内联汇编的形式也可以。
最后讲C语言怎么 *** 作硬件:
相信到这里,C语言是怎么 *** 作硬件的已经比较明白了。
这里总结一下:
C语言由CPU运行(实际上是先编译成机器码存在芯片里面然后执行),可以去 *** 作内存。
内存里有一段是跟寄存器相对应的,而寄存器是跟芯片的引脚相对应的,于是 *** 作该段内存就能控制芯片引脚的电压变化。
硬件(比如说显示器)有引脚(或者说排线,这些也是一样的东西),这些引脚跟芯片的引脚相连可以接受芯片的控制。
可以把对某个硬件的 *** 作做成一系列 *** 作函数,这些 *** 作函数就是驱动程序了。
于是我们的C语言只要去调用这个驱动程序就可以直接 *** 作硬件了。(当然驱动程序也可以由C语言来编写,所以C语言 *** 作硬件并不一定要经过驱动程序)。
我建议你看几本教科书:计算机组成原理、数字电路基础、8086汇编语言、c8051单片机实验教程看完这几本书你就明白了。一般在cpu中高电平是3.7v~5v之间代表1,1.6v~0v之间代表0,低电平。软件是运行在硬件cpu上的,它通过输出控制引脚将高低电平以及各种方波、波信号输出到引脚,引脚上有放大设备来识别信号进行信号放大,或者识别信号来增强信号加速传输。
整个运行过程还是相当复杂的。这样可能你容易理解,如果你把灯开关理解为一台计算机,那么它只能被你输入开、关,两个状态,它就相当于一个最简单的计算单元,你输入开时,它输出电流,驱动灯泡。就是这样。
你的问题在我给你的书里有非常详细的解释。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)