当前位置: 首页 > news >正文

汇编:保护模式下的寻址方式

寻址(Addressing)是计算机在访问内存时定位数据的过程;它涉及如何指定内存位置,以便处理器能够正确地读取和写入数据,不同的计算机架构和操作模式支持多种不同的寻址方式。以下是常见的寻址方式:

①立即数寻址

操作数直接包含在指令中;

MOV AX, 5  ; 将立即数5加载到AX寄存器
②寄存器寻址

操作数在寄存器中,指令直接指定寄存器;

MOV AX, BX  ; 将BX寄存器的值加载到AX寄存器
③直接寻址

操作数的地址在指令中直接给出;

MOV AX, [1234h]  ; 将内存地址1234h处的值加载到AX寄存器
④寄存器间接寻址

操作数的地址存储在寄存器中,寄存器指向实际内存地址;

MOV EAX, [EBX]  ; 将EBX寄存器中存储的地址指向的内存位置的值加载到AX寄存器
⑤基地址 + 变地址进行寻址

使用基址寄存器和变址寄存器的组合来计算有效地址;

MOV EAX, [EBX+ESI]  ; 将EBX和ESI寄存器值的和作为内存地址,加载该地址处的值到AX寄存器
⑥相对基地址+变地址寻址

基址寄存器、变址寄存器和一个常量偏移量的组合;

MOV EBX, [1234h]  ; 将内存地址1234h处的值加载到EBX寄存器
MOV EAX, [EBX+ESI+8]  ; 将EBX和ESI寄存器值的和加上8的地址处的值加载到EAX寄存器
⑦比例因子寻址

比例因子寻址(Scaled Index Addressing)是一种强大的寻址方式,常用于处理数组和数据结构。比例因子寻址的有效地址计算公式为:

有效地址=基址寄存器+(变址寄存器×比例因子)+偏移量

内存地址是通过基址寄存器、变址寄存器、比例因子(scale factor)和一个常量偏移量的组合来计算的。比例因子通常是 1、2、4 或 8,用于根据数据类型大小(如字节、字、双字或四字)进行扩展。

.dataarray dd 10, 20, 30, 40  ; 定义一个双字数组,每个元素占4字节
​
.code
main procmov EBX, array           ; 将数组array的基址加载到EBX寄存器mov ECX, 2               ; 将索引2加载到ECX寄存器mov EAX, [EBX + ECX*4]   ; 将EBX寄存器值加上ECX寄存器值乘以4的地址处的值加载到EAX寄存器
main endp
end

MOV EBX, array:将数组 array 的基址加载到 EBX 寄存器中。

MOV ECX, 2:将索引 2 加载到 ECX 寄存器中。

MOV EAX, [EBX + ECX*4]:使用比例因子 4 来访问数组的第三个元素。ECX 寄存器中的值 2 乘以 4 加上 EBX 中的基址,得到数组第三个元素的内存地址,并将该地址处的值加载到 EAX 寄存器中。

相关文章:

  • Linux配置uwsgi环境
  • <题海拾贝>[递归]1.汉诺塔
  • PyCharm中 Fitten Code插件的使用说明一
  • 云计算——武汉理工期末复习
  • 迈向『闭环』| PlanAgent:基于MLLM的自动驾驶闭环规划新SOTA!
  • 【Python】(一)复习重点——控制流
  • 【经验】Ubuntu上离线安装VsCode插件浏览Linux kernel源码
  • Nginx配置详细解释:(4)高级配置
  • 使用#sortablejs插件对表格中拖拽行排序#Vue3#后端接口数据
  • Linux用户,用户组,所有者权限分配,sftp用户权限分配
  • 问题 B: 2.左右(lr.cpp/pas)
  • C++:程序设计实例
  • 2024/06/11--代码随想录算法1/17|理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • Spark的开发环境配置
  • LeakSearch:针对网络公开凭证的安全扫描与检测工具
  • ----------
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • [数据结构]链表的实现在PHP中
  • 【面试系列】之二:关于js原型
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • ES2017异步函数现已正式可用
  • Github访问慢解决办法
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Mysql优化
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Web标准制定过程
  • 从重复到重用
  • 动态规划入门(以爬楼梯为例)
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 欢迎参加第二届中国游戏开发者大会
  • 开源SQL-on-Hadoop系统一览
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • #laravel 通过手动安装依赖PHPExcel#
  • #pragma data_seg 共享数据区(转)
  • $forceUpdate()函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (二)Linux——Linux常用指令
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (力扣题库)跳跃游戏II(c++)
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (新)网络工程师考点串讲与真题详解
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)memcache、redis缓存
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .cn根服务器被攻击之后
  • .equals()到底是什么意思?
  • .NET 8.0 中有哪些新的变化?
  • .Net Web项目创建比较不错的参考文章
  • .NET 使用 XPath 来读写 XML 文件
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题
  • []我的函数库