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

我知道第二部分是跳表。我想不通的是如何计算原始的 C 级 switch case 值。我怎样才能做到这一点?

4

1 回答 1

1

分析代码。

函数的参数 + 2 用作表的索引。因此,常数从 -2 开始,然后到 -1、0 等。

最大常数为 4,请参阅检查参数 + 2 > 6,或者等效地检查参数 > 4。表中的元素数量也反映了这一点。

于 2013-01-30T05:25:33.870 回答