《计算机系统概论》-第5章-习题答案

  1. 给定指令ADD、JMP、LEA、NOT,请判断它们分别是操作(或运算)指令,还是数据搬移指令或控制指令?对每一条指令,进一步列出该指令可以采用的寻址模式。
指令类型寻址模式
ADD操作立即数、寄存器2种寻址模式
JMP控制寄存器1种寻址模式
LEA数据搬移立即数1种寻址模式
NOT运算寄存器1种寻址方式
  1. 如果内存可寻址的宽度是64-bit,那么有关MAR和MDR的大小意味着什么?
    MDR存放的是数据,至少需要64-bit,MAR存放内存地址,与寻址空间有关,MAR大于等于寻址空间大小。
  2. 有两种终止循环(loop)的方法。一种是采用计数器控制循环次数;另一种是采用一个被称为(xx)的“元素”来控制。适合于做这种元素的字符有什么特性?
    “哨兵法”的元素字符需要与其他元素明显区分开,这样通过判断“哨兵字符”可以中断循环。
  3. 假设内存包含256个位置,每个位置的宽度是16位,问:
    a. 表达地址的宽度至少是多少位?8-bit
    b. 如果采用PC相对寻址模式,并要求控制指令能跳转至20个间隔以内的地址处,那么跳转指令中要留出多少位的字段来标识PC相对偏移(PC-relative offset)?表示前后20个间隔之内的位置,所以需要6-bit表示有符号的数
    c. 如果控制指令所在的地址是3,那么在LC-3指令中,它与地址10之间的PC偏移值应该是多少?6
  4. a. 什么是寻址模式?是定义操作数位置的一种模式。
    b. 列举三种指令操作数可能存在的地方。指令本身、寄存器、内存
    c. 列举LC-3的5种寻址模式,并指明各个模式下操作数存在的位置。立即数寻址(指令本身)、寄存器寻址(寄存器)、相对寻址(内存)、间接寻址(内存)和基址偏移寻址(内存)
    d. 5.1.2节中的ADD指令采用的是什么寻址模式?寄存器寻址模式
  5. 回顾2.7.1节中的“机器忙”(machine busy)例子。假设BUSYNESS位矢量内容存放在R2寄存器中,我们可以采用LC-3指令“0101 011 010 1 00001(AND R3,R2,#1)”判断机器0是否忙(busy)。如果该指令的结果是0,则意味着机器0是busy状态。
    a. 写一条判断机器2是否busy的LC-3指令;0101 011 010 1 00100(AND R3,R2,#4)
    b. 写一条判断机器2和机器3是否同时busy的LC-3指令;0101 011 010 1 01100(AND R3,R2,#12)
    c. 写一条能够指示没有任何一个机器是busy的LC-3指令;0101 011 010 1 11111
    d. 你能写一个判断机器6是否busy的指令吗?有什么问题吗?不可以,超出范围
  6. LC-3的ADD指令所能表达的最大的正整数是多少?
    15
  7. 如果我们希望将ADD指令能寻址的寄存器数目增加到32个,有什么问题吗?请解释。
    不可以,因为表示32个寄存器需要5-bit,那么该指令长度=操作码4bit+3*寄存器地址5bit=19-bit,这样超过16bit,所以无法增加到32个寄存器。
  8. 我们希望设计一个“什么也不做”的指令。许多ISA都有一个什么都不做的操作码,通常称之为NOP指令,即“NO OPERATION”。该指令仍然经历取指令、译码、执行等节拍,只是在执行节拍它什么也不做。下面哪条指令可以扮演NOP的功能,且不影响程序的正常执行?
    a. 0001 001 001 1 00000
    b. 0000 111 000000001
    c. 0000 000 000000000
    其中ADD指令与其他两条指令的区别是什么?
    c指令可以扮演NOP功能,其中ADD指令虽然结果没有发生变化,但其实已经进行+0的操作了。
  9. 下面的指令A和B之间的区别是什么?他们之间的相似性是什么?差异是什么?
    A 0000111101010101
    B 0100111101010101
    A:BRnzp -171
    B:JSR -171
    A和B的PC偏移量都是171,但是两者执行的指令不同,参考第9章,B中的中JSR指令还涉及R7寄存器,而A中不涉及。
  10. 我们希望通过一条指令的执行来完成:将寄存器R1的内容减20,并将结果保存在R2中。能做到吗?如果能,写出来;如果不能,请解释为什么。
    不能,因为立即数只有5位最多能表示-16,无法表示-20
  11. 在执行完指令ADD R2,R0,R1之后,我们发现R0[15]和R1[15]相同,但与R2[15]不同。已知R0和R1包含的都是无符号(UNSIGNED)整数(即0~65535),那么在什么情况下,我们可以相信R2中的内容?
    R0[15]和R1[15]为0,R2[15]为1,结果可信。
  12. a. 怎样只使用一条指令就能将R2的内容转移到R3之中? ADD R3 R2 #0
    b. LC-3没有提供减法指令。怎样只使用3条指令完成下面的运算:R1←R2-R3?
    NOT R3,R3,111111
    ADD R3,R3,#1
    ADD R1,R2,R3
    c. 能否只使用一条LC-3指令,且不影响任何寄存器的内容,基于R1的内容设置条件码?ADD R1,R1,#0
    d. 是否能通过一组指令序列的执行,使得最后3个条件码分别为N=1、Z=1、P=0?请解释。
    e. 写一条能否清除R2内容的指令。AND R2,R2,#0
  13. LC-3没有提供对应于逻辑OR的操作码。换句话说,不存在能够执行OR操作的LC-3指令。但我们可以通过一组指令来完成等价的OR功能。以下4条指令的任务是将R1和R2的内容相或(OR),并将结果保存在R3中。试填写下面空缺的指令:
    (1)1001 100 001 111111
    (2)1001 101 010 111111
    (3)0101 110 100 000 101
    (4)1001 011 110 111111
    通过第2章中的摩根定律实现以上步骤。
  14. 阅读程序,请写出下面起始于x3100的程序结束后(HALT),寄存器R1、R2、R3、R4的内容。
    5.15
    R1 = 0x3121
    R2 = 0100 0101 0110 0110 = 0x4566
    R3 = 1010 1011 1100 1101 = 0xabcd
    R4 = 1010 1011 1100 1101 = 0xabcd
  15. 在以下情况中,LC-3的哪一种寻址模式是最合适的(可能有多个正确答案,所以请为你的答案做出解释)?
    a. 读取从间距不超过±28的地址的内容;LDI间接寻址,可以访问内存中任意位置
    b. 读取从间距超过28的地址的内容;LDI间接寻址,可以访问内存中任意位置
    c. 读取一个连续存放的数组内容。立即数寻址
  16. 在LD指令的执行过程中,共有多少次读写内存的操作?LDI指令有多少次?LEA指令呢?我们说的操作包括指令周期的所有节拍。
    LD 2次
    LDI 3次
    LEA 1次
  17. 假设当前PC指向一个LDR指令所在的地址。如果让LC-3处理该指令,则需要多少次内存访问?STI和TRAP呢?
    2次内存访问
    SRI:3次内存访问
    TRAP:2次内存访问
  18. LC-3的指令寄存器(IR)由16-bit组成,其中bit[8:0]表示LD指令的PC偏移值。如果我们对ISA做出修改,让bit[6:0]表示PC偏移值,则LD指令读取数据的可寻址范围是多大?
    PC -64~+63
  19. 如果我们设计LC-3的ISA,让LD指令只能从距离增量PC不超过±32的地址读取数据,则LD指令中的PC偏移字段需要多少个bit?
    7-bits
  20. LC-3的ISA最多支持多少个TRAP服务?请解释。
    28=256个
  21. PC内容为x3010。以下内存单元的内容如下所示:
    5.22.1
    下面三条指令的执行导致R6装入一个数值,问该数值是多少?
    5.22.2
    (对比英文原版,x3010:1110 0110 0011 1111)
    R6 = x123B
    能否用一条指令就完成上面三条指令所完成的任务?
    1010 110 000111111 采用间接寻址,访问内存空间的任意地方
  22. 假设下面指令被装入x30FF:
    5.23
    请问程序执行完之后,R2的内容是什么?
    R2 = 0001 0100 1000 0010 = x1482
  23. 位于x3200的一条LDR指令,采用R4做它的基址寄存器。R4当前的内容是x4011。问该指令读取数据的最大可寻址地址是多少?再假设我们重新定义LDR的偏移值是0扩展的(而不是符号扩展),则该指令最大可寻址地址是多少?最小地址呢?
    R4+25-1 = R4 + 31 = x4030
    如果是0扩展的,则最大可寻址地址是x4050,最小地址是x4011
  24. 写一个LC-3程序,比较R2和R3的内容,并将最大值放入R1寄存器。如果两个数相同,则R1等于0。
    NOT R3,R3
    ADD R3,R3,#1
    ADD R1,R2,R3
    BRz #5 (如果R1=0,则直接跳转到最后结束语句)
    BRn #1 (如果R1<0,则跳转到下面第2条语句)
    BRp #3 (如果R1>0,则跳转到下面第4条语句)
    ADD R1,R3,#0
    BRnzp #1(跳转最后一条语句)
    ADD R1,R2,#0
    TRAP x25
  25. 给你一个任务,设计下一代的LC-3。要求是:为ISA增加16个新指令,并将寄存器组的数目从8个增加至16个。机器要具备1个字节的基本寻址能力,且内存寻址空间大小为64K字节。指令的大小任然是16-bit。指令的格式如原来的16位格式一样,具有相同的5个字段,只是你可以适当地调整各个字段的宽度。问:
    a. PC的宽度至少是多少位,才能保证访问整个地址空间? 216=65536=64K,所以至少需要16-bits
    b. 运算指令中,可表达的最大立即数是多少?4-bits
    c. 如果我们需要TRAP指令提供128个操作系统服务程序,且通过将trapvector左移5位,直接形成这些服务程序的入口地址,试计算一下这些服务程序所需要占用的最小内存大小。
    d. 如果在新的LC-3中,我们将寄存器数目从8个减至4个,但操作码数目仍然保持为16个,试问在新的机器上,ADD指令所能表示的最大立即数值是多少?
  26. 如果在5.3.5节的7行代码的例程执行之前,R2的内容为xAAAA。那么在7条指令的执行过程中,R2的内容共有多少种数值?列举出来。
  27. 事实上我们“确实”没有必要提供“load indirect(1010)”和“store indirect(1011)”指令,因为我们可以通过其他指令的组合来完成相同的任务。试用一组指令序列替换下面程序中的store操作(1011)。
    5.28
  28. LC-3有一个指令“LDR DR,BaseR,offset”。在这个指令被译码之后,则产生下面一些操作(或称为“微指令”(microinstruction)):
    5.29
    假设LC-3要引入一个新指令“MOVE DR,SR”,即将地址为SR的内存单元内容拷贝至地址为DR的内存单元。问:
    a. MOVE指令并不是必需的,因为它能完成的工作通过LC-3现有的一组代码组合也可以完成(又称为仿真(emulate))。试写出(或仿真)“MOVE R0,R1”指令的LC-3代码;
    b. 如果LC-3真的添加了MOVE指令,试写出它的微指令序列(从译码完成之后开始)。
  29. 下面表格显示的试LC-3内存的部分内容:
    5.30
    如果其中的条件跳转指令又跳转至x3100,那么,你能推测出有关R0和R1的什么信息?
  30. 如图所示是8个寄存器在x1000指令执行之前和执行之后的快照(snapshot),试通过寄存器的变化对比,推测该指令是一条什么指令(填空)?
  31. 假设在下面代码序列执行之前,条件码的值为N=0,Z=0,P=1。问执行之后,他们的值是多少?
  32. 如果下面代码执行之后R0的内容为5,试推测有关R5的内容会是怎样的。
  33. 基于图5-18画出的全部数据通路,指出图5-4与NOT指令执行相关的功能单元。
  34. 基于图5-18画出的全部数据通路,指出图5-4与ADD指令执行相关的功能单元。
  35. 基于图5-18画出的全部数据通路,指出图5-4与LD指令执行相关的功能单元。
  36. 基于图5-18画出的全部数据通路,指出图5-4与LDI指令执行相关的功能单元。
  37. 基于图5-18画出的全部数据通路,指出图5-4与LDR指令执行相关的功能单元。
  38. 基于图5-18画出的全部数据通路,指出图5-4与LEA指令执行相关的功能单元。
  39. 图5-19所示是LC-3的局部图,试回答标识为A的信号的作用是什么?
  40. 图5-2-所示是LC-3的局部实现逻辑。
    a. 信号Y提供的是什么信息?
    b. 信号X是锁存器D的“门控”(gated)信号,请问X信号的产生逻辑是否存在错误?
  41. LC-3开发组(macho-company)决定利用备用的操作码1101实现一个新指令。他们要在下面的各个候选中,挑选一个最适合的:
    a. MOVE Ri,Rj;将Rj的内容拷贝至Ri;
    b. NAND Ri,Rj,Rk;Ri是Rj和Rk的按位(bit-wise)NAND结果;
    c. SHFL Ri,Rj,#2;Rj内容左移2位的结果存入Ri;
    d. MUL Ri,Rj,Rk;
    你的答案是什么(你觉得哪个更合适、更有必要)?

参考:https://github.com/QSCTech/zju-icicles/blob/master/计算机系统概论/作业答案/ch05_complete.pdf

  • 35
    点赞
  • 181
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值