本文共 854 字,大约阅读时间需要 2 分钟。
#includeint add(int a, int b);int main() { printf("the reuslt of 2 plus 3 is %d\n", add(2, 3)); return 0;}
; 声明给linker, 这样才能连接上该函数global addsection .datasection .textadd: ; 这两句在所有函数中都是必须的, 功能就是将从父函数的栈切换到子函数的栈 push rbp mov rbp, rsp ; 在macOS中函数参数的传递的顺序是--> 见下面 mov rax, rdi ; 获取第一个参数 add rax, rsi ; 获取第二个参数, 函数的返回值放在rax中 leave ; 作用: 将栈清除并还原(清除子函数的栈, 恢复父函数的栈, **注意: 子函数的栈用来存放局部变量**), 相当于 ; mov esp, ebp ; pop ebp ret
mov rdi,strformat ;第一个参数 mov rsi,1 ;第二个参数 mov rdx,2 ;第三个参数 mov rcx,3 ;第四个参数 mov r8,4 ;第五个参数 mov r9,5 ;第六个参数 mov dword [rsp],6 ;第七个参数 mov dword [rsp+8],7 ;第八个参数 mov dword [rsp+16],8 ;第九个参数 mov dword [rsp+24],9 ;第十个参数
转载地址:http://rgrox.baihongyu.com/