2 数据的表示和运算
2.1 数制与编码
2.1.1 进位计数制及其互相转换
十进制数123.6875转换成二进制数
整数部分:除2取余
小数部分:乘2取整
2.2
2.2.2 定点数的运算
1 溢出概念和判别方法
双符号位 判别法
符号位运算结果为00,表示结果为正数,未溢出;
01,表示结果正溢出;
10,表示结果负溢出;
11,表示结果为负数,无溢出。
2 定点数的乘法运算
(1) 原码并行乘法
推荐!!!(对人友好)
- 符号位进行异或运算,相同为0(正),相异为1(负)
- 数值部分的运算方法与普通的十进制小数乘法类似.
(2) 原码一位乘
举例说明更为有效
x
=
−
0.1101
,
y
=
0.1011
x=-0.1101,y=0.1011
x=−0.1101,y=0.1011
(3) 补码一位乘
2.3 浮点数的表示与运算
2.3.1 浮点数的表示
IEEE 754标准
类型 | 数符 | 阶码 | 尾数数值 | 总位数 | 偏置值 十六进制----十进制 |
---|---|---|---|---|---|
短浮点数 | 1 | 8 | 23 | 32 | 7FH----127 |
长浮点数 | 1 | 11 | 52 | 64 | 3FFH----1023 |
临时浮点数 | 1 | 15 | 34 | 80 | 3FFH----16383 |
IEEE 754标准的浮点数(除临时浮点数外),是尾数用采取隐藏位策略的源码表示,且阶码用移码表示的浮点数.
短浮点数和长浮点数,可以多表示一位尾数.
临时浮点数又称扩展精度浮点数,无隐含位.
规格化的短浮点数的真值为
(
−
1
)
s
×
1.
M
×
E
−
127
(2-1)
(-1)^{s}\times1.M\times^{E-127}\tag{2-1}
(−1)s×1.M×E−127(2-1)
规格化长浮点数的真值为
(
−
1
)
s
×
1.
M
×
2
E
−
1023
(2-2)
(-1)^{s}\times1.M\times2^{E-1023}\tag{2-2}
(−1)s×1.M×2E−1023(2-2)
示例:
1.某数采用IEEE 754单精度浮点数格式表示为
C
640
0000
H
C640\ 0000H
C640 0000H,则该数的值位____
解:
C
640
0000
H
C640\ 0000H
C640 0000H的16进制表示为:
1
100
0110
0100
0000
0000
0000
0000
0000
1 \ 100\ 0110\ 0100\ 0000\ 0000\ 0000\ 0000\ 0000
1 100 0110 0100 0000 0000 0000 0000 0000
第1位,对应数符为
1
1
1,表示负数
第2-9位,对应阶码为
1000
1100
1000\ 1100
1000 1100
其余对应尾数为
100
0000
0000
0000
0000
0000
100\ 0000\ 0000\ 0000\ 0000\ 0000
100 0000 0000 0000 0000 0000
阶码值为
1000
1100
−
0111
1111
=
0000
1101
=
13
1000\ 1100-0111\ 1111=0000\ 1101=13
1000 1100−0111 1111=0000 1101=13
尾数值为
1.5
1.5
1.5(注意其含有隐含位,需要加1)
因此,浮点数的值为 − 1.5 × 2 13 -1.5\times2^{13} −1.5×213
2.3.2 浮点数的加减运算
浮点数运算的特点是阶码运算和尾数运算分开进行。浮点数的加减运算一律采用补码,分为以下几个步骤:
- 对阶
对阶的目的是使两个操作数的小数点位置对齐,即使的两个数的阶码相等。
先求阶差,然后以小阶向大阶看齐的原则,将阶码小的尾数右移一位(基数为2),阶加1,直到两个数的阶码相等为止.尾数右移时,舍弃掉有效位会产生误差,影响精度. - 尾数求和
将对阶后的尾数按定点数加(减)运算规则运算. - 规格化
以双符号位为例,当尾数大于0时,其补码规格化形式为
[ S ] 补 = 00.1 × × ⋯ × [S]_{补}=00.1\times\times\cdots\times [S]补=00.1××⋯×
当尾数小于0时,其补码规格化形式为
[ S ] 补 = 11.0 × × ⋯ × [S]_{补}=11.0\times\times\cdots\times [S]补=11.0××⋯×
当尾数的最高位数值与符号位不同时,即为规格化形式.规格化分为左规与右规两种.
左规:当尾数出现 00.0 × × ⋯ × 00.0\times\times\cdots\times 00.0××⋯×或 11.1 × × ⋯ × 11.1\times\times\cdots\times 11.1××⋯×时,需左规,即尾数左移1位,和的阶码减1,直到尾数为 00.1 × × ⋯ × 00.1\times\times\cdots\times 00.1××⋯×或 11.0 × × ⋯ × 11.0\times\times\cdots\times 11.0××⋯×
右规:当尾数求和结果溢出(如尾数 10. × × ⋯ × 10.\times\times\cdots\times 10.××⋯×或 01. × × ⋯ × 01.\times\times\cdots\times 01.××⋯×)时,需右规,即尾数右移一位,和的阶码加1. - 舍入
"0"舍"1"入法
恒置"1"法 - 溢出判断
将规格化数右规后,再根据阶码来判断浮点数结果是否溢出.
溢出与否是由阶码的符号来决定的.以双符号位补码为例,当阶码的符号位出现"01"时,即阶码大于最大阶码时,表示上溢,进入中断处理;当阶码的符号位出现"10"时,即阶码小于最小阶码时,表示下溢,按机器零处理.实际上原理还是阶码符号位不同表示溢出,且真实符号位和高位符号位一致.
示例:
设浮点数的阶码和尾数均采用补码表示,且位数分别为5和7(均含两位符号位)。若有两个数
X
=
2
7
×
29
/
32
X=2^7\times29/32
X=27×29/32和
Y
=
2
5
×
5
/
8
Y=2^5\times5/8
Y=25×5/8则用浮点数加法计算
X
+
Y
X+Y
X+Y
解:
X
X
X的浮点数格式为
00
,
111
;
00
,
11101
00,111;00,11101
00,111;00,11101
Y
Y
Y的浮点数格式为
00
,
101
;
00
,
10100
00,101;00,10100
00,101;00,10100
- 00 , 111 − 00 , 101 = 00 , 11 + 11 , 0111 = 00 , 010 00,111-00,101=00,11+11,0111=00,010 00,111−00,101=00,11+11,0111=00,010 知 X X X的阶码比 Y Y Y大 2 2 2,由小向大看齐的原则,将 Y Y Y的阶码加2,尾数右移2位,将 Y Y Y变为 00 , 111 ; 00 , 00101 00,111;00,00101 00,111;00,00101
- 尾数相加.结果符号位为 01 01 01故需又规.
- 规格化.将尾数向右移1位,阶码加1,得 X + Y X+Y X+Y为 01 , 000 ; 00 , 10001 01,000;00,10001 01,000;00,10001
- 判断溢出.阶码符号位为01,说明发生溢出.
3 存储系统
3.3.2 SRAM和DRAM
2 DRAM的工作原理
DRAM采用地址复用技术,地址线是原来的 1 2 \frac{1}{2} 21,且地址信号分行、列两次传送.
示例:
某容量为256MB的存储器由若干4M
×
\times
× 8位的DRAM芯片构成,该DRAM芯片的地址引脚和数据引脚总数是____
4
M
=
4
×
1024
×
1024
K
=
2
22
K
4M=4\times 1024\times1024K=2^{22}K
4M=4×1024×1024K=222K故地址引脚数为22/2=11
数据引脚为8位
3.6.3 Cache和主存的映射方式
- 直接映射
- 全相联映射
- 组相联映射
j = i m o d Q j=i\, mod \, Q j=imodQ
式中, j j j是缓存的组号, i i i是主存的块号, Q Q Q是Cache的组数
示例:
某计算机的Cache共有16块,采用2路组相联映射方式(即每组2块)。每个主存块大小为32字节,按字节编址。主存129号单元所在主存块应装入到的Cache组号是( )。
解:由题意知,组数为
16
2
=
8
,
编
号
(
0
7
)
\frac{16}{2}=8,编号(0~7)
216=8,编号(0 7)
129号单元所在块数为:
129
32
=
4
\frac{129}{32}=4
32129=4
4
m
o
d
8
=
4
4\, mod \,8=4
4mod8=4,故应装入Cache组号是4
示例:
假设某计算机按字编址,Cache有4个行,Cache和主存之间交换的块大小为1个字。若Cache的内容初始为空,采用2路组相联映射方式和LRU替换算法,当访问的主存地址依次为0,4,8,2,0,6,8,6,4,8时,命中Cache的次数是
解:由2路组相联和四个行知,Cache有2组(组号:0~1),根据
j
=
i
m
o
d
Q
j=i\, mod \, Q
j=imodQ知主存地址为
0
∼
1
,
4
∼
5
,
8
∼
9
0\sim1,4\sim5,8\sim9
0∼1,4∼5,8∼9可映射到第0组Cache中,主存地址
2
∼
3
,
6
∼
7
2\sim3,6\sim7
2∼3,6∼7可映射到第1组Cache中.
结合LRU算法可知,Cachae命中次数为3次
4 指令系统
4.1 指令格式
4.1.1 指令的基本格式
- 二地址指令
指令含义: ( A 1 ) O P ( A 2 ) → A 1 (A_1)OP(A_2)\to A_1 (A1)OP(A2)→A1
若指令字长为32位,操作码占8位,两个地址码字段各占12位,则指令操作数的直接寻址范围为 2 12 = 4 K 2^{12}=4K 212=4K - 三地址指令
指令含义: ( A 1 ) O P ( A 2 ) → A 3 (A_1)OP(A_2)\to A_3 (A1)OP(A2)→A3
若指令字长为32位,操作码占8位,3个地址码字段各占8位,则指令操作数的直接寻址范围为 2 8 = 256 2^{8}=256 28=256.若地址段均为主存地址,则完成一条三地址需要4次访问存储器(取指令1次,取两个操作数2次,存放结果1次).
示例:
某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令29条,二地址指令107条,每个地址字段为6位,则指令字长至少应该是()。
解:三地址指令有29条,所以其操作码至少为5位( 2 4 < 29 < 2 5 = 32 2^4<29<2^5=32 24<29<25=32).以5位进行计算,它剩余32-29=3种操作码给二地址.而二地址另外多了6位给操作码,因此其数量最大达 3 × 64 = 192 3\times64=192 3×64=192.所以指令字长最少为23位,因为计算机按字节编址,需要是8的倍数,所以指令字长至少应该是24位.
4.2 指令寻址
4.2.2 常见的数据寻址方式
寻址方式 | 释义 | 有效地址 | 访存次数 |
---|---|---|---|
隐含寻址 | 程序指定 | 0 | |
立即数寻址 | A既是操作数 | 0 | |
直接寻址 | EA=A | 1 | |
一次间接寻址 | 间接寻址是相对于直接寻址而言的,指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在存储单元的地址. | EA=(A) | 2 |
寄存器寻址 | E A = R i EA=R_i EA=Ri | 0 | |
寄存器间接寻址 | E A = ( R i ) EA=(R_i) EA=(Ri) | 1 | |
相对寻址 | 程序计数器(PC) A是相对于当前指令地址的位移量,可正可负,补码表示 | EA=(PC)+A | 1 |
基址寻址 | EA=(BR)+A | 1 | |
变址寻址 | 有效地址EA等于指令中的形式地址A与变址寄存器IX(专用)的内容之和。 | EA=(IX)+A | 1 |
堆栈寻址 |
示例:
某机器字长为16位,主存按字节编址,转移指令采用相对寻址,由两个字节组成,第一个字节为操作码字段,第二字节为相对位移量字段。假定取指令时,每取一个字节PC自动加1。若某转移指令所在主存地址为2000H,相对位移量字段的内容为06H,则该转移指令成功转移后的目标地址是( )。
解:
转移指令由两个字节组成,每取一个字节PC加1,在取指令后PC值为
2002
H
2002H
2002H,故
E
A
=
(
P
C
)
+
A
=
2002
H
+
06
H
=
2008
H
EA=(PC)+A=2002H+06H=2008H
EA=(PC)+A=2002H+06H=2008H
程序计数器是用于存放下一条指令所在单元的地址的地方。
当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。与此同时,PC中的地址或自动加1或由转移指针给出下一条指令的地址。此后经过分析指令,执行指令。完成第一条指令的执行,而后根据PC取出第二条指令的地址,如此循环,执行每一条指令。
示例:
某机器有一个标志寄存器,其中有进位/借位标志CF、零标志ZF、符号标志SF和溢出标 志OF,条件转移指令bgt(无符号整数比较大于时转移)的转移条件是
解:
假设有无符号数A和B,bgt指令会将A和B进行比较,也就是将A和B相减.若A>B,则A-B肯定无进位/借位,也不为0(为0时表示两数相同),故CF和ZF均为0.
示例:
某计算机有16个通用寄存器,采用32位定长指令字,操作码字段(含寻址方式位)为8位,Store指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式。若基址寄存器可使用任一通用寄存器,且偏移量用补码表示,则Store指令中偏移量的取值范围是()。
解:
操作码字段为8位,还剩
32
−
8
=
24
32-8=24
32−8=24位
机器中共有16个寄存器,故寻址一个寄存器需要
log
2
16
=
4
\log_{2}{16}=4
log216=4位,源操作数中的寄存器直接寻址用掉4位,而目的操作数采用基址寻址也要指定一个寄存器,同样用掉4位,则留给偏移地址的位数还剩
24
−
4
−
4
=
16
24-4-4=16
24−4−4=16位,偏移地址用补码表示,16位补码能表示的范围为
−
32768
∼
+
32767
-32768\sim+32767
−32768∼+32767
示例:
按字节编址的计算机中,某 double 型数组 A 的首地址为 2000H ,使用变址寻址和循环结构访问数组 A,保存数组下标的变址寄存器初值为 0,每次循环取一个数组元素,其偏移地址为变址值乘以 sizeof(double) ,取完后变址寄存器内容自动加 1。若某次循环所取元素的地址为 2100H ,则进入该次循环时变址寄存器的内容是 。
解:
变址寻址:
E
A
=
(
I
X
)
+
A
EA=(IX)+A
EA=(IX)+A知,
I
X
=
2100
H
−
2000
H
=
100
H
=
1
6
2
=
256
IX=2100H-2000H=100H=16^2=256
IX=2100H−2000H=100H=162=256,sizeof(double)=8(双精度浮点数用8位字节表示),因此数组的下标为
256
/
8
=
32
256/8=32
256/8=32.
因为数组类型是double类型的,即数组中每一个元素占8byte.
4.3 CISC和RISC的基本概念
4.3.1 复杂指令系统计算机(CISC,Complex Instruction Set Computer)
4.3.2 精简指令系统计算机(RISC,Reduced Instruction Set Computer)
4.3.3 CISC和RISC的比较
对比项目 | CISC | RISC |
---|---|---|
指令系统 | 复杂庞大 | 简单,精简 |
指令数目 | 一般大于200条 | 一般小于200条 |
指令字长 | 不固定 | 定长 |
可访存指令 | 不加限制 | 只有Load/Store指令 |
各种指令执行时间 | 相差较大 | 绝大多数在一个周期内完成 |
各种指令使用频度 | 相差很大 | 都比较常用 |
通用寄存器数量 | 较少 | 多 |
目标代码 | 难以用优化编译生成高效的目标代码程序 | 采用优化的编译程序,生成代码较为高效 |
控制方式 | 绝大多数为微程序控制 | 绝大多数为组合逻辑控制 |
指令流水线 | 可以通过一定方式实现 | 必须实现 |
5 中央处理器
5.1 CPU的功能和基本结构
5.1.1 cpu的功能
- 指令控制
- 操作控制
- 时间控制
- 数据加工
- 中断处理
5.1.2 cpu的基本结构
示例:
某计算机主存空间为4GB,字长为32位,按字节编址,采用32位字长指令字格式,若指令按字边界对齐存放,则程序计数器和指令寄存器的位数至少为 (30、32)
解:
程序计数器是指程序的地址,要看机器所有指令的条数,每条指令是32位也就是4B;
4
×
2
30
B
4
B
=
2
30
\frac{4\times2^{30}B}{4B}=2^{30}
4B4×230B=230程序计数器至少需要30位.
指令寄存器用于接收取到的指令,它取决于指令字长(32位),故指令寄存器(IR)的位数至少是32位.
参考链接:http://bbs.kaoyan.com/t7573599p1
示例:
某CPU主烦为1.03GHz,采用4级指令流水线,每个流水段的执行需要1个时钟周期。假定CPU执行了100条指令,在其执行过程中,没有发生任何流水线阻塞,此时流水线的吞吐率为()。
解:
采用4级流水线执行100条指令,在执行过程中共用
4
+
(
100
−
1
)
=
103
4+(100-1)=103
4+(100−1)=103个时钟周期.CPU主频是
1.03
G
H
z
1.03GHz
1.03GHz,即每秒有
1.03
G
1.03G
1.03G个时钟周期.流水线的吞吐率为
1.03
G
×
100
/
103
=
1.0
×
1
0
9
1.03G\times100/103=1.0\times10^9
1.03G×100/103=1.0×109条指令每秒.
如下图所示,假设 n = 4 n=4 n=4那么总的时钟周期个数为 100 + 4 − 1 = 103 100+4-1=103 100+4−1=103
参考资料:https://blog.csdn.net/u014106644/article/details/95209474
示例:
在无转发机制的五段基本流水线(取指、译码/续寄存器、运算、访存、写回寄存器)中,下列指令序列存在数据冒险的指令对是()。
11:add R1,R2,R3;(R2)+(R3)→R1
12:add R5,R2,R4;(R2)+(R4)→R5
13:add R4,R5,R3;(R5)+(R3)→R4
14:add R5,R2,R6;(R2)+(R6)→R5
解:
数据冒险即数据相关,指在一个程序中存在必须等前一条指令执行完才能执行后一条指令的情况,此时这两条指令即为数据相关.当多条指令重叠处理时就会发生冲突.
6 总线
6.1 总线概述
示例:
假设某系统总线在一个总线周期中并行传输4字节信息,一个总线周期占用2个时钟周期,总线时钟频率为10MHz,则总线带宽是( )。
解:
总线带宽是指单位时间内总线上传输数据的位数,通常用每秒传送信息的字节数量来衡量,单位为
B
/
s
B/s
B/s.在一个总线周期(=2个时钟周期)内传输了4字节信息,时钟周期=
1
/
10
M
H
z
=
0.1
u
s
1/10MHz=0.1us
1/10MHz=0.1us,故总线带宽为
4
B
/
(
2
×
0.1
u
s
)
=
20
M
B
/
s
4B/(2\times0.1us)=20MB/s
4B/(2×0.1us)=20MB/s
示例:
某同步总线的时钟频率为100MHz,宽度为32位,地址/数据线复用,每传输一个地址或者数据占有一个时钟周期。若该总线支持burst(猝发)传输方式,则一次“主存写”总线事务传输128位数据所需要的时间至少是______。
解:
由于总线频率为100MHz,因此时钟周期为10ns.总线位宽与存储字长都是32位,故每个时钟周期可传送一个32位存储字.猝发式发送可以连续传送地址连续的数据,故总传送时间为:传送地址10ns,传送128位数据40ns,供需50ns.
计算机总线按功能和规范可分为数据总线、地址总线、控制总线等,有的系统中,数据总线和地址总线是复用的,即总线在某些时刻出现的信号表示数据而另一些时刻表示地址。 总线的数据传输类型分单周期方式和猝发(burst)方式。单周期方式是指一个总线周期只传送一个数据。猝发(burst)方式是指取得总线控制权后进行多个数据的传输。寻址时给出目的地首地址,访问第一个数据,数据2、3到数据n的地址在首地址基础上按一定规则自动寻址(如自动加1)。 某同步总线的宽度为32位,传输128位数据需要128/32=4个时钟周期,由于采用burst方式,共需要5个时钟周期,在时钟频率为100MHz的情况下,即每个周期10ns,所需要的时间至少是5*10=50ns。
示例:
某同步总线采用数据线和地址线复用方式,其中地址/数据线有32根,总线时钟频率为66MHz,每个时钟周期传送两次数据(上升沿和下降沿各传送一次数据),该总线的最大数据传输率(总线带宽)是_______.
解:
地址/数据线有32根,所以数据大小为
32
/
8
=
4
B
32/8=4B
32/8=4B,因为一个时钟周期传送两次,所以
4
B
×
2
=
8
B
4B\times2=8B
4B×2=8B,
总
线
带
宽
=
时
钟
周
期
内
传
送
的
数
据
时
钟
周
期
=
8
B
1
f
=
8
×
66
=
528
M
B
/
s
总线带宽=\frac{时钟周期内传送的数据}{时钟周期}=\frac{8B}{\frac{1}{f}}=8\times66=528MB/s
总线带宽=时钟周期时钟周期内传送的数据=f18B=8×66=528MB/s
7 输入/输出系统
示例:
某磁盘的转速为10000 转/分,平均寻道时间是6ms,磁盘传输速率为20MB/s,磁盘控制器延迟为0.2ms, 读取一个4KB的扇区所需平均时间为多少?
解:
10000
r
a
d
/
m
i
n
,
1000
r
a
d
/
6
s
,
1
r
a
d
/
6
m
s
10000rad/min,1000rad/6s,1rad/6ms
10000rad/min,1000rad/6s,1rad/6ms.平均查询扇区时间(找到扇区的时间) = 磁盘转一圈的时间÷2(因为不知道扇区具体在哪按半圈算)为3ms
信息延迟的时间
=
4
K
B
20
M
B
/
s
=
0.2
m
s
=\frac{4KB}{20MB/s}=0.2ms
=20MB/s4KB=0.2ms
读取4KB扇区所用的时间为0.2ms
总耗时=6+3+0.2+0.2=9.4ms