将ASM转换为C?

将ASM转换为C?,c,assembly,64-bit,C,Assembly,64 Bit,我正在尝试将下面的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

我正在尝试将下面的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

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

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


代码符号的其余部分将
%edi
%esi
扩展到64位,然后将它们相加。

跳转的哪一部分不清楚?您是否已阅读说明集参考资料,其中说明了每一项功能?另外,您确定复制的函数正确吗
rax
似乎是未初始化的(至少按照标准调用约定)。第一个跳转到
。L3
RDX
为正。如果
RDX
大于
RAX
@Barmar,则第二个选项转到
.L4
。@Barmar您得到了这两个值:)我尝试复制代码,但得到了L4。和L1。相反,@VBoi编译器指定的标签号是不可预测的,生成的确切程序集也是不可预测的。您不能期望从汇编代码中准确地重构源代码,以便编译器将您的重构编译到同一个汇编。