计算机组成原理-指令系统

1解释概念和术语:机器指令,指令系统,指令格式,指令字长,扩展编码,堆栈,边界对齐,寻址方式,CISCRISC

答:

机器指令:通常将要求硬件直接实现某种运算或操作的命令称为机器指令。

指令系统:所有机器指令的集合。

指令格式:指令格式通常由操作码字段和地址码字段构成。(之后有更详细解释)

指令字长:一个机器指令包含的二进制信息位数,指令字长取决于操作码长度,地址码长度,指令字长必须是存储字长的倍数,不然没有办法表示下条指令。

机器字长CPU能够直接处理的二进制位数,通常与CPU内部的指令寄存器的位数相同。

扩展编码:这个问题较为复杂,新开一题解答;

堆栈:堆栈采用后进先出的顺序存取方式,注意,此处的堆栈和C语言里面的堆栈不相同,这里的推栈就是栈而已。典型的应用是暂存调用/返回指令的指令地址。


存储器堆栈(软堆栈)借助部分存储器空闲构成,CPU中设置堆栈指针寄存器SP用来指向堆栈栈顶,SS寄存器表示栈底。SP的移动方向

有高地址到低地址,低地址到高地址(图中),

假设堆栈中的数据长度为a个存储字长,RinRout是长度为a个存储字长的寄存器,则,入栈操作,SP<-(SP)+a; [SP]<- Rin

出栈操作Rout<- [SP], SP <- (SP)-a;



边界对齐:一般而言,数据在存储器中都需要占据多个连续的存储字长,数据地址用第一个存储单元的地址表示,数据在存储器的存放设涉及到确定边界和次序两个方面的参数。

所谓边界:就是指数据存放对第一个存储单元地址的要求,

1边界对齐:数据长度为2^N个存储字时,数据地址的最低n位必须

为零。例如:

struct Demo
{
	char a;
	double b;
	int c;
};
//sizeof(Demo) != 13  ,sizeof(Demo) = 24;

2次序:有大端次序和小端次序两种排列方式。


大端就是地址的高位部分存放数据的地位部分,小端就是地址的低位部分存放数据的高位部分。

//test 
#include <stdio.h> 
#include <stdlib.h> 

int isBigEndian() 
{ 
	unsigned short test = 0x1122; 
	if( *(unsigned char*)&test == 0x11) 
		return 1; 
	else 
		return 0; 
} 

int main() 
{ 
	if( isBigEndian() ) 
		printf("Big-Endian\n"); 
	else 
		printf("little-Endian\n"); 
}

一般interCPU是小端排序。


寻地方式:是指形成当前指令操作数或操作数地址及下条指令地址的方法。

1寻址方式分成指令寻址和数据寻址两大类

一:指令寻址:

通过指令操作码可以区分当前指令是顺序寻址还是跳跃寻址。

如果是顺序寻址,那么下条指令的地址码是隐含的,即

下条指令地址=PC+a

跳跃寻址的指令格式包含操作码和 下条指令地址码(显式的)。

二:数据寻址:

1立即寻址2寄存器寻址3相对寻址4隐含寻址...

(此处不细说)


CISC

complexinstruction set computer,指令种类多,寻址方式多,指令格式多。


RISC

reducedinstruction set computer, 指令种类少,寻址方式少,

指令格式规整。



2某指令系统中共有10种性质的操作,使用频率分别为0.300.200.160.090.080.070.040.030.020.01

请分别用定长编码法,霍夫曼编码法,同时有两种长度的霍夫曼扩展编码法进行编码,并计算三种方式编码的平均码长。

答:

定长编码:00001010,平均码长:4

霍夫曼编码:

I1 0.3 11

I2 0.2 01

I3 0.16 101

I4 0.09 001

I5 0.08 1001

I6 0.07 1000

I7 0.04 0001

I8 0.03 00001

I9 0.02 000001

I100.01 000000

平均码长:2.84


霍夫曼扩展编码:

这里总共有六种长度,取三位表示前面6种长度,四位表示 后面 4种长度

I10.3 000

I20.2 001

I30.16 010

I40.09 011

I50.08 100

I60.07 101

I70.04 1100

I80.03 1101

I90.02 1110

I100.01 1111

平均长度:0.10* 4 + 0.90 *3 = 3.1

如果是取二位表示前面2种长度,四位表示后面8种长度

平均长度=3.0

所谓霍夫曼扩张编码:以此题为例:3位表示前面6种长度,证明

还有两种表示没有用,正好做后面四种的开头,后面四位可表示

的刚好是(2*2=4);



3设某机器指令字长为16,每个地址码为6位,指令有零地址,单地址,和双地址三种格式。

1操作码采用定长编码,且零地址指令,单地址指令分别是P种和Q种,则双地址指令最多有多少种?

2若操作码采用变长扩展编码,且零地址指令,双地址指令分别是X种和Y种,则单地址指令最多有多少种?

答:

1双地址指令操作码长:16-12= 4

so,双地址指令最多有2^4– P- Q

2零地址的操作码16单地址10双地址4

4位能用于零,单的是2^4– Y;

设单地址有M种,则前10位可用于零地址的有(2^4-Y)*2^6– M

从而,求得M


4某指令系统中,指令字长16,指令操作码采用扩展编码法,有单地址指令,双地址指令两种指令,若每个地址码均6位,且双地址指令为A条,则单地址指令最多有多少条:

答:双地址指令的操作码4位,单地址指令的操作码是10位,所以前10位用于单地址指令编码有2^6*( 2^4 – A)


5试比较直接寻址方式和寄存器间接寻址,基址寻址和变址寻址之间的不同。

直接寻址方式:指令中的操作数地址码存放的不是地址,而是操作数本身。

寄存器直接寻址:指令中的操作数地址码部分存放的是相应数据寄存器编号,相应的寄存器中存放的是操作数。

寄存器间接寻址:指令中的操作树地址码部分存放的是相应地址寄存器编号,相应寄存器中存放的是操作数的地址。寄存器间接寻址是具有间接寻址的最大寻址范围,只有一次访存,是使用频率最高的寻址方式之一。

基址寻址:指令中操作树地址码部分形式地址A加上基址寄存器的内容得到的是操作数的内存地址。此时,A也称为偏移地址。

变址选址:与基址寻址差不多,只是把基址寄存器换成变址寄存器。

变址寻址的初衷不是为了扩大寻址范围,而是便于数据块的规律访问,如访问数组中所有元素,这种情况下,形式地址A不变,变址寄存器的内容有规律的变化。


6设存储器按字节编址,相对寻址的转移指令字长为2B,第二字节是相对偏移量,用补码表示。CPU取值时每取出一个字节自动完成

PC<- (PC) +1操作。假设某相对寻址的转移指令的第一字节地址为2000H,请分别写出欲转移到地址为2008H的指令和地址为1FF8的指令时,该转移指令指令字的第二字节是什么内容:

答:该指令取完后:(PC=PC+2= 2002H;

想要转移到地址为2008H,则地址偏移量为2008H-2002H = +06H;所以[2001H]= 06H;

想要转移到地址为1FF8H,则地址偏移量位1FF8H-2002H =

-0AH;所以[2001H]= 96H;(补码)

相关知识:相对寻址:操作数地址为地址码中形式地址A与程序计数器PC的内容相加的结果。





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值