20145240 《信息安全系统设计基础》第六周同学问题总结

20145240 《信息安全系统设计基础》第六周同学问题总结

学习目标

  • 了解ISA抽象的作用

  • 掌握ISA,并能举一反三学习其他体系结构

  • 了解流水线和实现方式

学习资源

  • 教材:第四章《处理器体系结构》,详细学习指导见教材导读与每周考试重点。:重点是4.1节,4.2节,4.3节。

  • 实验楼课程资料:实验五,课程邀请码:W7FQKW4Y

  • 学习任务

1、阅读教材,完成课后练习(书中有参考答案),考核:练习题把数据变换一下

2、教材中相关代码运行、思考一下,读代码的学习方法见「代码驱动的程序设计学习」。

3、教材4.1-4.3中练习,重点:4.1 4.2 4.5 4.6 4.8 4.10 4.11 4.12 4.16 4.17 4.19 4.21 4.24

同学们遇到的问题及解决方法

问题: 对于Y86指令集中的nop,具体作用到底是什么,只需对PC加1是什么含义,为什么说“标号为'icode'和‘ifun’的控制逻辑块计算指令和功能码,等于从存储器读出的值,或者当指令地址不合法时(由信号imem error指明),这些值对应于nop指令”?

解决方案: nop作用:这是一个占位指令,他不做任何事,后续为了实现流水线,它有一定的作用。

问题: 打开虚拟机时提示挂载失败,但安装YIS的安装包在Windows系统上,需使用共享文件夹中的安装包。

解决方案: 解决过程:重新手动挂载,再执行安装过程。

问题1:练习题4.17,写出SEQ实现中信号need_valC的HCL代码

解决方案:bool need_valC = icode in { IIRMOVL, IRMMOVL, IMRMOVL, IJXX, ICALL };

问题2:课本P263的need_regids的HCL描述,无法理解这些HCL描述怎样得来的

解决方案:need_regids说的是这个指令是否包括一个寄存器指示符字节,所以结合课本P232的图4-2,need_regids的HCL代码应该包括所有含寄存器rA和rB的{IRRMOVL,IOPL,IPUSHL,IPOPL,IIRMOVL,IRMMOVL,IMRMOVL}need_valC的HCL代码同理。

问题:输入make asuml.yo指令出现错误,make:'asuml.yo' is up to date

解决方案:Makefile没有问题,主要原因是第一次已经make过一遍了,第二次如果没有修改过直接编译就会出现错误,可以先make clean一下,再make一个工程就没有问题了。

问题:为什么popl指令执行过程中在译码阶段要读两次栈指针

解决方案:为了保证和pushl指令执行过程的一致性,先完成存储器的操作再更新栈指针,执行是在访存和写回阶段之前,所以执行阶段先给栈指针加4,但是要用没加过4的原始值作为存储器操作地址。写回时也要用加4的栈指针更新地址,也要用没加4的值作为存储器读地址,所以译码时要访问两次栈指针。

问题1:练习题4.1中的两个问题,练习题中阐述了。.ops 0x100 表明代码的起始地址是0x100,那为什么第一个指令 irmovl $15 , %ebx 不是从0xF+0x100呢?

解决方案:一个是%ebx的值,另一个则是地址的值,二者不一样,二者也是不会相互影响的。所以答案直接就是0xF ,最终答案应该是30F30F000000

问题2:之后针对于练习4.1每一行代码的地址遇到了问题。为什么执行完代码irmovl $15 , %ebx后地址变为0x106?

解决方案:通过分析书上的P234页的例子就可以知道,需要4字节常数,每两个数算作一字节。加上imovl命令的编码30F30F000000所以一共为6位,地址变化为0x106,之后的也一样,指令编码和4字节常数,不同的Y86指令又有不同的要求,理解图4-2、4-3的表就可以理解了。

问题:在官方网站下可以看到chapter4,可以看到source distribution项目,下载所需要的源文件。用tar xf sim.tar命令进行解压出现无法打开的错误。

解决方案:1、用cd ~和ls查看,发现Home目录当中并没有下载的sim.tar文件 2、打开firefox下载文件所在的文件夹,找到sim.tar并把它拖入到主文件夹Home中3、再次用cd ~和ls便可以看见目录中已经有了下载的sim.tar,这时候就可以用tar xf sim.tar命令对其进行解压了。

