假设X6是数组“ A”的基地址
假定X7是数组“ B”的基地址
F,G,H,I分别为X0,X1,X2,X3,X4
此AArch64程序集到底在做什么?
使用上述变量的python代码表示将是惊人的:)
ADD X9, X6, #8 // I understand this is X9 = A + 8, not sure what the value of the array would be here
ADD X10, X7, #16 // Same idea
STUR X1, [X6, #0] // I believe this "Stores" the value at X1 into A[0]?
LDUR X8, [X10,#0] // This "stores" the value at ?X10[0]? into X8?
LDUR X5, [X9, #0] // This "stores" the value at ?X9[0]? into X5?
ADD X0, X8, X5 // F = X8 + X5
我在LDUR阶段迷路了,X5和X8到底是什么
ADD X9,X6,#8
我知道这是X9 = A + 8,不确定数组的值在这里是什么
正确。正如问题描述所指出的,X6
的值只是数组的基地址。
STUR X1,[X6,#0]
我相信这会将X1的值“存储”到A [0]?
正确。在问题描述中,X1
已定义为变量G
。所以是A[0] = G;
LDUR X8,[X10,#0]
这将值“存储”到?X10 [0]?进入X8?
是正确的,但是将数据从内存移入寄存器的过程称为负载。因此,指令名称(LD =负载)。还请记住,X10
已设置为X7+16
,其中X7
为数组B
。此外,LDUR
使用字节索引,因此16表示16个字节。假设B
是一个包含64位数字的数组,每项8个字节,那么16个字节就是2个项目。所有这些都归结为X8 = B[2];
。
LDUR X5,[X9,#0]
按照相同的逻辑,这是X5 = A[1];
,所以最终结果是F = B[2] + A[1];
。