我正在尝试将以下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    $0, %eax
    ret
.L4:
    movq    %rdx, %rax
    .p2align 4,,4
    ret
    .cfi_endproc

最佳答案

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

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

其余代码符号将%edi%esi扩展到64位,然后将它们加在一起。

08-25 13:58