2017-2018-1 20155203 《信息安全系统设计基础》第七周学习总结

2017-2018-1 20155203 《信息安全系统设计基础》第7周学习总结

教材学习内容总结

Y86模拟器的安装和使用

  • 安装基本参照实验楼中实验五内容
  • 参照YIS手册使用

运行asum.yo:

参数用途:

安装图形界面参照Y86模拟器安装

Y86指令集体系结构

包括定义各种状态元素、指令集和它们的编码、一组编程规范和异常事件处理。Y86指令和IA32代码的主要区别在于,它可能需要多条指令来执行一条IA32指令能完成的所有功能。

  • Y86指令集:

  • Y86异常:
    对Y86来说,程序员可见的状态中就有stat状态码,它标志了程序执行的状态.Y86需要有能力根据stat去做一些处理.捕获为了简单起见,这里除了正常执行之外,都将停止指令的执行.真实当中,会有专门的异常处理程序.

Y86有四种不同的状态码:AOK(正常),HTL(执行halt指令),ADR(非法地址)和INS(非法指令).

逻辑设计和硬件控制语言HCL

  • 逻辑门是数字电路的基本计算元素,它们产生的输出,等于它们输入位值的某个布尔函数。

  • 高级逻辑设计——组合电路:将很多逻辑门组合成一个网所构建的计算块称为组合电路。构建这个网有两个限制:
    ①、两个或多个逻辑门的输出不能连在一起。否则它们可能会导致线上的信号矛盾,可能会导致一个不合法的电压或电路故障。 ②、这个网必须是无环的,也就是在网中不能有路径经过一系列的门而形成一个回路,这样的回路会导致该网络计算的函数有歧义。

  • HCL表达式 和 C 语言逻辑表达式的区别

区别有以下三点:

①、逻辑门是持续输出的,如果电路的输入变化了,在一定的延迟之后,输出也会相应的变化,而C表达式是在执行到的时候才会求值。

②、两者操作的值不同,逻辑门只对值 0 和值 1 进行操作,而C 逻辑表达式允许参数是任意整数,0表示false,其它任意值都表示true。

③、C 逻辑表达式存在短路,比如对于a && b这个符号来说,C语言中的规定是如果前者为假,则后者不会再计算。而HCL当中没有这种说法。

Y86的顺序实现

取指:取指阶段从存储器读取指令字节,地址为程序计数器(PC)的值。
译码:译码阶段从寄存器文件读入最多两个操作数,得到val A/val B.
执行:执行阶段,算术/逻辑单元要么执行指令明确的操作(根据ifun的值),计算存储器引用的有效地址,要么增加或减少栈指针。得到的值称为valE
访存:访存阶段可将数据写入存储器或从存储器读出数据
写回:最多可写两个结果到存储器。
更新PC:将PC设置成下一指令的地址。

  • 程序计数器放在寄存器中,位于左下角PC。
  • 信息随着线流动,方向是先向上再向右
  • 反馈先祖在右边向下
  • 所有硬件单元的处理都在一个时钟周期内完成。
  • 浅灰色方块表示硬件单元
  • 控制逻辑块是用灰色圆角矩形表示的
  • 线路的名字在白色椭圆中说明
  • 宽度为字长或更窄的数据连接用细线
  • 单个位的连接用虚线。

代码调试中的问题和解决过程

  • 问题1:在安装Y86模拟器时会出现tcl.h tk.h文件路径找不到的问题。

  • 可以参考实验楼的步骤,也可以自己找这两个文件的路径,一般是在/usr/include下,具体方法是将makefile中的一部分内容进行修改:

GUIMODE=-DHAS_GUI                   (本来是#GUIMODE=-DHAS_GUI 的,也就是把凝视去掉)

TKLIBS=-L/usr/lib/ -ltk8.5 -ltcl8.5

TKINC=-I/usr/include/tcl8.5     
  • 问题2:在调试.yo文件编译问题时出现了同学们之前漏洞攻击时出现的Ubuntu图形界面消失只剩下命令行

  • 问题2解决方案:参考ubuntu无法进入图形界面的一种解决方案

  • 问题3:安装图形界面出现问题

To run in GUI mode, you must recompile with the HAS_GUI constant defined.

  • 未解决,指导手册的英文实在只能看个半懂,在网上找到的又有很多偏颇,后续继续解决。

代码托管

上周考试错题总结

我们用一个十六进制的数表示长度w=4的位模式,把数字解释为补码,关于其加法逆元的论述正确的是()
A .
0x8的加法逆元是-8
B .
0x8的加法逆元是0x8
C .
0x8的加法逆元是8
D .
0xD的加法逆元是3
E .
0xD的加法逆元是0x3

正确答案: A B D E

大多数计算机使用同样的机器指令来执行无符号和有符号加法。
A .
正确
B .
错误
C .
不确定

正确答案: A

我们用一个十六进制的数表示长度w=4的位模式,对于数字的无符号加法逆元的位的表示正确的是()
A .
0x8的无符号加法逆元是0x8
B .
0xD的无符号加法逆元是0xD
C .
0xF的无符号加法逆元是0x1
D .
0xF的无符号加法逆元是1

正确答案: A C D

short int v=-12345;
unsigned short uv=(unsigned short) v;
那么
A .
v=-12345, uv=53191
B .
v=uv=0xcfc7
C .
v,uv的底层的位模式不一样
D .
v,uv的值在内存中是不一样的

正确答案: A B

下面和代码可移植性相关的C语言属性有()
A .
 #define
B .
typedef
C .
sizeof()
D .
union

正确答案: A B C

根据c89国际标准编译程序prog.c,下面正确的是()
A .
gcc prog.c
B .
gcc -ansi prog.c
C .
gcc -std=c89 prog.c
D .
gcc -std=gnull prog.c

正确答案: B C

总结:主要是对于不同进制数在不同系统下的具体内涵不了解。

本周结对学习情况

- [20155204](http://www.cnblogs.com/20155204wh/)
- 结对学习内容
    互相学习吧,大家在编程的时候各有长短

其他(感悟、思考等,可选)

这周的学习和之前又有很大的差别,因此对于我们来说确实是很大的挑战。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 1/1 6/6
第三周 156/388 2/3 15/21 这周除课堂实践外,大多数都是知识性的学习内容,代码量确实太少从下周起就要抓紧了
第四周 156/388 3/6 15/36 每天100行好难啊,不过感觉找到了学习的一些动力。在调试代码上花的时间太多,都要没时间看书了,还要继续改进
第五周 284/ 745 1/7 15/51
第七周 1812/ 2557 2/9 10/61
  • 计划学习时间:10小时

  • 实际学习时间:10小时

  • 改进情况:比之前时间要短了看书的效率也高,谢谢老师给指出的重点!

参考资料

原文地址:https://www.cnblogs.com/xhwh/p/7788714.html