-2

嗨,您能帮我获取此 ARM 代码的 C 代码吗:

('...' 表示进一步的说明)

ADR r1, TABLE

CMP r0, #TABLEMAX

LDRLS pc, [r1,r0,LSL #2]

... ; statementsD

B EXIT

TABLE DCD L0

DCD L1

...

DCD LN

L0 ... ; statements0

B EXIT

L1 ... ; statements1

B EXIT

...

LN ... ; statementsN

EXIT ...
4

1 回答 1

1

这是原始 C 代码中的 switch 语句,类似于:

switch (a) {
case 0: 
    ... // statements 0
break;
case 1:
    ... // statements 1
break;
...
case TABLE_MAX /* (maybe TABLE_MAX -1) */ :
    ...  // statements N
break;
default:
    ...  // statements D
break;

}

其中 a = r0。

Thumb-2 ISA 中最新版本的 ARM 架构包括“表分支”指令 TBB、TBH,用于减少这种特殊情况的代码大小。

于 2013-05-14T20:48:31.130 回答