首页 > 编程语言 > 详细

二维数组

时间:2021-04-27 22:11:45      阅读:24      评论:0      收藏:0      [点我收藏+]
高级语言如何存放二维数组
 
高级语言有两种方法在内存中存放二维数组:行主序,列主序。
 
行主序存储方法
 
使用行主序(最常用)时,第一行存放在内存块开始的位置,第一行最后一个元素后面紧跟的是第二行的第一个元素。
 
列主序存储方法
 
使用列主序时,第一列的元素存放在内存块开始的位置,第一列最后一个元素后面紧跟的是第二列的第一个元素。
 
汇编语言实现二维数组的方法
 
用汇编语言实现二维数组时,可以选择其中的任意一种顺序。
 
x86指令集中二维数组的操作数类型
 
  1. 基址 - 变址操作数
  2. 基址 - 变址 - 偏移量操作数
 
什么是基址 - 变址操作数
 
将两个寄存器(称为基址和变址)相加,生成一个偏移地址
 
格式
 
[ 基址寄存器 + 变址寄存器 ]               ;其中方括号是必须的
 
作为基址变址寄存器的范围
 
32位模式下,任一32位通用寄存器都可以用作基址和变址寄存器。
通常情况下避免使用EBP,除非进行堆栈寻址。
 
使用基址- 变址操作数按行主序方式访问二维数组
 
  1. 确定数组起始地址
  2. 确定行大小
  3. 确定行索引,索引以0开始
  4. 确定列索引,索引以0开始
  5. 如果是非byte类型,确定比例因子
示例:
    mov ebx,offset array          ;数组起始地址
    add  ebx,rowsize * index    ;数组起始地址 +(行大小 * 行索引)
    mov esi,2*type array          ;列位置 * 元素大小
    mov eax,[ebx + esi]            ;精确定位数组元素
 
什么是基址 - 变址 - 偏移量操作数
 
用一个偏移量,一个基址寄存器,一个变址寄存器,和一个可选的比例因子,来生成有效地址。
 
格式
 
[基址寄存器 + 变址寄存器 + 偏移量]                            ;偏移量可以为变量名或常量表达式
偏移量 [基址寄存器 + 变址寄存器 * type array]             ;偏移量可以为变量名或常量表达式,type array是可选比例因子
 
作为基址变址寄存器的范围
 
32位模式下,任一32位通用寄存器都可以用作基址和变址寄存器。
 
基址 - 变址 - 偏移量的寻址思想
 
偏移量 = 数组名,基址操作数 = 行 ,变址操作数 = 列
 
示例: mov eax , table [ ebx + esi*TYPE table ]
 
编码体会
 
  1. 确保数组基址不变
  2. 定位元素所在行
  3. 定位元素所在列
  4. 基址+行+列=元素位置
ps:元素位置最终地址最好不要和数组基址使用同一个寄存器
 

二维数组

原文:https://www.cnblogs.com/blues2600/p/14710825.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!