Go与C、汇编之间的调用

Go调用汇编

新建如下目录

1
2
3
4
5
asm
├── add
│   ├── add.go
│   └── add_amd64.s
└── main.go

add.go 中定义一个函数声明,如下:

1
2
3
package add

func Add(a, b uint64) uint64

同时在 add.go 的同一目录层级下,新建 add_amd64.s 文件,如下:

1
2
3
4
5
6
TEXT    ·Add+0(SB),$0-24
MOVQ a+0(FP),BX
MOVQ b+8(FP),BP
ADDQ BP,BX
MOVQ BX,res+16(FP)
RET ;

最后在 main.go 中写入调用代码,如下:

1
2
3
4
5
6
7
8
9
10
11
package main

import (
"fmt"
"golang-exercise/asm/add"
)

func main() {
fmt.Println(add.Add(2, 1))
fmt.Println(add.Add(1, 1))
}

输出结果:

1
2
3
2
作者

遇寻

发布于

2022-06-01

更新于

2022-07-30

许可协议

评论