将 ASM 转换为 C?

Convert ASM to C?

我正在尝试将以下 ASM 转换为 C,但我无法理解跳转语句的作用。有人可以帮我看看到底发生了什么吗?

func_a:
.LFB0:
    .cfi_startproc
    testq   %rdx, %rdx
    js  .L3
    movslq  %edi, %rdi
    movslq  %esi, %rsi
    addq    %rdi, %rsi
    cmpq    %rdx, %rax
    jg  .L4
    rep ret
.L3:
    movl    [=10=], %eax
    ret
.L4:
    movq    %rdx, %rax
    .p2align 4,,4
    ret
    .cfi_endproc

js 如果 %rdx 的符号 (MSB) 已设置(即如果 %rdx 为负)则跳转到 .L3

jg如果%rax大于%rdx则跳转到.L4(AT&T语法,操作数颠倒)。

剩下的代码符号将%edi%esi扩展为64位,然后相加