http://abcdxyzk.github.io/
64位匯編
當參數少於7個時, 參數從左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9。
當參數為7個以上時, 前 6 個與前面一樣, 但后面的依次從 “右向左” 放入棧中,即和32位匯編一樣。
參數個數大於 7 個的時候
H(a, b, c, d, e, f, g, h);
a->%rdi, b->%rsi, c->%rdx, d->%rcx, e->%r8, f->%r9
h->8(%esp)
g->(%esp)
call H
1、x86_64 registers
2、x86_64寄存器特性表
3、特性要點:
1)常用寄存器有16個,分為x86通用寄存器以及r8-r15寄存器。
2)通用寄存器中,函數執行前后必須保持原始的寄存器有3個:是rbx、rbp、rsp。rx寄存器中,最后4個必須保持原值:r12、r13、r14、r15。
保持原值的意義是為了讓當前函數有可信任的寄存器,減小在函數調用過程中的保存&恢復操作。除了rbp、rsp用於特定用途外,其余5個寄存器可隨意使用。
3)通用寄存器中,不必假設保存值可隨意使用的寄存器有5個:是rax、rcx、rdx、rdi、rsi。其中rax用於第一個返回寄存器(當 然也可以用於其它用途),rdx用於第二個返回寄存器(在調用函數時也用於第三個參數寄存器)。rcx用於第四個參數。rdi用於第一個參數。rsi用於 第二個函數參數。
4)r8、r9分配用於第5、第6個參數。