news 2026/6/12 15:56:38

【30天精通汇编】Day 2: CPU架构与寄存器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【30天精通汇编】Day 2: CPU架构与寄存器

【30天精通汇编】Day 2: CPU架构与寄存器

📅 学习时间:4-5小时
🎯 学习目标:理解CPU工作原理,掌握x86寄存器
💡 难度:★★☆☆☆


📝 Day 1 练习题答案

练习1: - 10110(二进制) = 16+4+2 = 22(十进制) - 42(十进制) = 101010(二进制) - 11011110(二进制) = DE(十六进制) 练习2: -10的8位补码: 10 = 0000 1010 取反 = 1111 0101 加1 = 1111 0110 = 0xF6 练习3: 0xAB & 0x0F = 0x0B (1010 1011 & 0000 1111 = 0000 1011)

1. CPU是什么

1.1 CPU的角色

CPU = Central Processing Unit = 中央处理器 把计算机比作一个工厂: 【内存 (仓库)】 存放数据,等待被处理 ↑↓ 数据搬运 【CPU (车间)】 - 寄存器 (工作台):临时存放数据 - 运算单元 (加工机器):执行计算 CPU的工作: 1. 从内存取指令 2. 解码指令 3. 执行指令 4. 存储结果

1.2 CPU的基本组成

【CPU的基本组成】 1. 控制单元 (CU) - 解析指令,控制执行流程 2. 寄存器组 (Registers) - 临时存储数据 3. 算术逻辑单元 (ALU) - 执行加减乘除运算 4. 缓存 (Cache) - 高速临时存储

2. x86架构演进

2.1 从8086到x64

年代 CPU 位数 寄存器名 1978 8086 16位 AX, BX, CX, DX 1985 80386 32位 EAX, EBX, ECX, EDX 2003 x86-64 64位 RAX, RBX, RCX, RDX 命名规则: AX = 16位 (原始) EAX = Extended AX = 32位 RAX = 64位 (x64架构) 关系(从大到小嵌套): RAX (64位) -> EAX (低32位) -> AX (低16位) -> AH (高8位) + AL (低8位)

3. x86通用寄存器(32位)

3.1 四大数据寄存器

四大数据寄存器: EAX - 累加器 (Accumulator) 用途:算术运算结果、函数返回值 EBX - 基址寄存器 (Base) 用途:存储内存地址基址 ECX - 计数器 (Counter) 用途:循环计数、字符串操作 EDX - 数据寄存器 (Data) 用途:I/O操作、乘除法扩展

3.2 指针和索引寄存器

指针和索引寄存器: ESP - 栈指针 (Stack Pointer) 用途:指向栈顶(非常重要!) EBP - 基址指针 (Base Pointer) 用途:指向栈帧底部 ESI - 源索引 (Source Index) 用途:字符串操作的源地址 EDI - 目的索引 (Destination Index) 用途:字符串操作的目标地址

3.3 指令指针和标志寄存器

指令指针和标志寄存器: EIP - 指令指针 用途:指向下一条要执行的指令 EFLAGS - 标志寄存器 用途:存储CPU状态标志 EIP是最重要的寄存器之一! 控制EIP就能控制程序执行流程。

4. 标志寄存器详解

4.1 常用标志位

EFLAGS寄存器各位含义: 位 名称 全称 含义 ───────────────────────────────────────────────── 0 CF Carry Flag 进位/借位标志 2 PF Parity Flag 奇偶标志 4 AF Adjust Flag 辅助进位标志 6 ZF Zero Flag 零标志(结果是否为0) 7 SF Sign Flag 符号标志(结果正负) 11 OF Overflow Flag 溢出标志 最常用的: CF - 无符号运算溢出 ZF - 结果是否为零(用于比较) SF - 结果的符号位 OF - 有符号运算溢出

4.2 标志位示例

例1:1 - 1 = 0 执行后:ZF = 1(结果为零) 例2:-1 + 1 = 0(有符号) 执行后:ZF = 1, CF = 1(产生进位) 例3:5 - 10 = -5 执行后:SF = 1(结果为负) 例4:127 + 1 = 128(8位有符号) 实际结果:-128(溢出!) 执行后:OF = 1(有符号溢出)

5. x64寄存器扩展

5.1 64位寄存器

