寄存器(Register)是CPU内部用来存放数据的一些小型存储区域,它与RAM(Random Access Memory,随机存储器、内存)略有不同。CPU访问(Access)RAM中的数据时要经过较长的物理路径,所以花费的时间要长一些;而寄存器集成在CPU内部,拥有非常高的读写速度。

IA-32是英特尔推出的32位元架构,属于复杂的指令集架构,提供非常多的功能,并且支持多种寄存器。IA-32支持的寄存器类型:

基本程序运行寄存器

通用寄存器(General Purpose Registers ,32位,8个)

段寄存器(Segment Registers, 16位,6个)

程序状态与控制寄存器(Program Status and Control Registers ,32位,1个)

指令指针寄存器(Instruction Pointer ,32位,1个)

1.通用寄存器

通用寄存器是一种通用型的寄存器,用于传送和暂存数据,也可参与算数逻辑运算,并保存运算结果。IA-32中每个通用寄存器的大小都是32位,即4个字节,主要用来保存常量与地址等,由特定汇编指令操作特定寄存器。除常规用途外,某些寄存器还具有一些特殊功能:

EAX:(针对操作数和结果数据的)累加器

EBX:(DS段中的数据指针)基址寄存器

ECX:(字符串和循环操作的)计数器

EDX:(I/O指针)数据寄存器

以上4个寄存器主要用在算数运算(ADD、SUB、XOR、OR等)指令中,常常用来保存常量与变量的值。

此外,ECX与EAX也可以用于特殊用途。循环指令(LOOP)中,EXC用来循环计数(loop count),每执行一次循环,ECX都会减1。EAX一般用在函数回值中,所有Win32API函数都会先把返回值保存到EAX再返回。

注意:

编写Windows汇编程序时,Win32API函数在内部会使用ECX与EDX,调用这些API时,ECX与EDX的值就会改变。所以,ECX与EDX中保存有重要数据时,调用API前要先把这些数据备份到其他寄存器或栈。

通用寄存器中其他几个寄存器的名称如下所示。

EBP:(SS段中栈内数据指针)扩展基址指针寄存器<栈针>。

ESI:(字符串操作源指针)源变地寄存器。

EDI:(字符串操作目标指针)目的变址寄存器。

ESP:(SS段中栈指针)栈指针寄存器。

以上4个寄存器主要用作保护内存地址的指针。

ESP只是栈区域的栈顶地址,某些指令(PUSH、POP、CALL、RET)可以直接用来操作ESP(栈区域管理是程序中相当重要的部分,不要把ESP用作其他用途)。

EBP表示栈区域的基地址,函数被调用时保存ESP的值,函数返回时再把值返回ESP。保证栈不会崩溃(这称为栈帧(Stack Frame)技术,它是代码逆向分析技术中的一个重要概念)ESI和EDI与特定指令(LODS、STOS、REP、MOVS等)一起使用,只要用于内存复制。

2.段寄存器

IA-32的保护模式中,段是一种内存保护技术,它把内存划分为多个区域,并为每个区域赋予其实地址、范围、访问权限等,以保护内存。此外,它还同分页技术一起用于将虚拟内存变更为实际物理内存。段内存记录在SDT中,而段寄存器就持有这些SDT的索引(index)。共6种寄存器,分别为CS、SS、DS、ES、FS、GS,每个寄存器的大小为16位,即2个字节。另外,每个段寄存器指向的段描述符与虚拟内存结合,形成一个线性地址(Linear Address),借助分页技术,线性地址最终被转换为实际的物理地址。

3.程序状态与控制寄存器

EFLAGS:Flag Register,标志寄存器

IA-32中标志寄存器的名称为EFLAGS,其大小为4个字节(32位),由原来的16位FLAGS寄存器扩展而来。

EFLAGS寄存器的每位都有意义,每位的值或为1或为0,代表On/Off或者True、False。其中有些位由系统直接设定,有些则根据程序命令的执行结果设置。

ZF:若运算结果为0,则其值为1,否则为0。

OF:有符号整数溢出时,OF值被置为1。此外,MSB改变时,其值也被设为1。

CF:无符号整数溢出时,其值为1。

4.指令寄存器

EIP:Instruction Pointer,指令指针寄存器

指令指针寄存器保存着CPU要执行的地址,大小为32位(4字节),由原16位IP寄存器扩展而来。程序运行时,CPU会读取EIP中一条指令的地址,传送指令地址到指令缓冲区后,EIP寄存器的值自动增加,增加的到校即是读取指令的字节大小。这样,CPU每次执行完一条指令,就会通过EIP寄存器读取并执行下一条指令。(EIP无法被直接修改,只能通过其他指令如JMP、Jcc、CALL、RET等指令间接修改)。

