0

ATT構文。

授業で話し合った練習問題を理解しようとしています。

switchステートメントに対して次の部分的なアセンブリコードが与えられました。

movl  8(%ebp), %eax
addl  $2, %eax
cmpl  $6, %eax
ja    .L2
jmp   *.L8(,%eax,4)

//rest of switch statement would go here

.L8
 .long   .L3
 .long   .L2
 .long   .L4
 .long   .L5
 .long   .L6
 .long   .L6
 .long   .L7

2番目の部分がジャンプテーブルであることを私は知っています。私が理解できないのは、元のCレベルのスイッチのケース値を計算する方法です。これどうやってするの?

4

1 に答える 1

1

コードを分析します。

関数のパラメーター+2は、テーブルへのインデックスとして使用されます。したがって、定数は-2から始まり、-1、0などに進みます。

最大定数は4です。パラメーター+2>6、または同等にパラメーター>4のチェックがあることを確認してください。表の要素数もそれを反映しています。

于 2013-01-30T05:25:33.870 に答える