0

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

假设数组 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
4

1 回答 1

4

要访问数组中的索引,首先需要数组的地址。有多种方法可以获取数组中的特定索引,概念上最简单的方法是将地址增加 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

现在这会更改地址寄存器,这通常是不可取的。在这种情况下,有一些寻址模式可以将地址寄存器中的值偏移一个常量、另一个寄存器(甚至两者):

 ; access with constant offset
 lea myArray,a0       ; load address of the array
 move.b 10(a0),d0     ; read from address plus 10, aka 10th index

或者

 ; 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

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

于 2014-11-01T16:03:50.690 回答