-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 に答える