寄存器、内存操作

一、通用寄存器结构

32 位通用寄存器共有 8 个,每个 32 位寄存器的低 16 位又可作为 16 位寄存器使用。
其中 AX、CX、DX、BX 这四个 16 位寄存器,还能进一步拆分成两个 8 位寄存器(高 8 位和低 8 位)。

寄存器 编号(二进制) 编号(十进制)
32位 16位 8位
EAX AX AL 000 0
ECX CX CL 001 1
EDX DX DL 010 2
EBX BX BL 011 3
ESP SP AH 100 4
EBP BP CH 101 5
ESI SI DH 110 6
EDI DI BH 111 7

结构关系示意图

3116 150
EAX
ECX
EDX
EBX
ESP
EBP
ESI
EDI
15 0
AX
CX
DX
BX
SP
BP
SI
DI
158 70
AHAL
CHCL
DHDL
BHBL

二、MOV 指令详解

格式:MOV 目标操作数, 源操作数
作用:将源操作数的值拷贝到目标操作数。

所有合法形式(r = 通用寄存器,m = 内存单元,imm = 立即数):

1
2
3
4
5
6
7
8
9
MOV r/m8,  r8
MOV r/m16, r16
MOV r/m32, r32
MOV r8, r/m8
MOV r16, r/m16
MOV r32, r/m32
MOV r8, imm8
MOV r16, imm16
MOV r32, imm32

使用规则

  1. 源操作数可以是立即数、通用寄存器、段寄存器、内存单元。
  2. 目标操作数可以是通用寄存器、段寄存器、内存单元。
  3. 两个操作数的宽度必须一致。
  4. 源操作数和目标操作数不能同时为内存单元。

三、常用运算指令语法

以下列出 ADD、SUB、AND、OR、XOR、NOT 所有合法形式,练习时务必逐条在调试器中验证。

ADD(加法)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ADD AL, imm8
ADD AX, imm16
ADD EAX, imm32
ADD r/m8, imm8
ADD r/m16, imm16
ADD r/m32, imm32
ADD r/m16, imm8
ADD r/m32, imm8
ADD r/m8, r8
ADD r/m16, r16
ADD r/m32, r32
ADD r8, r/m8
ADD r16, r/m16
ADD r32, r/m32

SUB(减法)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SUB AL, imm8
SUB AX, imm16
SUB EAX, imm32
SUB r/m8, imm8
SUB r/m16, imm16
SUB r/m32, imm32
SUB r/m16, imm8
SUB r/m32, imm8
SUB r/m8, r8
SUB r/m16, r16
SUB r/m32, r32
SUB r8, r/m8
SUB r16, r/m16
SUB r32, r/m32

AND(与)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
AND AL, imm8
AND AX, imm16
AND EAX, imm32
AND r/m8, imm8
AND r/m16, imm16
AND r/m32, imm32
AND r/m16, imm8
AND r/m32, imm8
AND r/m8, r8
AND r/m16, r16
AND r/m32, r32
AND r8, r/m8
AND r16, r/m16
AND r32, r/m32

OR(或)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
OR AL, imm8
OR AX, imm16
OR EAX, imm32
OR r/m8, imm8
OR r/m16, imm16
OR r/m32, imm32
OR r/m16, imm8
OR r/m32, imm8
OR r/m8, r8
OR r/m16, r16
OR r/m32, r32
OR r8, r/m8
OR r16, r/m16
OR r32, r/m32

XOR(异或)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
XOR AL, imm8
XOR AX, imm16
XOR EAX, imm32
XOR r/m8, imm8
XOR r/m16, imm16
XOR r/m32, imm32
XOR r/m16, imm8
XOR r/m32, imm8
XOR r/m8, r8
XOR r/m16, r16
XOR r/m32, r32
XOR r8, r/m8
XOR r16, r/m16
XOR r32, r/m32

NOT(取反)

1
2
3
NOT r/m8
NOT r/m16
NOT r/m32

四、内存基础

1. 寄存器与内存的区别

  • 寄存器:位于 CPU 内部,数量少,执行速度快,价格昂贵。
  • 内存:位于主板,速度相对较慢,成本低,容量大。
  • 本质相同:都是定宽的、用于存储 0/1 数据的容器。
  • 常用寄存器:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI(均为 32 位)。

2. 计量单位

1
2
3
4
5
6
7
BYTE     字节  = 8 bits
WORD 字 = 16 bits (2 字节)
DWORD 双字 = 32 bits (4 字节)

1 KB = 1024 BYTE
1 MB = 1024 KB
1 GB = 1024 MB

3. 内存编号与寻址

  • 内存单元数量巨大,无法逐一命名,因此用 编号(地址) 标识。
  • 每个编号对应 1 个字节(8 bits)的内存空间。
  • CPU 是 32 位或 64 位,指的是 地址编号的宽度,而非寄存器的宽度。
  • 32 位地址总线能表示的范围:0x00000000 ~ 0xFFFFFFFF,共 0xFFFFFFFF + 1 = 4 GB
1
2
3
4
5
6
7
内存编号示意图:
0x00000000
0x00000001
0x00000002
...
...
0xFFFFFFFF

4. 内存读写语法

关键点

  • [ ] 表示地址(区别于立即数)。
  • 必须指定读写宽度:byte(1字节)、word(2字节)、dword(4字节)。
  • ptr 指明后面是一个地址(指针)。
  • ds 是段寄存器前缀(现阶段固定写法,暂不深究)。
  • 练习时地址建议使用 ESP 指向的栈区域,不要随意指定(部分内存受保护,不可直接读写)。

写入内存

1
MOV DWORD PTR DS:[0x0012FFC4], 0x12345678

读取内存到寄存器

1
MOV EAX, DWORD PTR DS:[0x0012FFD0]

其他宽度示例

1
2
MOV BYTE PTR DS:[0x0012FFC4], 0xAB       ; 写 1 字节
MOV WORD PTR DS:[0x0012FFC4], 0xABCD ; 写 2 字节

五、课后作业

练习目的:深刻理解寄存器、内存单元与数据宽度。

  1. MOV 指令全部形式
  2. ADD、SUB、AND、OR、XOR 指令全部形式
  3. NOT 指令全部形式

提示:地址选择 ESP 附近的值以避免访问违规。

寄存器、内存操作

https://blog.c8h10n4o2.asia/ee1cacd/

作者

萌新知

发布于

2026-07-22

更新于

2026-07-26

许可协议