CSAPP 练习题3.4

题目条件

src_t *sp; dest_t *dp;
sp和dp的值分别存储在寄存器%rdi和寄存器%rsi中,表中每个表项应实现两条指令,第一条是从内存中读数,做适当的转换,并设置寄存器%rax的适当部分。第二条指令是要把%rax的适当部分写到内存。在这两种情况下,寄存器的部分可以是%rax,%eax,%ax或%al。
当执行强制类型转换既涉及大小变化又涉及C语言中符号变化时,操作应先改变大小

要求实现: *dp = (dest_t)*sp;

src_tdest_t指令
longlong
charint
charunsigned
unsigned charlong
intchar
unsignedunsigned char
charshort

这个转换比较繁琐,但是根据csapp书上图3-4、图3-5、图3-6的知识点就能完成相应的转换,下面来一行一行的进行推导

1.long --> long

long是8个字节,8个字节的转换用movq,存储器是64位,所以用%rax。

读取8字节:movq (%rdi), %rax
存储8字节:movq %rax, (%rsi)

2.char --> int

char是1个字节,int是4个字节,并且是有符号数,进行符号扩展,movs是符号扩展,由于要扩展到4字节,所以用movsbl。4个字节的存储器用%eax。

读1个字节并进行符号扩展:movsbl (%rdi), %eax
存储4字节:movl %eax, (%rsi)

3.char --> unsigned

char是1个字节,unsigned是4个字节,已知当执行强制类型转换既涉及大小变化又涉及C语言中符号变化时,操作应先改变大小,所以先将char转换为int,选择符号扩展,存储器选用%eax。

读1个字节并进行符号扩展:movsbl (%rdi), %eax
存储4字节:movl %eax, (%rsi)

4.unsigned char --> long

unsigned char是1个字节,long是8个字节,应先改变大小,将char转换为long,由于char是无符号数,所以进行零扩展,选择movzbq,存储器选择%rax。

读1个字节并进行零扩展:movzbq (%rdi), %rax
存储8字节:movq %rax, (%rsi)

这道题第一条指令的答案是movzbl (%rdi), %eax,之前上网查好像是与cpu有关,但是我没太弄懂,感觉按原理来说应该是我上面的答案

5.int --> char

int是4个字节,char是1个字节,所以先将int的值从内存复制到存储器中,在从存储器中存低位字节即可。

读4个字节:movl (%rdi), %eax
存低位字节:movb %al, (%rsi)

6.unsigned --> unsigned char

这个与第五个是一样的原理,就不复述了。

读4个字节:movl (%rdi), %eax
存低位字节:movb %al, (%rsi)

7.char --> short

char是1个字节,short是2个字节,由于是有符号数,所以进行符号扩展,存储器选择%ax。

