在32位微机系统中,除了支持前面的七种寻址方式外,又提供了一种更灵活、方便,但也更复杂的内存寻址方式,从而使内存地址的寻址范围得到了进一步扩大。

在用16位寄存器来访问存储单元时,只能使用基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为地址偏移量的一部分,但在用32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP)都可以是地址偏移量的一个组成部分。

当用32位地址偏移量进行寻址时,内存地址的偏移量可分为三部分:一个32位基址寄存器,一个可乘1、2、4或8的32位变址寄存器,一个8位/32位的偏移常量,并且这三部分还可进行任意组合,省去其中之一或之二。

32位基址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP;
32位变址寄存器是:EAX、EBX、ECX、EDX、ESI、EDI和EBP(除ESP之外)。

下面列举几个32位地址寻址指令:

MOV AX, [123456H]
 MOV EAX, [EBX] 
MOV EBX, [ECX*2]
 MOV EBX, [EAX+100H] 
MOV EDX, [EAX*4+200H]
 MOV EBX, [EAX+EDX*2] 
MOV EBX, [EAX+EDX*2+300H]
 MOV AX, [ESP]

用32位地址偏移量进行寻址的有效地址计算公式归纳如公式所示。

由于32位寻址方式能使用所有的通用寄存器,所以,和该有效地址相组合的段寄存器也就有新的规定。具体规定如下:

1、地址中寄存器的书写顺序决定该寄存器是基址寄存器,还是变址寄存器;

如:[EBX+EBP]中的EBX是基址寄存器,EBP是变址寄存器,而[EBP+EBX]中的EBP是基址寄存器,EBX是变址寄存器;

2、默认段寄存器的选用取决于基址寄存器;

3、基址寄存器是EBP或ESP时,默认的段寄存器是SS,否则,默认的段寄存器是DS;

4、在指令中,如果使用段前缀的方式,那么,显式段寄存器优先。

下面列举几个32位地址寻址指令及其内存操作数的段寄存器。

指令的举例 访问内存单元所用的段寄存器
MOV  AX, [123456H] ;默认段寄存器DS
MOV  EAX, [EBX+EBP] ;默认段寄存器DS
MOV  EBX, [EBP+EBX] ;默认段寄存器SS
MOV  EBX, [EAX+100H] ;默认段寄存器DS
MOV  EDX, ES:[EAX*4+200H] ;显式段寄存器ES
MOV  [ESP+EDX*2], AX  ;默认段寄存器SS
MOV  EBX, GS:[EAX+EDX*2+300H] ;显式段寄存器GS
MOV  AX, [ESP]  ;默认段寄存器SS

