【问题标题】:Converting this ARM64 Assembly into Python?将此 ARM64 程序集转换为 Python?
【发布时间】:2019-11-20 23:40:02
【问题描述】:

假设 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 究竟是什么

【问题讨论】:

  • 这里有 3 条说明。您是否查阅过指令集参考,了解每个指令集的作用?哪一部分不清楚?
  • 您好 Jester,是的,我使用了 ARM64 参考指南以及该语言的书面指南。我已经编辑了我的问题,以包括我所做的(或至少我认为)理解的内容以及我迷路的地方。任何帮助都会很棒。

标签: python assembly arm64


【解决方案1】:

添加 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 = load)。还要记住X10 已设置为X7+16X7 是数组B。此外,LDUR 使用字节索引,因此 16 表示 16 个字节。假设 B 是一个包含 64 位数字的数组,每个项目 8 个字节,所以 16 个字节是 2 个项目。所有这些都归结为X8 = B[2];

LDUR X5,[X9,#0]

同样的逻辑,这是X5 = A[1];,所以最终结果是F = B[2] + A[1];

【讨论】:

  • 我认为值得一提的是ldur 只是ldr 的一种形式,它允许任意字节偏移,而不仅仅是操作数大小的倍数。 IDK为什么原来使用那个寻址模式都使用#0作为偏移量。也许还可以简化 asm 以使用寻址模式偏移量而不是单独的 add 指令。或者不会,因为我怀疑许多未来的读者会看到这一点。
猜你喜欢
  • 2014-12-24
  • 2015-07-07
  • 2012-10-13
  • 1970-01-01
  • 2013-12-31
  • 2021-09-13
  • 2013-07-14
  • 2014-01-24
相关资源
最近更新 更多