8086Pentium微机原理与接口技术第一章.docx
《8086Pentium微机原理与接口技术第一章.docx》由会员分享,可在线阅读,更多相关《8086Pentium微机原理与接口技术第一章.docx(19页珍藏版)》请在冰豆网上搜索。
8086Pentium微机原理与接口技术第一章
第一章计算机基础
1.1概述
1.1.1微计算机的发展
1946年,世界上第一台数字积分器诞生,遵循冯诺依曼结构体系。
冯诺依曼计算机:
1、数据和程序以二进制数表示
2、程序预存在存储器中,在执行时会将指令自动地逐条取出并分析执行
3、计算机的硬件由运算器、控制器、存储器、输入设备、输出设备组成
1.1.2常用术语
位:
数据存储的最小单位。
位,简记为b,也称为比特,每个0或1就是一个位(bit)。
计算机中的CPU位数指的是CPU一次能处理的最大位数。
字节:
是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。
ASCII编码:
一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。
一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。
最小值0,最大值255。
如一个ASCII码就是一个字节。
UTF-8编码:
一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。
Unicode编码:
一个英文等于两个字节,一个中文(含繁体)等于两个字节。
符号:
英文标点占一个字节,中文标点占两个字节。
举例:
英文句号“.”占1个字节的大小,中文句号“。
”占2个字节的大小。
数据存储是以10进制表示,数据传输是以2进制表示的,所以1KB不等于1000B。
1KB=1024B;1MB=1024KB=1024×1024B。
其中1024=210。
1B(byte,字节)=8bit;
1KB(Kibibyte,千字节)=1024B=2^10B;
1MB(Mebibyte,兆字节,百万字节,简称“兆”)=1024KB=2^20B;
1GB(Gigabyte,吉字节,十亿字节,又称“千兆”)=1024MB=2^30B;
1TB(Terabyte,万亿字节,太字节)=1024GB=2^40B;
数据类型
储存空间大小(单位:
字节)
范围
Byte(字节型)
1
0-255
Boolean(布尔型/逻辑型)
2
True或False
Integer(整数型)
2
-32,768~32767
Long(长整形)
4
-2,147,483,648~2,147,483,647
Single
(单精度浮点型)
4
负数范围:
-3.402823E38~-1.401298E-45
正数范围:
1.401298E-45~3.402823E38
Double
(双精度浮点型)
8
负数范围:
-1.797,693,134,862,32E308~
-4.940,656,458,412,47E-324
正数范围:
4.940,656,458,412,47E-324~
1.797,693,134,862,32E308
Currency
(变比整形/货币类型)
8
-922,337,203,685,477.5808~
922,337,203,685,477.5807
注:
10TB大约等于一个人脑的存储量。
字长:
计算机的每个字所包含的位数称为字长。
根据计算机的不同,字长有固定的和可变的两种。
固定字长,即字长度不论什么情况都是固定不变的;可变字长,则在一定范围内,其长度是可变的。
计算的字长是指它一次可处理的二进制数字的数目。
计算机处理数据的速率,自然和它一次能加工的位数以及进行运算的快慢有关。
如果一台计算机的字长是另一台计算机的两倍,即使两台计算机的速度相同,在相同的时间内,前者能做的工作是后者的两倍。
字符串:
在内存中,如果“字符”是以ANSI编码形式存在的,一个字符可能使用一个字节或多个字节来表示,那么我们称这种字符串为ANSI字符串或者多字节字符串。
如,"中文123"(占8字节,包括一个隐藏的\0)。
1.2计算机中数与编码的表示方法
1.2.1常用的进制数
进位制/位置计数法是一种记数方式,故亦称进位记数法/位值计数法,可以用有限的数字符号代表所有的数值。
可使用数字符号的数目称为基数(en:
radix)或底数,基数为n,即可称n进位制,简称n进制。
现在最常用的是十进制,通常使用10个阿拉伯数字0-9进行记数。
1、二进制数
二进制数10110011可以写成(10110011)2,或写成10110011B,对于十进制数可以不加注.计算机中的数据均采用二进制数表示,这是因为二进制数具有以下特点:
1)二进制数中只有两个字符0和1,表示具有两个不同稳定状态的元器件。
例如,电路中有、无电流,有电流用1表示,无电流用0表示。
类似的还比如电路中电压的高,低,晶体管的导通和截止等。
2)二进制数运算简单,大大简化了计算中运算部件的结构。
二进制数的加法和乘法运算如下:
0+0=00+1=11+0=11+1=10
0×0=00×1=01×0=01×1=1
3、八进制数
由于二进制数据的基R较小,所以二进制数据的书写和阅读不方便,为此,在小型机中引入了八进制。
八进制的基R=8=2^3,有数码0、1、2、3、4、5、6、7,并且每个数码正好对应三位二进制数,所以八进制能很好地反映二进制。
八进制用下标8或数据后面加O表示例如:
二进制数据(11101010.010110100)2对应八进制数据(352.264)8或352.264O.
4、十进制数
人们通常使用的是十进制。
它的特点有两个:
有0,1,2….9十个基本数字组成,十进制数运算是按“逢十进一”的规则进行的.
在计算机中,除了十进制数外,经常使用的数制还有二进制数和十六进制数.在运算中它们分别遵循的是逢二进一和逢十六进一的法则.
5、十六进制
由于二进制数在使用中位数太长,不容易记忆,所以又提出了十六进制数
十六进制数有两个基本特点:
它由十六个字符0~9以及A,B,C,D,E,F组成(它们分别表示十进制数10~15),十六进制数运算规律是逢十六进一,即基R=16=2^4,通常在表示时用尾部标志H或下标16以示区别。
例如:
十六进制数4AC8可写成(4AC8)16,或写成4AC8H。
1.2.2定点和浮点表示
定点数:
1、定点整数
小数点位固定在最后一位之后称为定点整数。
若机器字长为n+1位,数值表示为:
X=X0X1X2...Xn,其中Xi={0,1},0≤i≤n即(-1)^X0*(X1*2^(n-1)+X2*2^(n-2)+...+Xn-1*2+Xn)
数值范围是-(2^n-1)≤X≤2^n-1
例如:
1111表示-7。
2、定点小数
小数点固定在最高位之后称为定点小数。
若机器字长为n+1位,数值表示为:
X=X0.X1X2...Xn,其中Xi={0,1},0≤i≤n(这里X0不表示数字,只表示符号,若X0=0,则代表X=0.X1X2...Xn,X0=1,则代表-0.X1X2...Xn)。
即X=X0.X1X2...Xn代表的小数为(-1)^X0*((X1*2^(-1))+X2*2^(-2)+...+Xn-1*2^(-n+1)+Xn*2^(-n))
数值范围是-(1-2^(-n))≤X≤1-2^(-n)
例如:
1111表示-0.875。
浮点数:
浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。
具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法。
一个浮点数a由两个数m和e来表示:
a=m×b^e。
在任意一个这样的系统中,我们选择一个基数b(记数系统的基)和精度p(即使用多少位来存储)。
m(即尾数)是形如±d.ddd...ddd的p位数(每一位是一个介于0到b-1之间的整数,包括0和b-1)。
如果m的第一位是非0整数,m称作规格化的。
有一些描述使用一个单独的符号位(s代表+或者-)来表示正负,这样m必须是正的。
e是指数。
结构
由此可以看出,在计算机中表示一个浮点数,其结构如下:
尾数部分(定点小数) 阶码部分(定点整数)
阶符±
阶码e
数符±
尾数m
这种设计可以在某个固定长度的存储空间内表示定点数无法表示的更大范围的数。
1.2.3有符号数的表示
有符号数是针对二进制来讲的。
用最高位作为符号位,“0”代表“+”,“1”代表“-”;其余数位用作数值位,代表数值。
计算机内,定点数有3种表示法:
原码、反码和补码。
反码表示法规定:
正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:
正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
原码10010=反码11101(10010,1为符号码,故为负)
(11101)二进制=-13十进制
补码表示法规定:
正数的补码与其原码相同;负数的补码是在其反码的末位加1。
原码
(1)原码:
在数值前直接加一符号位的表示法。
例如:
符号位数值位
[+7]原=00000111B
[-7]原=10000111B
注意:
a.数0的原码有两种形式:
[+0]原=00000000B[-0]原=10000000B
b.8位二进制原码的表示范围:
-127~+127
反码
(2)反码:
正数:
正数的反码与原码相同。
负数:
负数的反码,符号位为“1”,数值部分按位取反。
例如:
符号位数值位
[+7]反=00000111B
[-7]反=11111000B
注意:
a.数0的反码也有两种形式,即
[+0]反=00000000B
[-0]反=11111111B
b.8位二进制反码的表示范围:
-127~+127
补码
(3)补码的表示方法
1)模的概念:
把一个计量单位称之为模或模数。
例如,时钟是以12进制进行计数循环的,即以12为模。
在时钟上,时针加上(正拨)12的整数位或减去(反拨)12的整数位,时针的位置不变。
14点钟在舍去模12后,成为(下午)2点钟(14=14-12=2)。
从0点出发逆时针拨10格即减去10小时,也可看成从0点出发顺时针拨2格(加上2小时),即2点(0-10=-10=-10+12=2)。
因此,在模12的前提下,-10可映射为+2。
由此可见,对于一个模数为12的循环系统来说,加2和减10的效果是一样的;因此,在以12为模的系统中,凡是减10的运算都可以用加2来代替,这就把减法问题转化成加法问题了(注:
计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)。
10和2对模12而言互为补数。
同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为8),因此它的运算也是一种模运算。
当计数器计满8位也就是256个数后会产生溢出,又从头开始计数。
产生溢出的量就是计数器的模,显然,8位二进制数,它的模数为2^8=256。
在计算中,两个互补的数称为“补码”。
2)补码的表示:
正数:
正数的补码和原码相同。
负数:
负数的补码则是符号位为“1”。
并且,这个“1”既是符号位,也是数值位。
数值部分按位取反后再在末位(最低位)加1。
也就是“反码+1”。
例如:
符号位数值位
[+7]补=00000111B
[-7]补=11111001B
补码在微型机中是一种重要的编码形式,请注意:
a.采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。
正数的补码即是它所表示的数的真值,而负数的补码的数值部份却不是它所表示的数的真值。
采用补码进行运算,所得结果仍为补码。
b.与原码、反码不同,数值0的补码只有一个,即补=00000000B。
c.若字长为8位,则补码所表示的范围为-128~+127;进行补码运算时,应注意所得结果不应超过补码所能表示数的范围。
溢出:
如果计算机的字长为n位,n位二进制数的最高位为符号位,其余n-1位为数值位,采用补码表示法时,可表示的数X的范围是-2的次幂≤X≤2的次幂-1
当n=8时,可表示的有符号数的范围为-128~+127。
两个有符号数进行加法运算时,如果运算结果超出可表示的有符号数的范围时,就会发生溢出,使计算结果出错。
很显然,溢出只能出现在两个同符号数相加或两个异符号数相减的情况下。
对于加法运算,如果次高位(数值部分最高位)形成进位加入最高位,而最高位(符号位)相加(包括次高位的进位)却没有进位输出时,或者反过来,次高位没有进位加入最高位,但最高位却有进位输出时,都将发生溢出。
因为这两种情况是:
两个正数相加,结果超出了范围,形式上变成了负数;两负数相加,结果超出了范围,形式上变成了正数。
而对于减法运算,当次高位不需从最高位借位,但最高位却需借位(正数减负数,差超出范围),或者反过来,次高位需从最高位借位,但最高位不需借位(负数减正数,差超出范围),也会出现溢出。
在计算机中,数据是以补码的形式存储的,所以补码在c语言的教学中有比较重要的地位,而讲解补码必须涉及到原码、反码。
在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负;其余n-1位为数值位,各位的值可为零或一。
当真值为正时,原码、反码、补码数值位完全相同;当真值为负时,原码的数值位保持原样,反码的数值位是原码数值位的各位取反,补码则是反码的最低位加一。
注意符号位不变。
信息总结
编辑
提示信息不要太少,可“某某数的反码是某某”,而不是只显示数值。
1.原码的求法:
(1)对于正数,转化为二进制数,在最前面添加一符号位(这是规定的),用1表示负数,0表示正数.如:
00000000是一个字节,其中左边第一个0为符号位,表示是正数,其它七位表示二进制的值.其实,机器不管这些,什么符号位还是值,机器统统看作是值来计算.正数的原码、反码、补码是同一个数!
(2)对于负数,转化为二进制数,前面符号位为1.表示是负数.
计算原码只要在转化的二进制数前面加上相应的符号位就行了.
2.反码的求法:
对于负数,将原码各位取反,符号位不变.
3.补码的求法:
对于负数,将反码加上二进制的1即可,也就是反码在最后一位上加上1就是补码了.
1.2.4编码的表示方法
1、ASCII码
是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。
它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC646。
[1]
ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符。
标准ASCII码也叫基础ASCII码,使用7位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0到9、标点符号,以及在美式英语中使用的特殊控制字符。
其中:
0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符),如控制符:
LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字符:
SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10和13分别转换为退格、制表、换行和回车字符。
它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响。
32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。
65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
同时还要注意,在标准ASCII中,其最高位(b7)用作奇偶校验位。
所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。
奇校验规定:
正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:
正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。
后128个称为扩展ASCII码。
许多基于x86的系统都支持使用扩展(或“高”)ASCII。
扩展ASCII码允许将每个字符的第8位用于确定附加的128个特殊符号字符、外来语字母和图形符号。
2、汉字编码
1)汉字国标码和区位码
计算机中一个汉字通常用两个字节的编码表示,我国制定了“中华人民共和国国家标准信息交换汉字编码字符集(基本集GB2312—1980)”,简称国标码,是计算机进行汉字信息处理和汉字信息交换的标准编码。
在该编码中,共收录汉字和图形符号7445个,其中一级常用汉字3755个(按汉语拼音字母顺序排列),二级常用汉字3008个(按部首顺序排列),图形符号682个。
在GB2312—1980中规定,全部国标汉字及符号组成一个94×94的矩阵。
在此矩阵中,每一行称为一个“区”,每一列称为一个“位”。
于是构成了一个有94个区(01~94区),每个区有94个位(01~94个位)的汉字字符集。
区码与位码组合在一起就形成了“区位码”,唯一地确定某一汉字或符号。
2)汉字输入码
所谓汉字输入码就是用于使用西文键盘输入汉字的编码。
每个汉字对应一组由键盘符号组成的编码,不同的汉字输入法其输入码不同。
汉字输入码也称外码。
常见的汉字输入编码方案可分为如下4类:
1)数码:
用数字组成的等长编码,典型代表有区位码、电报码。
2)音码:
根据汉字的读音组成的编码,典型代表有全拼码和双拼码。
3)形码:
根据汉字的形状、结构特征组成的编码,典型代表有五笔字型、表形码。
4)音形码:
将汉字读音与其结构特征综合考虑的编码,典型代表有自然码、首尾拼音码。
1.4计算机中采用的先进技术
1.4.1流水线技术
流水线(pipeline)技术是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。
流水线是Intel首次在486芯片中开始使用的。
流水线的工作方式就像工业生产上的装配流水线。
在CPU中由5—6个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成5—6步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提高CPU的运算速度。
经典奔腾每条整数流水线都分为四级流水,即取指令、译码、执行、写回结果,浮点流水又分为八级流水。
流水线功能繁杂,种类也非常多;如果按照处理级别来分类,流水线可以有操作部件级、指令级和处理机级;如果按照流水线可以完成的动作的数量来分类,又可以分为单功能和
流水线技术
多功能流水线;如果按照流水线内部的功能部件的连接方式来分类,则有线性流水线和非线性流水线;按照可处理对象来分类,还可以有标量流水线和向量流水线。
流水线的分类:
1、按处理级别分:
功能部件级:
在实现较为复杂的运算时采用
指令级:
将一条指令执行过程分为多个阶段
处理器间级:
每个处理器完成其专门的任务。
2、按完成的功能分类:
单功能流水线:
只完成一种如乘法或浮点运算等,多用于数字信号处理器(DSP),各处理器可并行完成各自的功能,加快整机处理速度。
多功能流水线:
在不同情况下可完成不同功能
性能指标
编辑
衡量一种流水线处理方式的性能高低的书面数据主要由吞吐率、效率和加速比这三个参数来决定。
吞吐率
指的是计算机中的流水线在特定的时间内可以处理的任务或输出数据的结果的数量。
流水线的吞吐率可以进一步分为最大吞吐率和实际吞吐率。
它们主要和流水段的处理时间、缓存寄
流水线技术
存器的延迟时间有关,流水段的处理时间越长,缓存寄存器的延迟时间越大,那么,这条流水线的吞吐量就越小。
因为,在线性流水线中,最大吞吐率Tpmax=流水线时钟周期△T/1=max(T1,...Ti,..Tm)+T1/1,而其中,m是流水线的段数,i是特定过程段执行时间。
如果,一条流水线的段数越多,过程执行时间越长,那么,这条流水线的理论吞吐率就越小。
由此,要对于流水线的瓶颈部分的处理主要在于减少流水段的处理时间。
实现的方法一般有两种:
1、把瓶颈部分的流水线分拆,以便任务可以充分流水处理。
流水段的处理时间过长,一般是由于任务堵塞造成的,而任务的堵塞会导致流水线不能在同一个时钟周期内启动另一个操作,可以把流水段划分,在各小流水段中间设置缓存寄存器,缓冲上一个流水段的任务,使流水线充分流水。
假如X流水段的处理时间为3T,可以把X流水段再细分成3小段,这样,每小段的功能相同,但是处理时间已经变成3T/3=T了。
流水线技术
2、在瓶颈部分设置多条相同流水段,并行处理。
对付流水段的处理时间过长,还有另外一种方法,那就是把瓶颈流水段用多个相同的并联流水段代替,在前面设一个分派单元来对各条流水段的任务进行分派。
仍然假设瓶颈流水段的处理时间是△3T,那么经过3条并联流水段的同时处理,实际需要的时间只是△T。
这样,就达到了缩短流水段处理时间,但这种方法比较少以采用,因为要3段相同的流水段并联,成本较高,而且,分派单元会比较麻烦处理。
加速比
是指某一流水线如果采用串行模式之后所用的时间T0和采用流水线模式后所用时间T的比值,数值越大,说明这条流水线的工作安排方式越好。
效率
使用效率:
指流水线中,各个部件的利用率。
由于流水线在开始工作时存在建立时间;在结束时存在排空时间,各个部件不可能一直在工作,总有某个部件在某一个时间处于闲置状态。
用处于工作状态的部件和总部件的比值来说明这条流水线的工作效率。
影响因素
编辑
流水线处理方式是一种时间重叠并行处理的处理技术,具体地说,就是流水线可以在同一个时间启动2个或以上的操作,借此来提高性能。
为了实现这一点,流水线必须要时
流水线技术
时保存畅通,让任务充分流水,但在实际中,会出现2种情况使流水线停顿下来或不能启动:
1、多个任务在同一时间周期内争用同一个流水段。
例如,假如在指令流水线中,如果数据和指令是放在同一个储存器中,并且访问接口也只有一个,那么,两条指令就会争用储存器;在一些算数流水线中,有些运算会同时访问一个运算部件。
2、数据依赖。
比如,A运算必须得到B运算的结果,但是,B运算还没有开始,A运算动作就必须等待,直到B运算完成,两次运算不能同时执行。
解决方案:
第一种情况,增加运算部件的数量来使他们不必争用同一个部件;
第二种情况,用指令调度的方法重新安排指令或运算的顺序。
技术规范
编辑
超级流水线
超级流水线(SuperPipeline)又叫做深度流水线,它是提高cpu速度通常采取的一种技术。
CPU处理指令是通过Clock来驱动的,每个clock完成一级流水线操作。
每个周期所做的操作越少,需要的时间就越短,时间越短,频率就可以提得越高。
超级流水线就是将cpu处理指令是得操作进一步细分,增加流水线级数来提高频率。
频率高了,当流水线开足马力运行时平均每个周期完成一条指令(单发射情况下),这样cpu处理得速度就提高了。
当然,这是理想情况下,一般是流水线级数越多,重叠执行的执行就越多,那么发生竞争冲突得可能性就越大,对流水线性能有一定影响现在很多cpu都是将超标量和超级流水线技术一起使用,例如pentiumIV,流水线达到20级,频率最快已经超过3GHZ。
教科书上用于教学的经典MIPS只有5级流水。
超标量
将一条指令分成若干个周期处理以达到多条指令重叠处理,从而提高cpu部件利用率的技术叫做标量流水技术。
超级标量是指cpu内一般能有多条流水线,这些流水线能够并行处理。
在单流
流水线技术
水线结构中,指令虽然能够重叠执行,但仍然是顺序的,每个周期只能发射(issue)或退休(retire)一条指令。
超级标量结构的cpu支持指令级并行,每个周期可以发射多条指令(2-4条居多)。
可以使得cpu的