- UID
- 74123
注册时间2014-2-24
阅读权限10
最后登录1970-1-1
周游历练
该用户从未签到
|
鉴于飘云阁目前冷清,为了祖国为了人民为了世界和平,从今天开始,每天我会将本天的学习笔记分享在网上,一方面激励自己学习,另一方面也告诉诸位小虾米,基础是关键,另外各位大牛绕道!纯属基础,只是自己的学习笔记,同时也为诸位(和自己)解决下基础不扎实的问题!最关键是活跃论坛人气。本人纯属虾米一只,正在努力学习中,希望大家与我一起努力,一起进步。我只是学习之后整理之后发出来而已!纯手工打的。 寄存器(Register) 总体上来讲32位寄存器可以分为一下几种:
4个数据寄存器(EAX、EBX、ECX和EDX)
2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)
6个段寄存器(ES、CS、SS、DS、FS和GS)
1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)
其中4个数据寄存器和2个变址和指针寄存器,2个指针寄存器为通用寄存器。
一、通用寄存器
第一组:数据寄存器
累加器 [32位EAX,AH&AL(8位)=AX(16位)](accumulator)常用于运算;在乘除等指令中指定 用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据。
基地址寄存器 [32位EBX,BH&BL(8位)=BX(16位)](base)常用于地址索引。
计数寄存器 [32位ECX,CH&CL(8位)=CX(16位)](count)常用于计数;常用于保存计算 值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.
数据寄存器 [32位EDX,DH&DL(8位)=DX(16位)](data)常用于数据传递。
第二组:指针寄存器和变址寄存器
堆栈指示器 [32位ESP,16位SP](Stack Pointer)与SS配合使用,可指向目前的堆栈位置。
(注:堆栈段寄存器SS:指出当前堆栈的底部地址,即存放堆栈段的段基值。)
堆栈基址寄存器[32位EBP,16位BP](Base Pointer)可用作SS的一个相对基址位置。
源变址寄存器 [32位ESI,16位SI](Source Index)可用来存放相对于DS段之源变址指针。
目的变址寄存器[32位EDI,16位DI](Destination Index)可用来存放相对于ES 段之目的变址 指针。
(注:DS段:数据段,存放当前运行程序所用的数据,数据段的段地址存放在DS中。) (注:ES段:附加段,附加的数据段,也用于数据的保存,另外,串操作指令将附加段 作为其目的操作数的存放区域。附加段的段地址存放在ES中。)
(注:ES:ES段寄存器,存放附加段的基地址变址地址。)
(注:太多的就不介绍了后面介绍!)
二、段寄存器
段寄存器有6个,是为内存分段的管理模式而设置的。
内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合 成一个可访问较大物理空间的内存地址。
(注:偏移量:存储单元的实际地址与其所在段的段地址之间的距离称为段内偏移,也称为“有 效地址或偏移量”。存储单元的实际地址与其所在段的段地址之间的距离。本质其实就是“实际 地址与其所在段的段地址之间的距离”。 内存中存储数据的方式是:一个存储数据的“实际地 址”=段首地址+偏移量 )
(注:基址,伴随着一个加到基上的偏移值来确定信息准确的位置(绝对地址)。这一概念与街 道地址系统雷同。 例如:“大街2010号”由基(大街2000街段)加上偏移值(从街段开始的10 号)。)
(注:存储单元,是CPU访问存储器的基本单位,具有存储数据和读写数据的功能,一般以8位二 进制作为一个存储单元。)
CS--代码段寄存器(Code Segment Register),其值为代码段的段值;存放当前正在运行的程序 代码所在段的段基址,表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得, 相应的偏移量则由IP提供。
DS--数据段寄存器(Data Segment Register),其值为数据段的段值;指出当前程序使用的数据 所存放段的最低地址,即存放数据段的段基址。
ES--附加段寄存器(Extra Segment Register),其值为附加数据段的段值;指出当前程序使用附 加数据段的段基址,该段是串操作指令中目的串所在的段。
SS--堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;指出当前堆栈的底部地址 即存放堆栈段的段基址。
FS--附加段寄存器(Extra Segment Register),其值为附加数据段的段值;。
GS--附加段寄存器(Extra Segment Register),其值为附加数据段的段值。
(注:一般教程[包括书上]会用这些寄存器来表示程序段,如CS段表示代码段,DS表示数据 段,SS为堆栈段,ES表示附加段。)
三、指令指针寄存器
指令指针寄存器[32位EIP,16位IP(EIP的低16位)]是存放下次将要执行的指令在代码段的偏移 量。
在实模式下,由于每个段的最大范围为64K,所以,EIP中的高16位肯定都为0,此时,相当于只 用其低16位。
(实模式:即保护模式,址采用32位段和偏移量,最大寻址空间4GB,最大分段4GB (Pentium Pre 及以后为64GB)。在保护模式下CPU可以进入虚拟8086方式,这是在保护模式下的实模式程序运行环 境。)
四、标志寄存器
标志寄存器又称程序状态字(PSW)是一个存放条件标志、控制标志寄存器,主要用于反映处理 器的状态和运算结果的某些特征及控制指令的执行。(注:标志位寄存器是一个32位寄存器,以后 所说的标志位全部位该寄存器中某一位的值。)
(一)条件标志位
1、符号标志位(SF[第7位])用于反映运算结果的符号,运算结果为负,SF=1,否则SF=0 因为有符号数采用补码的形式表示,所以SF与运算结果的最高位相同。
2、零标志(ZF[第6位])用于判断结果是否为0。运算结果0,ZF=1,否则ZF=0。
3、溢出标志(OF[第11位])反映有符号数加减运算是否溢出。如果运算结果超过了8位或 者16位有符号数的表示范围,则OF置1,否则置0。
4、进位标志(CF[第0位])用于反映运算中是否在最高位产生借位,产生借位CF=1,否则 CF=0 。
5、辅助进位标志(AF[第4位])在字节操作时低半字节向高半字节进位或借位,字操作时 低字节向高字节进位或借位,AF置1,否则置0。(注:一个字节是8位,半字节借位或进位, 即第三位向第四位借位或进位。加法时,第3位向第4位(从第0位开始计)有进位;减法时, 第3位向第4位(从第0位开始计)有借位。)
6、奇偶标志位(PF[第2位])用于反映运算结果低8位中“1”的个数。“1”的个数为偶 数,则PF置1,否则置0。(注:低8位,即从0位到7位。)
(二)控制标志位
1、方向标志位(DF[第10位])决定串操作指令执行时有关指针寄存器调整方向。串操作 存在正向和反向。当DF为1时,串操作指令正向处理数据串;当DF为0时,串操作指令反向处理 数据串;DF的1和0由用户控制。
(注:存储器中的地址连续的若干单元的字符或数据称为字符串或数据串。串操作指令就 是用来对串中每个字符或数据进行操作的指令。)
2、 中断标志位(IF[第9位])决定CPU是否响应外部可屏蔽中断请求。IF为1时,CPU允许 响应外部的可屏蔽中断请求。否则,屏蔽外部中断请求。可通过STI置位,CLI清0.
3、跟踪标志位(TF[第8位])当TF被设置位1时,CPU进入单步模式,所谓单步模式就是 CPU在每执行一步指令后都产生一个单步中断。当TF=0时CPU处于连续工作模式。主要用于程序 的调试。8086/8088中没有专门用来置位和清零TF的命令,需要用其他办法。
(注:单步模式,即按照指令的顺序一条一条的执行命令。)
2014.2.28.zip
(3.01 KB, 下载次数: 66)
不要觉着枯燥,当你学习破解之类的时候看着视频而不知所然的时候就是基础不够扎实!这些都是破解必知的东西!
|
评分
-
查看全部评分
|