程序的机器级表示

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-——信息安全系统设计基础第五周学习总结的更多相关文章

  1. 20165223《信息安全系统设计基础》第九周学习总结 & 第八周课上测试

    目录 [第九周学习总结] 教材内容总结 [第八周课上测试] (一)求命令行传入整数参数的和 (二)练习Y86-64模拟器汇编 (三)基于socket实现daytime(13)服务器和客户端 参考资料 ...

  2. 2017-2018-1 20155232 《信息安全系统设计基础》第四周学习总结以及课上myod练习补充博客

    2017-2018-1 20155232 <信息安全系统设计基础>第四周学习总结以及课上myod练习补充博客 课上myod练习 1 参考教材第十章内容 2 用Linux IO相关系统调用编 ...

  3. 20155216 2017-2018-1 《信息安全系统设计基础》第二周课堂练习补交以及Myod的实现

    20155216 2017-2018-1 <信息安全系统设计基础>第二周课堂练习补交 课堂测试3:行断点的设置 运行截图: 未完成原因:课前未安装 cgdb 具体步骤: 1.输入命令:gc ...

  4. 2017-2018-1 20155320 《信息安全系统设计基础》第四周学习总结(课堂实践补交+myhead与mytail加分项目)

    2017-2018-1 20155320 <信息安全系统设计基础>第四周学习总结(课堂实践补交+myhead与mytail实现) 课堂实践内容 1 参考教材第十章内容 2 用Linux I ...

  5. # 20155337 2017-2018-1 《信息安全系统设计基础》第二周课堂实践+myod

    20155337 2017-2018-1 <信息安全系统设计基础>第二周课堂实践+myod 因为在课上已经提交了四个实验,还欠缺最后一个实验,反省一下自己还是操作不熟练,平时在课下应该多多 ...

  6. 2017-2018-1 20155326 《信息安全系统设计基础》第四周学习总结及myod改进版的补交

    2017-2018-1 20155326 <信息安全系统设计基础>第四周学习总结及myod改进版的补交 学习内容 补充完成课上没有完成的内容 学习教材附录A,第十章内容 参考别出心裁的Li ...

  7. 2017-2018-1 20155305 《信息安全系统设计基础》第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客)

    2017-2018-1 20155305 <信息安全系统设计基础>第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客) 课堂提交题目要求 编写MyOD.java 用java ...

  8. 2017-2018-1 20155318 《信息安全系统设计基础》第九周课下实践——实现mypwd

    2017-2018-1 20155318 <信息安全系统设计基础>第九周课下实践--实现mypwd 相关知识 man -k 查找含有关键字的内容 与管道命令结合使用:man -k k1 | ...

  9. 2017-2018-3 20155337《信息安全系统设计基础》 pwd指令学习

    2017-2018-3 20155337<信息安全系统设计基础> pwd指令学习 任务要求 学习pwd指令 研究pwd实现需要的系统调用(man -k:grep),写出伪代码 实现mypw ...

随机推荐

  1. MyBatis学习(一)一个简单的例子

    mybatis入门例子 开发步骤: 1.创建java工程 2.加入jar包(依赖包.驱动包) 3.创建sqlMapConfig.xml 4.创建数据库,数据库表USER_C,插入测试记录 5.创建PO ...

  2. 洛谷P2577 [ZJOI2005]午餐 dp

    正解:序列dp 解题报告: 传送门! 这题首先要想到一个显然的贪心:每个窗口的排队顺序都是按照吃饭时间从大到小排序的 证明如下: 这种贪心通常都是用微扰法,这题也不例外 现在假如已经确定了每个窗口有哪 ...

  3. sass的@at-root

    一.首先理解sass的嵌套中 &表示是什么? &表示整个选择器,而不单个class属性值或id属性值或tagName.例如下面一段代码: .a { .b { & { color ...

  4. mysql 数据操作 多表查询 子查询 虚拟表介绍

    子查询 把一个sql语句放在括号里 ,这个括号里sql语句查询结果其实就是一张表,并且是一个临时在内存里存在的虚拟表 可以用括号把一个查询sql语句括起来 得到查询的结果并且用as 为这张虚拟表起个别 ...

  5. 30 段 JavaScript 代码

    1. 前端人员经常遇到的问题就是如何区分IE及非IE浏览器,JavaScript代码是: if(!+[1,]) { //IE11不支持 alert('这是IE浏览器'); }else{ alert(' ...

  6. PAT Spell It Right [非常简单]

    1005 Spell It Right (20)(20 分) Given a non-negative integer N, your task is to compute the sum of al ...

  7. [LeetCode] 182. Duplicate Emails_Easy tag: SQL

    Write a SQL query to find all duplicate emails in a table named Person. +----+---------+ | Id | Emai ...

  8. Java-使用IO流对大文件进行分割和分割后的合并

    有的时候我们想要操作的文件很大,比如:我们想要上传一个大文件,但是收到上传文件大小的限制,无法上传,这是我们可以将一个大的文件分割成若干个小文件进行操作,然后再把小文件还原成源文件.分割后的每个小文件 ...

  9. ubuntu vim python配置

    参考https://www.cnblogs.com/cjy15639731813/p/5886158.html 但是后面打开文件的时候会报错,参考https://blog.csdn.net/jeff_ ...

  10. iOS 常用小功能 总结

    常用小功能 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等 打电话 方法一(不被采用): 拨号之前会弹框询问用户是否拨号,拨完后能自动回到原应用 NSUR ...