新版本公告
~~空空如也
加载中
加载中
表情图片
评为精选
鼓励
加载中...
分享
加载中...
文件下载
加载中...
期末考完了……
以下为第二章第一部分的草稿,由于最近要出去一趟可能会比较慢。
在一个章节内讲明白汇编是比较困难的,但是可以将要求放低一点:让读者学会如何阅读、理解汇编代码

《Windows DYI》第二章:IA32体系架构与汇编语言

虽然Windows NT在早期是为多个硬件平台设计的,但是在2000年以前,其所支持的硬件平台只有Intel的IA32架构保留了下来并得到发展,因此目前Windows NT主要支持的硬件平台只有IA32。(ps:在Windows NT 6.x之后,已经支持ARMv7,但是这里不作讨论)

2.1 IA32体系架构

IA32体系结构曾被称作X86,但是X86的概念过于广泛且不够清晰(Intel部分16位产品也属于X86架构)。1985年,随着Intel 80386微处理器的上市,(IA32)被公诸于世。[1]

通常认为,在之后基于IA-32架构的处理器在指令集上保持向前兼容,即仅添加新的指令而不会修改原有的指令。2004年之后推出的IA32E架构是IA32的64位扩展,但是依然保留了对IA32的软件兼容能力。

本文的前半部分仅关注在用户层下的系统编程模型,因此将不会过多地介绍IA-32架构中和系统管理相关的内容,这些内容无法在用户层下实现。




2.1.1寄存器

寄存器(Register),是中央处理器内的其中组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器。[2]

在IA32架构的处理器中,寄存器分为下类类型:

1.通用寄存器(EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI):均为32为长度。“通用”的意思即为这些寄存器可用于缓存数据,打部分的指令也支持操作这些寄存器,但是这些寄存器器都有一些特定的用途。

2.标准寄存器EFLAG:32位长,用于存储各种标志。这个寄存器中的标志由影响这些标志的指令自动设置。

3.指令指针寄存器EIP:32位长,指示下一条将执行的指令在内存中的位置。

4.段寄存器(CS、DS、ES、FS、GS、SS):均为16位长,用于实现段寻址,但是Windows NT使用的是“平坦”内存模型,段机制对于RING3的程序来说不用关心。

5.调试寄存器(DR0-DR7):均为32位长度,用于硬件实现的调试机制。

6.控制寄存器(CR0-CR3):均为32位长度,用于控制CPU的某些行为或其他特定用途,RING3下不需要关心。

7.任务寄存器MSR:均为32位长度,用于控制CPU的某些行为或其他特定用途,同样RING3下不需要关心。

8.用于指示某些表的指针的寄存器(LDTR,GDTR,IDTR):32位长,指示某些和CPU功能相关的表的位置,同样RING3下不需要关心。




可以看出,在用户层下,我们只需要关注8个通用即可,其它寄存器大多无法直接操作甚至是无法直接访问。

IA32架构的处理器中的八个寄存器都可以被拆分为高16位和低16位两部分单独操作,其中前四个(r0-r4)的低16位也可以拆分为两个8位部分单独操作。

寄存器编号             寄存器名           低16位部分别名              低16位部分中高8位别名               低16位部分中低8位别名                   定义/特殊用途

r0                             EAX                       AX                                     AH                                                 AL                              累加器

r1                             ECX                       CX                                     CH                                                 CL                             循环计数器

r2                             EDX                       DX                                     DH                                                 DL                             数据拓展寄存器,某些指令将无法在32位长度内储存

                                                                                                                                                                                                 的结果存储在EDX中

r3                             EBX                       BX                                     BH                                                 BL                              基址寄存器,寻址时用于存放基址

r4                             ESP                       SP                                     NA                                                 NA                              栈指针寄存器,指示栈顶的位置

r5                             EBP                       BP                                     NA                                                 NA                              栈基指针寄存器

r6                             ESI                        SI                                       NA                                                 NA                              源索引寄存器,用于字符串操作

r7                             EDI                        DI                                       NA                                                 NA                              目的索引寄存器,用于字符串操作




2.1.


引用:

1.中文维基百科 IA-32:http://zh.wikipedia.org/wiki/IA-32

2.中文维基百科 寄存器:http://zh.wikipedia.org/wiki/%E5%AF%84%E5%AD%98%E5%99%A8


游客没有发表内容的权限。想参与大家的讨论?现在就 登录注册
文号 / 663078

万流景仰
名片发私信
学术分 8
总主题 412 帖总回复 4593 楼拥有证书:专家 老干部 学者 机友 笔友
注册于 2009-03-15 21:53最后登录 2025-05-31 16:46
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步

个人简介

CV

文件下载
加载中...
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传,正在处理中
空空如也~
处理中...
处理失败
加载中...
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
插入公式
评论控制
加载中...
文号:{{pid}}
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的