第二章、处理器结构
2.1处理器功能结构
1.算数逻辑单元
也就是常说的ALU
计算机的运算器,负责处理器所能进行的各种运算,主要就是算数运算和逻辑运算
累加器
提供一个操作数,保存运算结果
标志寄存器
反映运算结果的辅助信息,也称为程序状态字
2.寄存器
用来暂时存放代码数据
透明寄存器:对程序员不可见,不能直接控制的寄存器
可编程寄存器
集成在CPU内,已命名,供编程使用
通用寄存器:数量较多,使用频度较高,具有多种用途
专用寄存器:只用于特定目的
3.指令处理单元
处理器的控制单元,它控制指令的执行和信息的传输
指令执行的过程:
- 取指
- 译码
- 执行
4.8086的功能结构
总线接口单元
管理与系统总线的接口,负责对存储器和外设访问
执行单元
ALU、通用寄存器、标志寄存器和控制电路
负责指令译码、数据运算和指令执行
指令预取
8086维护着一个长度为6字节的指令队列
最简单的指令流水线技术
节省取指时间,提高了效率
程序转移将使预取指令作废,降低效率
5.80386的功能结构
总线接口大单元:为处理器提供同外部的接口
指令预取单元:先行读取指令
指令译码单元:从预取队列中取来指令,译码成微指令代码
执行单元:ALU、乘法器、除法器、位移器
分段单元:逻辑地址变换成线性地址
分页单元:将线性地址变换为物理地址
各功能部件可以并行工作,进行流水线处理
2.2寄存器
寄存器就是暂时存放数据的地方
通过编写程序、由处理器执行指令控制
程序员来说,处理器被抽象为可编程寄存器
1.通用寄存器
用于保存整数数据,地址等
8各32位通用寄存器
EAX ;累加器
EBX ;基址寄存器
ECX ;计算器
EDX ;数据寄存器
ESI ;源变址寄存器
EDI ;目的变址寄存器
EBP ;基址指针
ESP ;堆栈指针
ESP(SP)应该作为专用寄存器来对待
8个16位寄存器,其实就是16位寄存器的低8位
EAX->AX
EBX->BX
ECX->CX
EDX->DX
ESI->SI
EDI->DI
EBP->BP
ESP->SP
8个8位通用寄存器,就是abcd4个16位寄存器的低8位和高8位
AX->AH & AL
BX->BH & BL
CX->CH & CL
DX->DH & DL
2.标志寄存器
标志
反映指令执行结果或控制指令执行形式
用一个或多个二进制位表示一种标志
0或1的不同组合表达标志的不同状态
状态标志
用于分支
最基本的标志,有6个
用来记录指令执行结果的辅助信息
处理器主要使用其中4个构成各种条件
进位标志CF
carry flag
在运算过程中,出现进位,CF=1,否则CF=0
针对无符号整数,判断加减结果是否超出表达范围
溢出标志OF
overflow flag
有符号数加减结果有溢出,OF=1,否则OF=0
针对有符号整数,判断加减结果是否超出表达范围
零标志ZF
zero flag
运算结果位0,则ZF=1,否则ZF=0
符号标志位
运算结果最高位为1,则SF=1,否则SF=0
最高位=符号位=SF
奇偶标志位PF
parity flag
运算结果中最低字节中‘1’的个数为偶数时候,PF=1,否则PF=0
仅最低8位1的个数
控制标志
方向标志DF
仅用于串操作指令,控制地址的变化方向
设置DF=0,每次串操作后,存储器的地址就自动增加,即从低地址向高地址处理数据串
设置DF=1,每次串操作后,存储器的地址就自动减少,机器 从高地址向低地址处理数据串
CLD指令,设置DF=0
STD指令,设置DF=1
系统标志
中断允许标志IF,(interrupt-enable,flag)
陷阱标志TF(trap,flag)用于单步调试
I/O 特权标志
cpu识别标志ID
3.专用寄存器
专用寄存器往往只用于特定指令和场合
1.指令指针寄存器EIP
保存下一条将要执行的指令在主存的地址
2.段寄存器
- 段是安排相关代码或数据的主存区域
- 段寄存器表明段在主存的位置
- 6个段寄存器 :CS,DS,SS,ES,FS,GS
3.其他寄存器
浮点寄存器,多媒体寄存器
系统专用寄存器
2.3 存储器组织
1.存储模型
平展存储模式
存储器是一个连续的地址空间-线性地址空间
段式存储模型
存储器被分成段,每一段都是线性映射
实地址存储模型
8086处理存的存储模型
段也是存储模型的特例
线性空间最大位1MB,段最大为64KB
2.工作方式
保护方式
实地址方式
系统管理方式
3.存储管理
逻辑地址,物理地址
4.基本段
代码段
段基地址:代码段寄存器CS
偏移地址:指令段寄存器DS
存放指令代码
数据段
段基地址:数据段寄存器DS
偏移地址:各种存储器寻址方式算出来
存放数据
堆栈段
段基地址:堆栈段寄存器SS
偏移地址:堆栈指针寄存器ESP保存
堆栈区域
段选择器
16位段寄存器保存16位段选择器
段选择器指向64位段描述符
段描述符包括段基地址
- 平展,指向0
- 段式,指向线性地址空间不同的段
- 实地址,保存段地址高16位
2.4汇编语言基础
汇编语言程序:用汇编语言书写的程序
汇编程序:将汇编语言程序汇编成机器代码没目标模块的程序
标识符
不能以数字开头,不能是汇编程序采用的保留字
助记符
助记符:帮助记忆指令功能的符号
操作数和参数
- 具体的常量
- 保存在寄存器的数据
- 保存在存储器中的变量
- 逗号前常是目的操作数,逗号后常是源操作数
伪指令的参数
- 常量、变量名、表达式
- 可以有多个,参数之间用逗号隔开
使用的模板
include vcIO.inc
.data
;定义数据
msg byte 'Hello,Assembly Language!',0
.code
;写代码
main Proc
;主函数,套模板,其他和别的语言一样
invoke printf,offset msg
ret
main endp
end main
变量应用
寄存器变量,内存变量
寄存器变量
寄存器变量名字,类型均由硬件指定,用户不能改变,它数量少,存取速度最快,具有全局属性,不用事先声明,直接引用寄存器的名字即可使用
全局变量在数据段
局部变量及其过程参数在堆栈
变量定义
变量名是用户标识符,表示元素逻辑地址
初值表是用逗号分隔的参数
- 各种形式的常量
- ?表示初值不确定,即未赋初值
- 复制操作符DUP,DUP(重复参数)
变量定义伪指令
- BYTE :8位
- WORD:16位
- DWORD:32位
- QWORD:64位
地址操作符
- [],括起的表达式作为存储器地址指针
- OFFSET 变量名,返回变量名所在段的偏移地址
PTR操作符,说明内存单元的类型
地址寻址
寄存器寻址
存储器寻址
直接寻址
寄存器间接寻址
寄存器相对寻址