20145324 《信息安全系统设计基础》第六周学习总结
教材学习内容总结
一个处理器支持的指令和指令的字节级编码成为它的指令集体系结构(ISA)
Y86指令集系结构
Y86程序中的每条指令都会读取或修改处理器状态的某些部分称为####程序员可见状态
Y86:
8个程序寄存器:%eax %ecx %ebx %esi %edi %esp %ebp
3个条件码:ZF SF OF
用虚拟地址来引用存储器位置
程序状态的最后一个部分是状态码Stat
Y86指令集(十六进制表示)
call指令将返回地址入栈,然后跳到目的地址
ret指令从这样的过程中调用返回
halt指令停止指令的执行
功能码
寄存器标识符
用0xF指明不应访问任何寄存器
所有整数采用小端法
字节编码必须有唯一的解释
Y86异常
| 代码值 | 命名 | 含义 |
| 1 | AOK | 正常操作 |
| 2 | HLT | 处理器执行halt指令 |
| 3 | ADR | 遇到非法地址 |
| 4 | INS | 遇到非法指令 |
Y86程序
Y86指令可能需要多条指令来执行一条IA32指令能完成的所有功能
以“.”开头的词是汇编器命令
命令.pos0告诉汇编器应该从地址0处开始产生代码
汇编文件中有指令或数据的行上,目标代码包含一个地址,后面跟着1~6个字节的值
pushl指令会把栈指针减4,并且将一个寄存器值写入存储器中,通常有两种约定:1、压入%esp的原始值 2、压入减去4的%esp的值
逻辑门(只对单个位的数进行操作)
组合电路(许多逻辑门组合的一个网)
构建其的两条限制:1、两个或多个逻辑门的输出不能连接在一起 2、这个网必须是无环的
多路复用器(根据输入控制信号的值,从一组不同的数据信号中选出一个)
•HCL表达式和C语言中逻辑表达式的区别:
①组合逻辑电路的输出会持续地响应输入的变化,C表达式只有在程序执行过程中被遇到时才会求值
②C的逻辑表达式允许参数是任意整数,0表示FLASE,其他任何值都表示TRUE,逻辑门只对位值0和1进行操作
③C的逻辑表达式可能只被部分求值,组合逻辑没有部分求值的规则,逻辑门只是简单地响应输入的变化
存储器和时钟
时钟寄存器(寄存器):存储单个位或字,时钟信号控制寄存器加载输入值
随机访问存储器(存储器):存储多个字,用地址来选择该读或该写哪个字
x表示稳定状态
Y86的顺序实现
将处理组织成阶段
取指:取指阶段从存储器读取指令字节,地址为PC的值,valP=PC的值加上已取出指令的长度
译码:译码阶段从寄存器文件读入最多两个操作数,得到值valA、valB,它读入指令rA和rB字段指明的寄存器
执行:ALU执行指令指明的操作,计算存储器引用的有效地址,要么增加或者减少栈指针,得到的值为valE,对跳转指令来说,这个阶段会检验条件码和分支条件
访存:可以将数据写入存储器,或者从存储器读出数据,值为valM
写回:最多可以写两个结果到寄存器文件
更新:将PC设置成下一条指令的地址
处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态
代码调试中的问题和解决过程
•实验楼实验
构建YIS环境
YIS测试
测试代码
问题
先开始输入cd ~/Code/shiyanlou_cs413,如图显示不存在该文件夹
于是点开文件夹查看的确没有,于是自己建了一个,在进入就可以了
课后作业中的问题
p267 练习题4.24 写出SEQ中信号mem_write的HCL代码看不懂,包括课文中给出的men_read也不知道该怎么把指令算进去
本周代码托管截图
•注:本周实验楼练习在实验楼上进行,但是无法在实验楼上直接托管,把代码下载下来后在windows下托管的
其他(感悟、思考等,可选)
这周学习内容中的4.2节跟大二时学习过的HDL相似,很有意思。4.3节中的Y86指令顺序实验中的计算,这个需要细心一点分析。
学习进度条
博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|
目标 | 30篇 | 400小时 | |
第零周 | 1/1 | 20/20 | |
第一周 | 1/2 | 20/40 | |
第二周 | 1/3 | 20/60 | |
第三周 | 1/4 | 20/80 | |
第四周 | 1/5 | 20/100 | |
第五周 | 1/6 | 20/120 | |
第六周 | 1/7 | 20/140 |