上篇讲了怎么利用iso c和golang联合开发。这里讲下怎么利用汇编程序开发基本类库,然后提供给golang语言调用。
为什么有了golang语言还要说汇编程序,这是因为在现在golang提供的库还是不全的,有时候针对一些特殊硬件的特性我们不得不使用一些底层的东西来更好的利用这些特性。当然还有一个更重要的地方是读懂golang的源代码,因为在golang中有很多地方都是使用了汇编程序和c程序,这样为了更好的理解golang语言我们不得不去看这些代码。
在golang中汇编程序使用的是plan 9 assembler 而c语言使用的不是iso c 而是plan 9 c。具体这些语言有什么特别的地方google下就可以拉。这里演示下怎么在golang中调用汇编程序提供方法吧。
- //first.s
- TEXT first·Add(SB),7,$0
- MOVL 4(SP),AX
- ADDL 8(SP),AX
- MOVL AX,12(SP)
- RET
这段代码足够简单,就是把传进来的两个参数作加法,然后把结果返回。注意first后面的那个点有什么不一样!
- //first.go
- package first
- func Add(a,b int) int
这段代码就更加简单拉,它作的就是Add方法的声明。有点类似c的头文件吧。
- //main.go
- package main
- import "fmt"
- import "first"
- func main() {
- fmt.Println(first.Add(14,13))
- }
这段代码也是比较简单的,就是使用刚才定义的Add方法做下14+23的加法运算,然后把结果打印出来。
编译运行脚本
- # 8g -o _go_.8 first.go
- # 8a first.s
- # gopack grc first.a *.8
- # mv first.a $GOROOT/pkg/$GOOS_$GOARCH/
- # 8g main.go
- # 8l main.8
- # ./8.out
- 27