信息安全程序设计基础第五周学习总结

第四章 处理器体系结构

4.1 Y86指令集体系结构

一、程序员可见的状态

程序员可见状态:程序中的每条指令都会读取或修改处理器状态的某些部分

--8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp,%ebp.他们都可以存储一个字;

%esp被入栈、出栈、调用和返回指令作为栈指针;

其他情况时寄存器没有固定的含义或固定值

--3个一位条件码:ZF、OF、SF.保存最近的算术或逻辑指令所造成影响的有关信息

--PC(程序计数器):存放当前正在执行指令的地址。

--存储器:一个很大的字节数组,保存着程序和数据;

Y86用虚拟地址来引用存储器位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址,指明数据实际保存在存储器中哪个地方

--Stat:状态码,程序状态的最后一个部分,表明程序执行的总体状态,指示是正常运行还是出现了某种异常

二、Y86指令

--halt:这个指令将会终止指令的执行。

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

--xxmovl:这是一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数。比如rrmovl指令,则代表将一个寄存器的值,赋给另外一个寄存器。

--opl:操作指令,比如加法,减法等等。

--jxx:条件跳转指令,根据后面的条件进行跳转。

--cmovxx:条件传送指令,后面的xx代表的是条件。特别的是,条件传送只发生在两个寄存器之间,不会将数据传送到存储器。

--call与ret:方法的调用和返回指令。一个将返回地址入栈,并跳到目标地址。一个将返回地址入PC,并跳到返回地址。

--push与pop:入栈和出栈操作。

三、指令编码

--对于opl、jxx、cmovxx指令来说,都有一个fn标识,占用4个二进制位(半个字节)。这个便是指令的功能部分,这个是由于它们的指令编码一样,但功能有所不同所造成的。比如对于opl,就有加、减、与、异或等操作,那么它们的指令编码第一个字节就分别为十六进制的60、61、62、63。

--Y86指令集图中可看见指令的字节级编码。每条指令需要1-6个字节不等。每条指令的第一个字节表明指令的类型。这个字节分为两个部分,每部分4位:高4位是代码部分,低4位是功能部分。功能值只有在一组相关指令共用一个代码时才有用。

--有的指令只有一个字节长,因为可能附加有寄存器指示符字节,指定一个或两个寄存器。这些寄存器字段为rA,rB。有则有,无则无,只有一个的则将第二个设为0xF。

四、Y86异常

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

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

五、Y86程序和Y86指令详情

--比如对于X86指令中的 addl $4,%ecx 这样的指令,由于Y86当中的addl指令中不包含立即数,所以Y86需要先将立即数存入寄存器,即使用irmovl指令,然后再使用addl来处理加法运算。

--创建Y86代码的唯一工具是汇编器。

--以“.”开头的词是汇编命令,他们告诉汇编器调整地址,以便在那儿产生代码或插入一些数据。命令.pos0告诉编译器应该从地址0处开始产生代码。这个地址是所有Y86程序的起点。

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

一、逻辑门

--逻辑门产生的输出,等于它们输入位值的某个布尔函数。

--AND &&

OR ||

NOT !

二、组合电路和布尔表达式

--逻辑门产生的输出,等于它们输入位值的某个布尔函数。

--两个或多个逻辑门的输出不能连接在一起,否则可能会使线上的信号矛盾,导致一个不合法的电压或电路故障。

--网必须无环。

三、字级的组合电路和HCL整数表达式

--所有字级的信号都声明为int,不指定字的大小

--算数/逻辑单元(ALU)是很重要的组合电路,有三个输入,标号为A、B的两个数据输入和一个控制输入。根据控制输入的设置,电路会对数据输入执行不同的算数或逻辑操作。

四、集合关系

--判断集合关系的通用格式是:iexpr in {iexpr1,iexpr2,...,iexprk}

五、存储器和时钟

--时钟寄存器(简称寄存器)存储单个位或字,时钟信号控制寄存器加载输入值

--随机访问存储器(简称存储器)存储多个字,用地址来选择该读或该写哪个字

