80X86CPU寄存器表



80X86CPU寄存器表 

数据段、代码段、堆栈段、内存、堆、堆栈、CPU寄存器  

2009-08-04 22:59:17|  分类:汇编 |  标签:数据段、代码段、堆栈段、内存、堆、堆栈、cpu寄存器  |字号 订阅

        学习汇编,会有很多类似标题列举的这些概念,如果对这些概念没有一个较清晰的认识,学习起来会相当的吃力。

      我也是在大学里好好学过汇编,毕业后一直没有摸过,现在,我又把书重新拾起来,再结合我从网上看到得一些文章,这里来对这些概念总结总结(在这里沃要说的是,从网上看的资料,一定要转换成自己的,不能光抄别人的,否则那永远也不会真正的属于你)。

      下面是我个人对这些概念的理解,如果有不对的地方,希望大家提出指正和批评。

     CPU在执行程序的时候,必须有指令和要处理的数据两部分组成。存放指令的地方,那就是代码段,存放数据的地方,就是内存(数据段和堆栈段)。为什么又要将存放数据的地方分为数据段和堆栈段呢?接下来会给出解释。

     我觉得这些数据段、代码段、堆栈段都是属于内存的一部分的,比如,我有一个三室的房子,这个房子就是我们所说的内存,而房子的第一间屋子,专门用来存放指令(代码段),第二间屋子,专门用来存放数据,而这个屋子有一个规则,就是只有一个门,先放进来的数据,放在屋子的最里面,这样,你要取数据,只能从离门最近的地方取,也就是先进后出的方式读取数据(堆栈段)。第三间屋子,又分为2个小室,其中一个室放最一般的数据(通常所称的“内存”),而另一间室,是专门用来给程序员定义使用的空间(堆)。

     代码段:不用说,很好理解,就是放编译后的二进制执行代码的地方。

     :用来放malloc申请内存的地方,也用来存放全局和静态变量的地方。这里就不难理解为什么malloc申请的内存,使用完后一定要用free来释放的原因了,因为如果你不释放,随着程序的不断运行,最后可能把堆的空间给用完了,就是我们通常所说的内存泄露,不出问题才怪!!!!!

    堆栈:大家都清楚函数吧,函数里的变量都是在函数结束后就消失的,那么计算机是怎么控制的呢?原来是把函数里的变量,都放在了堆栈里,函数开始时,堆栈不断分配空间来存放函数里的变量值,堆栈指针不段的向上移动,这就是进栈;而当函数结束时,堆栈又不断的回收空间,堆栈指针又不断的向下移动,很明显,函数里的变量在函数结束后,就再也不能使用了。递归函数,就是利用了堆栈的先进后出的特性,不断的调用自己,每次都将返回的值压入堆栈,而每次返回后的自身函数里,就又正好获取到这些返回值,周而复始。。。所以,递归函数也不能递归的层次太深了,否则同样会出现内存溢出的情况!!!

    CPU寄存器:CPU寄存器,其实就是来控制代码段和数据段的指令及数据读取的地方,当然,CPU也有自己存放数据的地方,那就是通用寄存器里的数据寄存器,通常是EDX寄存器,C语言里有个register,就是把数据放在这个寄存器里,这样读取数据就相当的快了,因为不用去内存找,就省去了寻址和传送数据的时间开销。他还有一些寄存器是用来指示当前代码段的位置、数据段的位置、堆栈段的位置等等(注意这里存放的只是相应的代码或数据在内存中的地址,并不是实际的值,然后根据这个地址,通过地址总线和数据总线,去内存中获取相应的值),不然在执行代码的时候,指令和数据从哪取呢?呵呵。。。他里面还有标志寄存器,用来标识一些状态位,比如标识算术溢出呀等等。。。。。

    其实说简单一点,那就是:CPU+内存;CPU负责执行指令,内存负责存放指令及指令的数据等等。。。

    看完上面的介绍后,我想再来理解我上一篇文章里列的一些CPU寄存器,就会比较清晰了,当然,再来学习汇编,至少不会害怕了。。。嘿嘿嘿嘿。。。。。。。。。


下面表格的源地址:http://blog.163.com/itjin45@126/blog/static/105107513200973102824700/

2009-08-03 22:28:24|  分类: 汇编 |字号 订阅

位数备注数据寄存器通用寄存器
31------2524------1615------87------0类别:通用寄存器--数据寄存器--累加器
作用:通常用来在运算过程中存放数据。
  AHAL
  AX
EAX
  BHBL类别:通用寄存器--数据寄存器--基址寄存器
作用:通常用来表示内存地址。
  BX
EBX
  CHCL类别:通用寄存器--数据寄存器--计数寄存器
作用:通常用做计数器,例如:位移指令用CL作为移动次数,循环指令用来作为循环次数。
  CX
E
  DHDL类别:通用寄存器--数据寄存器--数据寄存器(个人感觉跟EAX差不多)
作用:通常用做存放数据,此外,DX也用来存放I/O端口地址。
  DX
ED
变址寄存器
  SI类别:通用寄存器--变址寄存器--源变址寄存器
作用:在串指令中表示源数据串的地址。
ESI
  DI类别:通用寄存器--变址寄存器--目标变址寄存器
作用:在串指令中表示目的数据串的地址。
EDI
  BP类别:通用寄存器--指针寄存器--基址指针寄存器
作用:存放内存地址。(如果地址值存放在该寄存器中时,取数据就应该去内存中去取。)
EBP指针寄存器
  SP类别:通用寄存器--指针寄存器--堆栈指针寄存器
作用:指示堆栈段中的栈顶地址。通常不用它来做算术运算!(如果地址值存放在该寄存器中时,取数据就应该去堆栈中去取。)
ESP
专用寄存器
  FLAGS类别:专用寄存器寄存器--标志寄存器
作用:CPU专用寄存器,不能用作指令的操作数,用来反应指令的执行结果或控制指令的执行方式。
EFLAGS
  IP类别:专用寄存器寄存器--指令指针寄存器
作用:CPU专用寄存器,不能用作指令的操作数,CS于EIP或IP共同指出要执行的下一条指令的内存地址。
EIP
段寄存器
  CS类别:段寄存器寄存器--代码段寄存器
作用:存放程序的指令序列。
  DS类别:段寄存器寄存器--数据段寄存器
作用:存放程序的数据。
  SS类别:段寄存器寄存器--堆栈段寄存器
作用:存放作为堆栈使用的内存区域的地址。
  ES类别:段寄存器寄存器--附加段寄存器
  FS类别:段寄存器寄存器--附加段寄存器
  GS

类别:段寄存器寄存器--附加段寄存器

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值