《计算机系统:系统架构与操作系统的高度集成》——2.13 练习题

简介:

本节书摘来自华章计算机《计算机系统:系统架构与操作系统的高度集成》一书中的第2章,第2.13节,作者:(美)拉姆阿堪德兰(Ramachandran, U.)(美)莱希(Leahy, W. D.)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.13 练习题

  1. 有人认为,处理器拥有大的寄存器文件对性能是有害的,因为在高级语言的过程调用/返回中会有更大的开销。你同意这种看法吗?给出你的理由。
  2. 请写出栈指针和帧指针之间的区别。
  3. 在LC-2200指令集中,加法指令的操作数在什么地方?
  4. 这个问题和字节序有关。你现在要写一个比较字符串的程序。你可以选择使用32位字节寻址的大端或小端体系结构来实现。在这种情况下,你会将4个字符打包到一个字中。你的选择是什么,程序又该如何写呢?(提示:通常情况下字符串是一个个字符进行比较,如果能够一个个字地进行比较,那速度就会快很多。)
  5. ISA可能会支持多种形式的条件分支指令,比如BZ(为零时分支)、BN(为负时分支)、BEQ(相等时分支)。请指出哪一种形式最适合于if语句中的哪种谓词表达式,给出几个if语句中谓词表达式的例子,并说明在这些不同风格的条件分支指令下,如何编译这些条件语句。
  6. 我们说过,字节序不影响程序的性能和正确性,前提是(高级)数据结构的使用方式和声明中的一致。有没有这样的情况,即使你遵守了上面的规则,仍然会遭受字节序的影响呢?(提示:考虑跨网络边界的程序。)
  7. 使用汇编具体实现C语言的switch语句,用跳转表和任意形式的条件分支指令。(提示:先确认变量值在switch变量的合法范围内,然后跳转到当前值对应代码段的起始地址,执行,跳到退出)。
  8. 过程A在S寄存器组和T寄存器组中都保存有重要数据,当A调用过程B时,A需要将哪些寄存器保存到栈中?哪些寄存器由B来保存?
  9. 考虑过程调用执行时栈的使用。是否所有在栈上的操作都仅发生在栈顶(通过push和pop)?给出一些在程序执行中访问栈内部的情况,并解释这是如何发生的。
  10. 判断下面这句话是否正确:若没有帧指针,则过程调用/返回无法实现。
  11. DEC VAX有一个单条指令可以将所有程序可见的寄存器从内存中加载或保存到内存中。你能说出一个使用这一对指令的原因吗?有什么好处和坏处?
  12. 如何使用已有的LC-2200 ISA来模拟一条减法指令。
  13. BEQ指令限制了你从PC的当前位置转移到目标的距离。如果你的程序需要跳转的距离超出了BEQ指令中偏移量的范围,你该如何使用已有的LC-2200 ISA来实现这样的长跳转呢?
  14. ISA是什么,它为什么很重要?
  15. 指令集设计都受到哪些因素影响?
  16. 条件语句是什么?ISA如何处理它们?
  17. 给寻址模式下个定义。
  18. 在2.8节中,我们提到过程的局部变量是在栈上分配的。这种描述有利于简化我们的阐述,但现代的编译器并不是这样做的。上网找找看现代编译器是如何为过程的局部变量分配空间的。(提示:强调一下寄存器比内存要快。所以目标应该是将尽可能多的变量放在寄存器中。)
  19. 我们提到栈时使用了术语“抽象”。这个术语是什么意思?“抽象”暗含着它是如何实现的吗?例如,过程调用/返回时使用的栈是硬件实现还是软件实现?
  20. 给出如下指令:
    image

你该如何实现下面指令的功能:
image

假设寄存器和立即数字段都是8位宽,忽略因减法而可能造成的溢出。

  1. 给出下面的加载指令
    image

如何实现一种新的寻址模式,称为间接寻址模式,用汇编语言表示如下:
image

这条指令的语义是寄存器Ry的值是一个指针的内存地址,而这个指针指向的内存操作数需要装入Rx中。

  1. 将语句
    image

转化为LC-2200汇编器,假设A的地址在$t0中,g在$s1中,h在$s2中,i在$t1中。

  1. 假设你设计了一台计算机,名为“大循环2000”,它从不进行过程调用,在运行到末尾时会自动跳回到内存的起始位置。这时还需要程序计数器么?给出你的理由。
  2. 某个处理器满足下面的假设:
    所有的参数通过栈进行传递。

寄存器V0用于返回值。
寄存器组S预期是被保存的,即,调用者不需做任何事情,在过程调用后S的值应该与调用前一样。
寄存器组T预期是临时使用的,即,在调用了子过程之后,T中的值可能就变了。
考虑下面的程序
image
image

下面是在bar执行时的栈,请标明栈中的每一项是在哪个过程保存的。
image

相关文章
|
3月前
|
存储 缓存 Shell
【深入理解操作系统】第一章:计算机系统漫游 | A tour of Computer Systems | 阅读笔记
【深入理解操作系统】第一章:计算机系统漫游 | A tour of Computer Systems | 阅读笔记
54 0
|
4月前
|
安全 Unix Linux
《计算机系统与网络安全》 第八章 操作系统安全基础
《计算机系统与网络安全》 第八章 操作系统安全基础
55 0
|
4月前
|
存储 安全 Unix
[笔记]深入解析Windows操作系统《二》系统架构(五)
[笔记]深入解析Windows操作系统《二》系统架构(五)
|
4月前
|
存储 安全 API
[笔记]深入解析Windows操作系统《二》系统架构(四)
[笔记]深入解析Windows操作系统《二》系统架构(四)
|
4月前
|
存储 缓存 安全
[笔记]深入解析Windows操作系统《二》系统架构(三)
[笔记]深入解析Windows操作系统《二》系统架构(三)
|
4月前
|
缓存 安全 Unix
[笔记]深入解析Windows操作系统《二》系统架构(二)
[笔记]深入解析Windows操作系统《二》系统架构(二)
|
4月前
|
缓存 Unix 调度
[笔记]深入解析Windows操作系统《二》系统架构(一)
[笔记]深入解析Windows操作系统《二》系统架构
105 0
YI
|
7月前
|
存储 程序员
操作系统笔记-01计算机系统概述
操作系统笔记-01计算机系统概述
YI
118 0
|
9月前
|
容器
【系统架构】组件与(模块化和应用集成)的区别
【系统架构】组件与(模块化和应用集成)的区别
111 0
|
存储 Unix 程序员
【操作系统篇】第二篇——计算机系统概述(下)
【操作系统篇】第二篇——计算机系统概述(下)
【操作系统篇】第二篇——计算机系统概述(下)

热门文章

最新文章