If statement SPARC组件如果不工作/否则不工作

If statement SPARC组件如果不工作/否则不工作,if-statement,assembly,sparc,If Statement,Assembly,Sparc,我正在将带有两个if语句的C方法转换为汇编语言。我很难让一个分支机构工作。我需要两个分支作为同一比较的一部分,一个分支独立。两个分组的分支可以工作,但单独的第三个分支不能工作;即使我使用相同的比较,第三次调用也不会发生任何事情 ifStatements: cmp %l3, %l0 ble useThisA ! works nop bg useThisB ! works nop cmp %l3, %l0

我正在将带有两个if语句的C方法转换为汇编语言。我很难让一个分支机构工作。我需要两个分支作为同一比较的一部分,一个分支独立。两个分组的分支可以工作,但单独的第三个分支不能工作;即使我使用相同的比较,第三次调用也不会发生任何事情

ifStatements:
    cmp    %l3, %l0
    ble    useThisA    ! works
    nop

    bg     useThisB    ! works
    nop

    cmp    %l3, %l0
    bg     useThisC    ! doesn't work, even if it's cmp %l3, %l0 again
    nop

从概念上讲,为什么这不起作用?

如果不使用
ble
,则使用
bg
,反之亦然。分支C永远不会到达

你没有显示你的分支目标或任何东西。其中一个很可能是失败案例。e、 g

ble somewhere
 ; code for the g case
...

另外,我不知道SPARC的具体情况,但是那些
nop
说明是用来做什么的?这是一个分支延迟槽,无论是否执行分支都会执行吗?

是的,没错。我现在更了解分支;分支应该用于“跳过”部分代码,而不仅仅是调用C或Java中的方法。