汇编函数
GLOBAL maxofthree
SECTION .text
maxofthree:
mov rax, rdi;result rax initially holds x
cmp rax, rsi
cmovl rax, rsi; if cmp result is ture, than mov rsi, to rax
cmp rax, rdx
cmovl rax, rdx
ret
全局符号 maxofthree
C代码
#include <stdio.h>
#include <stdint.h>
int64_t maxofthree(int64_t, int64_t, int64_t);
int main()
{
printf("result %ld\n", maxofthree(123, 64, 325345));
printf("result %ld\n", maxofthree(123, 645, 325345));
printf("result %ld\n", maxofthree(123, 6423754, 325345));
printf("result %ld\n", maxofthree(123, 64444, 325345));
printf("result %ld\n", maxofthree(123, 6664, 325345));
printf("result %ld\n", maxofthree(123, 641, 325345));
return 0;
}
//c语言参数传递顺序是
从左到右放入寄存器: rdi, rsi, rdx, rcx, r8, r9
所以我们看到汇编函数取参数的顺序和这个是对应的。
注意:不要用g++编译,c++的函数符号和C语言是不一样的。C++函数名,带有参数,namespace等信息。
或者非要用g++也可以,函数声明的地方加上extern "C"