持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第34天,点击查看活动详情
第一讲 程序转换概念
指令的概念
计算机中的指令有微指令、机器指令和伪(宏)指令之分
-
机器指令处于硬件和软件的交界面 相当于一个菜谱指定的一个完整做菜过程
- 本章中提及的指令都指机器指令
-
微指令是微程序级命令,属于硬件范畴
相当于洗、切、煮、炒等做菜"微过程"
-
伪指令是由若干机器指令组成的指令序列,属于软件范畴
相当于多个菜谱合成一个"大菜"的过程
- 汇编指令是机器指令的汇编表示形式,即符号表示
- 机器指令和汇编指令一、对应,它们都与具体机器结构有关,都属于机器级指令
机器级指令
目标代码和ISA
GCC使用举例
目标文件可用“objdump -d test.o"反汇编为汇编语言程序
编译得到的
反汇编得到的
test.o∶可重定位目标文件
test : 可执行目标文件
通过对两种文件的反汇编,得出来的只有地址值不相同
test.o中的代码从地址O开始,test中的代码从80483d4开始!
ISA规定了一台机器的指令系统涉及到的所有方面例如:
- 所有指令的指令格式、功能
- 通用寄存器的个数、位数、编号和功能
- 存储地址空间大小、编址方式、大/小端
- 指令寻址方式
第二讲 IA-32指令系统概述
-
x86是Intel开发的一类处理器体系结构的泛称
-
由AMD首先提出了一个兼容IA-32指令集的64位版本
- 扩充了指令及寄存器长度和个数等
- AMD称其为AMD64 ,Intel称其为Intl64(不同于IA-64)
IA-32的体系结构
指令中需给出的信息∶
操作性质((操作码)
源操作数1或/和源操作数2(立即数、寄存器编号、存储地址)
目的操作数地址(寄存器编号、存储地址)
存储地址的描述与操作数的数据结构有关!
IA-32支持的数据类型及格式
IA-32的寄存器组织
反映了体系结构发展的轨迹,字长不断扩充,指令保持兼容ST(0)~ST(7)是80位,MMO-MM7使用其低64位
标志寄存器?那么,都存了啥标志呢
- 6个条件标志
ZF:零标志 SF:符号标志 OF:溢出标志 CF:进/借位标志
AF:辅助进位标志 PF:奇偶标志
-
3个控制标志
DF ( Direction Flag ) :方向标志(自动变址方向是增还是减)
IF( Interrupt Flag ) :中断允许标志(仅对外部可屏蔽中断有用)
TF ( Trap Flag )︰陷阱标志(是否是单步跟踪状态)
IA-32的寻址方式
概念:如何根据指令给定信息得到操作数或操作数地址
-
操作数所在的位置
- 指令中:立即寻址
- 寄存器中:寄存器寻址
- 存储单元中(属于存储器操作数,按字节编址)︰其他寻址方式
-
存储器操作数的寻址方式与微处理器的工作模式有关
- 两种工作模式∶实地址模式和保护模式
-
实地址模式(基本用不到)
- 为与8086/8088兼容而设,加电或复位时
- 寻址空间为1MB,20位地址:(CS)<<4+(IP)
-
保护模式(需要掌握)
- 加电后进入,采用虚拟存储管理,多任务情况下隔离,保护
- 80286以上微处理器的工作模式
- 寻址空间为2的32次方 B,32位线性地址分段(段基址+段内偏移量)
IA-32机器指令格式
IA-32是典型的CISC(复杂指令集计算机)风格ISA
- 8个通用寄存器(8位、16位、32位)
- 2个专用寄存器:EIP(PC)、标志寄存器EFLAGS
- 6个段寄存器(间接给出段基址)
- 存储器地址空间为4GB,按字节编址,小端方式
-
- 变长指令字、变长操作码
-
汇编语言格式
- Intel格式汇编
- AT&T格式汇编(本课程使用)