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

article/2025/10/6 12:08:42
  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


http://chatgpt.dhexx.cn/article/slTftZE0.shtml

相关文章

X1000之LCD部分的翻译

1.显示大小可达640x48060Hz&#xff0c;24BBP RGB 8 8 8 RGB(256^3) 2的24次方16777216 2.支持的颜色就是我们上面计算的 3. 8080并行接口 MCU接口方式&#xff08;8080&#xff0c;6800接口&#xff09;与RGB接口主要的区别 4.支持内部DMA操作和寄存器操作&#xff08;可以…

uboot - 配置过程1(分析国产君正的ingenic-linux-kernel3.10.14-x1000-v8.2-20181116\u-boot\mkconfig脚本)

分析uboot的配置过程&#xff08;mkconfig脚本&#xff09; uboot怎么配置&#xff1f;我们在终端上执行make NAME_config时的运行过程解析&#xff01; STEP1: %_config:: unconfig$(MKCONFIG) -A $(:_config)我们执行make *_config时会运行makefile的这两行程序&#xff0c…

Opencv 以指定格式保存图片

将图像保存至本地&#xff0c;以指定的格式&#xff0c;需要用到cv::imwrite()函数 函数原型&#xff1a; bool imwrite(const string& filename, InputArray img, const vector<int>& paramsvector<int>() )参数解释&#xff1a;filename:图像保存路径&…

【OpenCV-Python】教程:1-1 图像读取显示保存

文章目录 目标代码imread接口原型参数 支持的格式 imwrite接口原型参数 imshow接口原型参数 目标 读图片显示图片保存图片 代码 ## 导入库 import cv2 import sys## 读入图片 img cv2.imread("lena.jpg")## 读入失败退出 if img is None:sys.exit("Could not…

44.Linux君正X1000-添加st7789v显示

由于板子LCD旧屏是ili9335型号的,旧屏有时候会断货,如果断货则使用一个st7789v型号的LCD 它们两个屏的区别在于初始化屏的参数不同,引脚都一样,也就是说需要使板子同时支持ili9335型号和st7789v型号 思路: 1.uboot在显示LOG(初始化屏参数)之前,通过命令来读LCD型号,来检测LCD型…

HaaS100硬件规格

硬件配置 类别 参数 CPU 型号 HaaS 1000 架构 Cortex M33 主频 300MHz 片上Flash 16MB 内存 2.5MB SRAM 16MB PSRAM 硬件接口 类别 数量 性能指标 TF 卡槽 1个 最大支持 64GB RS485 1路 波特率支持1200bps ~ 115200bps RS232 1路 波特率最高支…

X1000对于CPU Core的参数解读(MIPS Cache)

各自摘抄整合&#xff0c;大多来自互联网&#xff0c;链接已全部放出来 1.MIPS-Based XBurst cores (up to 1.0GHz) 基于MIPS的XBurst核(最高可达1.0GHz) MIPS架构  XBurst是北京君正针对移动多媒体便携产品推出的一种创新的32位嵌入式CPU技术&#xff0c;它重新定义了32位嵌…

主控芯片成功案例:搭载北京君正X1000芯片,收款计算合二为一

具体硬件方面&#xff0c;商米码利奥Mini搭载了北京君正X1000芯片&#xff0c;该芯片具有性能强、功耗低的特点&#xff0c;主频可以达到1GHz &#xff0c;支持1秒极速启动&#xff0c;内置LPDDR&#xff08;X1000&#xff1a;32MB&#xff0c;X1000E&#xff1a;64MB&#xff…

【以太网硬件九】1000base-X是什么?

&#x1f449;个人主页&#xff1a; highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 说完千兆以太网电口&#xff0c;我们再来研究一下千兆光口的物理层规范。 千兆以太网…

比A100性能高4.5倍!英伟达H100横扫AI推理基准测试

