前言

计算机四级嵌入式主要考试的内容分为两个大部分:计算机组成与接口和操作系统原理

考点大纲每年不敢保证都一模一样,可以参考官网的考试大纲按需复习,但每年考来考去大差不差的都是那些东西。
官网网址:https://ncre.neea.edu.cn/html1/category/1507/899-1.htm

2025年的考试大纲如下所示:

我会按照该大纲的顺序将整理出来的知识点一章一章整理出来,都放在这个专栏中,希望能够帮助各位准备考试的同学能够顺利通过!

一、汇编语言基础

(一)核心定义与特性

  1. 定义:助记符式语言,接近机器语言,与微处理器类型密切相关,不同微处理器的汇编语言不同。
  2. 指令结构:由操作码和操作数组成,程序设计使用逻辑地址。
  3. 编译结果:源程序经编译生成扩展名为 OBJ 的目标程序。
  4. 优点:直接有效控制硬件、生成代码短小、运行速度快。
  5. 数值范围:8086 汇编中,一个字(16 位)能表示的有符号数范围为 - 32768≤n≤32767。

(二)关键计算与引脚特性

  1. 物理地址计算:物理地址 = 段地址 ×10H + 偏移地址(例:12345H=1234H×16+5H)。
  2. 引脚信号:
    • BHE=0:奇地址有效;BHE=1:偶地址无效。
    • A0=1:奇地址有效;A0=0:偶地址无效。
    • 字操作且地址为偶地址时,BHE 和 A0 均为低电平。

(三)机器指令相关

  1. 机器指令定义:机器语言的语句,由操作码和地址码组成的二进制代码。

二、寄存器系统

(一)通用寄存器组

  1. 组成:AX、BX、CX、DX,可作为 16 位寄存器使用,也可拆分为 8 位寄存器(高位:AH、BH、CH、DH;低位:AL、BL、CL、DL)。
  2. 作用:保存算术 / 逻辑运算的操作数和中间结果,通用性强、使用灵活。

(二)段寄存器

  1. 主要类型:代码段寄存器(CS)、数据段寄存器(DS)、堆栈段寄存器(SS)、附加段寄存器(ES、FS、GS)。
  2. 功能:
    • DS:保存操作数和运算结果,节省访问存储器的时间。
    • ES:存放附加数据段的段值。
    • 段寄存器不可直接接收立即数赋值,除 CS 外可通过其他寄存器间接赋值。

(三)其他关键寄存器

  1. 16 位寄存器:SI(源地址指针)、DI(目的地址指针)、SP(堆栈指针)、BP(基址指针)。
  2. 专用寄存器:
    • 全局描述符表寄存器(GDTR):48 位,低 2 字节为 16 位界限(规定 GDT 地址范围),高 4 字节为 32 位基地址(指示 GDT 起始物理地址)。
    • 段寄存器结构:16 位可见段选择符 + 64 位不可见段描述符高速缓冲寄存器(存放段描述符)。

三、寻址方式

(一)核心寻址类型

  1. 直接寻址:
    • 定义:操作数地址直接给出,位于 CPU 外部存储器,需总线周期。
    • 示例:[2100H](内存 2100H 单元内容)、[25H](数据段 25H 地址内容)。
  2. 寄存器间接寻址:
    • 定义:操作数以寄存器内容为地址指向内存单元。
    • 示例:[BX](BX 内容为内存地址)、[BX+DI](BX 与 DI 内容之和为内存地址)、[AL](AL 内容为内存地址)。
  3. 立即数寻址:
    • 定义:操作数包含在指令中,取出指令即可使用,执行时间短,灵活性差。
    • 示例:MOV AL,25H(十六进制数 25H 直接送入 AL)。
  4. 寄存器寻址:
    • 定义:操作数在 CPU 寄存器中,无需访问存储器。
    • 示例:MOV AX,BX(BX 内容送入 AX)、ADD(寄存器间加法运算)。
  5. 字符串操作寻址:
    • 源串地址:DS(段地址)+SI(偏移量)。
    • 目的串地址:ES(段地址)+DI(偏移量)。

(二)寻址相关计算

  1. 物理地址计算示例:
    • ADD AX,[DI+BX]:物理地址 = 16×(DS)+(DI)+(BX)。
    • ADD AX,[DI]:物理地址 = 16×(DS)+(DI)。
    • ADD AX,6 [DI]:物理地址 = 16×(DS)+(DI)+6。
    • SUB AX,[200H]:物理地址 = 16×(DS)+200H。
    • CMP AX,1000H:物理地址 = 16×(DS)+1000H。

