Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将此ARM64程序集转换为Python?_Python_Assembly_Arm64 - Fatal编程技术网

将此ARM64程序集转换为Python?

将此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是数组“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 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