Pointers 汇编如何解释标签后带有寄存器的跳转
我正在做一个作业,它把这个作为一个无条件跳转。 我的问题是:Pointers 汇编如何解释标签后带有寄存器的跳转,pointers,assembly,syntax,x86-64,att,Pointers,Assembly,Syntax,X86 64,Att,我正在做一个作业,它把这个作为一个无条件跳转。 我的问题是: rdx*8如何影响跳转 之前的*有什么区别 那只是间接地跳过一张桌子。如您所知,.L4(,%rdx,8)是一个内存地址,值为.L4+rdx*8。在64位模式中,指针是8字节,因此是比例因子rdx只是表中条目的索引 *除了使汇编程序警告静音外,没有任何区别:)您应该使用*进行间接跳转,但当汇编程序能够理解它时,它只会给出一个警告。(,%rdx,8)完全是一种间接跳转。如果您有jmp*.L4,则需要*将其与jmp.L4区分开来。前者是指向
那只是间接地跳过一张桌子。如您所知,
.L4(,%rdx,8)
是一个内存地址,值为.L4+rdx*8
。在64位模式中,指针是8字节,因此是比例因子rdx
只是表中条目的索引
*
除了使汇编程序警告静音外,没有任何区别:)您应该使用*
进行间接跳转,但当汇编程序能够理解它时,它只会给出一个警告。(,%rdx,8)
完全是一种间接跳转。如果您有jmp*.L4
,则需要*
将其与jmp.L4
区分开来。前者是指向.L4
的指针的间接跳转,而后者只是指向.L4
的直接跳转,只是通过表的间接跳转。如您所知,.L4(,%rdx,8)
是一个内存地址,值为.L4+rdx*8
。在64位模式中,指针是8字节,因此是比例因子rdx
只是表中条目的索引
*
除了使汇编程序警告静音外,没有任何区别:)您应该使用*
进行间接跳转,但当汇编程序能够理解它时,它只会给出一个警告。(,%rdx,8)
完全是一种间接跳转。如果您有jmp*.L4
,则需要*
将其与jmp.L4
区分开来。前者是通过指向.L4
的指针间接跳转,而后者只是直接跳转到.L4
谢谢您的回答。我现在的问题是如何计算.L4+rdx*8?我很困惑,因为.L4是一个标签,添加标签是如何工作的?我还应该补充一点,.L4包含的是大量的(.quad.L2)指令(L2-L7)。如何知道间接跳转指向哪个标签?正如我所说,rdx
是索引。只有知道rdx
中的值,才能知道它指向哪个标签。如果rdx
是0
它将转到第一个标签,如果5
它将转到第六个标签,等等@skob002:所有标签都有地址。谢谢你的回答。我现在的问题是如何计算.L4+rdx*8?我很困惑,因为.L4是一个标签,添加标签是如何工作的?我还应该补充一点,.L4包含的是大量的(.quad.L2)指令(L2-L7)。如何知道间接跳转指向哪个标签?正如我所说,rdx
是索引。只有知道rdx
中的值,才能知道它指向哪个标签。如果rdx
为0
它将转到第一个标签,如果5
它将转到第六个标签,以此类推@skob002:所有标签都有地址。
jmp *.L4 (,%rdx,8)