Files
final-exam/接口与通讯技术/重点复习/选择题专题/x86指令系统与寄存器.md
T

4.3 KiB
Raw Blame History

tags, create time
tags create time
接口与通讯技术
x86
指令系统
寄存器
选择题
重点复习
2026-06-28 16:30

x86 指令系统与寄存器 选择题考点

概述

x86 指令系统与寄存器在 3 套试卷中共出现 7 题,是考点最分散但也最有规律的部分。核心围绕段寄存器功能、寻址方式、隐含寄存器、标志位计算、位操作指令、堆栈操作六个方向。

正文

1. 段寄存器功能分工

段寄存器 全称 用途 关联指令/操作
CS Code Segment 代码段 取指令
DS Data Segment 数据段(默认数据段基址) 访问变量
SS Stack Segment 堆栈段 PUSH/POP/CALL
ES Extra Segment 附加段 串操作目的段

[!important] 高频考点 DS(数据段寄存器)用于存放当前数据段段首址。 访问内存变量时默认使用 DS 作为段基址。

2. 寻址方式辨析

寻址方式 示例 操作数来源
寄存器 MOV AX, BX 寄存器中
寄存器间接 MOV AX, [BX] 内存,地址在寄存器
变址 MOV AX, [SI+10H] 内存,SI/DI + 偏移
立即数 MOV AX, 1234H 指令中直接编码的常数
I/O 间接 IN AL, DX I/O 端口地址在 DX 中

[!question] 思考题 MOV AX, 1234H 中 1234H 是立即数,MOV AX, [1234H] 中 1234H 是什么?

答:后者是直接寻址,1234H 是内存地址,CPU 会去访问该内存单元取数据。方括号 [] 是关键区别。

3. 隐含寄存器

指令 隐含使用的寄存器 作用
LOOP CX 循环计数器,每次减 1,为 0 时退出
I/O 间接寻址 DX 存放 16 位 I/O 端口地址
MUL/DIV AX 乘法被乘数/除法被除数
XLAT BX + AL 查表基址 + 偏移

[!tip] 记忆规律

  • LOOP → CX(都是"循环"相关)
  • I/O 间接 → DX(Data eXchange,数据交换端口)

4. 标志位计算(ADD 指令)

以 ADD AL, BL 为例:

AL = 58H = 0101 1000
BL = 96H = 1001 0110
────────────────────
     1110 1110 = EEH
标志位 判断规则 本例结果
SF(符号标志) 结果最高位 D7 D7=1 → SF=1
ZF(零标志) 结果是否为 0 EEH≠0 → ZF=0
CF(进位标志) 最高位是否有进位 无进位 → CF=0
OF(溢出标志) 两个同号数相加结果变号 58H正+96H负→不同号,OF=0

5. 位操作指令

通用规则:AND 清零,OR 置位,XOR 取反。

目标 指令模板 掩码构造规则
某位清零 AND AL, mask 目标位=0,其余=1
某位置位 OR AL, mask 目标位=1,其余=0
某位取反 XOR AL, mask 目标位=1,其余=0

[!example] 真题 将 AL 的 D1 位清零,其他位不变。D1 对应掩码 = 1111 1101 = 0FDH。 答案:AND AL, 0FDH

graph TD
    A["位操作需求"] --> B["清零某位"]
    A --> C["置位某位"]
    A --> D["取反某位"]
    B --> B1["AND 指令<br/>目标位掩码=0"]
    C --> C1["OR 指令<br/>目标位掩码=1"]
    D --> D1["XOR 指令<br/>目标位掩码=1"]
    style B1 fill:#fdd,stroke:#333,color:#000
    style C1 fill:#dfd,stroke:#333,color:#000
    style D1 fill:#ffd,stroke:#333,color:#000

6. 堆栈操作 POP

POP 指令执行步骤(以 POP AX 为例):

栈顶物理地址 = SS × 10H + SP

POP AX:
  ① AL ← [SS:SP]      (低地址 → 低字节)
     SP ← SP + 1
  ② AH ← [SS:SP]      (高地址 → 高字节)
     SP ← SP + 1

[!example] 真题 (SS)=1000H, (SP)=1234H, (11234H)=12H, (11235H)=34H 栈顶地址 = 1000H × 10H + 1234H = 11234H POP AX: AL=12H, AH=34H → AX = 3412H

[!warning] 易错点 POP 弹出顺序:先弹低字节给低寄存器,再弹高字节给高寄存器(小端序)。不要搞反 AH 和 AL 的取值!

关联笔记