20135234mqy-——信息安全系统设计基础第五周学习总结
程序的机器级表示
3.1
intel处理器系列俗称x86,经历了一开始个长期的,不断进化的发展过程。
开始时它是第一代单芯片,16位微处理器之一,由于当时集成电路技术水性有限,其中做了很多妥协,此后,他不断成长,利用进步的技术满足更高性能和支持高级操作系统的需求。
3.3数据格式:
数据传送指令:movb(传送字节) movw(传送字) movl(传送双字)
3.4访问信息:
一个IA32 CPU 包含一组8个存处位值的寄存器。这些寄存器用来存处整数数据和指数
3.4.1操作数指示符:
大多数指令有一个或多个操作数,指示出执行一个操作中
(1)立即数 常数值
(2)寄存器 表示某个寄存器的内容
(3)存储器 根据计算出来的有效地址,访问某个存储器位置
例:
类型 | 格式 | 操作数值 | 名称 |
立即数 | $Imm | Imm | 立即数寻址 |
寄存器 | Ea | R[Ea] | 寄存器寻址 |
存储器 | Imm | M[Imm] | 绝对寻址 |
存储器 | (Ea) | M[R[Ea]] | 间接寻址 |
存储器 | Imm(Eb) | M[Imm+R[Eb]] | (基址+偏移量)寻址 |
3.4.2数据传送指令
MOV S,D | D←S | 传送 |
movb movw movl |
传送字节 传送字 传送双字 |
MOVS S,D | D←符号扩展(S) | 传送符号扩展的字节 |
movsbw movswl movswl |
将做了符号扩展的字节传送到字 将做了符号扩展的字节传送到双字 将做了符号扩展的字传送到双字 |
MOVz S,D |
D←零扩展(S) | 传送零扩展的字节 |
movzbw movzbl movzwl |
将做了零扩展的字节传送到字 将做了零扩展的字节传送到双字 将做了零扩展的字传送到双字 |
“栈”遵循“后进先出”原则
push 把数据压入栈 pop 删除数据
3.5算数和逻辑操作
3.5.1加载有效地址
加载有效地址指令leal实际上是movl指令的变形,它的指令形式是从存储器读取寄存器,但实际上没有引用存储器
指令 | 效果 | 描述 |
leal S,D | D←&S | 加载有效地址 |
INC D | D←D+1 | 加一 |
ADD S,D | D←D+S | 加 |
SAL k,D | D←D<<k | 左移 |
3.5.5特殊的算术操作
指令 | 效果 | 描述 |
imull S | R[%edx]:R[%eax]←S×R[%eax] | 有符号全64位乘法 |
cltd | R[%edx]:R[%eax]←SignExtend(R[%eax]) | 转为四字 |
idivl S | R[%edx]←R[%edx]:R[%eax]modS | 有符号除法 |
R[%edx]←R[%edx]:R[%eax]÷S | ||
divl | R[%edx]←R[%edx]:R[%eax]÷S | 无符号除法 |
3.6控制
3.6.1条件码
CF:进位标志 最近的操作使最高位产生了进位,可以用来检查无符号操作的溢出
ZF:零标志 最近的操作得出的结果为0
SF:符号标志 最近的操作得到的结果为负
OF:溢出标志 正溢出,负溢出
3.6.2访问条件码
指令 | 同义名 | 效果 | 设置条件 |
sete D sets D setg D |
setz setnle |
D←ZF D←SF D←~(SF^OF)&~ZF |
相等/零 负数 大于(有符号>) |
3.6.3跳转指令及其编码
跳转指令会导致执行切换到程序中一个全新的位置
3.6.4翻译条件分支
将条件表达式和语句从C语言翻译成机器代码,最常用的方式是结合有条件和无条件跳转
3.6.5循环
汇编中没有相应的指令从在,可以用条件测试和跳转组合起来实现循环效果。
do—while循环
while循环
for循环
3.6.6条件传送指令
实现条件操作的传统方法是利用控制的条件转移,当条件满足时,程序沿着一条执行路径进行,而当条件不满足时,就走另一条路径,这种机制简单而通用,但在现代处理器上,他可能会非常的低效率
数据的条件转移是一种代替的策略。这种方法先计算一个条件操作的两种结果,然后再根据条件是否满足从而选取一个。只有在一些受限制的情况下,这种策略才可行,但如果可行,就可以用一条简单的条件传送指令来实现它。条件床送指令跟好的匹配了现代处理器的性能特性
3.7过程
3.7.1栈帧结构
IA32程序用程序栈来支持过程调用。机器用来栈来传递过程参数,存储返回信息,保存寄存器用于以后恢复,以及本地存储。为单个过程分配的那部分栈称为栈帧。
3.7.2转移控制
指令 | 描述 |
call Label call *Operand leave ret |
过程调用 过程调用 为返回准备栈 从过程调用中返回 |
3.7.3寄存器使用惯例
程序寄存器组唯一能被所有过程共享的资源
虽然在给定时刻只能有一个过程是活动的,但是我们必须保证当一个过程(调用者)调用另一个过程(被调用者)是,被调用着不会覆盖某个调用者稍后会使用的寄存器的值,为此IA32采用了一组统一的寄存器使用惯例,所有的过程都必须遵守,包括程序库中的过程。
实验:
20135234mqy-——信息安全系统设计基础第五周学习总结的更多相关文章
- 20165223《信息安全系统设计基础》第九周学习总结 & 第八周课上测试
目录 [第九周学习总结] 教材内容总结 [第八周课上测试] (一)求命令行传入整数参数的和 (二)练习Y86-64模拟器汇编 (三)基于socket实现daytime(13)服务器和客户端 参考资料 ...
- 2017-2018-1 20155232 《信息安全系统设计基础》第四周学习总结以及课上myod练习补充博客
2017-2018-1 20155232 <信息安全系统设计基础>第四周学习总结以及课上myod练习补充博客 课上myod练习 1 参考教材第十章内容 2 用Linux IO相关系统调用编 ...
- 20155216 2017-2018-1 《信息安全系统设计基础》第二周课堂练习补交以及Myod的实现
20155216 2017-2018-1 <信息安全系统设计基础>第二周课堂练习补交 课堂测试3:行断点的设置 运行截图: 未完成原因:课前未安装 cgdb 具体步骤: 1.输入命令:gc ...
- 2017-2018-1 20155320 《信息安全系统设计基础》第四周学习总结(课堂实践补交+myhead与mytail加分项目)
2017-2018-1 20155320 <信息安全系统设计基础>第四周学习总结(课堂实践补交+myhead与mytail实现) 课堂实践内容 1 参考教材第十章内容 2 用Linux I ...
- # 20155337 2017-2018-1 《信息安全系统设计基础》第二周课堂实践+myod
20155337 2017-2018-1 <信息安全系统设计基础>第二周课堂实践+myod 因为在课上已经提交了四个实验,还欠缺最后一个实验,反省一下自己还是操作不熟练,平时在课下应该多多 ...
- 2017-2018-1 20155326 《信息安全系统设计基础》第四周学习总结及myod改进版的补交
2017-2018-1 20155326 <信息安全系统设计基础>第四周学习总结及myod改进版的补交 学习内容 补充完成课上没有完成的内容 学习教材附录A,第十章内容 参考别出心裁的Li ...
- 2017-2018-1 20155305 《信息安全系统设计基础》第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客)
2017-2018-1 20155305 <信息安全系统设计基础>第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客) 课堂提交题目要求 编写MyOD.java 用java ...
- 2017-2018-1 20155318 《信息安全系统设计基础》第九周课下实践——实现mypwd
2017-2018-1 20155318 <信息安全系统设计基础>第九周课下实践--实现mypwd 相关知识 man -k 查找含有关键字的内容 与管道命令结合使用:man -k k1 | ...
- 2017-2018-3 20155337《信息安全系统设计基础》 pwd指令学习
2017-2018-3 20155337<信息安全系统设计基础> pwd指令学习 任务要求 学习pwd指令 研究pwd实现需要的系统调用(man -k:grep),写出伪代码 实现mypw ...
随机推荐
- numpy的文件存储 .npy .npz 文件
1)Numpy能够读写磁盘上的文本数据或二进制数据.将数组以二进制格式保存到磁盘np.load和np.save是读写磁盘数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 ...
- Oracle体系结构之联机日志文件管理
日志文件分类:重做日志文件 归档日志文件 警告日志文件 跟踪日志文件 redo_log_file文件作用: 1)维护数据一致性 2)记录了数据库里的更改操作 redo_log_friles以组为单位, ...
- python数据结构之哈希表
哈希表(Hash table) 众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry.这些个键值对(Entry)分散存储在一个数组当中,这个数组就是Has ...
- OC中分类(Category)和扩展(Extension)
1.分类的定义 category是Objective-C 2.0之后添加的语言特性,中文也有人称之为分类.类别.Category的主要作用是为已经存在的类添加方法.这个大家可能用过很多,如自己给UIC ...
- Making the Grade---poj3666(dp)
题目链接:http://poj.org/problem?id=3666 题意:有一个n个数的序列a,现在要把这些序列变成单调增的或者单调减的序列 b , 其价值为|A1 - B1| + |A2 - B ...
- EL--Expression Language
EL 存取变量数据的方法很简单,例如:${username}.它的意思是取出某一范围中名称为username的变量.因为我们并没有指定哪一个 范围的username,所以它的默认值会先从Page 范围 ...
- LeetCode-104.Maxinum Depth of Binary Tree
Given a binary tree, find its maximum depth.The maximum depth is the number of nodes along the longe ...
- input标签file文件上传图片本地预览
<input type="file" name="img-up" id="img-up" value="" /&g ...
- java判断包含contains方法的使用
java中contains方法是判断是否存在包含关系,比如说a =[1,2,3,4], b=1那么a就包含b contains返回的是布尔类型true 和false,包含的话就返回true,不包含的话 ...
- php开启mbstring扩展并设置支持utf-8编码
前一段时间使用一个服务的接口,因为调用接口时使用的参数里面有中文,调用接口会出现异常问题,后来才明白是编码不一致的问题.然而,我本地项目开发使用的是utf-8,接口那边也是需要utf-8的,那么问题来 ...