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区分开来。前者是指向

我正在做一个作业,它把这个作为一个无条件跳转。 我的问题是:

  • rdx*8如何影响跳转
  • 之前的*有什么区别

  • 那只是间接地跳过一张桌子。如您所知,
    .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)