Skip to content

Latest commit

 

History

History
338 lines (168 loc) · 13.1 KB

File metadata and controls

338 lines (168 loc) · 13.1 KB

第一章 微信计算机硬件系统

微信计算机 = 硬件(微处理器CPU 内存 IO接口 系统总线 芯片组 外部设备)+软件(硬件系统上运行的程序集合)

冯诺依曼五大部件:运算器 控制器 存储器 输入设备 输出设备

1.1 微处理器MPU=中央处理单元CPU

= 控制单元CU+寄存器组+算术逻辑单元ALU

专用微处理器:单片机,数字信号处理器

分页机制是操作系统实现虚拟内存所必需的硬件环境

80286首次引入保护模式,80386首次引入虚拟8086模式

80386是32位机器,奔腾Pentium是32位但是由两条指令流水线因此被称为准64位CPU,RISC第一款64位的处理器安腾Itanium与x86架构不兼容,AMD Intel x86-64

微结构也叫计算机组织,包含处理器内部的构成以及这些部分如何执行指令集。同一个微结构下可能有多款CPU,同一名称的CPU微结构可能不同

CPU工作模式指各种影响CPU可以执行的指令和芯片功能的操作环境,决定CPU如何管理内存。

动态执行是对多路分支预测 数据流分析 猜测执行技术进行的革新式组合

单核处理器的困境:功耗 互连线延迟 设计复杂度

多核困境:互联 编程 --> 片上网络NOC 存储层次 并行编程模型

微处理器性能指标

主频 = 主时钟频率,即CPU内数字脉冲信号震荡的速度

外频 = 系统总线工作频率,即CPU与周边设备传输数据的频率

主频 = 外频×倍频

前端总线FSB即处理器到北桥之间的总线,比外频更实际地表示CPU和外界数据传输地速度,QDR技术使FSB频率称为外频的n倍。内存控制器被逐步集成到处理器中,QPI技术使总线实际传输速率成为总线时钟频率的两倍

CPU与主存之间数据交换的速度是计算机处理能力的瓶颈

L1 cache一般采用哈佛结构

线宽越小,意味着同样面积的IC中可以集成更多的晶体管,性能更高

CPU工作电压包括CPU核心电压(驱动核心芯片的电压)和IO电压(驱动IO电路的电压),通常前者≤后者。降低电压是CPU主频提高的重要因素之一。

CPU封装方式取决于CPU的安装形式和器件集成设计。发展方向以便于散热,节约成本为主,早期双列直插式封装技术,也叫DIP封装;现在触点阵列封装 (Land Grid Array,LGA)封装。

虚拟8086是为了在保护模式下兼容8086处理器(内存寻址和8086相同,即段寄存器*16为基址+偏移地址形成物理地址 寻址空间1MB,但支持保护模式下的任务切换、内存分页管理和优先级管理),实模式是为了和8086处理器兼容设置的,保护模式是主要的工作模式。它们称为IA-32模式,64位的机器运行在IA-32e模式(兼容模式 64位模式)下。书P9 P35。

1.2 主板

= 微处理器CPU 内存 IO接口 系统总线 芯片组(核心是芯片组 = 控制芯片组,主板BIOS芯片,CMOS芯片)

功能:完成微机系统的管理和协调各部件工作

控制芯片组

  1. 南北桥结构 台式机 笔记本 工作站/服务器芯片组要求 书P16
  2. 单芯片组结构 CPU+南桥 称为PCH(平台控制器集线器)

BIOS芯片是主板上唯一贴有标签的芯片,DIP封装 双排直插式。Flash ROM 可重写。

单通道内存技术中,北桥芯片内部只有一个内存控制器,多个内存条只能增加容量,不能增加带宽。双通道内存技术才可以

CPU插槽类型:Slot(SEC封装)和Socket架构(PGA BGA LGA 封装)两种

LPT简称并口,常用于打印机

1.3 内存

对准字:存储在偶数地址的字。对准双字:存储地址是4的倍数的双字。

小端方案=逆序存储

第二章 微处理器管理模式

2.1 微处理器的基本结构

总线接口单元BIU

中央处理单元CPU 指令部件 指令预取单元IPU+指令译码单元IDU 执行部件

存储器管理单元MMU 分段部件+分页部件

2.2 CPU工作模式

实模式 保护模式 虚拟8086模式(保护模式切V86模式 CPL特权级=3)

通过修改控制寄存器CR0的控制位PE(位0)来实现从实模式切换到保护模式。

任务切换:JMP CALL IRET 转移指令或者调用指令修改指令指针 特权级4级

2.3 寄存器

分为程序可见寄存器组和程序不可见寄存器组(汇编语言程序员的指令中是否可以出现)

专用寄存器:指令指针寄存器 堆栈指针寄存器 标志寄存器