视学算法报道 编辑&#xff1a;武穆 【导读】NVIDIA H100 Tensor Core GPU在MLPerf行业标准AI基准测试中首次亮相&#xff0c;创下了所有工作负载推理的世界纪录&#xff0c;提供的性能比上一代GPU高4.5 倍。 不久前&#xff0c;英伟达公布了旗下的芯片&#xff0c;在MLPerf行…

君正 X1000 音频驱动架构

X1000 音频驱动架构笔记 使用开发板X1000_HALLEY2_V2.0&#xff0c;源码为北京君正官方源码V7.0版本&#xff0c;与V6.0无太多差异 项目中遇到的问题 这是内核源码中设置所导致的&#xff0c;可能官方认为X1000这样设置会最好&#xff0c;可是我们需要小于30MS 的周期设置&…

华为metro1000描述,optix metro1000参数-华讯佳科技

OptiX Metro1000传输设备(简称Metro1000&#xff09;是华为技术有限公司研发的STM-1/STM-4/STM-16级别的盒式设备。华为Metro1000光端机主要应用于城域网、本地传输网接入层&#xff0c;具备结构简洁、集成度高等许多特点。 Metro1000光端机是华为技术有限公司开发的STM-1/STM-…

扔掉老破V100、A100,英伟达新一代计算卡H100来了

本文转载自公众号“夕小瑶的卖萌屋”&#xff0c;专业带逛互联网算法圈的神操作 -----》我是传送门 关注后&#xff0c;回复以下口令&#xff1a; 回复【789】 &#xff1a;领取深度学习全栈手册&#xff08;含NLP、CV海量综述、必刷论文解读&#xff09; 回复【入群】&#xf…

君正X1000开发板/方案开发介绍

君正X1000芯片开发板/方案开发&#xff0c;或者需要相关开发资料&#xff0c;如规格书&#xff0c;硬件设计&#xff0c;原理图等&#xff0c;可到一牛网论坛 X1000主要技术指标及特点 处理器 Ingenic X1000, 1.0GHz, 集成32Mbytes LPDDR 存储 16MBytes&#xff0c;4线SPI …

君正X1000平台内核SPI接口使用

一. 平台环境 开发板 X1000_HALLEY2_BASEBOARD_V4.1源码版本 ingenic-linux-kernel3.10.14-x1000-v8.2-20181116 二. 源码编译&#xff1a; 参照《v1000_v8.2版本编译_20181116》&#xff0c;可整体进行编译&#xff08;即同时编译生成x.bin,kernel镜像文件&#xff0c;文件…

算法工程师的职业发展前景思考和总结

本篇文章结合职友集数据对数据工程师【dba】通过个人理解和对职业行情现状进行个人主观总结。 声明&#xff1a;仅供参考&#xff0c;不是绝对&#xff0c;因人而异。 日期&#xff1a;2022年6月1日 作者&#xff1a;任聪聪 了解什么是算法工程师 首先算法工程师就是&#xff…

Python实现xls、xlsx文件内容替换的自定义函数

本篇文章主要讲解通过python批量替换xls、xlsx文件中的字符串的函数代码实例教程 日期:2023年5月9日 作者:任聪聪 版本:python3.9 前提准备 安装:xlrd,xlwt,openpyxl pip install 包名引入: import xlrd,xlwt,openpyxl实际效果: 可批量替换xls、xlsx两种文件类型,效…

Python实现doc、docx批量文本内容替换的代码实例

本篇文章主要讲解通过python及三方库实现doc、docx的批量文本内容替换的方法教程 日期:2023年5月10日 作者:任聪聪 python3.9版本 前提准备 安装: docx、win32 pip install 包名引入: import win32com.client as win32 import docx实际效果 可以修改doc、docx中包含图片…

程序员该怎么创业才比较靠谱?

本篇文章&#xff1a;主要讲解粉丝后台提问&#xff0c;创业相关问题。 作者&#xff1a;任聪聪 日期&#xff1a;2021年10月19日 宇宙的尽头绝对不是打工&#xff0c;打工是不可能的&#xff0c;程序员打一生的工时赚不到做企业能赚到的钱的。如果你月薪15k&#xff0c;到手11…