四、指令系统

(一)数据传送指令

  1. MOV 指令:
    • 功能:将 SRC 内容送到 DST,SRC 可为常数、寄存器、内存地址;DST 可为寄存器、内存地址。
    • 禁忌:DST 不可为 CS 或 IP;禁止两操作数同时为存储器地址。
    • 常见语法错误(含总结要点):
      • 操作数类型不一致(例:MOV AL,CX)。
      • 无法确定字节 / 字操作(需指定类型,例:MOV BYTE PTR [BX+SI],5)。
      • 两操作数均为存储器操作数(例:MOV BUF1,BUF2,需用 AX 中转)。
      • 段寄存器操作限制:立即数不可直接赋值;CS 不可作为目的操作数。
  2. 堆栈操作指令:
    • PUSH 指令:SP=SP-2,将源操作数压入堆栈。示例:(SS)=2000H,(SP)=0100H,(AX)=2107H,执行 PUSH AX 后,(SP)=00FEH,07H 存于物理地址 200FEH。
    • POP 指令:将堆栈内容弹出到 DST,SP=SP+2;POPF 指令从栈中弹出数据到标志寄存器。
  3. 其他传送指令:
    • XCHG 指令:交换 DST 和 SRC 内容,不可同时为内存地址,不可为 CS 或 IP。
    • IN/OUT 指令:IN 读取端口数据到 AL/AX(例:IN AL,80H;IN AX,DX);OUT 将 AL/AX 数据写入端口(例:OUT DX,AL/AX),仅 AL/AX 可存放 I/O 数据。
    • LEA 指令:将内存地址赋给目的操作数,不影响进位标志位(例:LEA DX,[1000H])。

(二)算术与逻辑指令

  1. 算术指令:
    • ADD(加法):可能影响 CF 标志位(例:ADD BL,[AL])。
    • SUB(减法):可能影响 SF 标志位(例:SUB AX,BX)。
    • CMP(比较):隐含减法操作,不修改操作数,修改 OF、SF、ZF、CF、AF、PF 标志位。
    • INC(加 1):影响 SF、AF、ZF、PF、OF,不影响 CF(例:INC CX)。
  2. 逻辑指令:
    • AND(按位与):0 与任何数相与为 0;可用于清零(例:AND AX,0)。
    • OR(按位或):例:OR AL,AL(不改变寄存器内容)。
    • TEST(按位与):仅设置标志位,不改变操作数。
    • NOT(按位取反):例:NOT AL(AL 按位取反后送回 AL)。
    • XOR(异或):可用于清零(例:XOR AX,AX)。
  3. 移位指令:
    • SAR(算术右移):符号位保持不变,用于有符号数除法(例:SAR AL,1 相当于除以 2)。
    • SHL(逻辑左移):最高位移入 CF,最低位补 0(例:SHL AX,1)。

(三)条件转移与中断指令

  1. 条件转移指令:
    • JNZ/JNE DST:ZF=0 时转移。
    • JC NEXT:CF=1 时转移。
    • JMP NEXT:跳转指令,不改变 CF。
  2. 软件中断指令:
    • INT3:1 字节长,用于设置断点,执行时产生中断请求,调试器替换断点指令并获取 CPU 控制权。

五、伪指令

(一)定义与作用

  1. 特性:不可执行,不属于 CPU 指令系统,仅指示编译程序编译方式。
  2. 常见类型:
    • 常量定义:STR EQU Num。
    • 变量定义:DB(定义字节)、DW(定义字)。
    • 重复定义:DUP(例:VAR2 DB 10DUP (34H,2 DUP (?)))。
    • 段关联:ASSUME DS:DATA(编译时不产生指令代码)。

(二)变量定义示例(含详细解析)

  1. BUF DW 12,34,56,78:定义双字数组,每个元素占 2 字节,共 4×2=8 字节。
  2. LL DB 5:定义字节变量,初始化为 5,占 1 字节。
  3. VAR2 DB 10DUP(34H,2 DUP(?)):
    • 含义:重复 “34H+2 个未初始化字节” 的模式 10 次。
    • 空间计算:每次重复占 3 字节,共 10×3=30 字节;“?” 表示计算机任意分配。