4.3 Y86的顺序实现

一、将处理组织成阶段

--取指:取指阶段从存储器读取指令字节,地址为程序计数器PC的值

--译码:译码阶段从寄存器文件读入最多两个操作数

--执行:在执行阶段,算数/逻辑单元要么根据ifun的值执行指令指明的操作,计算机存储器引用的有效地址,要么增加或减少栈指针

--访存:访存阶段可以将数据写入存储器,或从存储器读出数据

--写回:写回阶段最多可以写两个结果到寄存器文件

--更新PC:将PC设置成下一条指令的地址

二、SEQ硬件结构和时序:看书上P258图

三、SEQ阶段的实现

--取指阶段:取指阶段包括指令存储器硬件单元。以PC作为第一个字节(字节0)的地址,这个单元一次从存储器读出6个字节,第一个字节被解释称指令字节,分为两个4位数。标号为“icode”和“ifun”的控制逻辑块计算指令和功能码等于从存储器读出值,或者当指令地址不合法时(imem_error指明),这些值对应于nop指令。

--译码和写回阶段:都要访问寄存器文件。寄存器文件有四个端口,支持同时进行两个读(端口A、B)和两个写(E、M),每个端口都有一个地址连接和一个数据连接。根据指令代码icode以及寄存器指示值rA和rB,可能还会根据执行阶段计算出的Cnd条件信号。

--执行阶段:执行阶段包括算术/逻辑单元(ALU)第一步每条指令的ALU计算,执行阶段还包括条件码寄存器。

--访存阶段:访存阶段的任务是读或者写程序数据,两个控制块产生存储器地址和存储器输入数据的值,另外两个块产生控制信号表明应该执行读操作还是写操作。当执行读操作时数据存储器产生值valM。

--更新PC阶段:SEQ中最后一个阶段会产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM、valP

*实验楼

*遇到的问题

希望老师讲一下为什么指令pop%esp,会使函数的返回Oxabcd,以及其他的Y86指令也会这样吗

*参考资料

-最重要当然是书,好多概念都是照着书打的

-参考了闫佳歆的博客,主要是看她重点学习了哪里,我也照着学



时间: 2025-01-13 01:08:11

信息安全程序设计基础第五周学习总结的相关文章

信息安全设计基础第五周学习总结

信息安全系统设计基础第五周学习总结 [学习时间:10小时] [学习内容:第三章:程序的机器表示] 一.教材内容 1.X86 寻址方式的变化: 1 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全: 2 8086的分段模式: 3 IA32的带保护模式的平坦模式 2.机器编程的两种抽象: 1)指令集体系结构(Instruction set architecture,ISA)——定义指令格式以及每条指令执行之后对状态的影响.大多数ISA将程序行为描述成按顺序执行的: 2)虚拟地址 3.一些处理

20145326蔡馨熠《信息安全系统设计》第五周学习总结

教材学习内容总结 书上有的内容我就不重复赘述了,只需要将部分重要的知识点归纳总结一下. 1.使用GDB的堆栈跟踪功能(GDB中有很多针对调用堆栈的命令,都需要一个目标栈帧,例如打印局部变量值的命令) 在栈帧之间切换 frame args 将当前栈帧设置为args(编号或Address)指定的栈帧,并打印该栈帧的简要信息. up n 向上回退n个栈帧(更外层),n默认为1. down n 向下前进n个栈帧(更内层),n默认为1. 打印栈帧信息(不移动栈帧) frame 打印当前栈帧的简要信息. i

20135223何伟钦—信息安全系统设计基础第五周学习总结

第三章 程序的机器级表示 一.历史观点 Intel处理器(X86) 二.程序编码 gcc -01 -o p p1.c p2.c ①编译选项-01 表示编译器使用第一级优化 ②编译选项-02 表示编译器使用第二级优化(较好的选择) ③-o 表示分别将p1.c和p2.c编译后的可执行文件命名为p GCC将源代码转化为可执行代码的步骤: C预处理器:扩展源代码,插入所有#include命令指定的文件,并扩展生成.i文件 编译器:产生两个源代码的汇编代码,生成.s文件 汇编器:将汇编代码转化成二进制目标