5.IA-32寄存器相关推荐

  1. 64位ie加载java失败_java-无法在AMD 64位平台上加载IA 32位.dll

    java-无法在AMD 64位平台上加载IA 32位.dll 我正在尝试通过此页面上的JNI包装器使用Java中的SVMLight: static { System.loadLibrary(" ...

  2. 汇编--32寄存器大全

    文章由(www.pulog.cn)网上搜集,来源:http://www.cppblog.com/merlinfang/archive/2007/07/07/27643.html 32位CPU所含有的寄 ...

  3. ARM64/32寄存器说明

    x0~x7:传递子程序的参数和返回值,使用时不需要保存,多余的参数用堆栈传递,64位的返回结果保存在x0中. x8:用于保存子程序的返回地址,使用时不需要保存. x9~x15:临时寄存器,也叫可变寄存 ...

  4. 《翻译》Intel 64 与 IA-32 架构软件开发者手册卷1翻译

    <前言> 翻译自官方的PDF版手册,可以从下述站点下载英文原版: http://www.intel.com/content/www/us/en/processors/architectur ...

  5. 计算机组成原理——寄存器堆

    MIPS有个32寄存器,每个寄存器32位 由display编写可知input_sel控制输入情况 input_sel= 00:读地址1,01:读地址2 10:写地址,11写数据 读寄存器不需要时钟控制 ...

  6. 跳转到保护模式并显示一个LOGO

    注:本程序为原创,若发现bug,万望指出,若有问题,欢迎交流,转载请指明出处.若能有助于一二访客,幸甚. 以下为结果截图,显示的LOGO为小篆字体的欢迎 baby os 加载完成...几个字. 保护模 ...

  7. led16*16点阵实验c语言,基于单片机的64*16LED点阵电子显示屏设计 pcb图+原理图+源程序...

    /*64*16点阵屏的显示点阵屏的显示*/ #include #include #include #define ulong  unsigned long #define uchar unsigned ...

  8. 计算机系统 程序和指令

    文章目录 程序和指令 intel 处理器 高级语言中程序寻址举例 IA 32 机器指令格式 IA32 常用传送指令 常用定点运算指令 加分以运算的底层实现举例 加法指令和乘法指令举例 逻辑运算指令和按 ...

  9. 虚拟化技术发展编年史

    作者 | 范桂飓 责编 | 屠敏 出品 | CSDN 博客 前言 我已经想不起来是从什么时候开始的,突然就对计算机历史产生了浓厚的兴趣.于是我想着,要不以后所有系列文章的开篇都先和大家聊聊历史吧.其实 ...

  10. X86中断-异常-APIC

    文章目录 1 异常向量(vector) 2 高级可编程中断控制器(APIC) 2.1 Local APIC(LAPIC) 寄存器 优先级 中断类型 中断发送流程 中断接收流程 2.2 IO APIC ...

最新文章

  1. statpot:使用mongo+bootstrap+highcharts做统计报表
  2. 2021腾讯数字生态大会:腾讯安全聚焦安全共建,护航数字经济发展
  3. 阿里云MaxCompute 2019-4月刊
  4. JAVA SE学习day_01:API、文档注释规范、String字符串的常用API
  5. 虚拟机中安装MAC OS X教程(适用所有电脑方法,特别是cpu不支持硬件虚拟化的电脑)...
  6. 全职宝妈跨专业备考信息系统项目管理师【52,52,51】
  7. Java黑皮书课后题第6章:**6.34(打印日历)编程练习题3.21使用Zeller一致性原理来计算某天是星期几,使用Zeller的算法简化程序清单6-12以获得每月开始的第一天是星期几
  8. bmon:一个强大的网络带宽监视和调试工具
  9. linux命令基础知识 管道流,linux基础知识-I/O重定向,管道(示例代码)
  10. java基础加强_补充笔记
  11. Facebook将在印度测试联网无人机,可连续飞行90天
  12. Pycharm / IDEA 局部搜索功能,调试时搜索变量值,或是搜索文件名等局部搜索方法
  13. 经过两个月的面试,我给你整理了这些面试考点(Java版)
  14. 三方协议接收节点不存在_【花开法务】没有保密协议是否意味着员工不存在保密义务?...
  15. Elasticsearch--分词-自定义扩展词库---全文检索引擎ElasticSearch工作笔记022
  16. 2014河北廊坊计算机一级,2018年上半年河北省廊坊市计算机等级考试简章
  17. Python入门(一)-打开世界之Hello World
  18. 《圈圈教你玩USB》之 USB鼠标
  19. cdlinux中minidwep的使用
  20. React 18 新特性-入门教程

热门文章

  1. less background url相对路径取不到编译报错问题
  2. 《中国人工智能学会通讯》——10.22 能源互联网时代
  3. 在一个字符串寻找另一个字符串,并且输出短字符串头字母在长字符串的下标...
  4. 数学图形之克莱因瓶(klein bottle)
  5. Grails示例程序-导出Excel文档
  6. [自定义区间-Range]书里的例子 - 中文数字类
  7. cisco网络故障处理手册
  8. python常用的基本操作
  9. js事件技巧方法整合
  10. ORACLE 11GR2 RAC的网络规划解析