if x <= y:
y = y + 1
else if x != z
y = y-1
else
z = z + 1
这就是我的Arc汇编代码。我是相当新的,所以我不太确定如何将if / else语句变成汇编代码。
! This program executes an If/else statement
.begin
.org 2048
prog1: ld [X], %r1 ! this loads memory X into register 1
ld [Y], %r2 ! this loads memory y into register 2
X: 0
Y: 0
Z: 0
.end
答案 0 :(得分:0)
执行比较的关键是减法指令(更新标志的版本,即subcc
)。
您可以将%r0
指定为目标操作数,因为不需要这种减法的结果(利用ARC三个操作数形式)。
假设你这样做
subcc %r1, %r2, %r0
以下是真的
r0
C
标志,则r2 > r1
C
标志,则r2 <= r1
Z
标志,则r2 == r1
Z
标志,则r2 !=r1
我从未编写过ARC汇编代码。这是尝试翻译给定的代码,我无法调试甚至汇编此代码。因此,请将其视为解释上述概念的简明方法。
! This program executes an If/else statement
.begin
.org 2048
prog1: ld [X], %r1 ! this loads memory X into register 1
ld [Y], %r2 ! this loads memory y into register 2
ld [Z], %r3 ! this loads memory z into register 3
subcc %r2, %r1, %r0 !y ? x
bcs .else_if ;x > y
add %r2, 1, %r2 !y = y + 1
ba .end
.else_if:
subcc %r1, %r3, $r0 ;x ? z
beq .else ;x == z
sub %r2, 1, %r2
ba .end
.else:
add %r3, 1, %r3 !z = z + 1
ba .end
X: 0
Y: 0
Z: 0
.end
确实,我希望这不是一个有效的版本,因为它至少会迫使你进入一些思考学习过程,试图纠正它:)