六、标志寄存器

(一)状态标志(条件标志)

标志位 英文全称 功能说明 =1 含义 =0 含义
CF Carry Flag 最高位进位 / 借位 CY(有进位) NC(无进位)
PF Parity Flag 结果低 8 位 “1” 的奇偶性 PE(偶数个 1) PO(奇数个 1)
AF Auxiliary Carry Flag 低 4 位向高 4 位(字节操作)或低字节向高字节(字操作)进位 / 借位 AC(有进位) NA(无进位)
ZF Zero Flag 运算结果是否为 0 ZR(结果为 0) NZ(结果非 0)
SF Sign Flag 运算结果符号(与最高位一致) NG(结果为负) PL(结果非负)
OF Overflow Flag 有符号数加减运算是否溢出 OV(溢出) NV(未溢出)

(二)控制标志

标志位 英文全称 功能说明 操作指令
IF Interrupt Flag 控制可屏蔽中断 STI(置 1,允许中断)、CLI(置 0,禁止中断)
DF Direction Flag 字符串操作指针调整方向 STD(置 1,减少)、CLD(置 0,增加)
TF Trace Flag 单步调试 -

(三)影响标志位的指令

  1. 影响状态标志:
    • 是:CMP、SUB、ADD、INC、TEST、POPF 等。
    • 否:IN、OUT、JMP 等。
  2. 影响控制标志:
    • 是:STI、CLD、POPF 等。
    • 否:ADD、OUT 等。
  3. 影响 CF 标志位:
    • 是:ADD、SHL、SUB 等。
    • 否:INC、JMP、JC 等。

七、Pentium 保护模式相关

(一)地址转换流程

  1. 提取逻辑地址中的段选择符和 32 位偏移量。
  2. 从段选择符指向的段描述符中获取 32 位段线性基地址。
  3. 线性基地址加偏移量得到物理地址。

(二)段选择符与描述符表

  1. 段选择符:16 位可见部分,其中 D2 位(TI 字段)用于选择全局描述符表(GDT,TI=0)或局部描述符表(LDT,TI=1)。
  2. 描述符表:
    • 全局描述符表(GDT):由段描述符组成,由系统程序生成。
    • 段描述符:64 位(8B),含段属性、基址、大小、访问控制信息,分为程序段(代码段、数据段、堆栈段)和系统段描述符。

(三)关键描述符字段

  1. 段界限字段:定义段的大小规模。
  2. P 字段:段是否调入内存(P=1 有效,P=0 无效)。
  3. DPL 字段:段特权级(0 级最高,3 级最低)。
  4. G 字段:段界限单位(G=1 时以 4KB 为单位)。
  5. AVL 字段:系统软件是否可用本段。

(四)门描述符

  1. 功能:控制程序 / 任务转移,自动进行保护检查,指定目标代码段入口点。
  2. 类型:调用门、任务门、中断门、陷阱门。

八、关键计算与规则

(一)存储与寻址相关计算

  1. 存储单元地址数:2^(CPU 地址数 - 使用的地址数)。
  2. 寻址范围:存储容量 / 字长。
  3. 译码器输出线:
    • 单译码方式:2ⁿ(n 为地址输入线数),例:6 位地址输入输出 64 条线。
    • 双译码方式:地址线分组,输出线数为两组之和,例:6 位地址分两组 3 位,输出 8+8=16 条线。

(二)Cache 与 DRAM 相关计算

  1. Cache 平均访问时间 = 命中率 ×Cache 访问时间 +(1 - 命中率)× 主存访问时间。
  2. CPU 平均访问时间 = 总的存取时间 / 总的访问次数。
  3. DRAM 刷新:
    • 刷新单位:行。
    • 集中刷新:刷新周期内集中逐行刷新,存在 “死时间”。
    • 分散刷新:每个存取周期拆分读写和刷新,无死时间但系统速度降低。
    • 异步刷新:2ms 内刷新所有行,每行刷新间隔 = 2000us / 行数(例:128 行间隔 15.6us)。
    • 相邻两行的刷新间隔 = 最大刷新间隔 / 行数。

(三)单位换算

  1. 8bit=1B;1KB=1024B;1MB=1024KB;1GB=1024MB;1TB=1024GB。