读1个字节并进行符号扩展:movsbw (%rdi), %ax
存两个字节:movw %ax, (%rsi)

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
计算机系统结构大学期末复习资料题库含答案 1.看下述程序段:( C ) k: R5=R2 k+1: R0=R1×R4 k+2: R2=R5+1 k+3: R4=R0×R3 k+4: R3=R4-1 K+5: …… k和k+2之间发生的是什么数据相关 I. 先写后读相关 II.写-写相关 III. 先读后写相关 A.只有I B.只有I、II C.只有I、III D.以上都不对 2.开发并行的途径有( D ),资源重复和资源共享。 A、多计算机系统 B、多道分时 C、分布式处理系统 D、时间重叠 3.在计算机系统设计中,比较好的方法是(D )。 A、从上向下设计 B、从下向上设计 C、从两头向中间设计 D、从中间开始向上、向下设计 4.执行微指令的是(C) a.汇编程序 b.编译程序 c.硬件 d.微指令程序 5. 软件和硬件在(B)意义上是等效的。 A. 系统结构 B.功能 C. 性能 D. 价格 6. 实现汇编语言源程序变换成机器语言目标程序是由(D ) A.编译程序解释 B.编译程序翻译 C.汇编程序解释 D.汇编程序翻译 7. 按照计算机系统层次结构,算术运算、逻辑运算和移等指令应属于(A)级机器语言。 A. 传统机器语言机器 B.操作系统机器 C. 汇编语言机器 D.高级语言机器 8.对汇编语言程序员,下列(A)不是透明的。 A. 中断字寄存器 B.乘法器 C. 移器 D.指令缓冲器 9.在采用基准测试程序来测试评价机器的性能时,下列方法按照评价准确性递增的顺序排列是(B )。(1)实际的应用程序方法 (2)核心程序方法 (3)玩具基准测试程序(小测试程序) (4)综合基准测试程序 A.(1)(2)(3)(4) B.(2)(3)(4)(1) C.(3)(4)(1)(2) D.(4)(3)(2)(1) 10. 下列体系结构中,最适合多个任务并行执行的体系结构是( D) A、流水线的向量机结构 B、堆栈处理结构 C、共享存储多处理机结构 D、分布存储多计算机结构 11. 从用户的观点看,评价计算机系统性能的综合参数是( B ): A、指令系统 B、吞吐率 C、主存容量 D、主频率 12. 设指令由取指、分析、执行 3 个子部件完成,每个子部件的工作周期均为△t,采用常规标量单流水线处理机。若连续执行 10 条指令, 则共需时间 ( C )△t。 A.8 B.10 C. 12 D. 14 13. 系统响应时间和作业吞吐量是衡量计算机系统性能的重要指标。对于一个持续处理 业务的系统而言, ( C ) ,表明其性能越好。 A. 响应时间越短,作业吞吐量越小 B. 响应时间越短,作业吞吐量越大 C. 响应时间越长,作业吞吐量越大 D. 响应时间不会影响作业吞吐量 14. 若每一条指令都可以分解为取指、分析和执行三步。已知取指时间t 取指=4△t,分 析时间t 分析=3△t,执行时间t 执行=5△t。如果按串行方式执行完100 条指令需要( C )△t。 A. 1190 B. 1195 C. 1200 D. 1205 15. 如果按照流水线方式执行,执行完100 条指令需要 (B)△t。 A. 504 B. 507 C. 508 D. 510 16. 并行访问存储器最大的问题就是访问冲突大,下面不属于并行访问存储器的缺点的是:( D ) A、取指令冲突 B、读操作数冲突 C、写数据冲突 D、译码冲突 17. 一条4段流水线,每段执行时间为1ns,求该流水线执行100条指令最大效率为(C) A.100% B.96.2% C.97.1% D.388% 18. 假设一条指令的执行过程可以分为“取指令”、“分析”和“执行”三段,每一段的执行时间均为 ,连续执行n条指令所需要花费的最短时间约为(B)(假设仅有“取指令”和“分析”可重叠并假设n足够大): A. B. C. D. 19. MISD是指(C) A.单指令流单数据流 B.单指令流多数据流 C.多指令流单数据流 D.多指令流多数据流 20. 星形网络的网络直径和链路数分别为(A)和(D)。 A.N-1 B.N/2 C.2 D.N(N-1)/2 21. 软件和硬件在(B)意义上是等效的。 A.系统结构 B.功能 C.性能 D.价格
### 回答1: 深入理解计算机系统(CSAPP)是由Randal E. Bryant和David R. O'Hallaron编写的经典计算机科学教材。该教材通过涵盖计算机体系结构、机器级别表示和程序执行的概念,帮助学生深入理解计算机系统的底层工作原理和运行机制。 深入理解计算机系统的练习题对于学生巩固并应用所学知识非常有帮助。这些练习题涵盖了计算机硬件、操作系统和编译器等多个领域,旨在培养学生解决实际问题和设计高性能软件的能力。 对于深入理解计算机系统的练习题,关键是通过实践进行学习。在解答练习题时,应根据课本提供的相关知识和工具,仔细阅读问题描述,并根据实际需求设计相应的解决方案。 在解答练习题时,需要多角度思考问题。首先,应准确理解题目要求,并设计合适的算法或代码来解决问题。其次,应考虑代码的正确性和效率,以及对系统性能的影响。此外,还要注意处理一些特殊情况和异常情况,避免出现潜在的错误或安全漏洞。 解答练习题的过程中,应注重查阅相关资料和参考优秀的解答。这可以帮助我们扩展对问题的理解,并学习他人的思路和解决方法。同时,还可以通过与同学和老师的讨论,共同探讨问题和学习经验。 总之,通过解答深入理解计算机系统的练习题,可以帮助学生巩固所学知识,同时培养解决实际问题和设计高性能软件的能力。这是一个学以致用的过程,可以加深对计算机系统运行机制和底层工作原理的理解。 ### 回答2: 理解计算机系统(CSAPP)是一本经典的计算机科学教材,通过深入研究计算机系统的各个方面,包括硬件、操作系统和编程环境,对于提高计算机科学专业知识与能力具有很大帮助。 练习题是CSAPP中的重要部分,通过练习题的完成,可以加深对计算机系统的理解,并将理论知识转化为实践能力。练习题的数量、难度逐渐递增,从简单的概念与基础问题到复杂的系统设计与实现。 在解答练习题时,首先需要对题目进行仔细阅读和理解,明确题目的要求和限制条件。然后,可以利用课堂讲解、教材内容、网络资源等进行查阅和学习相应的知识。同时,还可以参考课后习题解答等资料,了解一些常见的解题方法和思路。 在解答练习题时,可以利用计算机系统的工具和环境进行实际测试和验证。例如,可以使用调试器、编译器和模拟器等工具对程序或系统进行分析和测试。这样可以更加深入地理解问题的本质,并找到恰当的解决方法。 另外,解答练习题时还可以与同学、教师和网上社区进行交流和讨论。这样可以互相学习和交流解题思路,共同解决问题。还可以了解不同的解题方法和技巧,提高解题效率和质量。 练习题的解答过程可能会遇到一些困难和挑战,例如理论知识的不足、复杂问题的分析与解决。但是通过不断地思考和实践,相信可以逐渐提高解题能力,更好地理解计算机系统。 总之,深入理解计算机系统(CSAPP)练习题是提高计算机科学专业知识和能力的重要途径。通过仔细阅读和理解题目,查阅相关知识,利用计算机系统工具和环境进行实践,与他人进行交流和讨论,相信可以更好地理解计算机系统的各个方面,并将知识转化为实际能力。 ### 回答3: 《深入理解计算机系统(CSAPP)》是计算机科学领域的经典教材之一,对于深入理解计算机系统的原理、设计和实现起到了极大的帮助。在阅读这本书的过程中,书中的习题也是非常重要的一部分,通过做习题,我们可以更好地理解书中所讲的概念和思想。 CSAPP的习题涵盖了课本中各个章节的内容,从基础的数据表示和处理、程序的机器级表示、优化技术、程序的并发与并行等方面进行了深入探讨。通过解答习题,我们可以对这些知识进行实践应用,巩固自己的理解,并培养自己的解决问题的思维方式。 在解答习题时,我们需要充分理解题目要求和条件,并从知识的角度进行分析。有些习题可能需要进行一些编程实践,我们可以通过编程实现来验证和测试我们的思路和解决方案。在解答问题时,我们还可以查阅一些参考资料和网上资源,充分利用互联网的学习资源。 在解答习题时,我们需要保持积极的思维和态度。可能会遇到一些困难和挑战,但是通过坚持和努力,我们可以克服这些困难,提高我们的解决问题的能力。同时,我们还可以通过与同学或者其他人进行讨论,相互分享解题经验和思路,从而更好地理解问题。 综上所述,通过深入理解计算机系统(CSAPP)的习题,我们可以进一步巩固和深化对计算机系统的理解。掌握这些知识,不仅可以提高我们在计算机领域的能力,还可以为我们未来的学习和职业发展奠定重要的基础。因此,认真对待CSAPP的习题,是我们在学习计算机系统知识中不可或缺的一部分。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值