2026/3/10 6:13:43
网站建设
项目流程
建设一个网站的方法,加强教育信息网站建设,新闻最新北京消息今天,找外包开发一个小程序需要多少钱【30天精通汇编】Day 2: CPU架构与寄存器#x1f4c5; 学习时间#xff1a;4-5小时
#x1f3af; 学习目标#xff1a;理解CPU工作原理#xff0c;掌握x86寄存器
#x1f4a1; 难度#xff1a;★★☆☆☆#x1f4dd; Day 1 练习题答案
练习1#xff1a;
- 10110(二进…【30天精通汇编】Day 2: CPU架构与寄存器 学习时间4-5小时 学习目标理解CPU工作原理掌握x86寄存器 难度★★☆☆☆ Day 1 练习题答案练习1 - 10110(二进制) 1642 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 标志位示例例11 - 1 0 执行后ZF 1结果为零 例2-1 1 0有符号 执行后ZF 1, CF 1产生进位 例35 - 10 -5 执行后SF 1结果为负 例4127 1 1288位有符号 实际结果-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 其余参数通过栈传递 返回值RAX6. 段寄存器段寄存器 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寄存器识别难度★☆☆☆☆说出以下寄存器的主要用途EAXESPECX练习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 - 内存与寻址模式