冯氏系统与编程.docx

上传人:b****4 文档编号:5473480 上传时间:2023-05-08 格式:DOCX 页数:143 大小:185.82KB
下载 相关 举报
冯氏系统与编程.docx_第1页
第1页 / 共143页
冯氏系统与编程.docx_第2页
第2页 / 共143页
冯氏系统与编程.docx_第3页
第3页 / 共143页
冯氏系统与编程.docx_第4页
第4页 / 共143页
冯氏系统与编程.docx_第5页
第5页 / 共143页
冯氏系统与编程.docx_第6页
第6页 / 共143页
冯氏系统与编程.docx_第7页
第7页 / 共143页
冯氏系统与编程.docx_第8页
第8页 / 共143页
冯氏系统与编程.docx_第9页
第9页 / 共143页
冯氏系统与编程.docx_第10页
第10页 / 共143页
冯氏系统与编程.docx_第11页
第11页 / 共143页
冯氏系统与编程.docx_第12页
第12页 / 共143页
冯氏系统与编程.docx_第13页
第13页 / 共143页
冯氏系统与编程.docx_第14页
第14页 / 共143页
冯氏系统与编程.docx_第15页
第15页 / 共143页
冯氏系统与编程.docx_第16页
第16页 / 共143页
冯氏系统与编程.docx_第17页
第17页 / 共143页
冯氏系统与编程.docx_第18页
第18页 / 共143页
冯氏系统与编程.docx_第19页
第19页 / 共143页
冯氏系统与编程.docx_第20页
第20页 / 共143页
亲,该文档总共143页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

冯氏系统与编程.docx

《冯氏系统与编程.docx》由会员分享,可在线阅读,更多相关《冯氏系统与编程.docx(143页珍藏版)》请在冰点文库上搜索。

冯氏系统与编程.docx

冯氏系统与编程

冯氏系统与编程(面向系统的实现编程)

何谓PC,这要从PC的起源说起:

计算机俗称电脑.我们平常谈到的计算机就是指PC.

当然,计算机不光指PC,还可以指服务器,大型机,我们无意去为分别这里面的区别花费时间,这纯粹是一种历史叫法(叫PC的那些计算机叫PC,不叫PC的计算机叫其它名字而已).在不加特别说明的情况下,本书作为编程教学书以下部分我谈到计算机就是指PC.我们是对PC编程.

PC的概念更多地是一个历史概念而非范畴概念,历史上第一代(注意并非第一台)PC是指1981年8月IBM推出的第一代个人计算机,称为IBMPC,它配备了intel的8088CPU和Microsoft的MS-DOS,从这里开始,Intel确立了它PC行业的CPU霸主地位,微软也慢慢成为了软件领域的巨无霸.Wintel组合出现.

当然,IBM是卖电脑的,Intel是做CPU的,而微软是搞软件的,这三者业务领域不一样.但电脑就是从这个时候开始进入大众生活的,在这之前是一些巨型机,科研设备机器,以及个人爱好者研制的雏形所谓“计算机”.正是这样的发展,带来了计算机向PC发展的态势(硬件上的,软件上的,总体架构上的).

关于这其中的种种历史,存在有一些趣闻,比如:

【硬件上的】:

据可靠不可靠小道消息,第一台计算机其实是由一个叫毛利的人发明的而不是教科书中普遍谈到的那个巨大的家伙ENIAC.

【软件上的】:

苹果图形界面拉开了计算机图形时代的到来.

50,60年代某段时间一种叫CP/M的操作系统差点取代MSDOS而使它所属的公司成为IBM的合作伙伴.

MSDOS实际上只是一层壳.它是改PCDOS来的.而DOS实际上并非微软所产,它的作者早就死了.

【架构上的】:

CPU是有架构的,AMD和Intel主频之争从来都没停过,具体请参见各种资料..

机器系统

图灵机与冯氏模型

