欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

用汇编实现add函数

发布时间:2025/5/22 编程问答 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 用汇编实现add函数 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

平台

  • macOS

工具

  • nasm
  • clang

文件

  • main.c
#include <stdio.h>int add(int a, int b);int main() {printf("the reuslt of 2 plus 3 is %d\n", add(2, 3));return 0; }
  • add.asm
; 声明给linker, 这样才能连接上该函数 global add section .datasection .text add:; 这两句在所有函数中都是必须的, 功能就是将从父函数的栈切换到子函数的栈push rbpmov rbp, rsp; 在macOS中函数参数的传递的顺序是--> 见下面mov rax, rdi ; 获取第一个参数add rax, rsi ; 获取第二个参数, 函数的返回值放在rax中leave ; 作用: 将栈清除并还原(清除子函数的栈, 恢复父函数的栈, **注意: 子函数的栈用来存放局部变量**), 相当于; mov esp, ebp; pop ebpret
  • 函数参数传递的顺序
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 ;第十个参数

编译

  • nams -f macho64 --prefix _ add.asm

链接

  • clang main.c add.o -o main

总结

以上是生活随笔为你收集整理的用汇编实现add函数的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。