20145331《信息安全系统设计基础》第六周学习总结
20145331《信息安全系统设计基础》第六周学习总结
教材学习内容总结
4.1
4.1.1
1、Y86具体包括:8个程序寄存器(上一章说过)、3个1位条件码ZF\SF\OF、程序计数器(PC,存当前正在执行指令的地址)。
2、 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态(正常还是异常)。
4.1.2
1、指令编码长度从1个字节到6个字节不等,一条指令含有一个单字节的指令指示符,可能含有一个单字节的寄存器指示符,还可能含有一个四字节的常数字。
2、p232的图一定要看懂,表明指令类型的第一个字节分为2个4位的部分,段fn指明是某个整数操作(OPL)、数据移动条件(cmovXX)或是分支条件(jXX),所有数值都用十六进制表示
3、细节部分:a)不允许从存储器地址传存储器地址。b)整数操作命令对象只能为寄存器数据:立即数加寄存器数据必须先把立即数传到寄存器中)
4.1.3
1、8个程序寄存器中每个都有相应的0~7的寄存器标识符,程序寄存器存在一个寄存器文件中,这个寄存器文件就是一个小的、以寄存器ID作为地址的随机访问存储器。当需要指明不应访问任何寄存器时,用ID值0xF表示。
2、所有整数部分采用小端法编码。
4.1.4
1、Y86状态码
2、出现异常时Y86处理器停止运行指令,可以调用一个异常处理程序(配置成不同结果)
4.1.5
1、保证栈不会增长的太大而覆盖程序的数据。
2、模拟器只打印在模拟过程中改变的寄存器或存储器中的字,左边原始值,右边最终值。
4.1.6
1、pushl指令的两种约定:a)压入/弹出%esp的原始值b)压入/弹出%esp-/+4后的值
4.2
这节内容以前学过,4.2.1讲了与或非,4.2.2用这三个逻辑门组成位级电路,4.2.3多个位级电路组合成字级复合电路,4.2.4判断集合关系的通用格式iexpr in {iexpr1,iexpr2,……,iexprk}后面会用到。
4.2.5
1、存储设备都是由同一个时钟控制,两类存储器设备包括:
a)时钟寄存器(寄存器):储存单个位或字,用时钟信号控制寄存器加载输入值。
b)随机访问储存器(储存器):储存多个字,用地址选择该读/写哪个字。
2、硬件和机器级编程中的寄存器有细微差别,分为称为“硬件寄存器”和“程序寄存器”。
3、寄存器文件结构(内含8个程序寄存器):
4、处理器有一个随机访问存储器来存储程序数据。
4.3
4.3.1
1、感觉重点是阶段操作描述和后面的表,用到前面栈帧的知识,表看懂了就可以用HCL描述了。
2、各个阶段以及各阶段内执行操作
取指:从存储器读取指令字节,地址为程序计数器PC的值,ra、rb为寄存器操作指示符,valC:四字节常数、valP=PC+指令长度。
译码:从寄存器读入最多两个操作数,得到valA或valB
执行:算术/逻辑单元要么执行指令指明的操作,计算存储器引用的有效地址,要么增加或减少栈指针。得到的值为valE。
访存:将数据写入存储器,或从存储器中读出数据,读出的值为valM。
写回:最多可以写两个结果到寄存器文件
更新PC:将PC设为下一条指令的地址
3、细节:更新的PC不一定等于valP(call jxx等)
4.3.2
1、ALU通常做加法器使用。
2、CC有3个条件码位。
3、所有硬件单元的处理都在一个时钟周期内完成。
4.3.3
1、SEQ的实现包括组合逻辑和两种存储器设备: 时钟寄存器 程序计数器和条件码寄存器 随机访问存储器 寄存器文件、指令存储器和数据存储器
2、组织计算原则:处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态。
4.3.4
1、取指:3个1位的信号(根据icode值计算):instr_valid:发现不合法的指令;need_regids:包含寄存器指示符字节吗;need_valC:包括常数字吗
2、译码+写回:
读端口地址输入:srcA/B
写端口地址输入:dstE/M
3、执行:
输入aluA\aluB,B在前A在后。
ALU通常做加法器,对OPL指令执行ifun的功能。
执行OPL指令才设置条件码。
4、访存:
读写的地址总是valE\valA。
读数据的指令设置信号mem_read。
根据icode,imem_error,instr_valid,dmem_error,从指令执行的结果计算状态码Stat。
5、更新PC:新PC可能是valC/M/P。
本周实践内容
课本第239页图4-7上的代码,在系统中叫做asum.yo,把它的内容打印在屏幕上:
运行make:
用make all命令编译后:
编译后查看目录下内容,可以看到已经有编译后的.yo文件:
课本第239页图4-7上的代码,打印:
教材学习中的问题和解决过程
1、p246看不懂多路复用器的hcl描述。
反复看书后发现自己对结尾的1理解的不对,这个1类似于否则,s为1输出A,否则为B,1不是说s为1。
2、P234指令进行字节编码,没注意看整数小端口编码这句话,导致结果错误。
rm=40 %esp=4 %edx=2 Ox12345=45230100,组合进来就是答案:404245230100.
3、p238Y86代码为什么不能直接用addl $4,%ecx代替11、12行代码内容?
好好看了p233的内容,对于整数操作命令,它们只能对寄存器数据进行操作,立即数必须先放到一个寄存器里。
4、p256 call dest代码中valP=PC+5,为什么PC最后更新的是valE?
更新PC是下一条指令的地址,不一定是valP,此处有调用。
本周代码托管
https://git.oschina.net/20145331/wsc20145331_linux.git
其他(感悟、思考等,可选)
这周内容跟上周学的知识联系很紧密,4.1就是那个指令的图很关键,4.3的内容感觉就是上周内容+4.1+4.2,感觉前面知识的基础很重要啊。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第6周 | 62/372 | 2/7 | 20/120 | 对ISA理解更加深入 |