现代计算机模型的产生源于对自动控制(自动机理论)和人工智能(机器人)的研究.

图灵等一帮人开始早期现代计算机研究的时候真正意义上的计算机尚未产生,那时各种各样的机器都出自科学们一手惊鸿的杰作(是的,它们只能称为机器,而不是计算机,自然这种机器就不可能是现代意义上的某种计算机,比如PC.------而且,历史上地,它们大都用在了毁灭的战争上,而不是属于计算机它们自己的工业化流程中,比如,二战中经图灵一手破解的德国密码机就是一例),所以更没有一个在数学上可以成立的统一理论基础.

而他的图灵形式理论,即是对计算机领域的此种基础贡献,但,根据图灵本人更深一些的理想来说,其实更多的是对人工智能的探测.

为了实现这个目的,他们需要借助数学(数学是一切科学的基础)的手段,从数学上进行突破,将数学概念进行构造,使其形式化,图灵首先是一个数学家,和破译专家,因此有人说计算机是数学思想失败(第三次数学危机,希尔伯特理论体系被哥德尔击跨)的产物.计算机是喝着数学(或和电子学)的乳汁长大的.图灵造出了图灵数学,丘奇造出了函数理论(将数学函数进行“可构造,可计算化”),图灵与丘氏最开始的区别,只可能是数学上的,然后才是编程风格上的.

 

图灵机是一种通用自动机器的概念模型和数学模型,它并非首先指代某种完美的现实存在物,在概念上,这种机器有极其简单的形式(它有一个二端无限延伸的纸带作为存储装置,输入,输出和状态转移函数是一个机器的三要素,这三要素组合并变形的过程就是组成一个图灵机的工作原型所需的全部东西),只要给它有意义的输入,它就能产生足够丰富的变形并可表达图灵机能解决的丰富问题(可解决,诸如计算函数模拟硬件这样的问题,这些问题统统都用一个词来概括“算法”),图灵机作为自动机形式理论之一,因为它揭示并解决了现代计算机在抽象层次运行的本质即形式计算(图灵机的运作原理被称为形式计算,是离散数学自动机的一部分,通过测试的机器就叫图灵完备,,所有通过图灵完备的机器,这说明它们有同样的一类能力,可以解决等价的算法..可以解决同样的问题.).这对计算机发展的意义不言而喻,因为它使计算机真正有了理论学科,从此计算机进入了它的工业化,而图灵因为他的这个贡献被称为计算机之父.各种形式的自动计算机理论随后在那个时代发展开来.

如果说图灵机阐述的是一种泛义上的自动机(它绝不仅仅限于实现计算机),那么冯氏模型就是专门针对计算机的自动机理论了,以前的机器(在可编程电脑出现之前),指令是硬化的,要为某机器编程相当于重置整个机器.而冯氏机设置了二大部件,一是执行部件(CPU),一是存储部件(主存).

