2016-02-14 42 views

回答

2

这只是间接跳过表格。正如你所希望的那样,.L4(,%rdx,8)是一个内存地址,其值为.L4 + rdx * 8。在64位模式下,指针是8个字节,因此是比例因子。 rdx只是表中条目的索引。

*没有任何区别,除了:)你应该使用间接跳转一个*沉默汇编警告,但是当汇编能弄清楚,它只是给一个警告。 (,%rdx,8)是一个不争的事实,这是一个间接的跳跃。如果您有jmp *.L4,则需要*将其与jmp .L4区分开来。前者是通过.L4处的指针间接跳转,而后者则是直接跳转到.L4

+0

感谢您的回答。我现在的问题是你如何计算.L4 + rdx * 8?我很困惑,因为.L4是一个标签,添加标签是如何工作的?我还应该补充说明.L4保留的是一些(.quad.L2)指令(L2-L7)。我如何知道间接跳转的标签? – skob002

+0

正如我所说,'rdx'是索引。如果您知道'rdx'中的值,您只需知道它将使用哪个标签。如果'rdx'是'0',它会转到第一个标签,如果它是'5',它将转到第六个标签等。 – Jester

+0

@ skob002:所有标签都有一个地址。 –