问题:4.12题目:valM=M4[valA],不清楚这一步具体如何实现

解决方案:由上一步知:valA=124,则M4[124]查看指令序列%esp=124找到这行指令:pushl %edx,知%edx=9

问题:4.6题目:指令subl有什么用处?

解决方案:在这个测试里,subl指令将%esp的起始值与压入栈中的值进行了比较。这个减法的结果为0,表明压入的是%esp的旧值。

问题:虚拟机莫名其妙,不但什么都下不了,而且下载之后make命令显示‘asuml.yo’ is up to date.

解决方案:先make clean一下,再make一个工程就没有问题了

问题:安装Y86模拟器时,无法编译.yo文件

解决方案:使用修理ubuntupackage broken命令,sudo apt-get --fix-broken install

问题:p238Y86代码为什么不能直接用addl $4,%ecx代替11、12行代码内容?

解决方案:对于整数操作命令,它们只能对寄存器数据进行操作,立即数必须先放到一个寄存器里。

问题:实验楼实验中在“构建YIS环境”时,输入了sudo ln -s /usr/lib/x86_64-linux-gnu/libtk8.6.so /usr/lib/libtk.so命令。第一次输入时无提示,第二次输入时提示ln:无法创建符号链接"/usr/lib/libtk.so":文件已存在,为什么要输入两遍?只输一遍可以吗?

解决方案:sudo ln -s 源文件 目标文件命令功能为:为某一个文件或目录在另外一个位置建立一个同步的链接,类似Windows下的超级链接。建立符号链接时,如果[链接名]已经存在但不是目录,将不做链接。[链接名]可以是任何一个文件名(可包含路径),也可以是一个目录,并且允许它与“目标”不在同一个文件系统中。如果[链接名]是一个已经存在的目录,系统将在该目录下建立一个或多个与“目标”同名的文件,此新建的文件实际上是指向原“目标”的符号链接文件。

问题:输入make指令后,直接离开目录

解决方案:应进入Y86-code目录

问题:在安装sudo apt-get install bison flex时出现了问题E:无法获得锁 /var/lib/dpkg/lock - open(11:资源暂时不可用)``E:无法锁定管理目录(/var/lib/dpkg/),是否有其它进程正在占用它

解决方案1:终端输入ps -aux,列出进程,找到含有apt-get的进程,直接sudo kill PID解决

#:ps -aux (列出进程,形式如)
root 5765 0.0 1.0 18204 15504 ? SN 04:02 0:00 apt-get -qq -d
找到最后一列以apt-get 开头的进程
#:sudo kill -9 该进程的PID

解决方案2:强制解锁

#:sudo rm /var/cache/apt/archives/lock
#:sudo rm /var/lib/dpkg/lock

问题:找不到指令yas。

解决方案:bixon flex词法分析工具没有安装

问题:磁盘不共享的问题,Please resume and shutdown Windows fully (no hibernation or fast restarting)

解决方案:windows下为了快速启动,内核采用了“休眠”的模式,启动时就是混合启动,所以速度很快,一般8秒左右;于是只要在win10下,命令行彻底关机就行了:shutdown -s -t 1

陈颢文同学的博客里为大家提供了如何在Ubuntu中创建与Windows的共享文件夹的详细教程~

问题:关于Linux下Y86的卸载

解决方案:

输入如下命令:

sudo apt-get autoremove --purge

sudo ———— 获取 root 权限

apt-get ——— 执行安装卸载功能的软件

autoremove — 告诉 apt-get 我们所要做的操作是移除软件

--purge ——— 注意这前面是两个短划线,这个参数是告诉他们要完整的干净的彻底的移除

最后在这条指令后加上你所要卸载的全称即可

总结

本周内容相对轻松,同学们的问题集中在y86模拟器的安装以及汇编指令的运用上。关于模拟器的安装,大多数同学通过参考同学的博客以及百度都顺利解决,由于刚开始用虚拟机,还是有很大一部分同学没有在虚拟机上进行Y86模拟器的安装,而是直接在实验楼上进行了实践,还是可以尝试在虚拟机中重新进行安装测试。关于课本上的代码,只要熟知命令的作用与区别,便能很好的掌握例题的做法。周一考试的题目也相对简单,只要认真学习例题的同学,本周的考试应该是很轻松的。
posted @ 2016-12-09 18:21  20145240刘士嘉  阅读(162)  评论(0编辑  收藏  举报