通用寄存器 ( 从书中择抄了部分,文中提供下载链接 )
  

诸葛大力 862

{{ttag.title}}

《CTF特训营》电子书链接:https://pan.baidu.com/s/1-ktFwsYZ-HPutW5tZZir9A     提取码:37f2
《从0到1:CTFer成长之路》购买链接:https://item.jd.com/12950900.html




先讲一讲通用寄存器,顾名思义,通用寄存器是一种通用型的寄存器,用于传送和暂存数据,也可以参与算数逻辑运算,并保存运算结果。早期x86 CPU只有8个寄存器,并且每个的用途都不相同。
我们所说的32位CPU、64位CPU的“位”,就是指的寄存器的大小,32位CPU的寄存器大小就是4个字节,也就是4x8=32位
通用寄存器的作用(32位):
EAX:累加器,在乘法和除法指令中被自动使用;在Win32中,一般用在函数的返回值中
ECX:计数器,CPU自动使用ECX作为循环计数器,在字符串和循环操作中常用,在循环指令(LOOP)或字符串操作中,ECX用来进行循环计数,每执行一次循环,ECX都会被CPU自动减一。
EDX:数据寄存器,常被用来放整数除法产生的余数
EBX:*址寄存器,在内存寻址时存放*址
ESP:指向最上面一个栈帧的栈顶,ESP用来寻址堆栈上的数据,ESP寄存器一般不参与算数运算,通常称为堆栈指针寄存器
EBP:指向最上面一个栈帧的底部,EBP由高级语言用来引用参数和局部变量
ESI:一般在字符串操作时指向源串
EDI:一般在字符串操作时指向目标串
再来说一说指令寄存器EIP:存放的是下一条要执行的指令地址,几乎不可以作为他用
16位的通用寄存器是:AX、BX、CX、DX、SI、DI、BP、SP
其中前四个(AX、BX、CX、DX)每个还可以分成高8位(815位)和低8位(07)两个独立的寄存器
所以说8位的通用寄存器是:高8位:AH  BH  CH  DH   低8位:AL  BL  CL  DL
对其中某8位的操作,并不影响另外对应的8位的数据。




标志寄存器
CPU内部的寄存器中,有一种特殊的寄存器具有以下三种作用。
用来存储相关指令的某些执行结果
用来为CPU执行相关指令提供行为依据
用来控制CPU的相关工作方式

这种特殊的寄存器被称为标志寄存器(EFLAG),x86的标志寄存器有32位。我们了解一下都是什么作用。



标志寄存器
它们大致分为两类:状态标志和控制标志。
状态标志(CF\ZF\SF\PF\OF\AF):用来记录程序运行结果得状态信息,许多指令得执行都将相应地设置它。
控制标志(DF\IF\TF):可由程序根据需要用指令设置,用于控制处理器执行指令的方式。
下面详细的说一下各个标志位:
进位标志CF(Carry Flag):当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF=1,否则CF=0
例如(十六进制算数运算):3A+7C=B6,没有进位:CF=0;AA+7C=(1)26,有进位,CF=1。
零标志ZF(Zero Flag):若运算结果为0,则ZF=1;否则ZF=0;(注意:ZF为1表示的结果是0)。
例如:3A+7C=B6,结果不是零:ZF=0;84+7C=(1)00,结果是零:ZF=1。
符号标志SF(Sign Flag):运算结果最高位为1,则SF=1;否则SF=0(有符号数据用最高有效位表示数据的符号,所以)
例如:3A+7C=B6,最高位为1,SF=1,84+7C=(1)00,最高位为0,SF=0;



奇偶标志PF(Parity Flag):奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
溢出标志OF(Overflow Flag):若算数运算的结果有溢出,则OF=1,否则OF=0。
什么是溢出:例如16位的范围是(+32767~-32768),如果运算结果超出这个范围,就产生了溢出,有溢出,说明有符号数的运算结果不正确。
溢出和进位:溢出标志OF和进位标志CF是两个意义不同的标志,进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。
什么是有符号数和无符号数:有符号数就是用最高位表示符号(正或负),其余位表示数值大小,无符号数则所有位都用于表示数的大小有符号数和无符号数是针对二进制来讲的。有符号数用最高位作为符号位,“0”代表“+”,“1”代表“-”;其余数位用作数值位,代表数值。比如:0011 表示 +3;1011 表示 -3。无符号数全部二进制均代表数值,没有符号位。即第一个"0"或"1"不表示正负。比如:0011 表示 3;1011 表示 11。
辅助进位标志AF(Auxiliary Carry Flag):在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:(1)、在字操作时,发生低字节向高字节进位或借位时;(2)、在字节操作时,发生低4位向高4位进位或借位时。(这个标志主要由处理器内部使用,用于十进制算数运算调整指令中,用户一般不必关心)
方向标志DF(Direction Flag):用于串操作指令中,控制地址的变化方向:设置DF=0,存储器地址自动增加。DF=1,存储器地址自动减少。
例如:CLD指令用于复位方向标志,执行后DF=0;STD指令用于置位方向标志,执行后DF=1;
中断允许标志IF(Interrupt-enable Flag):中断允许标志IF是用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。具体规定如下:(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。CPU的指令系统中也有专门的指令来改变标志位IF的值。
例如:CLI指令用于复位中断标志,执行后IF=0;STI指令用于置位中断标志,执行后IF=1;
陷阱标志TF(Trap Flag):当TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。指令系统中没有专门的指令来改变标志位TF的值,但程序员可用其它办法来改变其值。

打赏鼓励作者,期待更多好文!

打赏
1人已打赏

gqce 发表于 2021-2-16 20:59
  
感谢分享
诸葛大力 发表于 2024-2-21 17:33
  
一起来学习一起来学习
发表新帖
热门标签
全部标签>
每日一问
每周精选
技术笔记
技术盲盒
2024年技术争霸赛
产品连连看
2023技术争霸赛专题
干货满满
技术咨询
标准化排查
新版本体验
通用技术
技术晨报
功能体验
自助服务平台操作指引
文档捉虫活动
信服课堂视频
秒懂零信任
GIF动图学习
答题自测
每日一记
运维工具
SDP百科
技术圆桌
排障笔记本
专家问答
在线直播
安装部署配置
测试报告
解决方案
项目案例
存储
技术争霸赛
卧龙计划
畅聊IT
MVP
网络基础知识
升级
安全攻防
上网策略
日志审计
问题分析处理
流量管理
云计算知识
用户认证
原创分享
sangfor周刊
VPN 对接
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
迁移
加速技术
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
华北区拉练
天逸直播
以战代练
山东区技术晨报
齐鲁TV
华北区交付直播
北京区每日一练

本版版主

12
185
6

发帖

粉丝

关注

本版达人

LoveTec...

本周分享达人

新手24116...

本周提问达人