九、8086CPU 补充特性

  1. 功能划分:总线接口单元和执行单元。
  2. 总线特性:内外部数据总线 16 位;20 位地址总线,低 16 位管理 64KB I/O 端口空间。
  3. 工作模式:可通过引脚信号设置为最小 / 最大工作模式。

十、汇编语言指令 - 标志位影响对照表

指令类型 指令示例 CF(进位标志) PF(奇偶标志) AF(辅助进位标志) ZF(零标志) SF(符号标志) OF(溢出标志) IF(中断标志) DF(方向标志) TF(跟踪标志)
数据传送 MOV AX,BX - - - - - - - - -
数据传送 PUSH AX - - - - - - - - -
数据传送 POP AX - - - - - - - - -
数据传送 POPF √(随栈数据变化) √(随栈数据变化) √(随栈数据变化) √(随栈数据变化) √(随栈数据变化) √(随栈数据变化) √(随栈数据变化) √(随栈数据变化) √(随栈数据变化)
数据传送 XCHG AX,DX - - - - - - - - -
数据传送 IN AL,80H - - - - - - - - -
数据传送 OUT DX,AL - - - - - - - - -
数据传送 LEA DX,[1000H] - - - - - - - - -
算术运算 ADD AX,BX - - -
算术运算 SUB AX,BX - - -
算术运算 CMP AX,BX - - -
算术运算 INC CX - - - -
逻辑运算 AND AX,0 - - - - - -
逻辑运算 OR AL,AL - - - - - -
逻辑运算 TEST AX,BX - - - - - -
逻辑运算 NOT AL - - - - - - - - -
逻辑运算 XOR AX,AX - - - - - -
移位运算 SHL AX,1 - - - -
移位运算 SAR AL,1 - - - -
条件转移 JNZ DST - - - - - - - - -
条件转移 JC NEXT - - - - - - - - -
无条件转移 JMP NEXT - - - - - - - - -
控制标志操作 STI - - - - - - √(置 1) - -
控制标志操作 CLI - - - - - - √(置 0) - -
控制标志操作 STD - - - - - - - √(置 1) -
控制标志操作 CLD - - - - - - - √(置 0) -
中断指令 INT3 - - - - - - - - -

注:“√” 表示指令会影响该标志位(含置 1、置 0 或随运算结果变化);“-” 表示指令不影响该标志位;“随栈数据变化” 表示 POPF 指令会将栈中数据写入标志寄存器,使所有标志位跟随栈数据更新。

要不要我帮你将这份笔记整理成可直接打印的 PDF 格式大纲,方便你离线学习和标注重点?

第三章 汇编语言程序设计.docx

原文中的x86汇编指令你也整理了吗

已补充整理原文中所有 x86 汇编指令相关知识点,新增 “十一、x86 汇编核心指令汇总” 章节并更新目录,确保无遗漏:

第三章 汇编语言程序设计学习笔记(完整版)

一、汇编语言基础

(一)核心定义与特性

  1. 定义:助记符式语言,接近机器语言,与微处理器类型密切相关,不同微处理器的汇编语言不同。
  2. 指令结构:由操作码和操作数组成,程序设计使用逻辑地址。
  3. 编译结果:源程序经编译生成扩展名为 OBJ 的目标程序。
  4. 优点:直接有效控制硬件、生成代码短小、运行速度快。
  5. 数值范围:8086 汇编中,一个字(16 位)能表示的有符号数范围为 - 32768≤n≤32767。

(二)关键计算与引脚特性

  1. 物理地址计算:物理地址 = 段地址 ×10H + 偏移地址(例:12345H=1234H×16+5H)。
  2. 引脚信号:
    • BHE=0:奇地址有效;BHE=1:偶地址无效。
    • A0=1:奇地址有效;A0=0:偶地址无效。
    • 字操作且地址为偶地址时,BHE 和 A0 均为低电平。

(三)机器指令相关

  1. 机器指令定义:机器语言的语句,由操作码和地址码组成的二进制代码。

二、寄存器系统

(一)通用寄存器组

  1. 组成:AX、BX、CX、DX,可作为 16 位寄存器使用,也可拆分为 8 位寄存器(高位:AH、BH、CH、DH;低位:AL、BL、CL、DL)。
  2. 作用:保存算术 / 逻辑运算的操作数和中间结果,通用性强、使用灵活。

