前言

本博文将讲解 80X86汇编中的 变址寻址,缘由是笔者对照 《80X86汇编语言程序设计_王元珍.pdf》学习时 遇到的困惑。比例因子 含义是啥 为啥要乘以它?

基本概念

相关概念和图片摘自《80X86汇编语言程序设计_王元珍.pdf》书中。

变址寻址:变址寻址方式的操作数放在主存储器中,其偏移地址EA是指令中指定寄存器的内容乘以比例因子后与给出的位移量之和

笔者刚开始也不明白为啥要乘以比例因子F,反正就跟着书上例子代码敲敲 试试看!当然笔者出问题了。这里先抛结论,比例因子 意义是?笔者也是网络中找到的,感觉是那么回事。

就是用来寻址数组的,有些数组元素占用不止一个内存单元,所以在计算数组元素的地址时需要用这种方式来计算:
数组元素地址=数组首地址+元素索引 * 数组元素占用空间
比如一个字形的数组,它的首地址是6000H,那么它的第4个(索引从0开始)元素的地址就是:
6000H+4 * 2=6008H
在高级的CPU中,这种比例因子的寻址方式是在指令级别上提供支持的,所以可以直接用这种方式寻址:
mov ebx,offset a
mov edx,4
mov ax,[ebx+edx * 2]

示例程序

下面就是笔者 使用 书上的 例子2.2

【例 2.2】 某班 C 语言的考试成绩存放在以 CC 为首址的分数表中, 该班学生各门功课的考试成绩(总分)存放在以 TOTAL 为首址的总分表中, 设学生的学号分别为 0, 1, 2,3, …, 10H, 11H, …现要取出学号为 10H 的同学的 C 语言分数累加到它的总分中。 试用变址方式实现该程序。

下图为书上的伪代码。

下面代码是笔者 修改后的代码,可正常运行,注释写的很清楚。笔者这里改为取出3号同学的 C 语言分数累加到它的总分中。

; eg0213.asm in Windows Console
;某班 C 语言的考试成绩存放在以 CC 为首址的分数表中, 该班学生各门功
;课的考试成绩(总分)存放在以 TOTAL 为首址的总分表中, 设学生的学号分别为 0, 1, 2,
;3, …, 10H, 11H, …现要取出学号为 3 的同学的 C 语言分数累加到它的总分中。 试用
;变址方式实现该程序include io32.inc.data
cc      dword 80,90,70,65           ; 0 ~ 3号 学生的各科C语言的成绩
total   dword 5640,5000,4800,6000   ; 0 ~ 3号 学生的各科总成绩(不含C语言).code
start:mov eax, 0    ;; 书上写法,呵呵,一堆错误;mov si, offset cc ; si为cc分数表指针;mov di, offset total ; di为total分数表指针;mov ax, 4*3[si] ; 取出3号的C语言的分数;mov 4*3[di], ax ; 加到总分表中; 修改后的写法mov esi, offset cc ; esi为cc分数表指针mov edi, offset total ; edi为total分数表指针mov eax, [4*3][esi] ; 取出3号的C语言的分数 65-> 41H,常量乘法需要用[]包起来,这里实际上还是相对寻址,没有寄存器*比例因子。add [4*3][edi], eax ; 加到总分表中,4*3:dword 4字节,3为学号为3mov edx, [edi][4*3] ; 该总分也放到edx 方便确认call disprdsub [4*3][edi], eax ; 3号学生总分数据还原,方便对比!; 我们换一种写法 变址寻址的方法mov ecx, 3 ; 我们将学号放到寄存器中mov eax, [ecx*4][esi] ; 取出3号的C语言的分数,ecx*4 + 偏移地址add [ecx*4][edi], eax ; 加到总分表中 6065-> 17B1mov edx, [ecx*4][edi] ; 该总分也放到edx 方便确认call disprdexit 0end start

测试结果

