【问题标题】:Translating Java while loop into ARM Assembly?将 Java while 循环转换为 ARM 程序集?
【发布时间】:2021-03-04 22:51:12
【问题描述】:

我想将一些从下面的循环中计算总和的 Java 代码翻译成 ARM 程序集,我想知道:如何修复我目前所拥有的?

这是我正在翻译的 Java 代码:

R0 = 0; 
R1 = 1;
while (R1 < 100) 
{
  R0 += R1;
  R1++;
}

这是 ARM 汇编中的代码:

  MOV       R0,#0
  MOV       R1,#1
  MOV       R2,#100 
looptop
  CMP       R0, R2
  BGT       loopbottom

  ADD       R0, R0, R1
  ADD       R1, R1, #1
  B         looptop 
loopbottom

【问题讨论】:

  • while (R1 &lt; 100) 显然使用R1,但您的程序集使用R0
  • 同样,原始循环不会为 R1 == 100 运行,但您的程序集可以。

标签: java assembly while-loop arm cpu-architecture


【解决方案1】:

您不必初始化r2,因为您可以将立即值100 与cmp 一起使用:

    mov     r1, #1
    mov     r0, #0
1
    cmp     r1, #100
    add     r0, r0, r1
    add     r1, r1, #1
    blt     %b1

您可以通过使用递减的零终止计数器构造循环来完全删除cmp 指令:

    mov     r1, #100
    mov     r0, #0
1
    subs    r1, r1, #1
    addgt   r0, r0, r1
    bgt     %b1
 

【讨论】:

  • 多亏了你的解释,我现在明白了一点。我很感激。ㄱㅅ!
猜你喜欢
  • 2020-06-20
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 2022-10-07
  • 2014-12-11
  • 2018-02-22
相关资源
最近更新 更多