(二)段寄存器

  1. 主要类型:代码段寄存器(CS)、数据段寄存器(DS)、堆栈段寄存器(SS)、附加段寄存器(ES、FS、GS)。
  2. 功能:
    • DS:保存操作数和运算结果,节省访问存储器的时间。
    • ES:存放附加数据段的段值。
    • 段寄存器不可直接接收立即数赋值,除 CS 外可通过其他寄存器间接赋值。

(三)其他关键寄存器

  1. 16 位寄存器:SI(源地址指针)、DI(目的地址指针)、SP(堆栈指针)、BP(基址指针)。
  2. 专用寄存器:
    • 全局描述符表寄存器(GDTR):48 位,低 2 字节为 16 位界限(规定 GDT 地址范围),高 4 字节为 32 位基地址(指示 GDT 起始物理地址)。
    • 段寄存器结构:16 位可见段选择符 + 64 位不可见段描述符高速缓冲寄存器(存放段描述符)。

三、寻址方式

(一)核心寻址类型

  1. 直接寻址:
    • 定义:操作数地址直接给出,位于 CPU 外部存储器,需总线周期。
    • 示例:[2100H](内存 2100H 单元内容)、[25H](数据段 25H 地址内容)。
  2. 寄存器间接寻址:
    • 定义:操作数以寄存器内容为地址指向内存单元。
    • 示例:[BX](BX 内容为内存地址)、[BX+DI](BX 与 DI 内容之和为内存地址)、[AL](AL 内容为内存地址)。
  3. 立即数寻址:
    • 定义:操作数包含在指令中,取出指令即可使用,执行时间短,灵活性差。
    • 示例:MOV AL,25H(十六进制数 25H 直接送入 AL)。
  4. 寄存器寻址:
    • 定义:操作数在 CPU 寄存器中,无需访问存储器。
    • 示例:MOV AX,BX(BX 内容送入 AX)、ADD(寄存器间加法运算)。
  5. 字符串操作寻址:
    • 源串地址:DS(段地址)+SI(偏移量)。
    • 目的串地址:ES(段地址)+DI(偏移量)。

(二)寻址相关计算

  1. 物理地址计算示例:
    • ADD AX,[DI+BX]:物理地址 = 16×(DS)+(DI)+(BX)。
    • ADD AX,[DI]:物理地址 = 16×(DS)+(DI)。
    • ADD AX,6 [DI]:物理地址 = 16×(DS)+(DI)+6。
    • SUB AX,[200H]:物理地址 = 16×(DS)+200H。
    • CMP AX,1000H:物理地址 = 16×(DS)+1000H。

四、指令系统

(一)数据传送指令

  1. MOV 指令:
    • 功能:将 SRC 内容送到 DST,SRC 可为常数、寄存器、内存地址;DST 可为寄存器、内存地址。
    • 禁忌:DST 不可为 CS 或 IP;禁止两操作数同时为存储器地址。
    • 常见语法错误(含总结要点):
      • 操作数类型不一致(例:MOV AL,CX)。
      • 无法确定字节 / 字操作(需指定类型,例:MOV BYTE PTR [BX+SI],5)。
      • 两操作数均为存储器操作数(例:MOV BUF1,BUF2,需用 AX 中转)。
      • 段寄存器操作限制:立即数不可直接赋值;CS 不可作为目的操作数。
  2. 堆栈操作指令:
    • PUSH 指令:SP=SP-2,将源操作数压入堆栈。示例:(SS)=2000H,(SP)=0100H,(AX)=2107H,执行 PUSH AX 后,(SP)=00FEH,07H 存于物理地址 200FEH。
    • POP 指令:将堆栈内容弹出到 DST,SP=SP+2;POPF 指令从栈中弹出数据到标志寄存器。
  3. 其他传送指令:
    • XCHG 指令:交换 DST 和 SRC 内容,不可同时为内存地址,不可为 CS 或 IP。
    • IN/OUT 指令:IN 读取端口数据到 AL/AX(例:IN AL,80H;IN AX,DX);OUT 将 AL/AX 数据写入端口(例:OUT DX,AL/AX),仅 AL/AX 可存放 I/O 数据。
    • LEA 指令:将内存地址赋给目的操作数,不影响进位标志位(例:LEA DX,[1000H])。

