将此ARM64程序集转换为Python?
假设X6是数组“A”的基址 假设X7是数组“B”的基址 F、 G,H,I分别=X0,X1,X2,X3,X4 这个AArch64组件到底在做什么 使用上述变量的python代码表示将是令人惊讶的:) 我在LDUR阶段迷路了,X5和X8中到底是什么 加上X9、X6和#8 我知道这是X9=A+8,不确定这里的数组值是多少 对。正如问题描述所述,将此ARM64程序集转换为Python?,python,assembly,arm64,Python,Assembly,Arm64,假设X6是数组“A”的基址 假设X7是数组“B”的基址 F、 G,H,I分别=X0,X1,X2,X3,X4 这个AArch64组件到底在做什么 使用上述变量的python代码表示将是令人惊讶的:) 我在LDUR阶段迷路了,X5和X8中到底是什么 加上X9、X6和#8 我知道这是X9=A+8,不确定这里的数组值是多少 对。正如问题描述所述,X6的值只是数组的基址 STUR X1[X6,#0] 我相信这会将X1处的值“存储”到[0] 对X1已在问题描述中定义为变量G。这就是A[0]=G LDUR X
X6
的值只是数组的基址
STUR X1[X6,#0]
我相信这会将X1处的值“存储”到[0]
对<代码>X1已在问题描述中定义为变量G
。这就是A[0]=G代码>
LDUR X8,[X10,#0]
该“存储”值为?X10[0]?进入X8
正确,但将数据从内存移动到寄存器称为加载。因此指令名(LD=load)。还要记住,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]代码>这里有3条说明。您是否查阅了有关每个操作的指令集参考?哪一部分不清楚?你好,杰斯特,是的,我使用了ARM64参考指南以及语言的书面指南。我编辑了我的问题,包括我所做的(或者至少我认为)理解的事情以及我在哪里迷路。任何帮助都会很棒。我认为值得一提的是,ldur
只是ldr
的一种形式,它允许任意字节偏移量,而不仅仅是操作数大小的倍数。IDK当寻址模式都使用#0
作为偏移量时,原版为什么使用它。也可以简化asm以使用寻址模式偏移,而不是单独的add
指令。或者不是,因为我怀疑很多未来的读者会看到这一点。
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