保护模式下的寄存器

控制寄存器 4个 CR0中的PG分页标志=0时,CR2 CR3无效。CR3也被称作页目录基址寄存器PDBR 高20位存页目录表起始物理地址的高20位,低12位必须为0 CR2页面故障线性地址寄存器 保存的是页异常的线性地址 页4K

测试和调试寄存器

全局描述符表寄存器GDTR 全局描述符表GDT 每个GDT最多含有$2^{13}$个描述符(64KB,一个描述符8字节),可以存放在内存的任何位置,GDTR48位 基址(线性地址)+限长(字节为单位,限长+1=GDT长度) LGDT可以将GDT的起始位置装入线性地址

中断描述符表寄存器IDTR IDT存中断门描述符,8字节each,IDT最多包含256个门描述符因为CPU最多支持256个中断。IDTR结构类似GDTR LIDT

局部描述符寄存器LDTR 每个任务有且只有一个全局描述符表LDT。LDTR的内容是一个16位选择符,指向一个LDT描述符(从GDT里索引),LDT描述符指出LDT位置和大小!

任务寄存器TR是16位选择符,内容为索引值,选中一个TSS描述符。TR初值软件装入 任务切换指令时自动修改。每个任务都有自己的任务状态段TSS,TSS的基址和限长由TSS描述符指出,TSS描述符放在GDT中。

段寄存器在实模式下放基址高位(前16),保护模式下存段选择符。

2.4 内存管理

16位段选择符+32位偏移量。若禁止分页功能,线性地址就直接作为物理地址

32位线性地址=页目录索引10位+页表索引10位+页面索引(偏移)12位

TLB保存32个页描述符

页目录表 页表

页表描述符和页目录表描述符都是32位的,4个字节

2.5 任务

=任务执行环境TES(代码段,堆栈段每个特权级有一个,数据段)+任务状态段TSS

TSS描述符一定要存在GDT中 任务门放IDT GDT LDT都可以

任务切换:LDTR CR3(PDBR) TR TSS都要改变具体在书P64 任务切换不能递归可以嵌套

TSS 描述符,门描述符都属于系统描述符

2.6 保护

类型检查,限长检查,其他属性检查,特权级检查!!

数据保护:DPL>=MAX(CPL,RPL) 一致位C=1时,CPL和DPL可能不相等

程序保护:书P69 直接转移保护 70间接转移保护(任务门描述符)调用门

输入输出保护

第三章 指令系统

3.1 数据寻址方式

立即寻址方式不能是目标的寻址方式

寄存器寻址方式中目标寄存器不能是CS

存储器操作数寻址:直接寻址 寄存器间接寻址 (+偏移量=) 寄存器相对寻址 基址变址寻址(不能用ESP,+偏移量=) 相对基址变址变址 比例变址寻址

3.2 数据运算指令

数据传送指令: P81

MOV SEG OFFSET MOVSX(带符号拓展) MOVZX(带0拓展) PUSH(减SP) POP XCHG IN OUT(端口号大于255放DX中) LEA(源操作数必须是存储器操作数) PUSHF POPF PUSHSFD POPFD(影响标志寄存器的)

立即数不能作为目标操作数,立即数不能直接送段寄存器,目标寄存器不能是CS,段寄存器之间不能直接传送,存储单元之间不能直接传送

算术运算指令:P86

类型转换指令CBW CWD CDQ CWDE

二进制加法指令 ADD ADC INC XADD 无符号数溢出CF=1 带符号数溢出OF=1

二进制减法指令 SUB SBB DEC CMP NEG(可用于求相反数) 无符号数溢出CF=1 带符号数溢出OF=1

二进制乘法指令 MUL(源操作数不能是立即数) IMUL多种类型

二进制除法指令 DIV IDIV (源操作数作为除数)

位运算指令:P95

逻辑运算指令 NOT AND TEST(AND,但不改变操作数本身只影响标志位) OR XOR

eg. 把AL中的0-9二进制转成十进制数的ADCII码形式,就是高4位变成0011B,低4位不变 OR AL,30H

eg.转换AL中字母大小写 XOR AL,20H

位测试指令 BT BTS BTR BTC

基本移位指令 SHL SAL SHR SAR

循环移位指令 ROL ROR RCL RCR

3.3 程序控制指令

段内转移和段间转移,可以分为直接转移和间接转移 P98

段内直接寻址:IP+位移量 短转移 位移量8位 JMP SHORT LAB 近转移 位移量16或32位 JMP LAB / JMP NEAR PTR LAB

段内间接寻址:EA在通用寄存器或者内存单元中 JMP BX JMP WORD PTR VAR

段间直接寻址:指令中直接给出偏移量和段基址,偏移量送IP 段基址/段选择符送CS JMP FAR PTR LAB

