程序转换概述
“指令”的概念
- 计算机中的指令有微指令、机器指令和伪(宏)指令之分
- 机器指令处于硬件和软件的交界面
- 相当于一个菜谱指定的一个完整做菜过程
- – 本章中提及的指令都指机器指令
- 微指令是微程序级命令,属于硬件范畴
- 相当于洗、切、煮、炒等做菜“微过程“
- 伪指令是由若干机器指令组成的指令序列,属于软件范畴
- 相当于由多个菜谱合成一个”大菜“的过程
- 汇编指令是机器指令的汇编表示形式,即符号表示 • 机器指令和汇编指令一一对应,它们都与具体机器结构有关,都 属于机器级指令
机器级指令
Gcc使用
• 两个源程序文件main.c和test.c,最终生成可执行文件为test
• 选项-O1表示一级优化,-O2为二级优化,选项-o指出输出文件名
两种目标文件
可执行文件的存储器映像
总结
高级语言程序总是转换为机器代码才能在机器上执行 • 转换过程:预处理、编译、汇编、链接 • 机器代码是二进制代码,可DUMP为汇编代码表示 • ISA规定了一台机器的指令系统涉及到的所有方面 例如: – 所有指令的指令格式、功能 – 通用寄存器的个数、位数、编号和功能 – 存储地址空间大小、编址方式、大/小端 – 指令寻址方式
IA-32的系统概述
IA-32/x64指令系统概述
- x86是Intel开发的一类处理器体系结构的泛称
- – 包括 Intel 8086、80286、i386和i486等,因此其架构被 称为“x86”
- – 由于数字并不能作为注册商标,因此,后来使用了可注册的 名称,如Pentium、PentiumPro、Core 2、Core i7等
- – 现在Intel把32位x86架构的名称x86-32改称为IA-32
- – IA是Intel Architecture的缩写
- • 由AMD首先提出了一个兼容IA-32指令集的64位版本
- – 扩充了指令及寄存器长度和个数等,更新了参数传送方式
- – AMD称其为AMD64,Intel称其为Intl64(不同于IA-64)
- – 命名为“x86-64” ,有时也简称为x64
IA-32的体系结构
IA-32的寄存器组织
IA-32的标志寄存器
IA-32的寻址方式
寻址方式 – 如何根据指令给定信息得到操作数或操作数地址 • 操作数所在的位置 – 指令中:立即寻址 – 寄存器中:寄存器寻址 – 存储单元中(属于存储器操作数,按字节编址):其他寻址方式 • 存储器操作数的寻址方式与微处理器的工作模式有关 – 两种工作模式:实地址模式和保护模式 • 实地址模式(基本用不到) – 为与8086/8088兼容而设,加电或复位时 – 寻址空间为1MB,20位地址:(CS)<<4+(IP) • 保护模式(需要掌握) – 加电后进入,采用虚拟存储管理,多任务情况下隔离、保护 – 80286以上微处理器的工作模式 – 寻址空间为232B,32位线性地址分段(段基址+段内偏移量)
保护模式下的寻址方式
存储器操作数的寻址方式
各变量应采用什么寻址方式? x、c:位移 / 基址 a[i]:104+i×4,比例变址+位移 d[i]:544+i×8,比例变址+位移 b[i][j]: 504+i×8+j×2, 基址+比例变址+位移 将b[i][j]取到AX中的指令可以是: “movw 504(%ebp,%esi,2), %ax” 其中, i×8在EBP中,j在ESI中, 2为比例因子
IA-32机器指令格式
总结