程序转换概念
1.机器指令和汇编指令
2.机器级程序员感觉到的属性和功能特性
3.高级语言程序转换为机器代码的过程
从高级语言出发,用其对用的机器级代码以及内存(栈)中信息的变化来说明实现底层。
计算机中的指令有微指令、机器指令和伪指令之分
微指令是微程序级命令,属于硬件范畴
伪指令是由若干机器指令组成的指令序列,属于软件范畴
机器指令介于二者之间,处于硬件和软件的交界面
汇编指令是机器指令的汇编表示形式,即符号表示
机器指令和汇编指令一一对应,他们都与具体机器结构有关,都属于机器级指令。
机器指令是一个0/1序列,由若干字段组成
汇编指令是机器指令的符号表示(可能有不同的格式)
Inter格式:mov[bx+di-6],cl
或
AT&T格式:movb%cl,-6(%bx,%di)
指令功能为:M[R[bx]+R[di]-6]<—R[cl]
寄存器传送语言RTL(Register Transfer Language)
R:寄存器内容
M:存储单元内容
计算机中的数据存放在哪儿:
指令中需要给出的信息:
操作性质:(操作码)
源操作数1或/和源操作数2(立即数、寄存器编号、存储地址)
目的操作地址(寄存器编号、存储地址)
存储地址的描述与操作数的数据结构有关
ISA位于软件和硬件之间
硬件的功能通过ISA提供出来
软件通过ISA规定的“指令”使用硬件
ISA规定了:
可执行的指令的集合,包括指令格式、操作种类以及每种操作对应的操作数的相关规定;
指令可以接受的操作数的类型;
操作数所能存放的额寄存器的结构,包括每个寄存器的名称、编号、长度和用途
操作数所能存放的存储空间的大小和编址方式
操作数在存储空间存放地址按照大端还是小端方式存放
指令获取操作数的方式,即寻址方式;
指令执行过程的控制方式,包括程序计数、条件码定义等。
用GCC编译器套件进行转换过程:
预处理:在高级语言源程序中插入所有用#include命令指定的文件和用#define声明指定的宏。
编译:将预处理后的源程序编译成相应的汇编语言程序
汇编:由汇编程序将汇编语言程序文件转换为可重定位的机器语言目标代码文件。
链接:由连接器将多个可重定位的机器语言目标文件以及库例程链接起来,生成最终的可执行目标文件
可执行文件的存储器映像:
x86是Inter开发的一类处理器体系结构的泛称:
包括 Intel 8086、80286、i386和i486等,因此其架构被称为“x86”
由于数字并不能作为注册商标,因此,后来使用了可注册的名称,如Pentium、PentiumPro、Core 2、Core i7等
现在Intel把32位x86架构的名称x86-32改称为IA-32
由AMD首先提出了一个兼容IA-32指令集的64位版本
扩充了指令及寄存器长度和个数等,更新了参数传送方式
AMD称其为AMD64,Intel称其为Intl64(不同于IA-64)
命名为“x86-64” ,有时也简称为x64
高级语言程序总是转换为机器代码才能在机器上执行
转换过程:预处理、编译、汇编、链接
机器代码是二进制代码,可DUMP为汇编代码表示
ISA规定了一台机器的指令系统涉及到所有方面,
所有指令的指令格式、功能
通用寄存器的个数、位数、编号和功能
存储地址空间大小、编址方式、大/小端
指令寻址方式