信息安全系统设计基础第五周学习总结------20135334赵阳林

第四章 处理器体系结构 第一节 Y86指令集体系结构 一.程序员可见的状态 1.含义: 每条指令都会读取或修改处理器状态的某些部分 2.“程序员”: 可以是用汇编代码写程序的人,也可以是产生机器级代码的编译器. 3.具体的处理器状态:类似于IA32 有8个程序寄存器,%eax,%ecx,%edx,%ebx,%esi,%edi,%esp,%ebp 处理器的每个程序寄存器存储一个字 寄存器%esp被入栈.出栈.调用和返回指令作为栈指针.在其他情况下,寄存器没有固定的含义或固定值. 有三个一位的条件码

20135304刘世鹏——信息安全系统设计基础第五周学习总结

第四章 处理器体系结构 ISA:一个处理器支持的指令和指令的字节级编码——指令集体系结构 ISA在编译器编写者和处理器设计人员之间提供了一个概念抽象层 与IA32相比Y86指令集的数据类型.指令和寻址方式都要少一些,它的字节级编码比较简单,不过它仍然足够完整 4.1.Y86指令集结构 定义一个指令集体系结构,暴扣定义各种状态元素.指令集和它们的编码.一组编程规范和异常事件处理 1.程序员可见的状态 程序员可见状态:Y86程序中的每条指令都会读取或修改处理器状态的某些部分 Y86的处理器状态类似与

20135308-信息安全系统设计基础第五周学习总结

第3章 程序的机器级表示 一.X86 寻址方式 1 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全 2 8086的分段模式 3 IA32的带保护模式的平坦模式 二.程序编码 编译如下代码: unix> gcc -01 -o p p1.c p2.c 01 表示告诉编译器使用第一级优化.通常,提高优化级别会使最终程序运行的更快,但编译时间可能会变长,用调试工具对代码进行调试会更困难. 从得到的程序性能方面考虑,第二级优化-02被认为是是较好的选择. 二.机器级代码 1.两种抽象 (1)IS

信息安全系统设计基础第五周学习总结

处理器的体系结构 ISA:一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构ISA. Y86是一个指令体系结构(ISA)寄存器.存储器.条件码.PC.程序状态. halt:这个指令将会终止指令的执行. nop:这是一个占位指令,它不做任何事情,后续为了实现流水线,它有一定的作用. xxmovl:这是一系列的数据传送指令,其中r代表寄存器,m代表存储器,i代表立即数.比如rrmovl指令,则代表将一个寄存器的值,赋给另外一个寄存器. opl:操作指令,比如加法,减法等等. jxx:条件跳

信息安全程序设计基础第三周总结

学习过程: 第二章信息的表示和处理 一.数字表示 1. 无符号数:编码基于传统的二进制表示法表示大于或等于零的数字. 2. 补码:编码是表示有符号整数的最常见方法,可以是正或者是负的数字. 3. 浮点数:编码是表示实数的科学计数法的以二位基数的版本. 三种数字:无符号数.有符号数(2进制补码).浮点数 溢出:计算机的表示法是用有限数量的位来对一个数字编码,当结果太大以至不能表示时,会溢出 整数运算:编码的数值范围较小,精确:浮点运算:数值范围较大,近似,不可结合 §1 信息存储 最小的可寻址的存

信息安全系统设计基础第五周学习总结—20135227黄晓妍

X86 寻址方式经历三代: 1 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全 2 8086的分段模式 3 IA32的带保护模式的平坦模式 ISA 指令集体系结构,机器级程序的指令和格式.它定义了处理状态,指令的格式,以及每条指令对状态的影响. 获得汇编代码的两种方式: gcc -S xxx.c -o xxx.s 获得汇编代码,也可以用objdump -d xxx 反汇编 (反汇编不需要访问程序的源代码或者汇编代码) C语言数据类型在IA32中的大小: P111页表格. 8个寄存器(3