CPU和内存(它们靠电工作,是电脑中的电字所指所在,从硬件上来看,PC的运行过程在外在上就表现为通电状态下的CPU从同样通电状态下的主存里取指令并译码执行的过程,它们不是智能设备,而是机电设备)才是PC的硬件仅需的二个东西.只要有CPU和内存,一个系统在硬件上就是一个基本的PC(其它的都是周边设备,它们只是用来扩展PC的功能),只不过现代意义上的PC,除了提供CPU和内存,支持“计算”功能之外,还支持其它组件-比如IO子系统,图形子系统,这些附加组件中的一些成为现代PC必不可少的部件,比如IO(无法想象不能输出信息和输入信息的PC有什么用,当然,我把IO等同于“输出信息和输入信息”是不够严谨的),Filesystem(无法想象没有硬盘没有文件的PC有什么用),UI(无法想象不能给用户提供一个可以观看输出的屏幕和界面的PC有什么用),NETWORK(无法想象不能跟其它PC联网的机器有什么用.

以上这些,只是硬件构架上的表层,冯氏机在理论上的精神在于"指令存储,顺序执行",在冯氏模型下,执行指令的机制和存储指令的机制是分开的,要换一套程序不需要更换指令系统,因为程序是被内存存储的,取指令器是从RAM中随机取出,并不用预先在内存位置固化程序,然后通过控制和地址总线交互存取到内存,这样CPU只负责执行,对于实现不同的程序,它可以只用一套指令系统(CPU支持一定的指令,和一定的类型).而这种指令组成的程序(可能是用户写的一段机器程序或汇编程序),本质上是一套,有机的,顺序的,确定的指令集,任何时候,机器都(提供一套机制)保证CPU从RAM中随机取到这样一条指令并执行它,完成指令的执行和数据的存储,这究竟是种什么样的过程呢?

这就不得不说下CPU和内存是如何在底层工作的.

上面说了,整个冯氏PC系统是以CPU作为执行单元和主存作为存储单元为它二大主要架构部件的,(靠沟通他们二者之间的地址线和控制线通信),,即冯氏计算机,就是一旦开始工作,就只会做“指令被不断取出并译码执行的顺序与确定过程,”的机器.这也是冯氏计算机“计算”的意义所在.

不管如何,请记住.这种最终反应在软件层面上的Taskrunningsupport才是PC的功能本质,IO系统,图形系统,文件系统,声音系统,网络系统,全是PC的附加功能组件和附加硬件.它们虽然不是一个纯意义上的PC的必要组成部分,但是对于一个现代PC来说,它们几乎是不可缺少的.只是当它们被附加到PC上时,PC需要为与它们的通讯工作提供额外的接口,而且这些智能系统都有自己的控制器,但是没有自己的指令和内存,所以它们共享PC的处理能力和表数据能力,才能在PC中发挥作用,(于是这些附加功能)表现为PC的功能和应用.

所以,其实,CPU不但处理它自己的事情(执行指令,调用数据)而且是作为整个PC的总控制中心存在的(它还协调其它周边设备并完成一部分他们完成不了的工作),简单地说,PC的运行过程等同于CPU执行的过程,因为所谓IO,其实一定都是有CPU参与并受它主导的,CPU不但接管了内存管理这些他进行计算时应管的事,还接管了其它硬件,比如它把显存归入它的管理统一跟主内存编码,而且它管理与其它硬件的通讯,比如它把硬件功能归为它的中断例程并把其中断处理程序的地址统一跟内存编码.CPU的执行过程就是在硬件时钟的一个恒定周期中(有一个时钟发生器指导CPU不断地运行)不断调用指令变换其指令状态,输入输出则是这些内存二进制表示.总而言之,冯氏架构中,CPU统冶了整个机器,内存二把手,其它硬件则是被它管理和统治的,这样整个PC才发挥作用.

CPU与内存地址

CPU与内存如何发生联系被称为CPU的存储管理机制,CPU管理内存的硬件是它的地址总线和数据总线,其中地址总线是负责寻址机制的通道,而数据总线表示CPU能一次性处理的数据通道,地址线数与数据线性往往长度不一,这就导致了CPU的寻址跟处理产生了一对矛盾,地址线决定了它能看到(CPU能使用到的)和管理到的内存总量(物理地址),而数据线决定了它能一次性“连续地”处理的数据长度和能表示的地址形式(逻辑地址),,,这就是表示(逻辑地址形式)和实际内存(物理地址)上的矛盾.

撇开其它因素,我们就事论事来讨论这个矛盾,20位地址线可以使用2^20个最小内存单元即1MB的内存空间(这就是说使得这种CPU的一个任务理论上可使用至多1MB的线性空间,因为它只能“直接”寻址到这么大的地儿)但16位CPU中的寄存器只能表示前16位.因此CPU要表达和要用尽这1MB的空间,不能以直接线性对应的方式来表达.除非数据线多于或等于地址线.

“间接”的方法就是设置另一层抽象.可令16位先表达一个大小为64KB的段,1MB的内存刚好等于1MB/64KB倍数个这样大小的段.在这种情况下,内存就不再是绝对线性的了,而是被划分成了一个一个的段(在段内才是线性的),16位用来表示段内的每个最小内存单元,空出的4位不再用来表达内存本身,可以用来表达段本身.

以上讨论的情况是8086CPU在实模式运行的存储管理逻辑,即从逻辑地址(CPU要形成任务用到的地址形式)到真实物理地址的编码(实际机器有的地址),这中间要经过一个变换,CPU负责这个转换.无论在多少长度的地址线和多少长度的数据线产生矛盾的情况下,CPU的责任就是负责这个转换,不过32位数据线的CPU转换方式要特别复杂而已(特殊的分段方式再加一个分页的方式,段寄存器不像实模式那样用来实际存储物理地址的线性表示,它只用来实现硬件级计算最终物理地址的一个中间存储,这会在以后讲到).

在32位CPU出现之后,寄存器能表示的逻辑地址早就是4G了,而地址总线超过了32位(除非地址总线少于逻辑能表示的数量才需要实模式那样的分段,然而32位CPU下并没有产生这样的矛盾因此可以以线性地址的直接表示方式来表示逻辑任务线性空间,然而32位CPU照样也实现了一种转换机制,这是因为它需要实现更强大的保护模式(比如多用户多任务)而不仅仅是完成寻址.

综上所述,逻辑表示是寄存器能表示的地址形式,,真实地址是系统装配的内存量,而线性表示是CPU用来形成任务的任务地址.统称为任务空间.不跟硬件地址相关,也不跟逻辑表示形式相关,这完全是一种独立机制的编码.

32位CPU下,一个任务的线性空间表示总是4G(注意总是这个词),只是一个转换机制会负责这逻辑地址到线性地址的转换,,然后又有一个转换机制负责线性地址到真实物理地址的转换,程序员完全不必为线性地址过少和这中间的转换而烦恼那是CPU必须管的事,,否则32位的汇编工作几乎要手动驱动CPU.

即,总结,为了执行程序形成任务,完成冯氏运算的本质,在内存中形成任务空间是受CPU主导的(这个任务空间是完全不必涉及到OS的,是机器层面就可以直接完成的,当然在保护模式下有更强大的任务空间的概念但那是以后要谈的事,32位CPU的保护模式是在稍后出现OS时讲的,因为保护模式主要是为了促使软件系统的OS而出现的,要放在本书下一章讲解,这里只附带讲一点),

CPU的类型系统和指令系统

既然冯氏架构就是将执行指令的CPU和存放程序的内存分开的一种架构机制,CPU是PC中的总控制中心,CPU中集成了对内存的管理,在CPU的眼里一切都是内存地址,指令也是内存地址.CPU不但执行指令,还管理组织数据的事.在CPU眼里,一切都是内存地址和指令,而且这导致了冯氏模型的统一性.那么这些仅仅使机器知道如何形成任务,至于机器它能完成什么样的伤务内容呢?

这就是CPU中的指令系统和类型系统要谈到的.

从一种绝对的理论上来讲,0,1可以直接表示无穷和无限的信息(硬件程序员就是“痛并快乐着”地实践着这个理论的一代匠人们).机器在硬件级对字母数学之类的常用基本本信息的编码是直接内置的(所谓计算机,历史上一直就是处理科学计算,信息处理的代名词,计算机最初的用途是用它来表达信息作数值计算,PC也不例外),只是后来可以在编程层不断抽象形成新的信息而已,,(从很大意义上来说,计算机是一种模拟现实的工具,计算机对现实中的数据,字符,音频,视频,的模拟实现手段是"编码",这也就是大家常说的“数字化”了,如音频,视频就是编码实现的,字符包括字母和符号,也是用ASCII码来间接表示的)

先来介绍各种数值数据二进制在内存中表示的机制,因为原码表示时,有二种重复的位组都能表0,所以,为了不致于浪费编码指标,一般采用不产生重复的二进制的补码形式表示(有原码,反码,补码这几种编码方式,整型最普遍用的是它们在内存中的补码形式,即先取它的绝对值的二进制表示,再按位取反再加1)

记住只有整型才有有无符号的说法,无符号数和有符号数的这个符号就指“正或负”(我们取它在现实生活中呈现正负的说法抽象,它并不是指其在二进制层面表示的符号位,但是,一个整型在现实生活中是正是负,这显然直接影响了它的二进制表示中是否有这个“符号位”),所以无符号数永远只能表正数(这种“正数”实际上更精确的说法就是“无符号”,而在世俗的眼光里,无符号就是默认的正数,只有负数才需要强加一个符号去表示它为负),由于只有有符号数才有正负之分,,因此有符号数就有正,0,负这三种“有符号”数,(因为整型数最终要按某种形式,比如原码,补码,反码表示成二进制),无符号数不必考虑符号位,而有符号整型数(按它的补码形式在内存中被表示)就需考虑符号位,进位分为逻辑进位和算术进位,汇编中专门为无符号数和有符号数(在程序标志器)设置了不同的进位标志,CF就表示无符号数的进位,OF就表示有符号数的进位,当溢出时就退回到最初(表值范围就是一个周期圈),,

一个多字节的数据的二进制表示有二种方式,书面表示,和内存表示

比如0xABCDEF12这个16进制数(我将它写成这种形式表示这是这个数代表的真实值的书面形式,但是如果我不知道它是哪个平台上的我就不知道它在内存中的真实表示,我也就无法知道它究竟代表哪一个具体的真实值),一般按它的内存存储表示为准而不是书面形式为准采用降序或升序的说法,比如0xABCDEF12这个16进制数,在intel机的内存中就是升序,而按书形式就是降序,0xABCDEF12是它的书面表示(按它在内存中被存储的方式表示就是12EFCDAB)

内存总是从”前左低”到”后右高”位按递增数值编码的字节嘛,,那么如何把多字节数据的二进制表示存放入线性内存呢?

有二种方式,一种是"bigdian(降序,把big高位放前面低位放后面就是降的趋势了)",另一种是"littledian(升序)",这二种方式是指CPU或OS的规范(intel采用降序big,这样书面表示就跟内存表示不统一了而是相反的),也即如果从左往右是从高位到低位,就是small,如果从左往右是从低位到到高位,那么就是big

任何一个软件都可采用与CPU表示或OS平台采用的数值格式不同的数值格式(以符合它特定的要求),比如JVM就用全部长为32的浮点型,整型等等,,,OPENGL也有专供它自己使用的数值类型(语言中可用TYPEDEF来定义各种数值类型的子集)

浮点有它的人为标准备,如IEEE标准

浮点数可以提供很强的精确度,因为它的表数据范围很大(浮点数可以有64位,因此它的表数范围和精确度都可以达到很大,决定精确度和表数范围的都是浮点数的指数部分),而且它的小数部分可以精确很多,因此可以表示相差不大或相差很大的东西(比如真实宇宙中二个靠得很近的点,或远几光年距离的二个点),而整型数就不行(但是在计算货币的时候,浮点数的舍入操作反而不如整型数来得精确,这是因为用计算机数值来表示纯数学中的数时,浮点数在计算机内部或虚拟机内部是以二进制表示的,一种误差形式就是截断误差(除了一切现实生活中进行到的数值计算本身总会产生误差外),它会对最终数值产生某种不期料的偏离,还比如,整型数被0除和浮点数被0除的结果是不一样的,整型数除以一个0只会产生个异常,而浮点数除于0却会产生一个NaN或无穷大,解决方法是用一种ADT而非primatetype来表示不能舍入的金融数据,,如用BigDecimal包装类型,,,,所以在计算机数值时要避免大成数和小数除数,

浮点数在书面上和内存中是如何被表示和存储的呢?

在书面上有二种表示方式1是用纯粹的十进制表示(但必须带有一个小数点,如123.这样的整的浮点数)2是用带有指数的形式来表示,如12.3E1,书面上其实还有一种表示,即二进制浮点数.

当然在存储上,小数点本身和指数符E是不必按实际存储的(因为它们只用于书面标示并不是一个浮点数本质内容,浮点数本质内容是“小数点的位置应该在哪”“决定这个小数点位置的指数有多大,是正还是负”从这句话可以看出,浮点数的存储表示必须要包含1指明小数点的相对位置2指明具体的指数部分,实际上1和2是统一的),指数正负是必须要被存储的,,,又有一个浮点数书面表示的规范形式,就是小数点前有一位非零的数字,,,,

在计算机和现实中,浮点数都是用二个部分来表示的,,一个是它的基数部分,,,一个是它的伸缩表示(小数点前面是个整型,后面是个近似值故有精度的概念),,比如23.45和2345都是浮点数,,它们的基数部分是2345或者0.2345,,如果是2345,那么23.45就是2345*1/100,,2345就是2345*1/1,如果是0.2345,那么23.45就是....

由于不论基数和小数点后面的尾数部分都是最终的浮点值的表示部分,因此有几位有效位数(不要把有效位数跟尾数部分和指数部分弄混,有效位数实际上就是基数加尾数再除去小数点的那一串数字序列,单浮点数一般为6-7位,双浮点数一般为15位,超出这些的数字序列就不称为有效位数了)实际上对最终浮点值的影响是绝对不会次于指数部分的,这是因为指数部分仅仅是伸缩度的表示,改变成另外一个伸缩度,有效位数部分就会产生新的基数和尾数部分

在内存中(只有浮点数的指数形式,因此分为二部分被存储),浮点数除去小数点的数字序列是作为二进制被存储的,一般占24位,而包含指数正负的指数部分占8位(这个长度为8位就决定了浮点数的精确度和实际表数的大小范围),,因此体现在书面表示上,从左边数只有6-7位数字序列是有效位数.再长就是没有意义的.

规格化的浮点数格式主要由三部分组成,阶码(确定小数点的位置),数符(表示正负号),尾数(表示机器数字长)

对于浮点数的表示和处理是CPU直接支持的,CPU中集成对浮点数的处理单元,一般被集成一个被称为FPU的元件上协处理器,它是一个栈式的机器元件,在计算机内部,,移位就是2的一个幂,有关浮点数的处理对于计算机来说是很快的,

字符

一门语言的字符逻辑涉及到数据结构与IO,所以是一门语言非常重要的部分.

对于字符,包括基本字符和复合字符(不是字符串,比如'abcd'实际是一个四字节字符而不是一个字符串)

记住,,有多字节字符,就是所谓的unicode宽字符

由于计算机系统都用数值来编码字符,,因此它们在计算机内部的实现形式通常是int值,,,存在不同的标准,比如ansi,unicode,各个平台也不尽相同,因此会带来不同的兼容问题,在写源程时要注意这种兼容性,,在可执行程序移植到不同平台时也得注意..

在C语言的眼光中,字符的本质是int,字符串的本质是数组,或指针

字符串是各大语言要考虑的对象,首先各个平台上字符串逻辑都不一样(有的用四个字节内存,有的二个),,即使同一平台不同的语言实现也不相同(你看C在字符串后加一个终止符),,而且,也有关于字符串处理超大逻辑(正规表达式),甚至于一门语言本身的词法处理,,,也涉及到自动机(当然,并非正规式)和正规式(自动机对正规式产生的正规集进行处理)?

而且,在WEB开发上,字符串跟I/O又有关,是WEB开发的重中之重..

真正的布尔

在C++中的布尔可以是一切整型值,这其中为0即false,非0即true,然而在JAVA中只有二种值true或false

比如C++中的指针,由于它是一个整型值(可能是0或不是0),我们可以直接用一个表示非的叹号置于一指针前,然后用整个的取值作为if的算式

为什么布尔可以有这么多值或者只有二种值呢,,boolean只是int的typedef子集,一般用0表假用1表真,

下面说一下布尔运算符,布尔运算符即逻辑运算符,(程序语言中还有关系运算符,算术运算符,位操作符等,,然而这里的关系运算符却不是《关系代数》中的运算符,关系代数是一个离数中的代数系统,它自有它封闭而自成系统的数据集合和运算符,《布尔代数》研究0和1的运算,比如累加器的实现等等)

关系运算符就是比较二个或多个数之间大小,是否相等等关系的运算符

位操作符跟逻辑运算符比较类似(不一定只有二个运算子参与逻辑运算或位运算,而且它们的运算规则也比较类似,而且运算符也比较类似逻辑是双体号而位操作是单体号),它们之间明显的区别在:

逻辑是命题相关的,因此跟短路规则有关(这是说在if这样的条件句中),而位操作符跟位操作有关,因此不进行短路规则的判断

逻辑与即逻辑乘,见0为0,全1为1,逻辑或即逻辑加,见1为1,全0为0,还有逻辑和位操作中的XOR,也即只有运算子不同时才能取到1,相同时为0

位运算主要是利用屏蔽技术取得整型数(的二进制表示)的某些特定位,运算规则跟逻辑运算是一致的

因此在位屏蔽中,用1与“与”的组合可判断某位是0还是1,因此在位屏蔽中,用0与“或”的组合可判断某位是0还是1

位移和位段,,移位有单向和循环移位,

 

指令系统

冯氏机的指令执行(包括对数据的定义与传送)是一种确定的,顺序的结构,知道这个有什么用呢?

知道这个有助于我们理解冯氏系统的串行本质,而这种串行本质,是学习其它更抽象的东西的前提,比如指令到底是怎么发挥作用的.

对子系统和中断的支持

CPU不光不光完全自己的事(我们后来知道这件事是任务),还要使用某种手段,比如中断来处理它与其它子系统,比如IO子系统的交互.CPU有二概针脚,

中断是硬件级的消息,中断和异常是CPU直接相关的东西(CPU有二跟中断引脚,中断处理功能是CPU的能力和逻辑),,,很多编译器和语言提供了异常处理机制,Windows更是实现了一个SEH,,但是,这些都是抽象了CPU的这方面的逻辑..

中断中的硬件中断是真正意义上的中断,把它称为中断是为了跟异常区别开来,二者都指CPU对影响它原来指令流程的意外干预过程.(CPU对这二者都提供了处理例程,但硬件中断处理例程,是内置在硬件级的,比如CPU中,或软件上属于硬件逻辑那部分中的,比如设备驱动程序中).但是中断是硬件级的,是来自外部的,异常是来自CPU内部的指令执行过程中的一个出错(有时,这种异常是故意的,所以不能称为错误,比如缺页中断),,是来自指令执行过程中的(所以,所谓的软中断指令其实也是异常).软中断,是软件上“机器功能集”的实现支撑,比如,用软中断实现的“systemcalls”

而发生中断或异常时,二者都是靠CPU的跳转指令来完成跳转到相应的处理例程的,,这是CPU直接执行指令的结果,机器级的跳转指令是程序语言实现它的控制流的一个重要方面.

在保护模式下,跳转应在各任务间正常切换,否则会引起著名的操作系统保护错误,处理例程调用完之后通过一定手段返回正常任务),那么CPU就发展出一些诸如调用门,任务门之类的东西..用来规范这些跳转..

小结

比如汇编著由那些语言要素组成?

汇编编

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2