2018-2019-1 20165226 《信息安全系统设计基础》第4周学习总结
目录
教材学习内容总结
1、Y86-64指令集体系结构
可见状态
- 三个条件码:ZF——零标志, SF——符号,OF——有符号溢出
- Y86用虚拟地址引用存储器位置。 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态
Y86-64指令
- movl:irmovl、rrmovl、mrmovl、rmmovl,分别显式地指明源和目的地的格式。第一个字母表明源的类型,i(立即数)、r(寄存器)或m(存储器 ),第二个字母代表目的,可以是r或者m。
- OPl(整数操作指令):addl、subl、andl和xorl。只对寄存器数据进行操作,同时还设置条件码。
- jXX(跳转指令):jmp、jle、jl、je、jne、jge、jg,根据分支指令的类型和条件码的设置来选择分支。
- cmovXX(条件传送指令):cmovle、cmovl、cmove、cmovne、cmovge和comvg,与寄存器-寄存器传送指令rrmovl一样,但只有当条件码满足所需要的约束时才会更新目的寄存器的值。
- call和ret:call指令将返回地址入栈,然后跳转到目的地址。ret指令从这样的过程调用中返回。
- pushl和popl:入栈和出栈。
- halt:停止指令的执行。
注意:不允许从一个存储器地址直接传送到另一个存储器地址,也不允许将立即数传送到存储器。
指令编码
- 指令的字节级编码规则:高4位为代码部分,低四位为功能部分,功能值只有在一组相关指令共用一个代码时才有用。
数字 寄存器名字 数字 寄存器名字 0 %eax 8 %r8 1 %ecx 9 %r9 2 %edx A %r10 3 %ebx B %r11 4 %esp C %r12 5 %ebp D %r13 6 %esi E %r14 7 %edi F 无寄存器
字节序列转换成Y86-64指令方法
- 通过代码部分确定指令长度,从而以指令为单位划分字节序列
- 通过功能部分确定具体指令
- 通过寄存器指示符字节确定指令中涉及的寄存器
- 通过转换数值部分以小端法编码的数字来确定立即数、偏移量、绝对地址等值
Y86异常
- 状态码:描述程序执行的总体状态。
值 名字 含义 1 AOK 正常操作 2 HLT 处理器执行halt指令(指令停止) 3 ADR 遇到非法地址 4 INS 遇到非法指令
- Y86中,任何AOK以外的代码都会使处理器停止执行指令,而没有异常处理程序。
2、逻辑设计与硬件控制
HCL:硬件控制语言
HDL:硬件描述语言逻辑门类型
- 组合电路和HCL布尔表达式
- 组合电路:将很多的逻辑门组合成一个网,能构建计算块。
- 多路复用:根据输入控制信号的值,从一组不同的数据信号中选出一个。
[ select1 : expr_1 select2 : expr_2 ...... selectk : expr_k ]
构建这些网有2条限制:
(1)两个或多个逻辑门的输出不能连接在一起
(2)这个网必须是无环的。
HCL表达式和C语言中逻辑表达式的区别:
(1)组合逻辑电路的输出会持续地响应输入的变化;C表达式只有在程序执行过程中被遇到时才会求值。
(2)C的逻辑表达式允许参数是任意整数,0表示FLASE,其他任何值都表示TRUE;逻辑门只对位值0和1进行操作。 (3)C的逻辑表达式可能只被部分求值;组合逻辑没有部分求值的规则,逻辑门只是简单地响应输入的变化。
- 字级的组合电路和HCL整数表达式
- 执行字级计算的组合电力根据输入字的各个为,用逻辑门来计算输出字的各个位。
- 用中等粗度的线来表示携带字的每个位的线路,用虚线来表示布尔信号结果。
- 在HCL中,多路复用函数用情况表达式来描述。
- 算术/逻辑单元是一种很重要的组合电路。
- 集合关系
- 判断集合关系的通用格式是:iexpr in {iexpr1,iexpr2,……,iexprk}
- 存储器和时钟
- 时钟寄存器(简称寄存器):存储单个位或字,时钟信号控制寄存器加载输入值
- 随机访问存储器(简称内存):存储多个字,用地址来选择该杜或该写哪个字
3、Y86-64的顺序实现
将处理组织成阶段
取指——译码——执行——访存——写回——更新PC
(处理器无限循环,执行这些阶段)
SEQ硬件结构、SEQ的时序
SEQ的实现包括组合逻辑和两种存储器设备:时钟寄存器(程序计数器和条件码寄存器)和随机访问寄存器(寄存器文件、指令存储器和数据存储器)。
!!遵循以下原则组织计算:
处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态。SEQ阶段的实现
- 常数一般用大写表示。
取指阶段
取指阶段包括指令存储器硬件单元。
译码和写回阶段(均需访问寄存器文件)
执行阶段
执行阶段包括算术/逻辑单元(ALU)。
访存阶段
访存阶段的任务就是读或者写程序数据。
访存阶段最后的功能是根据取值阶段产生的icode、imem_error、instr_valid值以及数据存储器产生的dmem_error信号,从指令执行的结果来计算状态码Stat。
更新PC阶段
会产生程序计数器的新值。
教材学习中的问题和解决过程
问题1:
在学习指令
"rmmovq %rcx,-3(%rbx)"
对应的编码时对于-3
扩展不是很清楚。问题1解决方案:
经过查找资料,
-3
十六进制表示为83
,扩展为八字节,则需在左边添14位,但是考虑到是负数,因此将8
移到最前面,又因为负数补码是除最高位不变,其余取反加一,然后再将其写为小端方式问题2:
在安装时Y86-64时,报错:
无法定位软件包 fiex
问题2解决方案:
①在软件中添加源:
②依次输入:sudo vim /etc/apt/source.list
,然后在文件里输入deb http://cz.archive.ubuntu.com/ubuntu lucid main
,保存退出sudo spt-get update
,sudo apt-get upgrade
,sudo apt-get install **
问题3:
无法成功
make
问题3解决方案:
逐步比对,看是否有文件未汇编,发现
asuml.ys
未汇编,查看其文件进行汇编后,成功完成make
指令问题4:
在查看
asuml.yo
时出现问题,发现没有.yo
文件,然后将其make
报错问题4解决方案:
查看
asuml.ys
的文件路径,于是在/sim/y86-code
中进行指令操作make asuml.yo
代码学习中的问题和解决过程
问题1:下载sim时报错
问题1解决方案:
使用另一个地址信息,输入
wget http://labfile.oss.aliyuncs.com/courses/413/sim.tar
,然后就能解决了问题2:install bison fiex包出错
将语句换成
sudo apt-get install bison flex tk
问题3:make clean时出错
问题3解决方案:
返回上一层再输入
make clean
就OK- 问题4:安装Tcl时指令错误
问题4解决方案:
指令输入错误,将
1
换成l
代码托管与统计
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 87/87 | 2/2 | 20/20 | |
第二周 | 71/158 | 1/3 | 12/32 | |
第三周 | 100/258 | 2/5 | 13/45 | |
第四周 | 3265/9750 | 2/7 | 15/60 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式 :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。参考:,
计划学习时间:8小时
实际学习时间:15小时
改进情况:
(有空多看看)