x64在x86基础上扩展: 原有寄存器扩展到64位: RAX, RBX, RCX, RDX RSP, RBP, RSI, RDI RIP, RFLAGS 新增8个通用寄存器: R8, R9, R10, R11, R12, R13, R14, R15 每个新寄存器也有低位访问: R8 → R8D (低32位) → R8W (低16位) → R8B (低8位)

5.2 x64调用约定

Windows x64调用约定: 参数1: RCX 参数2: RDX 参数3: R8 参数4: R9 其余参数:通过栈传递 返回值:RAX Linux x64调用约定: 参数1: RDI 参数2: RSI 参数3: RDX 参数4: RCX 参数5: R8 参数6: R9 其余参数:通过栈传递 返回值:RAX

6. 段寄存器

段寄存器: CS - 代码段:存放代码的内存段 DS - 数据段:存放数据的内存段 SS - 栈段:存放栈的内存段 ES - 附加段:额外的数据段 FS - 附加段:Windows下指向TEB/TIB GS - 附加段:Linux x64下用于TLS 在32位保护模式下,段寄存器存放"段选择子" 在64位模式下,大多数段寄存器基址为0(平坦内存模型)

7. 寄存器使用总结

记忆口诀: "累加器做运算,基址寄存器找地址, 计数器管循环,数据寄存器帮乘除。 栈指针在栈顶,基址指针在栈底, 源索引取数据,目的索引放数据。 指令指针最重要,控制程序往哪跑。" 关键点: 1. EAX通常存返回值 2. ECX用于循环计数 3. ESP/EBP用于栈操作 4. EIP决定下一条指令 5. 标志位影响条件跳转

8. 练习题

练习1:寄存器识别(难度:★☆☆☆☆)

说出以下寄存器的主要用途:

  • EAX
  • ESP
  • ECX

练习2:标志位理解(难度:★★☆☆☆)

执行 5 - 5 后,哪个标志位会被设置为1?

练习3:寄存器关系(难度:★★☆☆☆)

如果RAX = 0x123456789ABCDEF0,求EAX, AX, AL的值?


9. 小结

[CPU基础] 1. CPU = 控制单元 + ALU + 寄存器 2. 取指令 → 解码 → 执行 → 存储 [x86寄存器] 3. 通用寄存器:EAX, EBX, ECX, EDX 4. 指针寄存器:ESP, EBP, ESI, EDI 5. 特殊寄存器:EIP, EFLAGS [标志位] 6. ZF - 零标志 7. SF - 符号标志 8. CF - 进位标志 9. OF - 溢出标志 [x64扩展] 10. 扩展到64位:RAX, RBX... 11. 新增:R8-R15

下一篇预告:Day 3 - 内存与寻址模式


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/29 1:44:54

GB/T4996-2025相较于GB/T4996-2014版的核心区别如下

1. 名称与范围标准名称简化为《平托盘 试验方法》,删除 “联运通用”。适用范围扩展,不再限定公路、铁路、水路联运,覆盖所有平托盘设计、生产、检验及使用。2. 术语与定义更改 “平托盘”“额定载荷” 等 10 个术语定义,新增 “叉…

作者头像 李华
网站建设 2026/5/29 2:43:31

硕士博士论文AI率要求是多少?2026年标准及降AI攻略

硕士博士论文AI率要求是多少?2026年标准及降AI攻略 最近很多研究生问我:硕士/博士论文的AI率要求是多少? 各学校标准不完全一样,但大致范围是明确的。这篇文章帮你搞清楚2026年的标准,以及怎么达标。 2026年AI率标准…

作者头像 李华
网站建设 2026/5/30 21:24:24

Mutil-Agent的终极秘密武器:上下文工程(Context Engineering)

随着大语言模型(LLM)和代理框架的发展,人们越来越意识到「上下文」对代理行为的重要性。代理不仅需要用户的指令,还需要外部知识、工具反馈等信息才能完成复杂任务。所谓“上下文工程”就是在有限的上下文窗口内,为代理…

作者头像 李华
网站建设 2026/5/29 19:10:58

你的项目适合哪种架构?大模型4大应用模式深度解析与选择指南

过去一年,大模型彻底改变了我们对“智能”的认知。它不仅能生成文本、写代码、画图谱、出策略,甚至能承担起助理、客服、分析师等角色。但真正让大模型“落地”的关键,并不只是模型本身的强大,而在于它如何被用起来。 本篇文章&a…

作者头像 李华