MASM汇编语言笔记(一)IA32处理器体系结构

来源:互联网 发布:java文件上传插件下载 编辑:程序博客网 时间:2024/06/07 12:12
处理器 CPU Central Processor Unit
时钟 clock 系统部件同步
寄存器 register
控制单元 Control Unit 协调指令次序
算术逻辑单元 Arithmetic Logic Unit 算术和逻辑运算
机器指令的执行:取指令,解码和执行
指令指针:IP instruction pointer
指令队列:instruction queue

486处理器的6级流水线
总线接口单元 BIU Bus Interface Unit:访问存储器,输入输出
代码预取单元 Code Prefetech Unit:接受指令插入指令至指令队列
指令解码单元 Instruction Decode Unit:机器指令解码为微代码
执行单元 Execution Unit:执行微代码
分段部件 Segment Unit:逻辑地址-->线性地址,保护检查
分页部件 Paging Unit:线性地址-->物理地址

流水线
超标量 Superscalar
缓存 cache memory
调度程序 scheduler
循环调度 round-robin scheduling

IA-32处理器的三种模式:保护模式,实地址模式,系统管理模式
保护模式 Protected Mode 基本模式
虚拟8086模式 Virtual-8086 Mode 保护模式中执行实地址模式的程序
实地址模式 Real-adress Mode 直接访问内存和硬件
系统管理模式 SMM System Management Mode 电源管理,系统安全

地址空间
保护模式下IA32处理器可访问4G 32位无符号整数地址,实模式1M,虚拟8086模式独立的1M

基本寄存器P79
8个通用寄存器,6个段寄存器,一个处理器状态标志寄存器,一个指令指针寄存器

通用寄存器:算术运算和数据传送(32位或16位)
EAX,AX,AH,AL
EBX,BX,BH,BL
ECX,CX,CH,CL
EDX,DX,DH,DL
ESI,SI
EDI,DI
EBP,BP
ESP,SP
EAX 自动用于乘法和除法,扩展累加寄存器
ECX 循环计数器

段寄存器:保护模式下存放段描述符的指针(索引)
ESP 扩展堆栈指针寄存器
ESI,EDI 扩展源指针和扩展目的指针寄存器
EBP 函数参数和局部变量
EIP 指令指针,下一条要执行的指令地址
EFLAGS寄存器:操作或运算结果标志 控制标志和状态标志
CF (bit 0) Carry flag 进位标志
PF (bit 2) Parity flag 奇偶标志
AF (bit 4) Adjust flag (进位或借位,用于BCD算术运算)
ZF (bit 6) Zero flag 零标志
SF (bit 7) Sign flag 符号标志
OF (bit 11) Overflow flag 溢出标志
DF direction flag 方向标志

系统寄存器,允许ring0程序访问
中断描述符表寄存器 IDTR Interrupt Descriptor Table Register 保存中断描述符表
全局描述符表寄存器 GDTR Global Descriptor Table Register 保存全局描述符表
局部描述符表寄存器 LDTR Local Descriptor Table Register 保存正在运行的程序的代码段,数据段和堆栈段的指针
任务寄存器 Task Register 保存当前执行任务的任务状态段(TSS,task state segment)
调试寄存器 Debug Register 调试时设置断点
控制寄存器 Control Register CR0,CR1,CR2,包含控制系统级操作的状态标志和数据域
模型专用寄存器 Mode-Specific Registers 性能监控和结构检查

浮点单元
FPU Float Point Unit
8个浮点数据寄存器ST(0)~ST(7)
其它寄存器
MMX指令集的8个64位寄存器
SIMD单数据多数据操作的8个128位XMM寄存器

Intel 8086 CISC Complex Instruction Set Computing 复杂指令集计算机 微代码
RISC  精简指令集计算机(Reduced Instruction-Set Computer) 直接硬件解码和执行指令

实地址模式
内存寻址1M 00000-FFFFF 808616位寄存器
实模式下,IA-32使用20位地址线,可访问1M内存,1048576字节,0-FFFFF
线性地址linear address或称绝对地址absolute address,20位 0-FFFFF
程序使用段-偏移地址(segment offset)
一个存放在段寄存器(CS,DS,ES,SS)中的16位段值
一个16位的偏移值
linear = segment*16(10H)+offset
典型的程序有三个段:代码段,数据段,堆栈段
CS code segment 16位代码段地址
DS data segment 16位数据段地址
SS stack segment 16位堆栈段地址
ES,FS,GS指向其它数据段

保护模式
可寻址4G内存,范围是0-FFFFFFFF,段寄存器存放段描述符表
平坦分段模式 flat segment model
所有段都映射到32位物理地址空间
段描述符是存放在全剧描述符表(GDT Global Descriptor Table)中的一个64位的值
多段模式 multi-Segment model
每个程序都有自己的描述符表,局部描述符表:LDT Local Descriptor Table,独立的地址空间
分页
所有页的集合称为虚拟内存Virtual Memory

BIOS Basic Input / Output System 基本输入输出系统
PCI Peripheral Component Interconnect 外部组件互联总线
DMA (direct memory access)直接存储器存取
USB 通用串行总线(Universal Serial Bus)

原创粉丝点击