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

1.转移控制——

  • call指令:后接被调用过程的起始的指令地址。效果是将返回地址入栈,并跳转到被调用过程的起始处。
  • ret指令:从栈中弹出地址,并跳转到这个位置。

练习题

找出下列代码的错误之处?

movb $0xf,(%bl) ---目的操作数只能是一个寄存器或者一个存储器地址。(%bl)表示一个值

movw (%eax),4(%esp)---目的操作数与源操作数不能都是存储器

movb %si, 8(%ebp)---指令后缀与寄存器地址不匹配

int arith(int x,int y,int z) { int t1 = x^y;
    int t2 = 3*t1;
    int t3 = ~t2;
    int t4 = t3-z;
return t4;

下面的代码片段常常出现在库函数的编译版本中:

call next
next:
popl %eax

A.寄存器%eax被设置成了什么值?
%eax被设置成popl的地址。

B.解释为什么这个调用没有与之匹配的ret指令
这不是一个真正的过程调用,因为根本是按照与指令相同的顺序进行的,而返回值是从栈中弹出的。

C.这段代码完成了什么功能?
这是IA32中将程序计数器中的值放到整数计数器中的唯一办法。

SEQ硬件结构

  • 在SEQ中,所有硬件单元的处理都在一个时钟周期内完成。
  • SEQ线路图的画图惯例:
    • 浅灰色方框表示硬件单元
    • 控制逻辑块是用灰色圆角矩形表示的
    • 线路的名字在白色椭圆中说明
    • 宽度为字长的数据连接用中等粗度的线表示
    • 宽度为字节或者更窄的数据连接用细线表示
    • 单个位的连接用虚线表示

SEQ的时序

  • SEQ的实现包括组合逻辑和两种存储器设备:

    • 时钟寄存器 程序计数器和条件码寄存器
    • 随机访问存储器 寄存器文件、指令存储器和数据存储器
  • 每个时钟周期,程序计数器都会装在新的指令地址;只有在执行整数运算指令时,才会装载条件码寄存器;只有在执行rmmovl、pushl或call指令时,才会写数据存储器;寄存器文件的两个写端口允许每个时钟周期更新两个程序寄存器。
  • 组织计算原则:处理器从来不需要为了完成一条指令的执行而去读由该指令更新了的状态
  • 用时钟来控制状态元素的更新,值通过组合逻辑传播。

SEQ阶段的实现

  • 取指阶段:

    • 以PC为第一个字节的地址,一次读6个字节。
    • icode:控制逻辑块计算指令
    • ifun:功能码
    • 三个一位的信号(根据icode值计算):instr_valid:发现不合法的指令;need_regids:包含寄存器指示符字节吗;need_valC:包括常数字吗
    • 后五个字节是寄存器指示符字节和常数字的组合编码。
  • 译码和写回阶段:
    • 都需要访问寄存器文件,根据四个端口的情况,判断应该读哪个寄存器产生信号valA、valB。
    • 寄存器文件,支持同时进行两个读和两个写,每个端口有一个地址连接(寄存器ID)和一个数据连接(32根线路),既可以作为寄存器文件的输出字,又可以作为他的输入字。
  • 执行阶段:
    • 包括算数/逻辑单元(ALU),输出为valE信号。ALU通常作为加法器使用
    • 包括条件码寄存器
    • 每次运行产生:零、符号、溢出、产生信号set_cc
  • 访存阶段
    • 读或者写程序数据。
    • 两个数据块产生存储器地址和存储器输入证据的值,两个产生控制信号表明应该是读还是写。当执行读操作时,数据存储器产生valM。
    • 根据icode,imem_error,instr_valid,dmem_error,从指令执行的结果计算状态码Stat。
  • 更新PC阶段
    • 产生程序计数器的新值,依据指令的类型和是否要选择分支,新的PC可能是valC、valM或者valP。

请说明为什么C语言代码中只有一个if语句,而汇编代码包含两个条件分支?
答:第一个条件分支是&&表达式实现的一部分。如果对p为非空的测试失败,代码会跳过对a>0的测试。

Y86模拟器的安装

				
时间: 2024-12-16 20:53:51

20145309信息安全系统设计基础第7周学习总结上的相关文章

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

教材学习内容总结 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程. Unix I/O是一个简单低级的应用接口,可以把所有的输入输出当作对文件的读写来执行. 打开文件:标准输入描述符为0.标准输出描述符为1.标准错误描述符为2. 改变当前的文件位置:文件位置是从文件开头起始的字节偏移量. 读写文件:从当前文件位置开始.当大于文件长度的时候出发EOF条件. 关闭文件. open函数 flages参数指明进程打算如何访问该文件 mode参数指定新文件的访问权限位 read函数:从描述符为fd

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

考试知识汇总 1.判断:实验楼环境中所有的默认系统用户名和密码均为 shiyanlou.(x ). 2.填空:Linux Bash中,Ctrl+a快捷键的作用是(将光标移至输入行头,相当于Home键). 3.判断:Linux Bash中, 可以使用man printf查看C语言中printf函数的帮助文档. (x) 4.填空:在Ubuntu中,使用(sudo apt-get install ddd)来安装ddd软件. 5.填空:在 Linux 里面可以使用使用(chmod)命令修改文件的权限.

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

教材学习内容总结 第一章 计算机系统漫游 (每小节基本内容概括) 1.1 信息就是位+上下文 文本文件:由ASCII字符构成的文件 二进制文件:其他文件 在不同的上下文中,一个同样的字节序列可能表示不同信息 1.2 程序被其他程序翻译成不同的格式 从源文件到目标文件的转化是由编译器驱动程序完成gcc -o hello hello.c 编译系统:预处理器.编译器.汇编器和链接器 预处理阶段:.c->.i,根据以字符#开头的命令,修改原始的C程序 编译阶段:.i->.s,汇编语言程序 汇编阶段:.

20145309信息安全系统设计基础第12周学习总结后篇

指针与声明 声明 1.C语言中变量的声明 类型(type) 声明符(declarator) 2.最简单的声明是变量 3.指针数组 指针数组是一个数组 数组里的元素都是指针 例:int *daytab[13] 4.数组指针 数组指针是一个指针 指针指向一个类型和元素个数都固定的数组 例:int (*daytab1)[13] 5.指针函数 指针函数是函数 函数的返回值是指针类型 例:int *comp() 6.函数指针 函数指针是指针 指针指向函数 函数名就是函数指针 例:int (*comp1)(

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

总结 知识点总结 常用的Linux命令 Linux中命令格式为:command [options] [arguments]其中[]表示是可选的,即组成结构为:命令 [选项] [参数] man命令 man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助.配置文件帮助和编程帮助等信息. 常用选项: -a:在所有的man帮助手册中搜索 -k:根据关键字搜索联机帮助,是一种模糊搜索 -f:关键字精确搜索,等价于whatis指令,显示给定关键字的简短描述信息 -P:指定内容时使用

20145309信息安全系统设计基础第11周学习总结前篇

教材学习内容总结 异常 异常:处理器中的变化(事件)触发从应用程序到异常处理程序的突发的控制转移 异常处理程序:在任何情况下,当处理器检测到有事件发生时,它就会通过一张叫做异常表的跳转表进行一个间接过程调用,到一个专门处理这类时间的操作系统子程序 当 exception handler处理结束之后,会有三种结果: ·处理程序将控制返回给事件发生的时候正在执行的指令 ·处理程序将控制返回给如果没有发生异常将会执行的下一条指令 ·处理程序终止被终端的程序 所有的到Linux系统调用的参数都是通过寄存

20145309信息安全系统设计基础第10周学习总结前篇

教材学习内容总结 附录A--错误处理 (1).Unix风格的错误处理:函数返回值包括错误代码,也包括有用的结果 (2).Posix风格的错误处理:返回0表示成功,返回非0表示失败:任何有用的结果都返回在通过引用传递进来的函数参数中. (3).DNS风格的错误处理:函数失败时返回NULL指针,并设置全局变量h_errno 标准I/O(高级输入输出函数) fopen/fclose:打开和关闭文件 fread/fwrite:读和写字节 fgets/fputs:读和写字符串 scanf/printf:复

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

1.打开文件 应用程序向内核发出请求→要求内核打开相应的文件→内核返回文件描述符 文件描述符:一个小的非负整数,用来在后续对此文件的所有操作中标识这个文件.有三个已经被指定了的如下: 标准输入--0(STDIN_FILENO) 标准输出--1(STDOUT_FILENO) 标准错误--2(STDERR_FILENO) 括号中是常量表示形式,使用时需要加头文件<unistd.h> 也就是说,在Unix生命周期一开始,0.1.2就被占用,以后的open只能从3开始--习题10.1. 在UNIX下还

20145309信息安全系统设计基础第11周学习总结后篇

进程 异常是允许操作系统提供进程的概念所需要的基本构造块. 进程:一个执行中的程序的实例. 上下文是由程序正确运行所需要的状态组成的,这个状态包括存放在存储器中的程序的代码和数据,它的栈.通用目的寄存器的内容.程序计数器.环境变量以及打开文件描述符的集合. 进程提供给应用程序的关键抽象: 一个独立的逻辑控制流,独占地使用处理器: 一个私有的地址空间,独占地使用存储器系统. 并发流:一个逻辑流的执行在时间上与另一个流重叠. 并发:多个流并发地执行的一般现象. 多任务:一个进程和其他进程轮流运行的概