新浪游戏 | 新浪首页
新浪首页 > 游戏世界 > 游民论谈 > 文章内容
INTELX86体系32位汇编语言速成
游民部落网友free_mind

    [回上页]

      怎么样,看起来大半部分都应该是我们以前很熟的了吧。现在,我们只需要侃侃那些在386上才开始出现的新的寄存器就行了。

      首先必须强调的是,在用32位汇编语言编程的时候,所有的地址偏移量都是32位的,在寻址时千万不要还用原来的16位方式。

      对于通用寄存器来说,多了种形如(Exx)的32位寄存器,它的低16位内容就是原来的16位寄存器,而多出的高16位的内容,则只能通过使用32位寄存器来访问。

      再以指针寄存器为例,在寻址时一定要用ESI、EDI、EBP等等,必须要把以前那种movax,[si]之类的指令改为movax,[ESI]。

      从386开始,多出了FS、GS这两个新的段寄存器。由于我们学习的目的是为了今后写在线汇编,所以很多繁琐的问题都不会直接遇到。为了能更快地投入实际运用,这里就不打算去讲述保护模式的细节了,而直接给大家提出一个结论,你只管按照这个结论去做就行了。

      这个简单的结论就是:你在VC中写在线汇编时,尽量不要去碰段寄存器!

      得出这个结论的第一个原因是VC生成的应用程序的DS、ES和SS是相同的。换种说法,整个应用程序的数据段、附加段、堆栈段都在同一个地址,你根本就没有去改变它们的必要。第二个原因是,因为是保护模式,每个段都有4GB大小,所有数据都可以轻易地放进去,于是当然就用不着去改段寄存器了。最后一个原因是,保护模式下的段寄存器使用方法同实模式下完全不一样,在你没弄懂以前,最好别去乱改,否则……嘿嘿,死掉了别怨我。

      至于状态寄存器,大家肯定是非常熟悉了,虽然多了几位,但这些内容我们一般都用不着,所以也可以略过。

      下面将开始讲述INTELX86的32位偏移地址构成方式。

      这里给出关于80386寻址模式的一张列表:

      基地址+(变址X比例因子)+偏移量
      |无||无|
      |EAX||EAX|
      |EBX||EBX||1|
      |ECX||ECX||2||无|
      |EDX|+|EDX|X|4|+|8位|
      |ESP||---||8||32位|
      |EBP||EBP|
      |ESI||ESI|
      |EDI||EDI|

      其中,“---”表示ESP不能被用作变址寄存器

      注意到比例因子,这个可是从386才开始加入的好东西,它对处理表结构大有好处,而且还衍生出了不少技巧,详情请参考《图形程序开发人员指南(MichaelAbrash"sGraphicsProgrammingBlackBook SpecialEdition)》一书第6.3节。


    [下一页]

    发表及查看评论】【关闭窗口



游戏世界意见反馈留言板 欢迎批评指正 游戏咨询电话:请与各公司客服热线联系

新浪简介 | About Sina | 广告服务 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

Copyright © 1996 - 2004 SINA Inc. All Rights Reserved

版权所有 新浪网
北京市通信公司提供网络带宽