Assembly 汇编语言中的内存访问
我想访问数组的特定内存位置。我的情况有点像这样 假设数组是arr[]有100个元素,我想访问第10个元素。因此,我想移到第10个内存位置。内存位置由用户定义,因此存储在数据寄存器中。那么如何使用值数据寄存器移动到所需的地址呢。这是我的密码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
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