本文对华中科大《计算机组成原理》慕课中的部分计算题用自己所理解的方式进行讲解。文章为原创,是对自己解题思路的梳理。个人能力有限,难免有纰漏,欢迎指正。
如果本文帮到了你,请点赞或收藏,这是支持我继续分享的动力。
某计算机指令集中共有A、B、C、D四类指令,它们占指令系统的比例分别为40% 、20%、20%、20%, 各类指令的CPI分别为 2、3、4、5;该机器的主频为600MHZ,则该机的CPI 为 (保留到小数点后一位)
CPI=∑(程序中各类指令的CPI×程序中该类指令的比例)
2×40%+3×20%+4×20%+5×20%=3.2 答案为3.2
和主频600MHZ无关
若某程序编译后生成的目标代码由A、B、C、D四类指令组成,它们在程序中所占比例分别为20%、40%、20%、20%。已知A、B、C、D四类指令的CPI分别为1、2、2、2。现需要对程序进行编译优化,优化后的程序中B类指令条数减少了一半,而其它指令数量未发生变化。假设运行该程序的计算机CPU主频为500MHZ。优化后程序的CPI为 (保留到小数点后2位)
优化后,ABCD四类指令在程序中所占比例均为0.2/(0.2+0.2+0.2+0.2)=1/4,
CPI=∑(程序中各类指令的CPI×程序中该类指令的比例)
CPI=(1+2+2+2)×1/4=7/4=1.75
访问256KB的存储空间,按字节(B)编址256KB=218B 需要18根
当 -1 < x < 0时, [x]补=
X=-0.1011
[x]补=1.0101 1.0101=10+(-0.1011)=2+x
设G(x) = 1011,某(7,4)码为K1K2K3K4K5K6K7,仅K7出错时进行CRC校验得到的余数为001,当仅K5出错时,进行CRC校验得到的余数为
根据CRC校验的余数的循环,将K7出错时的得到的余数后面加一个0,再用生成多项式1011做模2的除法可以得到K6出错时的余数。
0010/1011……010 在得到的余数后面加一个0,再用生成多项式1011做模2的除法就可以得到K5出错时的余数 100/1011……100
答案为100
假设寄存器为8位,用补码形式存储机器数,包括一位符号位,那么十进制数-25在寄存器中的十六进制形式表示为
-25=-(24+23+1)=(原)1001 1001=(补)1110 0111=E7
某十六进制浮点数A3D00000中最高8位是阶码(含1位阶符),尾数是最低24位(含1位数符),若阶码和尾数均采用补码,则该浮点数的十进制真值是
要注意此处不是IEEE754,不用-127也不用加上尾数中最高位的1
A3D00000=1010 0011 1101 0000 0000 0000 0000 0000
转换成原码1101 1101 1011 0000 0000 0000 0000 0000
(-1)1 x 293 x(-0.375)
这里补充一个快速转补码的方法:从右往左寻找出现的第一个1,保留这个1及其右边的所有位,对它左边的除了符号位之外的位全部取反,就得到了这个数的补码。补码转原码也可这样做,因为补码的补码是原码。
存储器中地址号分别为1000#、1001#、1002#、1003#的4个连续存储单元,分别保存的字节数据是1A、2B、3C、4D,如果数据字长为32位,存储器采用的是小端对齐模式,则这4个存储单元存储的数据值应被解析为
小端存储:最低字节地址是数据地址
大端存储:最高字节地址是数据地址
大端存储与人类书写习惯相同,但不方便计算机处理,小端存储与人类书写习惯不同,是先写低位后写高位,但便于计算机处理。
最低字节地址:和数的“最低位”相似但不同,以32位整数0x12345678为例,最低字节地址指的是“78”,以小端方式存就是78 56 34 12
这一题答案为 4D 3C 2B 1A
十进制数5对应的32位IEEE754 格式的机器数为 ()H (采用十六进制表示,填写答案时不需要写最后的H)
数符 | 阶码 | 尾数 |
---|---|---|
1位 | 8位 | 23位 |
5=101(2)
5=(-1)0 x 22 x 1.01
在IEEE754标准中,阶码部分采用偏移值为127的移码表示
阶码e为2,转换为移码E,即加上011111111(2)得到E=1000 0001
尾数是1.01,去掉前面的1,扩展到23位即为
010 0000 0000 0000 0000 0000(2)
代入得到32位IEEE754 格式的机器数
0100 0000 1010 0000 0000 0000 0000 0000
4 0 A 0 0 0 0 0
32位IEEE 754浮点数为41A4C000H, 则对应的真值的小数部分的数值为 ( ) (只需要填小数点后面的阿拉伯数字,0和小数点均不需要填写)
0100 0001 1010 0100 1100 0000 0000 0000
10000011-01111111=100(2)=4
计算这个减法的简便方法:利用10000011=1+01111111+11
0.010 0100 1100 0000 0000 0000小数点向后移4位
0010 0.100 1100 0000 0000 0000
0.100 11=1/2+1/16+1/32=0.59375
答案59375
存放一个24*24点阵汉字,至少需要多少字节的存储空间 (只需要填写十进数)
点阵的每一行需要3个字节(24位),这样的行有24行,所以需要24*3=72字节
设规格化浮点数的阶码为k+1位(包含1位符号位)、尾数为n +1位(包含一位符号位),若阶码和尾数均采用补码数据表示,下列关于该浮点数表示范围的描述中,正确的是
C项:注意题目说了是规格化的,所以实际尾数是1.M
答案 ABCD
已知[X]补 = 1101001 , [Y]补 = 1101010, 则用变形补码计算2[X]补 +1/2 [Y]补的结果为
变形补码,又称”模4补码“即用两个二进制位来表示数字的符号位,其余与补码相同。前两位是符号位。乘以2是向左移2位,乘以1/2是算术右移2位
2[X]补=1110010 1/2[Y]补=1110101
2[X]补+1/2 [Y]补=11000111
字位结构为256Kx4位SRAM存储芯片,其地址引脚与数据引脚之和为
256K=218Byte 18+4=22
假定用若干块4K 4位的存储芯片组成一个8K8位的存储器,则地址0B1F所在芯片的最小地址是
字位扩展 两块用于字扩展,两块用于位扩展,由于是按字节编址,所以只看字扩展。
存储空间8K=213 所以地址有13位
分两块,第一块地址范围:0 0000 0000 0000—0 1111 1111 1111
第二块 1 0000 0000 0000—1 1111 1111 1111
0B1FH=0000 1010 0001 1111(2) 属于第一块,第一块最小地址为0
用若干片2Kx4位的存储芯片组成一个8Kx8位的存储器,则地址0B1FH所在的芯片在全局的最大地址是
8K空间需要13位来编址因为8K=213。字扩展需要4块,所以片选地址为2位,块内偏移地址为13-2=11位
第一块 00 00000000000——00 11111111111
第二块 01 00000000000——01 11111111111
第三块 10 00000000000——10 11111111111
第四块 11 00000000000——11 11111111111
0B1FH转换为二进制为 0 1011 0001 1111
易得它在第二块,第二块最大地址为0 1111 1111 1111 即 0FFFH
在32位的机器上存放0X12345678,假定该存储单元的最低字节地址为0X4000,则在小端存储模式下存在在0X4002单元的内容是
0x4000 | 0x4001 | 0x4002 | 0x4003 |
---|---|---|---|
78 | 56 | 34 | 12 |
答案为34
A、冯诺依曼结构计算机的工作原理说明CPU只能从主存中访问数据和指令 B、这是冯诺依曼结构计算机的基本原理描述的事实
C、只影响存取速度,不会导致数据丢失
D、同一台计算机可配置的内容容量可不同,但其CPU选定后具有的地址线是确定的,因此,不能根据计算机配置的内存容量去判断CPU的地址线,CPU的地址是CPU的物理特性,不随配置的主存容量而改变。因此,只能说要访问8GB的主存,至少需要CPU具有33根地址线
某计算机存储器按照字节编址,采用小端方式存储数据,假定编译器规定int和short型长度分别为32位和16位,并且数据按照边界对齐存储。 某C语言的程序段如下:
struct
{
int a;
char b;
short c;
} record;
record.a = 273;
若record变量的首地址为0xC008,则地址0xC008的内容是0X ( ) (只填写2个阿拉伯数字)
Int 占4字节 char占2字节,short占2字节
273=256+16+1=1 0001 0001(2)=0x111
所以填11
按边界对齐要求变量的起始地址必须能够被自身数据类型的大小整除。
对于273,十六进制是0x111,因此第一个低位字节存储0x11,再高一点的字节存储0x01,后面两个字节为空的不管。单纯要填答案的话此题到此结束。除此之外,我们再看看其他的以便吃透这题,看char b的存储,这个大小是1个字节,存完之后,如果紧接着就存short c,那么c的起始地址将会是个奇数,不能被2整除。 因此在char b后留白一个字节,之后再存储short c。
record.a在内存中的存储如下表所示
0xC008 | 0xC009 | 0xC010 | 0xC011 |
---|---|---|---|
0x11 | 0x01 | null | null |
答案为11
===========================
三种常见的映射方式简明定义:
全相联映射: 主存数据块可以直接映射到cache的中的任意一行。
直接映射: 在对主存进行分块的基础上,直接映射还对主存分区,每个分区中包含的块数与cache中包含的行数相同。数据在主存某个区的第几号,就映射到cache的第几行。如cache有16行,那么主存中的第0行映射到cache的第0行,主存中的第1行映射到cache的第1行……主存中的第15行映射到cache的第15行,然后16行又映射到0行。映射到cache中的行号=在主存中的行号%cache的行数。
组相联映射: cache和主存都分组,主存每个区中的块数和cache所分的组数相同。数据在主存某个区中的第几号,就映射到cache的第几组中的任意一行。
假定主存和cache之间采用直接映射方式,块大小为16B。cache数据区容量为64KB,主存地址为32位,按字节编址,数据字长为32位。求:
1)给出直接映射方式下主存地址的划分
2)完成cache访问的硬件实现
3)计算cache容量
(1)Cache的块大小和主存的块大小相同,块大小为16B,所以块内偏移有4位。Cache数据区容量为64KB可得Cache有64KB/16B=212行。所以地址的index有12位,那么tag有32-12-2=18位
(2)
(3)由第一问可知,tag为16位,Cache每行数据存储体容量为16x8=128位。Cache每行的总存储容量为1+16+128=145位。(有效位+tag+数据区)
由第一问可知Cache总共有4096行,所以Cache总容量为4096*145=580Kbit
设某机内存容量为16MB,cache的容量为16KB,每块8个字,每个字32位。设计一个四路组相联映射(即cache内每组包含4个字块)的cache组织方式。
(1) 字和字节是有区别的,8个二进制位是一个字节。而字和机器有关。本题中规定每个字32位,也就是4个字节。
每块8个字,每个字4个字节,那么每块就是32个字节,所以块内偏移地址为5位。
Cache总共有16KB/(8x4)=512块(行)
内存中共有16MB/(8x4)=219行
每四个字块一组,cache分为512/4=128(组)
所以内存中每128行分为一组,组内块号7位,
共有219/128=212组,所以主存组号12位
所以主存组号(tag)12位,组内块号7位,块内地址5位
也可以这样计算:因为是按字节编址的,所以给16MB编址需要24位。Tag位数为24-7-5=12位
(2) 求循环8次访问主存前100个字的总命中率
注意看题目,是连续访问100个字,这100个字包含在主存的前13块
附加一小问:
3)若cache的速度是主存速度的6倍,求存储系统访问的加速比
虚拟存储器中,程序执行过程中实现虚拟地址到物理地址映射部件(系统)是:D
A.应用程序完成
B.编译器完成
C.MMU完成
D.操作系统和MMU配合完成
如下图,缺页异常处理程序是操作系统的一部分
在请求分页存储管理方案中,若某用户空间为16个页面,页长1 K B,虚页号0、1、2、3、4对应的物理页号分别为1、5、3、7、2。则逻辑地址A2CH所对应的物理地址为( )H(只需填数字和字母,不需要在最后带H,如有字母一定要大写,字母之间以及字母和数字间不留空格)
A2CH=1010 0010 1100
逻辑地址分为逻辑页号和页内偏移
由页长1KB可得页内偏移为10位
把1010 0010 1100的后10位去掉,剩下的就是逻辑页号 10
10是2,对应物理页号是3,即11
所以对应物理地址为1110 0010 1100 即E2CH
假定主存按字节编址,cache共有64行,采用直接映射方式,主存块大小为32字节,所有编号都从0开始。问主存第3000号单元所在主存块映射到的cache行号是( )。(本题中的数字都是十进制数,答案也填十进制数)
主存每组的块数和cache的总行数相同,3000/32=93.75,第3000号单元位于第94个主存块,也就是93号主存块,因为编号从0开始的。93%64=29,映射到的cache行号为29
假定主存按字节编址,cache共有64行,采用4路组相联映射方式,主存块大小为32字节,所有编号都从0开始。问主存第3000号单元所在主存块对应的cache组号是
cache共有64行,采用4路组相联映射方式,所以cache分为64/4=16组,
求第3000号单元位于第几块内:3000/32=93.75,由于从0开始编号,所以第3000号单元位于第93块内
93/16=5……13 位于第13组
一个组相联高速缓存由64个字块组成,每个字块有256字节,分为8组,主存有4096个字块。则主存地址划分中,标记字段的二进制位数为多少位(只需要填写阿拉伯数字)
首先主存有4096个字块,每个字块有256字节,所以地址长度为12+8=20位
每个字块有256字节,所以块内偏移有8位。
Cache分为8组,所以在主存中8个块为一组,组号就是3位
所以tag就是20-8-3=9位
计算机主存容量8MB,分为4096个主存块,Cache数据区容量为64KB,若Cache采用直接映射方式,则Cache的总行数为 ( 只需要填写阿拉伯数字)
8MB,分为4096个主存块,那每块是223/212=211= 2KB
64KB/2KB=32
答案为32
RR型指令(寄存器-寄存器)型:源操作数和目的操作数均使用寄存器存放。
RS型指令:(寄存器-存储器)型:源操作数和目的操作数一个存放在寄存器中,另一个存放在主存中。
SS型指令:两个操作数均存放在主存中。
程序控制类指令用于改变程序执行的顺序,也即改变PC的值。
访问主存最慢,所以SS型指令最慢。
假设某条指令的一个操作数采用寄存器间接寻址方式,假定指令中给出的寄存器编号为8,8号寄存器的内容为1200H,地址1200H中的内容为12FCH,地址12FCH中的内容为3888H,地址3888H中的内容为88F9H.则该操作数的有效地址为
寄存器间接寻址的有关内容在华科计算机组成原理书上202页
操作数的有效地址存在寄存器里,此题中是8号寄存器,8号寄存器的内容为1200H,所以答案就是1200H
假设某条指令的一个操作数采用寄存器间接寻址方式,假定指令中给出的寄存器编号为8,8号寄存器的内容为1200H,地址1200H中的内容为12FCH,地址12FCH中的内容为3888H,地址3888H中的内容为88F9H.则该操作数为
这题和上题一样,也是考察寄存器间接寻址的定义。
寄存器间接寻址就是根据指令找到存放地址的寄存器,再根据这个寄存器中的地址在主存中找到操作数。题目中找到操作数之后又把这个操作数当地址又去找了两次,这是题目的干扰信息。
答案是12FCH
某计算机按字节编址,采用大端方式存储信息。其中,某指令的一个操作数的机器数为ABCD 00FFH,该操作数采用基址寻址方式,指令中形式地址(用补码表示)为FF00H,当前基址寄存器的内容为C000 0000H,则该操作数的LSB(即该操作数的最低位FFH)存放的地址是
本题的第一个关键是采用相对寻址时,指令中形式地址要进行符号扩展为FFFF FF00H再与基址寄存器的内容C000 0000H相加,结果为BFFF FF00H,保存机器数ABCD 00FFH需要4个字节单元,分别是BFFF FF00H、BFFF FF01H、BFFF FF02H和BFFF FF03H,由于是大端存放方式,所以答案是BFFF FF03H
某计算机为定长指令字结构,采用扩展操作码编码方式,指令长度为16位,每个地址码占4位,若已设计三地址指令15条,二地址指令8条,一地址指令127条,则剩下的零地址指令最多有多少条?
三地址指令: 操作码(4位) A1(4位) A2(4位) A3(4位)
0000~1110是三地址的操作码,共15个,1111是扩展标志(二地址操作码的前缀)
二地址指令 : 操作码(8位) A1(4位) A2(4位)
11110000~11110111为二地址指令的操作码,共8个,如果前五位都是1就表示这是一地址指令,即11111是扩展标志
一地址指令: 操作码(12位) A1(4位)
111110000000~111111111110是三地址指令的操作码,共127条。111111111111是扩展标志
零地址指令: 操作码(16位)
1111111111110000~1111111111111111有16条
答案是16
某计算机采用双字节长指令,指令中形式地址字段8位,指令中的数据采用补码表示,且PC的值在取指阶段完成修改。某采用相对寻址的指令的当前地址和转移后的目标地址分别2008和2001(均为10进制数),则该指令的形式地址字段的值为()H(只需要填阿拉伯数字和大写字母,共需2位)
PC的值在取指阶段完成修改,2008是“+1”之后的值.
形式地址直接用 2001-2008-2=-9 -9的补码是1111 0111转换为16进制为F7H
MIPS32指令集中J型指令执行完成后 ,程序计数器PC最低两位二进制数的值为 00
最后衷心感谢疫情期间地大(武汉)樊媛媛老师的耐心答疑。
如果本文对你有帮助,请点赞或收藏,这是支持我继续分享的动力。