一、功能
两个数求和
二、x86_64例程
1、c语言代码(main.c)
#include <stdio.h>
extern int add_numbers(int a, int b);
int main(int argc, const char *argv[])
{
int ret = 0;
ret = add_numbers(1, 2);
printf("ret[%d]\n", ret);
return 0;
}
2、汇编代码(asm_x64.S)
.global add_numbers // 使add_numbers函数全局可见
// 定义函数add_numbers
// x86-64调用约定: 第一个参数在rdi中,第二个参数在rsi中
add_numbers:
mov %rdi, %rax // 将第一个参数(整数)从rdi复制到rax
add %rsi, %rax // 将第二个参数(整数)加到rax中的值上
ret // 返回,结果在rax中(按照调用约定)
3、编译
gcc -o out_x64 asm_x64.S main.c
三、arm例程
1、c语言代码(main.c)
与x64完全相同
2、汇编代码(asm_arm.S)
.global add_numbers // 使add函数全局可见
// 定义函数add
// ARM调用约定: 前四个参数在 r0-r3 中,返回值在 r0 中
add_numbers:
add r0, r0, r1 // 将 r0 和 r1 相加,结果存储在 r0
bx lr // 返回,结果在 r0 中(按照调用约定)
3、编译
arm-linux-gnueabi-gcc -o out_arm asm_arm.S main.c
x86和arm汇编指令集和寄存器等有明显区别,各个架构之间不能兼容。