Сборка x86_64 linux нужна помощь для понимания кода - PullRequest
0 голосов
/ 16 октября 2018

Я читал несколько примеров для Ассамблеи x86_64 и попал на этот слайд: https://imgur.com/7torqTR или если ссылка не работает:

void multstore
(long x, long y, long *dest) {
  long t = mult2(x, y);
  *dest = t;
}

long mult2(long a, long b)
{
  long s = a * b;
  return s;
}

0000000000400540 <multstore>:
400540: push   %rbx     # Save %rbx
400541: mov    %rdx,%rbx        # Save dest
400544: callq  400550 <mult2>   # mult2(x,y)
400549: mov    %rax,(%rbx)  # Save at dest
40054c: pop    %rbx     # Restore %rbx
40054d: retq            # Return

0000000000400550 <mult2>:
400550:  mov    %rdi,%rax   # a 
400553:  imul   %rsi,%rax   # a * b
400557:  retq           # Return

Что я не понимаю, так это 400541, почему автор сохраняетDEST, как насчет этого - я могу просто использовать% rdx для обработки работы:

mulstore:
push %rbx
callq mult2
mov %rax, (%rdx)
retq

разве это не проще?или я пропускаю что-то важное здесь?TY.

...