寄存器概念整理
来源:互联网 发布:ios禁止软件联网 编辑:程序博客网 时间:2024/04/30 01:32
一直以来对寄存器的名称、作用比较模糊,今天抽时间整理了下。
(一) 通用寄存器
作用:传送和暂存数据,参与算数和逻辑运算。
(1)通用寄存器
16位的有8个:AX(Accumulator),BX(Base),CX(Count),DX(Data),BP(BasePointer),SP(Stack Pointer),SI(Source Index),DI(Destination Index)
对应的32位为:EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI
EAX,EBX,ECX,EDX为通用寄存器,其低16位为AX,BX,CX,DX,再进一步,每一个还能分成两个8位,如AX:AH-AL,BX:BH-BL等。他们除能作为普通数据寄存器使用外,他们还有特殊作用:
AX为累加器,进行乘除运算,字的输入输出,中间结果的缓存
BX基地址寄存器,除了作为通用寄存器,其主要功能是寻址,存放偏移地址,与段寄存器结合使用。
CX为计数器,控制循环次数以及CL存放移位的位数
DX为数据寄存器,在乘除运算时,可以作为默认操作数参与运算。
SI、DI为变址寄存器,存储单元在段内的偏移量,实现不同的寻址方式。SI存储器指针、串指令中的源操作数指针。DI存储器指针、串指令中的目的操作数指针。
BP、SP为指针寄存器,BP是基指针寄存器,当使用[BP]时,且没有显式给出段地址时,则默认使用SS段寄存器中的段地址。(BX、SI、DI默认使用DS段寄存器)SP是栈指针寄存器,存放了指向栈顶的指针。
(二)控制寄存器
(2)指令指针寄存器
IP(Instruction Pointer),32位为EIP,存放下次要执行的指令在代码段中的偏移量
(3)标志位寄存器
Flag,32位为EFlag, Flag寄存器中的数据是按位起作用的,Flag寄存器中存储的信息通常又被称为程序状态字(PSW)
位数
11
10
9
8
7
6
4
2
0
标志
OF
DF
IF
TF
SF
ZF
AF
PF
CF
全称
Overflow Flag
Direction Flag
Interrupt
-Enable Flag
Trap Flag
Sign Flag
Zero Flag
Auxiliary Carry Flag
Parity Flag
Carry Flag
意义
溢出标志
方向标志
中断允许标志
追踪标志
符号标志(结果是否为负数)
零标志位(结果是否为0)
辅助进位标志
奇偶标志(结果中1的个数)
进位标志
(参考内容:http://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html)
(三)段寄存器
根据内存分段的管理模式而设立段寄存器。16位CPU的段寄存器分别是:
CS:(Code Segment) 代码段寄存器
SS:(Stack Segment)堆栈段寄存器
DS:(DataSegment)数据段寄存器
ES:(Extra Segment)附加段寄存器,存放当前执行程序中一个辅助数据段的段地址
FS:附加段寄存器(标志段寄存器)
GS:附加段寄存器(全局段寄存器)
关于FS寄存器,当系统运行在ring3时,FS 值为指向的段是 GDT 中的 0x38 段,基地址为 当前线程 的线程环境块( TEB ),所以该段也被称为“TEB 段”。当系统运行在ring0时,FS 指向的段是 GDT 中的 0x30 段,该地址指向系统的处理器控制区域( KPCR )。这个区域中保存这处理器相关的一些重要数据值,如 GDT 、 IDT 表的值等等。
(参考博文http://blog.csdn.net/misterliwei/article/details/4391580
http://bbs.pediy.com/showthread.php?t=159935)
对于访问某个段的程序,必须将段选择符加载到一个段寄存器中,通过段选择符去定位段描述符表中的一个段描述符来指定一个段,段描述符中包含访问一个段的所有信息,包括段基址、段长度、段属性等。
(段选择符、段描述符参考:http://blog.csdn.net/lbo4031/article/details/6990376
http://blog.sina.com.cn/s/blog_9e16dc4d010150t1.html)
8086CPU中,只有BX,SI,DI,BP可以以[..]的方式使用
操作系统的外壳(Shell)程序,将可执行文件加载到内存中以后,就会设置CPU中个的两个寄存器,即CS:IP指向可执行文件的起始地址。
- 寄存器概念整理
- 寄存器、RAM、ROM、Flash相关概念区别整理
- 寄存器、RAM、ROM、Flash相关概念区别整理
- 寄存器、RAM、ROM、Flash相关概念区别整理
- 寄存器、CACHE、RAM、ROM、flash相关概念整理
- 寄存器、ram、rom、flash 相关概念区别整理
- 寄存器的“地址”概念
- i386 寄存器整理
- i386 寄存器整理
- i386 寄存器整理
- 概念整理
- VIM基础概念(寄存器)
- stm32的寄存器的概念
- CPU寄存器(转载+整理)
- 80X86CPU寄存器深度整理
- 汇编知识整理: 标志寄存器
- CPU中的寄存器和地址概念
- 030寄存器和时钟树概念
- swift详解之十六-----------GCD基础部分
- 学习Qt5(1)
- Win32 to .NET API Map
- Gym 100338H High Speed Trains(高精度)
- 【Lua】访问C#中的属性和方法-特殊情况-带有out和ref关键字
- 寄存器概念整理
- [分布式java]基于JavaAPI实现消息方式的系统间通信:UDP/IP+NIO
- java快捷键和注释规范
- 黑马程序员——多线程——多线程概述,实现,控制与安全问题的解决
- list<T>类
- Leetcode #226 Invert Binary Tree
- javascript中的函数Function
- 华为OJ题2---字符串最后一个单词的长度
- mac 设置 HOMEBREW_GITHUB_API_TOKEN的正确方法