计算机系统第七章答案,《计算机系统概述》-第7章-习题答案

假设一个汇编语言程序中包含了以下两条指令,汇编器将翻译后的LDI指令放在目标模块的x3025位置。问汇编过程结束后,x3025的内容是什么?

69f86d6080f9ff8811628eff61f3bec7.png

1010 011 11111 1110 = 0xA7FE

假设汇编语言程序中包含下面的指令

ASCII的符号表项的内容是x4F08,问该指令执行之后,R1的内容是什么?

572bcff3192fb0cdfd03da1b955d0846.png

R1=0010 0011 1111 1111 = 0x23FF

如果采用字符串AND作为标识(label),会出现什么问题?(提示:第1遍扫描会是什么情况?第2遍扫描会是什么情况?)

第1遍扫描会将AND扫描成OPCODE,解析为0101;

第2遍扫描会出现编译错误

试为以下代码写出在汇编器处理下符号表的内容。

1977eed2b48cdf6d401c6f82bc29590d.png

a. 试阅读以下程序,说明它的作用。

53f8471d411d23174071c2822e39a057.png

b. 程序结束后,RESULT的内容是什么?

(假设)我们的汇编器崩溃了,需要你的帮助!请创建一个符号表,并将下面程序中标号为D、E、F的指令手工汇编出来。你可以假设在这个模块执行之前,已有另外一个模块将一个正数放入了E中。 8113e2a3fb982f88d87e3fa92b23d209.png

c2ad5a361e948943579f672d5e995886.png

请用不多于15个字的一句话,解释上面这个程序在做什么。

试写一个LC-3汇编程序,统计R0寄存器的数值中包含了多少个1,并将结果存入R1。例如,假设R0的内容是0001001101110000,则程序执行之后,R1的内容等于6(0000 0000 0000 0110)。

一个工程师正在调试她写的一个程序。当她看到下面代码时,决定在地址0xA404处放置一个断点(breakpoint)。在PC=0xA400时,她将所有寄存器清0,并运行程序直到遇到断点。

59d7b40b3e8afbac784ce37a6876068e.png

试写出遇到断点的时候,寄存器文件的内容(用十六进制表示)。

位操作.END的作用是什么?它和HALT指令之间的区别是什么?

下面代码片段中存在一个错误。请找出错误并修复它。

181444c95a9b34531c28d1a2cc5db46f.png

该错误是在被汇编的时候,还是在LC-3上运行的时候,将被发现?

LC-3汇编器必须能够将ASCII表示的常数转换为相应的二进制数值。例如,x2A将被翻译为00101010,而#12被翻译为00001100。试写一个汇编语言程序,将从键盘读入的十进制或十六进制常数(前缀#代表十进制,前缀x代表十六进制)转换为二进制数表达方式,并打印出来(假设常数表示时,十进制或十六进制的数字不超过两个)。

阅读以下代码,试解释该程序的目的。

d7c948f8e027569f8b7329cd7a73e9de.png

以下程序的目的是将存放在内存A、B、C中的内容相加,并将结果存入内存。但是,代码中存在两个错误。试找出错误,并分别解释错误会在汇编时还是在运行时被检测出来?

6ddb6907abf1742193dd37c6eec04a2e.png330ef17505de024779d6a96d160407ea.png

a. 汇编以下程序(即写出该程序的机器代码):

b1a16d06ac5f134413d1a9c079037c6c.png

b. 程序员试图将%符号显示在屏幕上,然后停机(halt)。但程序员混淆了操作码(即使用了错误的汇编指令)。请将程序中被错误使用的一个操作码替换为正确的操作码。

c. 原先的程序(如a)的执行会产生奇怪的现象。产生错误现象的原因一部分是由程序员的失误造成的,另一部分归因于R0的内容在程序执行之初是x3000。试解释奇怪的现象是什么样的,以及为什么会是这样?

假设x4000开始的连续内存空间中存放了一个整数序列,且每个内存单元存放了一个整数。该序列的结尾数值是x0000。阅读下面的程序,请问该程序的目的是什么?

8d88746038fb5cd84596ad4fbdefbf1c.png

假设x4000开始的连续内存空间中存放了一个非负整数序列,且每个内存单元存放一个整数。每个整数的数值范围是0~30000(十进制),结尾数值是-1。阅读下面的程序,请问该程序的目的是什么?

5d1a04c0ab00f835d643815cf12049f6.png

假设你写了两个独立的汇编语言模块,并用链接器将两者结合在一起。其中,每个模块都使用了标识AGAIN,但没有一个模块中包含了伪操作.EXTERNAL AGAIN。请问在两个模块中,同时使用标识AGAIN是否有问题?为什么?

下面程序比较两个相同长度的字符串。第一个字符串的起始地址是x4000,第二个字符串的起始地址是x4100,两者都是.STRINGZ格式。如果两个字符串相同,则程序结束时R5=0。请在(a)、(b)、(c)中填充指令,完成该程序。

假设x4000开始的连续内存空间中存放了一个整数序列,且每个内存单元存放一个整数。该序列的结尾数值是x0000。阅读下面的程序,请问它的目的是什么?

72d7ec424b93e4152d13a7530c06bf4c.png

请问下面的程序执行时,标识LOOP处的指令会被执行多少次?

98e046afb26492a5495be936c777d6a6.png

下面的模块(a)和(b)分别是两个程序员写的LC-3汇编程序,两者的目的都是将数值x0015填入地址x4000。请问两者的本质区别是什么?

048ed677d5110f0a17f2ba2bbcebfa54.png

汇编以下LC-3汇编语言程序(写出机器码):

8e1c3b28277c977b05f32dd05be10a74.png

请问程序的目的是什么(用不多于20个字来描述)?

LC-3汇编器必须能将指令的助记(mnemonic)操作码翻译成二进制操作码。例如助记操作码ADD对应的二进制码形成为0001。写一个LC-3汇编语言程序,提示用户输入一个助记操作码(如ADD),然后将其对应的二进制码打印到屏幕上。如果输入的是无效助记操作码,则显示错误信息。

试写一个LC-3汇编程序,判断一个字符是否是“回文”(palindrome)。所谓“回文”,就是正读或反读结果都是一样的。例如,字符串“racecar”就是一个回文。假设x4000存放了一个格式为.STRINGZ的字符串。判断该字符串是否是回文,如果是则R5返回内容1;如果不是,则R5返回0。填充(a)~(e)处的指令,完成整个程序。

267c74f3fe553f202ae9170791296af2.png

我们的本意是让以下程序将R3内容左移4个bit,但程序中存在错误,请找出错误并修正。

9eb9f6819510ca57b50d46c45143f974.png

伪操作.FILL xFF004有什么问题吗?为什么?

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值