Я читал несколько примеров для Ассамблеи 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.