段间间接寻址:双字内存变量的低16位送IP 高16位送CS 源变量不能是立即寻址 不能是寄存器寻址

条件转移指令:P103

JC JNC JO JNO JP JPE JNP JPO JS JNS JZ JE JNE JNZ

带符号数的比较 JG JNLE JNG JLE JL JNGE JNL JGE

无符号数的比较 JA JNBE JNA JBE JB JNAE JC JNB JAE JNC

测试CX ECX值是否为0 JCXZ JECXZ

循环指令:P105 只能段内短转移 CX/ECX控制循环次数,先-1,判断,CX=0就顺序执行下一条指令

LOOP LOOPE/LOOPZ LOOPNE/LOOPNZ

子程序调用与返回指令:P107 CALL RET 段内压IP,段间先压CS再压IP

中断调用与返回指令:P109 INT

3.4 处理机控制指令

标志操作指令 P111 CLC STC CMC CLD STD CLI STI

常用处理机控制指令 NOP HLT WAIT LOCK

3.5 块操作指令

处理字符串和数据块 P111

MOVSB MOVSW MOVSD CMPSB CMPSW CMPSD SCASB SCASW SCASD STOSB STOSW STOSD LODSB LODSW LODSD + 重复前缀 REP REPZ REPNZ

源操作数是DS:[ESI]指的内存单元或者累加器 目标操作数是ES:[EDI]指的内存单元或者累加器

第四章 汇编语言程序开发

4.1 汇编语言基本知识

除了数据定义语句分配存储空间外,其他伪指令不生成目标码。

4.2 常用伪指令

回车符 0DH 换行符 0AH

逻辑操作符只能用在数值表达式中

关系操作符 EQ NE LT LE GT GE结果为真就FFFFFF 结果为假就0 操作数必须是常数或者常数表达式

框架定义伪指令以.开始 编写不同类型的可执行文件,用.MODEL定义不同的参数

4.3 汇编源程序格式

最先诞生的是字符应用界面CUI 然后开发出了GUI GUI程序一般需要和user32.lib gdi32.lib链接。 GUI运行环境设置为Windows CUI运行环境设置为Console P129

msvcrt.dll是Windows自带的 lib里列出了所有库函数的名称以及库函数的序号,程序里includelib就可以,可执行文件执行时只需要dll不需要导入库 这种连接方式是动态链接。还有静态链接,DOS只支持静态链接,连接成可执行文件的时候用LINK指令。

对于所有要用到的库函数都要先在程序开始部分声明 inc P133

对于要改变值的变量,不能放在.code部分,因为运行在特权级3的程序不可以写代码区

用ptr sbyte 代表const char* 实际上,调用的时候只注重类型 而不关心名称 printf用:ptr sbyte / :dword 都可以

4.4 分支与循环程序设计

4.5 浮点运算

浮点寄存器栈 8个80位寄存器 还有3个16位的寄存器 控制寄存器 状态寄存器 标志寄存器

P159

fld(一定要是内存定义的变量load进来) FINIT FMUL FADD FST FSTP

4.6 程序优化

第五章 子程序设计

5.1 子程序基本知识

堆栈:临时性 快速性 动态拓展性

5.2 参数传递

通过寄存器传递 通过数据区的变量传递 通过堆栈传递 前两者不能递归调用

C默认cdecl方式,主程序参数出栈 还有stdcall 子程序出栈 P174

[EBP+8] 第一个参数 [EBP+12]第二个参数,因此不能随便改变EBP的值 每个堆栈中参数占4字节 子程序返回值放在EAX中

子程序中的局部变量LOCAL [EBP-4]第一个 [EBP-8]第二个 但是可以直接用他们的名字

5.3 子程序的特殊应用

嵌套深度取决于堆栈的容量

缓冲区溢出是由编程错误引起的 P182

堆栈溢出和数据区溢出

5.4 模块化程序设计

软件开发:系统分析 系统设计 程序编码 代码调试 系统测试 系统维护

EXTERN EXTRN PUBLIC

链接两个文件 P187

5.5 C语言反汇编

5.6 C和汇编混合编程

P194

第六章 存储系统与技术

6.1 Cache

外部存储器由磁性存储器 光存储器 半导体存储器三种方式

DRAM主存 SRAM缓存

程序局部性:P199

Cache和CPU 系统总线之间存在两种结构:贯通查找式 旁路读出式

一级缓存哈佛结构 追踪缓存 不仅实时解码,还缓存一些指令

MESI-修改 独占 共享 无效

6.2 内部存储器

ROM断电后信息不丢失 非易失 RAM易失 半导体存储器分类P203

带宽=总线宽度×总线频率×一个时钟周期内交换的数据包个数