Конвертировать ASM в C? - PullRequest
       30

Конвертировать ASM в C?

0 голосов
/ 06 ноября 2018

Я пытаюсь преобразовать следующий ASM в C, но я не могу понять, что делают операторы jump. Может кто-нибудь помочь мне в том, что именно происходит?

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 голосов
/ 06 ноября 2018

js переходит на .L3, если установлен знак (MSB) %rdx (то есть, если %rdx отрицательно).

jg переходит к .L4, если %rax больше %rdx (синтаксис AT & T, операнды обратные).

Остальная часть кода расширяет %edi и %esi до 64 бит, а затем складывает их вместе.

...