吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 3140|回复: 93

[经验资料] 《汇编》CPU常见寄存器介绍

  [复制链接]
Momo-小莫 发表于 2021-11-16 10:17 | 显示全部楼层 |阅读模式

32 位CPU 所含有的寄存器有:

4 个数据寄存器(EAX 、EBX 、ECX 和EDX)
2 个变址和指针寄存器(ESI 和 EDI) 2 个指针寄存器(ESP 和EBP)
6 个段寄存器(ES 、CS 、SS 、DS 、FS 和GS)
1 个指令指针寄存器(EIP) 1 个标志寄存器(EFlags)
1 、数据寄存器
数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32 位CPU 有4 个32 位的通用寄存器EAX 、EBX 、ECX 和EDX 。对低16 位数据的存取,不会影响高16 位的数据。这些
低16 位寄存 器分别命名为:AX 、BX 、CX 和DX ,它和先前的CPU 中的寄存器相一致。
4 个16 位寄存器又可分割成8 个独立的8 位寄存器(AX :AH-AL 、BX :BH-BL 、CX :CH-CL 、DX :DH-DL) ,每个寄
存 器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“ 可分可合” 的特性,灵活地处理字/ 字
节的信息。
  寄存器AX 和AL 通常称为累加器(Accumulator) ,用累加器进行的操作可能需要更少时间。累加器可用于乘、
  除、输入/ 输出等 操作,它们的使用频率很高;
  寄存器BX 称为基地址寄存器(Base Register) 。它可作为存储器指针来使用;
  寄存器 CX 称为计数寄存器(Count Register) 。在循环和字符串操作时,要用它来控制循环次数;在位操作
  中,当移多位时,要用CL 来指明 移位的位数;
  寄存器DX 称为数据寄存器(Data Register) 。在进行乘、除运算时,它可作为默认的操作数参与运算,也
  可 用于存放I/O 的端口地址。

在16 位CPU 中,AX 、BX 、CX 和DX 不能作为基址和变址寄存器来存放存储单元的地址,但在32 位CPU 中,其32 位
寄存器 EAX 、EBX 、ECX 和EDX 不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,
所以,这些32 位寄存器更具有通用性。
2 、变址寄存器
32 位CPU 有2 个32 位通用寄存器ESI 和EDI 。其低16 位对应先前CPU 中的SI 和DI ,对低16 位数据的存取,不影响
高16 位的数 据。
寄存器ESI 、EDI 、SI 和DI 称为变址寄存器(Index Register) ,它们主要用于存放存储单元在段内的偏移量,
用它们可实 现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
变址寄存器不可分割成8 位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特
殊的功能。
3 、指针寄存器
32 位CPU 有2 个32 位通用寄存器EBP 和ESP 。其低16 位对应先前CPU 中的SBP 和SP ,对低16 位数据的存取,不影
响高16 位的 数据。
寄存器EBP 、ESP 、BP 和SP 称为指针寄存器(Pointer Register) ,主要用于存放堆栈内存储单元的偏移量,
用它们可实 现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
指针寄存器不可分割成8 位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
它们主要用于访问堆栈内的存储单元,并且规定:

BP 为基指针(Base Pointer) 寄存器,用它可直接存取堆栈中的数据;
SP 为堆栈指针(Stack Pointer) 寄存器,用它只可访问栈顶。
4 、段寄存器
段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成
的,这样可用两个较少位数的值组合成一 个可访问较大物理空间的内存地址。
CPU 内部的段寄存器:

