第三章节学习

第3章 程序的机器级表示

 

3.1  历史观点

Intel处理器俗称x86,经历了长期不断发展的过程。

Intel处理器模型:8086

                  80286

                  I386

                  I486

                  Pentium

                  Pentium ||

                  Pentium |||

                  Pentium4

                  Pentium 4E

                  Core 2

                  Core i7

 

3.2 程序编码

Gcc命令调用了一系列程序 将源代码转化成可执行代码

c处理器扩展源代码

机器级代码

          格式形式:指令集体系结构

程序计数器:将要执行的下一条指令在存储器中的地址

查看目标代码文件内容:反汇编器   课本P107页3.2.2例子

                      在linux中 ‘d’可充当此角色

                      Unix > objdump –d code.o

 

3.3 数据格式

P111页C语言数据类型

访问信息

        IA32 cpu 包含一组8个存储器32位值的寄存器用来存储整数数据和指针

操作数指示符

            IA32支持多种操作数格式

            不同操作数可能性被分为三种类型

                                          立即数

                                          寄存器

                                          存储器

数据传送指令:将数据从一个位置复制到另一个位置

MOV:将源操作数的值复制到目的操作数中

MOVS/MOVZ:将较小源操作数据复制到较大数据位置

3.5 算术逻辑操作

ADD由三条加法指令组成: addb

                         addw

                         add1

每个指令类都有对应字节,字,双字节进行操作的指令:加载有效地址

                                                  一元操作

                                                  二元操作

                                                  移位

 

加载有效地址指令leal实际上是movl指令的变型

形式:从存储器读数据到寄存器,实际上没有用存储器

 

移位: 给出移位量

       给出要移位的数据

左移指令 :SAL SHL 将右边填上0

右移指令:SAR 算术移位

          SHR 逻辑移位

 

3.6 控制

条件码:

CF:进位标志

ZF:零标志

SF:符号位标志

OF:溢出标志

访问条件码的三种方式:

1 根据条件码某个组合,将一个自己设置成0/1 (SET指令)

2 可以条件跳转到程序其他部分

3 可以有条件传送数据

跳转指令及其编码

Jump导致: 执行切换到程序中一个全新的位置

跳转的目的地通常用lable指明

 

3.7 过程

栈帧结构

栈帧:为单个过程分配的那部分栈

寄存器%ebp-帧指针

寄存器%esp-栈指针

 

假如P调用Q

则: Q的参数放在P的栈帧中

     P的返回地址被压入栈中

转移控制

   

             指令

           描述

Call Label

过程调用

Call *Operand

过程调用

leave

为返回准备栈

ret

从过程调用中返回

 

call指令的效果是将返回地址入栈,并跳转到被调用过程的起始处。返回地址是还在程序中紧跟在call后面的那条指令的地址。

2.ret

ret指从栈中弹出地址,并跳转到这个位置。

 

 

备注: 前几次成绩都不是很好,包括博客的分数,此次较认真的完成了博客。本章节内容在写完博客还没有彻底了解一些问题 会在今日到周三之前详细学习。

posted @ 2015-10-11 11:17  20135331文艺  阅读(136)  评论(1编辑  收藏  举报