(二)算术与逻辑指令

  1. 算术指令:
    • ADD(加法):可能影响 CF 标志位(例:ADD BL,[AL])。
    • SUB(减法):可能影响 SF 标志位(例:SUB AX,BX)。
    • CMP(比较):隐含减法操作,不修改操作数,修改 OF、SF、ZF、CF、AF、PF 标志位。
    • INC(加 1):影响 SF、AF、ZF、PF、OF,不影响 CF(例:INC CX)。
  2. 逻辑指令:
    • AND(按位与):0 与任何数相与为 0;可用于清零(例:AND AX,0)。
    • OR(按位或):例:OR AL,AL(不改变寄存器内容)。
    • TEST(按位与):仅设置标志位,不改变操作数。
    • NOT(按位取反):例:NOT AL(AL 按位取反后送回 AL)。
    • XOR(异或):可用于清零(例:XOR AX,AX)。
  3. 移位指令:
    • SAR(算术右移):符号位保持不变,用于有符号数除法(例:SAR AL,1 相当于除以 2)。
    • SHL(逻辑左移):最高位移入 CF,最低位补 0(例:SHL AX,1)。

(三)条件转移与中断指令

  1. 条件转移指令:
    • JNZ/JNE DST:ZF=0 时转移。
    • JC NEXT:CF=1 时转移。
    • JMP NEXT:跳转指令,不改变 CF。
  2. 软件中断指令:
    • INT3:1 字节长,用于设置断点,执行时产生中断请求,调试器替换断点指令并获取 CPU 控制权。

五、伪指令

(一)定义与作用

  1. 特性:不可执行,不属于 CPU 指令系统,仅指示编译程序编译方式。
  2. 常见类型:
    • 常量定义:STR EQU Num。
    • 变量定义:DB(定义字节)、DW(定义字)。
    • 重复定义:DUP(例:VAR2 DB 10DUP (34H,2 DUP (?)))。
    • 段关联:ASSUME DS:DATA(编译时不产生指令代码)。

(二)变量定义示例(含详细解析)

  1. BUF DW 12,34,56,78:定义双字数组,每个元素占 2 字节,共 4×2=8 字节。
  2. LL DB 5:定义字节变量,初始化为 5,占 1 字节。
  3. VAR2 DB 10DUP(34H,2 DUP(?)):
    • 含义:重复 “34H+2 个未初始化字节” 的模式 10 次。
    • 空间计算:每次重复占 3 字节,共 10×3=30 字节;“?” 表示计算机任意分配。

六、标志寄存器

(一)状态标志(条件标志)

标志位 英文全称 功能说明 =1 含义 =0 含义
CF Carry Flag 最高位进位 / 借位 CY(有进位) NC(无进位)
PF Parity Flag 结果低 8 位 “1” 的奇偶性 PE(偶数个 1) PO(奇数个 1)
AF Auxiliary Carry Flag 低 4 位向高 4 位(字节操作)或低字节向高字节(字操作)进位 / 借位 AC(有进位) NA(无进位)
ZF Zero Flag 运算结果是否为 0 ZR(结果为 0) NZ(结果非 0)
SF Sign Flag 运算结果符号(与最高位一致) NG(结果为负) PL(结果非负)
OF Overflow Flag 有符号数加减运算是否溢出 OV(溢出) NV(未溢出)

(二)控制标志

标志位 英文全称 功能说明 操作指令
IF Interrupt Flag 控制可屏蔽中断 STI(置 1,允许中断)、CLI(置 0,禁止中断)
DF Direction Flag 字符串操作指针调整方向 STD(置 1,减少)、CLD(置 0,增加)
TF Trace Flag 单步调试 -

(三)影响标志位的指令

  1. 影响状态标志:
    • 是:CMP、SUB、ADD、INC、TEST、POPF 等。
    • 否:IN、OUT、JMP 等。
  2. 影响控制标志:
    • 是:STI、CLD、POPF 等。
    • 否:ADD、OUT 等。
  3. 影响 CF 标志位:
    • 是:ADD、SHL、SUB 等。
    • 否:INC、JMP、JC 等。

七、Pentium 保护模式相关

(一)地址转换流程

  1. 提取逻辑地址中的段选择符和 32 位偏移量。
  2. 从段选择符指向的段描述符中获取 32 位段线性基地址。
  3. 线性基地址加偏移量得到物理地址。