CS—— 代码段寄存器(Code Segment Register) ,其值为代码段的段值;
DS —— 数据段寄存器(Data Segment Register) ,其值为数据段的段值;
ES—— 附加段寄存器(Extra Segment Register) ,其值为附加数据段的段值;
SS—— 堆栈段寄存器(Stack Segment Register) ,其值为堆栈段的段值;
FS—— 附加段寄存器(Extra Segment Register) ,其值为附加数据段的段值;
GS—— 附加段寄存器(Extra Segment Register) ,其值为附加数据段的段值。
在16 位CPU 系统中,它只有4 个段寄存器,所以,程序在任何时刻至多有4 个正在使用的段可直接访问;在32 位
微机系统中,它有6 个段寄存 器,所以,在此环境下开发的程序最多可同时访问6 个段。
32 位CPU 有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的。有关规定简
单描述如下:
实方式: 前4 个段寄存器CS 、DS 、ES 和SS 与先前CPU 中的所对应的段寄存器的含义完全一致,内存单元的逻辑
地址仍为“ 段值:偏移 量” 的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。
保护方式: 在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为“ 选择子”(Selector) 的某个值。。
5 、指令指针寄存器
32 位CPU 把指令指针扩展到32 位,并记作EIP ,EIP 的低16 位与先前CPU 中的IP 作用相同。
指令指针EIP 、IP(Instruction Pointer) 是存放下次将要执行的指令在代码段的偏移量。在具有预取指令功
能的系统 中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。所以,在理解它们的功能
时,不考虑存在指令队列的情况。
在实方式下,由于每个段的最大范围为64K ,所以,EIP 中的高16 位肯定都为0 ,此时,相当于只用其低16 位
的IP 来反映程序中指令的执 行次序。
6 、标志寄存器
一、运算结果标志位
1 、进位标志CF(Carry Flag)
进位标志CF 主要用来反映运算是否产生进位或借位。如果运算结果的最 高位产生了一个进位或借位,那么,其值为1 ,否则其值为0 。
使用该标志位的情况有:多字( 字节) 数的加减运算,无符号数的大小比较运算,移位操作,字( 字节) 之间移位,专门改变CF 值的指令等。
2 、奇偶标志PF(Parity Flag)
奇偶标志PF 用于反映运算结果中“1” 的个数的奇偶性。如果“1” 的个数为偶数,则PF 的值为 1 ,否则其值为0 。
利用PF 可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。
3 、FZ进位标志AF(Auxiliary Carry Flag)
在发生下列情况时,FZ进位标志AF 的值被置为1 ,否则其值为0 :
(1) 、在字操作时,发生低字节向高字节进位或借位时;
(2) 、在字节操作时,发生低4 位向高4 位进位或借位时。
对以上6 个运算结果标志位,在一般编程情况下,标志位CF 、ZF 、SF 和OF 的使用频率较高,而标志位PF 和AF 的使用频率较低。
4 、零标志ZF(Zero Flag)
零标志ZF 用来反映运算结果是否为0 。如果运算结果为0 ,则其值为1 ,否则其值为0 。在判断运算结果 是否为0 时,可使用此标志位。
5 、符号标志SF(Sign Flag)
符号标志SF 用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补 码表示法,所以,SF 也就反映运算结果的正负号。运算结果为正数时,SF 的值为0 ,否则其值为1 。
6 、溢出标志OF(Overflow Flag)
溢出标志OF 用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所 能表示的范围,则称为溢出,OF 的值被置为1 ,否则,OF 的值被清为0 。
“ 溢出” 和“ 进位” 是两个不同含义的概念,不要混淆。如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。
二、状态控制标志位
状态控制标志位是用来控制CPU 操作的,它们要通过专门的指令才能使之发生改变。
1 、追踪标志TF(Trap Flag)
当追踪标志TF 被置为1 时,CPU 进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这 种方式主要用于程序的调试。
指令系统中没有专门的指令来改变标志位TF 的值,但程序员可用其它办法来改变其值。
2 、中断允许标志IF(Interrupt-enable Flag)
中断允许标志IF 是用来决定CPU 是否响应CPU 外部的可屏蔽中断发 出的中断请求。但不管该标志为何值,CPU 都必须响应CPU 外部的不可屏蔽中断所发出的中断请求,以及CPU 内部产生的中断请求。具体规定如下:
(1) 、当IF=1 时,CPU 可以响应CPU 外部的可屏蔽中断发出的中断请求;
(2) 、当IF=0 时,CPU 不响应CPU 外部的可屏蔽中断发出的中断请求。
CPU 的指令系统中也有专门的指令来改变标志位IF 的值。
3 、方向标志DF(Direction Flag)
方向标志DF 用来决定在串操作指令执行时有关指针寄存器发生调整的方向。具体规定在第 5.2.11 节—— 字符串操作指令—— 中给出。在微机的指令系统中,还提供了专门的指令来改变标志位DF 的值。
三、32 位标志寄存器增加的标志位
1 、I/O 特权标志IOPL(I/O Privilege Level)
I/O 特权标志用两位二 进制位来表示,也称为I/O 特权级字段。该字段指定了要求执行I/O 指令的特权级。如果当前的特权级别在数值上小于等于IOPL 的值,那么,该I/O 指令 可执行,否则将发生一个保护异常。
2 、嵌套任务标志NT(Nested Task)
嵌套任务标志NT 用来控制中断返回指令IRET 的执行。具体规定如下:
(1) 、当NT=0 ,用堆栈中保存的值恢复EFLAGS 、CS 和EIP ,执行常规的中断返回操作;
(2) 、当NT=1 ,通过任务转换实现中断返回。
3 、重启动标志RF(Restart Flag)
重启动标志RF 用来控制是否接受调试故障。规定:RF=0 时,表示“ 接受” 调试故障,否则 拒绝之。在成功执行完一条指令后,处理机把RF 置为0 ,当接受到一个非调试故障时,处理机就把它置为1 。
4 、虚拟8086 方式标志VM(Virtual 8086 Mode)
如果该标志的值为1 ,则表示处理机处于虚拟的8086 方式下的工作状 态,否则,处理机处于一般保护方式下的工作状态。

