将ASM转换为C?

时间:2018-11-05 22:10:38

标签: 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    $0, %eax
    ret
.L4:
    movq    %rdx, %rax
    .p2align 4,,4
    ret
    .cfi_endproc

1 个答案:

答案 0 :(得分:0)

如果设置了js的符号(MSB)(即.L3为负),则

%rdx跳至%rdx

如果jg大于.L4(AT&T语法,操作数相反),

%rax跳至%rdx

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