Intel x86-64汇编跳转语句问题

Intel x86-64 assembly jump statement question

我的任务是将汇编代码逆向工程为 C 代码

    jge    .L4
    movq   , -16(%rbp)
    movq   , -24(%rbp)
    jmp    .L5

.L4:
    movq   -16(%rbp), %rax
    imulq  -24(%rbp), %rax
    movq   %rax, -40(%rbp)

.L5:
    do more stuff

我的问题是在完成 L4(使用排序操作的 if 语句)指令后,我是返回并执行代码以将 76 和 87 移动到内存位置还是移动到 L5?移动 76 和 87 的指令也可能在 else 语句中吗?

没有任何东西可以备份。 jge 不是函数调用,它只是一个跳转,不会在任何地方保存旧位置。

所以这基本上只是一个 ifelse 语句。在伪代码中它可以写成

if (ge) {
    // .L4
    movq   -16(%rbp), %rax
    imulq  -24(%rbp), %rax
    movq   %rax, -40(%rbp)
} else {
    movq   , -16(%rbp)
    movq   , -24(%rbp)
}
// .L5
do more stuff

注意if/else块的顺序与汇编代码的顺序相反,因为当条件为真时jge跳过紧接着的块。