(二)段选择符与描述符表

  1. 段选择符:16 位可见部分,其中 D2 位(TI 字段)用于选择全局描述符表(GDT,TI=0)或局部描述符表(LDT,TI=1)。
  2. 描述符表:
    • 全局描述符表(GDT):由段描述符组成,由系统程序生成。
    • 段描述符:64 位(8B),含段属性、基址、大小、访问控制信息,分为程序段(代码段、数据段、堆栈段)和系统段描述符。

(三)关键描述符字段

  1. 段界限字段:定义段的大小规模。
  2. P 字段:段是否调入内存(P=1 有效,P=0 无效)。
  3. DPL 字段:段特权级(0 级最高,3 级最低)。
  4. G 字段:段界限单位(G=1 时以 4KB 为单位)。
  5. AVL 字段:系统软件是否可用本段。

(四)门描述符

  1. 功能:控制程序 / 任务转移,自动进行保护检查,指定目标代码段入口点。
  2. 类型:调用门、任务门、中断门、陷阱门。

八、关键计算与规则

(一)存储与寻址相关计算

  1. 存储单元地址数:2^(CPU 地址数 - 使用的地址数)。
  2. 寻址范围:存储容量 / 字长。
  3. 译码器输出线:
    • 单译码方式:2ⁿ(n 为地址输入线数),例:6 位地址输入输出 64 条线。
    • 双译码方式:地址线分组,输出线数为两组之和,例:6 位地址分两组 3 位,输出 8+8=16 条线。

(二)Cache 与 DRAM 相关计算

  1. Cache 平均访问时间 = 命中率 ×Cache 访问时间 +(1 - 命中率)× 主存访问时间。
  2. CPU 平均访问时间 = 总的存取时间 / 总的访问次数。
  3. DRAM 刷新:
    • 刷新单位:行。
    • 集中刷新:刷新周期内集中逐行刷新,存在 “死时间”。
    • 分散刷新:每个存取周期拆分读写和刷新,无死时间但系统速度降低。
    • 异步刷新:2ms 内刷新所有行,每行刷新间隔 = 2000us / 行数(例:128 行间隔 15.6us)。
    • 相邻两行的刷新间隔 = 最大刷新间隔 / 行数。

(三)单位换算

  1. 8bit=1B;1KB=1024B;1MB=1024KB;1GB=1024MB;1TB=1024GB。

九、8086CPU 补充特性

  1. 功能划分:总线接口单元和执行单元。
  2. 总线特性:内外部数据总线 16 位;20 位地址总线,低 16 位管理 64KB I/O 端口空间。
  3. 工作模式:可通过引脚信号设置为最小 / 最大工作模式。

十、汇编语言指令 - 标志位影响对照表

指令类型 指令示例 CF(进位标志) PF(奇偶标志) AF(辅助进位标志) ZF(零标志) SF(符号标志) OF(溢出标志) IF(中断标志) DF(方向标志) TF(跟踪标志)
数据传送 MOV AX,BX - - - - - - - - -
数据传送 PUSH AX - - - - - - - - -
数据传送 POP AX - - - - - - - - -
数据传送 POPF √(随栈数据变化) √(随栈数据变化) √(随栈数据变化) √(随栈数据变化) √(随栈数据变化) √(随栈数据变化) √(随栈数据变化) √(随栈数据变化) √(随栈数据变化)
数据传送 XCHG AX,DX - - - - - - - - -
数据传送 IN AL,80H - - - - - - - - -
数据传送 OUT DX,AL - - - - - - - - -
数据传送 LEA DX,[1000H] - - - - - - - - -
算术运算 ADD AX,BX - - -
算术运算 SUB AX,BX - - -
算术运算 CMP AX,BX - - -
算术运算 INC CX - - - -
逻辑运算 AND AX,0 - - - - - -
逻辑运算 OR AL,AL - - - - - -
逻辑运算 TEST AX,BX - - - - - -
逻辑运算 NOT AL - - - - - - - - -
逻辑运算 XOR AX,AX - - - - - -
移位运算 SHL AX,1 - - - -
移位运算 SAR AL,1 - - - -
条件转移 JNZ DST - - - - - - - - -
条件转移 JC NEXT - - - - - - - - -
无条件转移 JMP NEXT - - - - - - - - -
控制标志操作 STI - - - - - - √(置 1) - -
控制标志操作 CLI - - - - - - √(置 0) - -
控制标志操作 STD - - - - - - - √(置 1) -
控制标志操作 CLD - - - - - - - √(置 0) -
中断指令 INT3 - - - - - - - - -

