8ug[高等教育]指令系统复习
指令系统复习
1. 某计算机有10条指令,它们的使用频率分别为0.30, 0.20, 0.16, 0.09, 0.08, 0.07, 0.04, 0.03, 0.02, 0.01
(1) 用霍夫曼编码对它们的操作码进行编码,并计算平均代码长度。
(2) 用扩展霍夫曼编码法对操作码进行编码,限两种操作码长度,并计算平均代码长度。
2.某模型机有8条指令,使用频率分别为:0.3, 0.3, 0.2, 0.1, 0.05, 0.02, 0.02, 0.01。试用霍夫曼(Huffman)编码方法对其操作码进行编码,并计算其平均编码长度比定长操作码(用普通编码法编码)的平均编码长度减少多少?
3. 若某计算机要求有如下形式的指令:三地址指令8条,二地址指令126条,单地址指令32条(不要求有零地址指令)。设指令字长为16位,每个地址码长为4位,试用扩展操作码为其编码。
4.若某机要求有如下形式的指令:三地址指令4条,单地址指令255条,零地址指令16条(不要求有二地址指令)。设指令字长为12位,每个地址码长为3位,问能否以扩展操作码为其编码?如果其中单地址指令为254条呢?说明其理由。
5.一条双字长的load指令存储在地址为200和201的存储位置,该指令将地址码指定的存储器内容装入累加器AC。指令的第一个字指定操作码和寻址方式,第二个字是地址部分。PC寄存器的值是200。通用寄存器R1的值是400,变址寄存器XR的内容是100。指出在各种寻址方式访问的数据。
解:指令的寻址方式字段可指定任何一种寻址方式。
在直接寻址方式下,有效地址是指令中的地址码部分内容500,装入AC的操作数是800。
在立即数寻址方式下,指令的地址码部分就是操作数而不是地址,所以将500装入AC。
在间接寻址方式下,操作数的有效地址存储在地址为500的单元中,由此得到有效地址800,操作数是300。
在相对寻址方式下,有效地址是500+202=702,所以操作数是325。这里要注意的是,在该指令的执行阶段,PC寄存器的内容已经更新为下一条指令的地址202。
6.一条双字长的指令存储在地址为W的存储器中。指令的地址字段位于地址为W+1处,用Y表示。在指令执行中使用的操作数存储在地址为Z的位置。在一个变址寄存器中包含X的值。试叙述Z是怎样根据其他地址计算得到的,假定寻址方式为
(1) 直接寻址
(2) 间接寻址
(3) 相对寻址
(4) 变址寻址
解:根据题意画出如下示意图:
(1) 在直接寻址方式下,指令中存放的就是操作数的地址。即操作数的地址Z在地址为W+1处,Z从指令中得到,所以有Z=Y。
(2) 在存储器间接寻址方式下,操作数的地址在某一个存储单元中,其地址在指令中。Z根据Y访存后得到,所以有Z = (Y)。
(3) 在相对寻址方式下,操作数的地址为PC的值(取完指令后PC的值为W+2)加上Y得到。所以有Z=W+Y+2。
(4) 在变址寻址方式下,操作数的地址为变址寄存器的值加上Y得到。所以有Z=X+Y
7.一条相对转移指令长4个字节,存储在存储器中地址为75010的地方,转移目标地址为50010。问
(1) 指令执行之后PC的值为多少?
(2) 指令的相对地址字段的值为多少?
(3)如果采用补码表示相对地址字段,该指令的相对地址字段需要多少二进制位?
解:(1) 该指令读取之后PC的值更新为75410。指令执行之后PC的值为50010。
(2) 相对转移指令中的地址偏移量应为500 - 754 = -254
(3) 254 < 28,如果采用补码表示相对地址,加一个符号位,则可以形成前向和后向的转移,相对地址字段需要9个二进制位。
8.存储器堆栈的顶部内容是5320,堆栈向下生长,堆栈指针寄存器SP的内容是3560,一条双字长的子程序调用指令位于存储器地址1120、1121处,指令第二个字的内容是地址字段,内容为6720。问以下情况下PC、SP和栈顶的内容。
(1) 子程序调用指令被读取之前;
(2) 子程序调用指令被执行之后;
(3) 从子程序返回之后。
解:(1)PC=1120, SP=3560, 栈顶内容为5320;
(2) 子程序调用指令被执行之后,PC的内容为子程序入口的指令地址,在该指令的地址段给出;返回指令的地址进入栈顶,这时SP减1;因为子程序调用指令为双字长,所以返回地址为子程序调用指令的地址加2,这样得PC=6720, SP=3559, 栈顶内容为1122;
(3) 从子程序返回之后,将返回地址从堆栈中弹出到PC,这时SP加1,栈顶内容恢复到子程序调用指令被执行之前的值。这样,有PC=1122, SP=3560, 栈顶内容为5320