Assembly 汇编语言中的内存访问

Assembly 汇编语言中的内存访问,assembly,68000,easy68k,Assembly,68000,Easy68k,我想访问数组的特定内存位置。我的情况有点像这样 假设数组是arr[]有100个元素,我想访问第10个元素。因此,我想移到第10个内存位置。内存位置由用户定义,因此存储在数据寄存器中。那么如何使用值数据寄存器移动到所需的地址呢。这是我的密码 lea morse,a1 clr.b d2 add.b #11,d1 move.b (d1,a1,d2.w),d1 move.l #6,d0 t

我想访问数组的特定内存位置。我的情况有点像这样

假设数组是arr[]有100个元素,我想访问第10个元素。因此,我想移到第10个内存位置。内存位置由用户定义,因此存储在数据寄存器中。那么如何使用值数据寄存器移动到所需的地址呢。这是我的密码

        lea     morse,a1
        clr.b   d2
        add.b   #11,d1
        move.b  (d1,a1,d2.w),d1
        move.l  #6,d0
        trap    #15
我也尝试过这个代码,但它不起作用

        lea     morse,a1
        clr.b   d2
        move.b  #13,d2
        move    d2(a1),d3
        move.b  d3,d1
        move.l  #6, d0
        trap    #15

要访问数组中的索引,首先需要数组的地址。获取数组中特定索引的方法有多种,概念上最简单的方法是将地址增加arrayIndex乘以itemSize(如果项是字节,itemSize==1,并且术语简化为arrayIndex)。从后面开始,第一项的地址(索引为零)等于数组地址本身

在字节数组的情况下,增加地址只需添加地址即可,其简单程度如下:

 lea myArray,a0       ; load address of the array
 add.l #10,a0         ; go to index 10
 move.b (a0),d0       ; read the value at index 10
现在这改变了地址寄存器,这通常是不可取的。在这种情况下,有寻址模式可以通过常数、另一个寄存器(甚至两者)偏移地址寄存器中的值:


当偏移量由循环计数器提供或作为子例程参数时,后者特别有用。

要访问数组中的索引,首先需要数组的地址。获取数组中特定索引的方法有多种,概念上最简单的方法是将地址增加arrayIndex乘以itemSize(如果项是字节,itemSize==1,并且术语简化为arrayIndex)。从后面开始,第一项的地址(索引为零)等于数组地址本身

在字节数组的情况下,增加地址只需添加地址即可,其简单程度如下:

 lea myArray,a0       ; load address of the array
 add.l #10,a0         ; go to index 10
 move.b (a0),d0       ; read the value at index 10
现在这改变了地址寄存器,这通常是不可取的。在这种情况下,有寻址模式可以通过常数、另一个寄存器(甚至两者)偏移地址寄存器中的值:


当偏移量由循环计数器提供或作为子程序参数时,后者特别有用。

这看起来很奇怪:move.b(d1、a1、d2.w),d1见表2-4。有效的寻址方式和类别。在那里找不到任何3寄存器寻址模式。只有两个寄存器+一个常量。第二个版本“移动d2(a1),d3”=>移动(a1,d2),d3怎么样?(=带有disp=0的索引的间接地址寄存器)或move.b(a1,d2),d1?这看起来很奇怪:move.b(d1,a1,d2.w),d1见表2-4。有效的寻址方式和类别。在那里找不到任何3寄存器寻址模式。只有两个寄存器+一个常量。第二个版本“移动d2(a1),d3”=>移动(a1,d2),d3怎么样?(=带有disp=0的索引的间接地址寄存器)。或move.b(a1,d2),d1?Thaaank Youuuuu!非常简洁,Thaaank Youuuuu!非常简洁。
 ; access with register offset
 lea myArray,a0       ; load address of the array
 moveq #10,d1         ; prepare the index we want to access
 move.b (a0,d1.w),d0  ; read from address plus *index* register