七种寻址方式(32位地址的寻址方式)相关推荐

  1. 32位地址的寻址方式

    在32位微机系统中,除了支持前面的七种寻址方式外,又提供了一种更灵活.方便,但也更复杂的内存寻址方式,从而使内存地址的寻址范围得到了进一步扩大. 在用16位寄存器来访问存储单元时,只能使用基地址寄存器 ...

  2. 使用 Visual Basic 通过 32 位 地址访问内存(中英对照)

    使用 Visual Basic 通过 32 位 地址访问内存 2001年7月6日 马尼拉,菲律宾 作者:Chris Vega [gwapo@models.com] 当我们谈论"真的" ...

  3. 32位单片机 一个32位地址代表一个字节而不是4个字节(32位)

    在数据手册上,BSRR的偏移地址为0X18,然后手册讲完BSRR后直接讲LCKR了,并且LCKR的偏移地址是 OX1C .所以根据 OX1C-0X18=0X04 就知道BSRR是32位寄存器了.因为一 ...

  4. 服务器优盘启动安装win7系统教程,晨枫u盘启动工具安装原版Win7的两种方法(32位64位系统通用)...

    安装原版Win7两类方法 第一类方法(32位64位系统通用): 具体步骤: [1]先使用晨枫U盘启动制作工具制作完启动U盘(参照制作教程). [1]找到Windows7系统的iso镜像,用UltraI ...

  5. 32位地址为什么是4GB

    32为地址,存储器可寻址空间为4GB,即0x0000,0000~0xFFFF,FFFF.为什么? 第一步:0x0000,0000~0xFFFF,FFFF 相当于  2的32次方 个地址. 第二步:2的 ...

  6. HIFI音箱中最常用的七种音箱摆位方法

    买回中意的音箱后,很多朋友会感觉到效果没有在商家试音室里听到的那么好,甚至会觉得换了一套音箱似的.我们首先要明白一个观点:音箱与聆听空间是一体的,声音的 各种表现都是在音箱与聆听空间二者的互动中产生. ...

  7. 32位java 最大内存_【答疑系列】为什么32位系统只支持最大4G内存?

    这个问题一直都有同学问到,算是提问次数最多的问题之一了. 32位是什么 现在主流的操作系统都是64位的,早期存在32位操作系统,相信大家也都有所听闻,其实,在更早之前,还有16位.8位的,这里就不展开 ...

  8. 707-详解32位Linux系统内存地址映射

    详解32位Linux系统内存地址映射 我们先看一段简单的C程序: 我们先来看一张图: 我们平时所说的x86 32位指的是:80386往后到现在的同一个体系的CPU处理芯片,但是x86这个芯片是从808 ...

  9. ASM:《X86汇编语言-从实模式到保护模式》第10章:32位x86处理器的编程架构

    ★PART1:32位的x86处理器执行方式和架构 1. 寄存器的拓展(IA-32) 从80386开始,处理器内的寄存器从16位拓展到32位,命名其实就是在前面加上e(Extend)就好了,8个通用寄存 ...

最新文章

  1. java8的jvm优化_基于JDK8 版本的SpringBoot 启动参数优化(建议收藏)
  2. 今天是2013年06月21日,博客之路开始了!
  3. 社区拼团软件系统开发为什么这么火热?
  4. AI与BCI相结合读取大脑数据,根据个人喜好生成图像
  5. android bitmap string,Android Bitmap到Base64字符串(Android Bitmap to Base64 String)
  6. [vue] $nextTick有什么作用?
  7. 清末那场世纪大鼠疫,他一个人救下一座城的伟大事迹远扬欧洲
  8. ibm服务器安装系统后黑屏,i52430m装win10系统重启电脑进入会黑屏修复方法
  9. [原]ActiveReport6 for net使用(一)
  10. SqlServer-RBAC五表权限
  11. 数学建模方法-多项式拟合
  12. ue4加载本地版本_ue4本地服务器
  13. 数据库中的日期相减_sql日期相减得到天数【sql日期时间相减语句】
  14. springboot no tests were found
  15. 做国外广告联盟:你要学会这些运作方法
  16. 弗洛伊德的乌龟和兔子(循环检测
  17. 【连载】听程序员部落酋长畅谈关于软件的人和事-节选3
  18. 一款全面高效的日志分析工具,操作更简单
  19. EWSTM8系列教程06_工程节点选项配置(一)
  20. 【android】向模拟器的sdcard中添加文件

热门文章

  1. java观察者_Java中的观察者模式
  2. 在B站学习大名鼎鼎的StatQuest 系列统计和生信分析视频(中文字幕)- 也见证助理教授到创业者的华丽转身...
  3. linux生成一个list文件,Linux 获取文件名称生成列表 txt - create_filelist
  4. 如何在ubuntu中编写python_在ubuntu下编写python(python入门)
  5. 如何实现轮播图的内容的多少随div的大小动态变化_小程序学习日志8:swiper滑动轮播组件(轮播图)(上)...
  6. dedecms 标签使用集锦
  7. matlab cell计算,MATLAB Cell数组 | 学步园
  8. Linux笔记-SVN(subversion)创建仓库及客户端连接及文件回滚
  9. Java笔记-spring-rabbitmq中queue设置argument(添加x-message-ttl)
  10. Nginx文档阅读笔记-DNS load balancing(DNS负载均衡)