4. CPU寄存器与指令系统

总目录

1. WinDbg概述
2. WinDbg主要功能
3. WinDbg程序调试示例
4. CPU寄存器及指令系统
5. CPU保护模式概述
6. 汇编语言不等于CPU指令
7. 用WinDbg观察托管程序架构
8. Windows PE/COFF文件格式简述
9. 让WinDbg自动打开DotNet Runtime源程序
10. WinDbg综合实战

前言

通过前面三篇文章的学习,同学们应该对使用WinDbg调试C#程序有了基本的了解。

不过,在我的写作过程中,有一种感觉开始变得越来越强烈:如果想说清楚如何使用WinDbg,必须先介绍清楚CPU的基础知识,因为只有了解了CPU,才能懂得寄存器、指令系统和汇编。

因此,我打算从本篇开始,介绍一下Intel CPU基础知识。

CPU知识

Intel公司公布了其CPU系列的标准手册,最有用的就是《Intel® 64 and IA-32 Architectures
Software Developer’s Manual》
,这里给的链接是4册合集(以下简称Intel手册),总计有5057页,而且只有英文。

啃完这么大部头手册虽并非不可能,但起码性价比不高。不过呢,这套手册实在写得太好了,其语言简直可以与最优秀的教科书相媲美,用词及语法都相当严谨,凡事都说得由浅入深,有条有理。下载一套手册备用,需要时随手翻翻,要比到网上胡乱找文章看有价值得多。

关键点还在于,对CPU需要了解到什么程度?我的建议是:浅尝辄止!如果非要给一个具体指标,从小白开始,学20小时足够了。不过呢,我还没有找到一套广度和深度都刚刚好的教材或教学视频。一般的汇编语言书籍对CPU的介绍太浅层次了,又对汇编指令介绍得太多了。而一般计算机体系结构方面的书呢又太细节了,初学者根本无法将知识点串起来。索性我就斗胆先把如何学习CPU知识啰嗦一下吧。

CPU寄存器与CPU工作模式

了解CPU的关键在于了解CPU的内部寄存器。
CPU访问内部寄存器的速度要比CPU访问内存条的速度快很多,大致你可以认为CPU读写一次寄存器的时间只有读写一次内存时间的几万分之一。

在Intel手册中,Intel把其各种寄存器的集合称为执行环境(Execution Environment),这种称谓其实是更科学严谨的,因为一条指令的执行通常和不同寄存器的当前状态息息相关,最简单的就是条件转移指令,该指令执行时,可能会发生跳转也可能不会跳转,在高级语言环境,我们是使用if语句,通过if后面的表达式结果到底是true还是false来判断的,而实际在CPU层面,是条件转移指令是否跳转完全是由指令执行时FLAG寄存器的值来决定的,因此Flag寄存器就是条件转移指令的执行环境因素之一。

同一个CPU,其实可以通过程序来修改其寄存器的数据,而有些寄存器又是控制CPU工作状态的。比如当前的CPU已经都是64位硬件结构了,但通过修改其不同控制寄存器的组合,可以使CPU工作于保护模式、IA-32e模式、实地址模式或系统管理模式(SMM)。IA-32e模式又可细分位IA-32兼容模式和64位模式;而不同的模式下,程序可以使用的寄存器也是不同的。举个最简单的例子:通过指令使CPU中CR0控制寄存器的PG位置0,会引发CPU从64位模式切换到IA-32模式(实际切换要比这复杂得多,但我们没必要了解更多细节)。一旦切换成功,以前64位模式下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值