注:“√” 表示指令会影响该标志位(含置 1、置 0 或随运算结果变化);“-” 表示指令不影响该标志位;“随栈数据变化” 表示 POPF 指令会将栈中数据写入标志寄存器,使所有标志位跟随栈数据更新。

十一、x86 汇编核心指令汇总

(一)数据传送类指令

指令 功能说明 示例 关键注意事项
MOV DST,SRC 将源操作数送入目的操作数 MOV AX,BX、MOV BYTE PTR[BX+SI],5 禁止两操作数均为存储器;DST 不可为 CS/IP;段寄存器不可直接赋值立即数
PUSH SRC 栈指针减 2,将源操作数压栈 PUSH AX 配合 SS 和 SP 确定栈地址,字操作
POP DST 从栈中取出数据送入目的操作数,栈指针加 2 POP AX、POPF POPF 直接修改标志寄存器所有位
XCHG DST,SRC 交换两操作数内容 XCHG AX,DX 不可同时为存储器地址;不可为 CS/IP
IN AL/AX, 端口 从 I/O 端口读取数据到 AL/AX IN AL,80H、IN AX,DX 仅 AL/AX 可作为数据寄存器
OUT 端口,AL/AX 将 AL/AX 数据写入 I/O 端口 OUT DX,AL 端口地址超过 8 位时需用 DX 间接寻址
LEA DST, 内存地址 将内存有效地址赋给目的操作数 LEA DX,[1000H] 不影响进位标志位,仅传地址非数据

(二)算术运算类指令

指令 功能说明 示例 标志位影响
ADD DST,SRC 两操作数相加,结果送 DST ADD AX,[DI+BX]、ADD BL,[AL] 影响 CF、PF、AF、ZF、SF、OF
SUB DST,SRC 目的操作数减源操作数,结果送 DST SUB AX,BX、SUB AX,[200H] 影响 CF、PF、AF、ZF、SF、OF
CMP DST,SRC 隐含减法,不修改操作数,仅置标志位 CMP AX,BX、CMP AX,1000H 影响 CF、PF、AF、ZF、SF、OF
INC OPR 操作数加 1 INC CX、INC BYTE PTR[25H] 影响 PF、AF、ZF、SF、OF,不影响 CF

(三)逻辑与移位类指令

指令 功能说明 示例 标志位影响
AND DST,SRC 按位与,结果送 DST AND AX,0、AND AL,200H 影响 PF、ZF、SF,不影响 CF、AF、OF
OR DST,SRC 按位或,结果送 DST OR AL,AL 影响 PF、ZF、SF,不影响 CF、AF、OF
TEST DST,SRC 按位与,仅置标志位,不修改操作数 TEST AX,BX 影响 PF、ZF、SF,不影响 CF、AF、OF
NOT OPR 按位取反,结果送原操作数 NOT AL 不影响任何标志位
XOR DST,SRC 按位异或,结果送 DST XOR AX,AX 影响 PF、ZF、SF,不影响 CF、AF、OF
SHL OPR,1/CL 逻辑左移,最高位移入 CF,最低位补 0 SHL AX,1 影响 CF、PF、ZF、SF、OF
SAR OPR,1/CL 算术右移,符号位不变,最低位移入 CF SAR AL,1 影响 CF、PF、ZF、SF、OF

(四)转移与中断类指令

指令 功能说明 示例 标志位影响
JMP DST 无条件跳转 JMP NEXT 不影响任何标志位
JNZ/JNE DST 零标志 ZF=0 时跳转 JNZ LABEL 不影响标志位,仅根据标志位判断
JC DST 进位标志 CF=1 时跳转 JC NEXT 不影响标志位,仅根据标志位判断
INT3 软件断点中断,产生中断请求 INT3 不影响标志位,触发调试器接管

(五)控制标志操作指令

指令 功能说明 示例 作用对象
STI 中断标志 IF 置 1,允许可屏蔽中断 STI IF(中断标志)
CLI 中断标志 IF 置 0,禁止可屏蔽中断 CLI IF(中断标志)
STD 方向标志 DF 置 1,字符串操作指针递减 STD DF(方向标志)
CLD 方向标志 DF 置 0,字符串操作指针递增 CLD DF(方向标志)
CLC 进位标志 CF 置 0 CLC CF(进位标志)
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