80X86汇编—存储器的变址寻址相关推荐

  1. Linux汇编----变址寻址与间接寻址

    经常会把AT&T汇编语法中的变址寻址(indexed memory mode)与寄存器间接寻址搞混. 1. 变址寻址模式 变址寻址特别适合于访问内存中的一系列连续数据,即数组.表达式格式为 b ...

  2. 80x86汇编指令详解

    80x86指令系统,指令按功能可分为以下七个部分. (1) 数据传送指令. (2) 算术运算指令. (3) 逻辑运算指令. (4) 串操作指令. (5) 控制转移指令. (6) 处理器控制指令. (7 ...

  3. 计组高分笔记:【04】指令系统 「指令格式与分类 | CISC、RISC | 直接寻址 | 间接寻址 | 寄存器寻址 | 隐式寻址 | 立即寻址| 基址寻址 | 变址寻址 | 相对寻址 | 堆栈寻址」

    文章目录 1. 指令格式 1.1 指令的基本概念 1.2 指令的分类 1.2.1 按地址码(操作数)长度/数目分类 1.2.2 按指令的长度分类 1.2.3 按操作码长度分类 1.2.4 按操作类型分 ...

  4. ARM处理器9种基本寻址方式,和单片机微机原理寻址方式截然不同,(例如没有直接地址寻址,只能间接指针寻址或者寄存器变址寻址,立即数寻址,不是所有立即数都可直接寻址)不可套用理解。需独立学习

    基本寻址方式 寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式,ARM处理器有9 种基本寻址方式. 1.寄存器寻址 操作数的值在寄存器中,指令中的地址码字段给出的是寄存器编号,寄存器 ...

  5. 嵌入式:ARM间接寻址、变址寻址与多寄存器寻址

    文章目录 寄存器间接寻址 基址加偏址寻址(变址寻址) 偏移地址 传送数据类型 块拷贝寻址(多寄存器寻址) 块拷贝寻址示例 寄存器间接寻址 寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身 ...

  6. 【计组期末复习一】第八章:CPU的结构和功能 :指令中各有哪些字段?变址寻址和基址寻址异同?如何设计计算机指令?如何求寻址范围?

    1.指令中有哪些字段?各有何作用?如何确定执行这些字段的位数 1.指令字中有三种字段:操作码字段.寻址特征字段和地址码字段.操作码字段指出机器 完成某种操作,其位数取决于指令系统的操作种类.寻址特征字 ...

  7. 计算机指令中数据寻址的方式,1.变址寻址需要在指令中提供一个寄存器编号和一个数值。 2.计算机的指令越多,功能越强越好。 3.程序计数...

    满意答案 happysk72 推荐于 2017.12.16 采纳率:57%    等级:12 已帮助:21199人 1.对 变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏 ...

  8. 基址变址寻址来实现暂存数据功能

    关于基址变址寻址技术,利用栈暂存数据 参考王爽老师的<汇编语言>第四版,对P158的汇编代码,进行了个人理解标注.仅供参考,存在错误之处,请大家斧正. assume cs:codesg,d ...

  9. 基址寻址与变址寻址的个人理解

    两者都有一个写明在指令里的形式地址A(比如一个16位数),与一个指明寄存器编号的字段R(比如一个2位的编号来区分4个寄存器,这个寄存器可以是隐式的) 区别在于,如果寄存器存的是一个基地址,那就是基址寻 ...

最新文章

  1. windows nt service 框架
  2. c语言穷举算法 枚举法,c语言枚举法 穷举法 ppt课件
  3. python 内置标准库socketserver模块的思考
  4. mysql 分页算法_MySQL高效的分页算法
  5. http 和 https_Golang设置https访问,以及http如何重定向到https
  6. keil和proteus的联调设置
  7. java.lang.NoClassDefFoundError:
  8. iOS---------- @synchronized(self)的用法
  9. vba两个集合的差集_Python中的集合是如何使用的?
  10. Linux—文件系统
  11. git基本使用知识点总结
  12. 阶段3 2.Spring_03.Spring的 IOC 和 DI_11 set方法注入
  13. 基于Java、Jsp实现购物车的功能
  14. 怎么升级计算机的操作系统,电脑如何升级系统版本_Windows10/7电脑升级系统版本的操作步骤...
  15. Spring的 @Autowired注解底层原理
  16. Matplotlib:线类型
  17. Vue 3 Composition API - “ref”和“reactive”
  18. css-图片旋转木马3D效果
  19. ardupilot 关于设备车Rover的学习《1》------如何编译下载
  20. 红警地图编辑器的使用方法

热门文章

  1. 华为认证HCIA H12-811 Datacom数通考试真题题库【带答案刷题必过】【第一部分】
  2. 用html做七巧板的方法,七巧板制作教程 七巧板的制作方法
  3. 10倍双目望远镜系统设计
  4. 终于有人把智能语音处理讲明白了
  5. Jquery实现textarea自动换行
  6. 《Java并发编程实战》【第一部分 基础知识】
  7. Eclipse各版本代号一览表以及官网上有很多版本的eclipse,下载哪个版本比较合适呢?
  8. k8spod资源的基础管理操作
  9. ettercap 中间人攻击
  10. 重新理解创业——一个创业者的途中思考