将 Java while 循环翻译成 ARM 程序集?

Translating Java while loop into ARM Assembly?

我想将一些 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

您不必初始化 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