评分

参与人数 34HB +33 THX +12 收起 理由
再来壹瓶 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
花盗睡鼠 + 2 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
扑通仁 + 1 + 1
decajoins + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
一路走来不容易 + 1
459121520 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
消逝的过去 + 2
冷亦飞 + 1
yexing + 1
极速菜 + 1
别来无恙 + 1
无影无踪 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
hetao8003200 + 1
frax + 1
ldljlzw + 1
zxjzzh + 2 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
yhfyhf + 1
XiaoWeiSec + 1 --------
kalove + 1
xrzr + 1
上帝的恩赐 + 1 [快捷评语]--你将受到所有人的崇拜!
xiaomingerniu + 1
brswbx201610 + 1
lies + 1
豆0o0豆 + 1
jzat + 1 [快捷评语]--你将受到所有人的崇拜!
hnymsh + 1 + 1
蓝色青菜 + 1
红袖先生 + 1 [快捷评语]--吃水不忘打井人,给个评分懂感恩!
janford + 1 [快捷评语]--吃水不忘打井人,给个评分懂感恩!
mengzhisuoliu + 1 + 1
king51999 + 1 [快捷评语]--吃水不忘打井人,给个评分懂感恩!
Shark恒 + 2 + 1 [快捷评语]--吃水不忘打井人,给个评分懂感恩!
白云点缀的蓝 + 2 + 1 [快捷评语]--积极评分,从我做起。感谢分享!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
白云点缀的蓝 发表于 2021-11-16 10:22 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
cov981420974 发表于 2021-11-16 10:54 | 显示全部楼层

感谢大佬的分享,十分实用
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Mr0z 发表于 2021-11-16 10:56 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
monotone 发表于 2021-11-16 14:23 | 显示全部楼层

看不懂,帮顶下吧
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
三枫大神 发表于 2021-11-24 06:55 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
豆0o0豆 发表于 2021-12-8 23:32 | 显示全部楼层

感谢分享呀
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
保安 发表于 2021-12-9 15:37 | 显示全部楼层

收藏学习  感谢大牛分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
xrzr 发表于 2022-1-14 15:51 | 显示全部楼层

感谢无私分享。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
oIUCxRZ85960 发表于 2022-1-24 03:07 | 显示全部楼层

感谢楼主
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表