读书频道 > 网站 > 网页设计 > 深入理解程序设计:使用Linux汇编语言
2.5 寻址方式
14-03-20    奋斗的小年轻
收藏    我要投稿   
《深入理解程序设计:使用Linux 汇编语言》深入浅出地介绍Linux 汇编语言编程,旨在让程序员真正理解汇编语言,从计算机的角度理解编程。无论其是否实际使用汇编语言,本书最终将使其能够以协调、优雅的方式解立即去当当网订购

计算机处理器有多种不同的数据访问方式,它们被称为寻址方式。最简单的寻址方式是立即寻址方式,在这种寻址方式下,指令本身即包含要访问的数据。例如,如果我们想把寄存器初始化为0,那么可以使用立即寻址方式,在指令中直接给出数字0,而不是告诉计算机要到哪个地址去读取0。

在寄存器寻址方式中,指令中包含要访问的寄存器,而不是内存位置。

除了上述两种寻址方式外,其他余的寻址方式都与地址有关。

在直接寻址方式中,指令中包含要访问的内存地址。例如,直接寻址的指令可能为:请将地址2002中的数据加载到这个寄存器。按照这个指令,计算机将直接读取字节编号为2002的内存中的内容,并将其复制到寄存器。

在变址寻址方式中,指令中除包含一个要访问的内存地址外,还要指定一个变址寄存器,其中包含该地址的偏移量。例如,我们可以指定内存地址2002和一个变址寄存器。如果该变址寄存器包含数字4,那么实际用于加载数据的地址就是2006。利用这种寻址方式,如果你有起始位置为2002的一组数字,那就可以使用变址寄存器循环提取每个数字。在x86处理器中,还可以指定变址的比例因子,这样就能以一次一字节或一个字(4字节)的方式访问内存。比如,如果你正在访问一个完整的字,那么变址需要乘以4(即比例因子是4)才能得到第四个字相对当前地址的确切位置。如果你想访问从内存地址2002开始的第四个字节,因为是一次访问一字节,你就要把3加载到变址寄存器(我们从0开始计数),并设置比例因子为1。这样,你就会得到位置2005的数据。但如果你要访问从2002开始第四个字的位置,就要把3加载到变址寄存器,并设置比例因子为4,结果是从位置2014(即第四个字的起始位置)加载数据。花点时间认真验算一下,确保你切实了解了上述工作原理。

在间接寻址方式下,指令中包含一个寄存器,该寄存器中存储的是指向要访问数据的指针。比如,如果我们使用间接寻址方式,并指定值为4的%eax寄存器,则表示我们要使用内存位置4中的值。同样是这个指令,在直接寻址中,我们将只加载值4;但在间接寻址中,我们会用4作为地址去寻找数据。

最后,还有一种基址寻址方式。这种方式与间接寻址类似,但还须包括一个叫做偏移量的值,将其与寄存器中的值相加后再用于寻址。在本书中,我们将主要使用这个寻址方式。

在2.4节中,我们曾讨论过存储客户信息的内存结构的例子。下面我们以此为例来解释基址寻址方式,设想我们想访问某客户的年龄,也就是其记录的第八个字节的数据,而寄存器中存放着此客户信息的起始内存地址。我们可以使用基址指针寻址,指定寄存器为基址指针,8为偏移量。这与变址寻址很相似,不同之处在于:在基址指针寻址中,偏移量是常数,指针被保存在寄存器中;而在变址寻址中,偏移量存储在寄存器中,而指针是常量。

此外还存在其他寻址方式,但上面这些是最重要的。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站