diff --git a/.gitignore b/.gitignore index 68c338f..088f6a9 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,7 @@ a.out # Delve debug + +# ide +.idea/ + diff --git a/ch2-cgo/ch2-05-internal.md b/ch2-cgo/ch2-05-internal.md index a5e09ea..ad9cc53 100644 --- a/ch2-cgo/ch2-05-internal.md +++ b/ch2-cgo/ch2-05-internal.md @@ -113,7 +113,7 @@ void _cgo_506f45f9fa85_Cfunc_sum(void *v) { } ``` -这个函数参数只有一个void范型的指针,函数没有返回值。真实的sum函数的函数参数和返回值均通过唯一的参数指针类实现。 +这个函数参数只有一个void泛型的指针,函数没有返回值。真实的sum函数的函数参数和返回值均通过唯一的参数指针类实现。 `_cgo_506f45f9fa85_Cfunc_sum`函数的指针指向的结构为: @@ -159,7 +159,7 @@ func sum(a, b C.int) C.int { func main() {} ``` -CGO的语法细节不在赘述。为了在C语言中使用sum函数,我们需要将Go代码编译为一个C静态库: +CGO的语法细节不再赘述。为了在C语言中使用sum函数,我们需要将Go代码编译为一个C静态库: ``` $ go build -buildmode=c-archive -o sum.a main.go diff --git a/ch3-asm/ch3-06-func-again.md b/ch3-asm/ch3-06-func-again.md index 3c0ad52..7cf5a85 100644 --- a/ch3-asm/ch3-06-func-again.md +++ b/ch3-asm/ch3-06-func-again.md @@ -61,7 +61,7 @@ RET 第一层是TEXT指令表示函数开始,到RET指令表示函数返回。第二层是`SUBQ $16, SP`指令为当前函数帧分配16字节的空间,在函数返回前通过`ADDQ $16, SP`指令回收16字节的栈空间。我们谨慎猜测在第二层是为函数多分配了8个字节的空间。那么为何要多分配8个字节的空间呢?再继续查看第三层的指令:开始部分有两个指令`MOVQ BP, 8(SP)`和`LEAQ 8(SP), BP`,首先是将BP寄存器保持到多分配的8字节栈空间,然后将`8(SP)`地址重新保持到了BP寄存器中;结束部分是`MOVQ 8(SP), BP`指令则是从栈中恢复之前备份的前BP寄存器的值。最里面第四次层才是我们写的代码,调用runtime.printnl函数输出换行。 -如果去掉NOSPILT标志,再重新查看生成的目标代码,会发现在函数的开头和结尾的地方又增加了新的指令。下面是经过缩进格式化的结果: +如果去掉NOSPLIT标志,再重新查看生成的目标代码,会发现在函数的开头和结尾的地方又增加了新的指令。下面是经过缩进格式化的结果: ``` TEXT "".printnl_nosplit(SB), $16 diff --git a/ch3-asm/ch3-10-ext.md b/ch3-asm/ch3-10-ext.md index f2d03c0..1da1378 100644 --- a/ch3-asm/ch3-10-ext.md +++ b/ch3-asm/ch3-10-ext.md @@ -1,6 +1,6 @@ ## 3.10 补充说明 -如果是纯粹学习汇编语言,则可以从《深入理解程序设计:使用Linux汇编语言》开始,该书讲述了如何以C语言的思维变现汇编程序。如果是学习X86汇编,则可以从《汇编语言:基于x86处理器》一开始,然后再结合《现代x86汇编语言程序设计》学习AVX等高级汇编指令的使用。 +如果是纯粹学习汇编语言,则可以从《深入理解程序设计:使用Linux汇编语言》开始,该书讲述了如何以C语言的思维实现汇编程序。如果是学习X86汇编,则可以从《汇编语言:基于x86处理器》开始,然后再结合《现代x86汇编语言程序设计》学习AVX等高级汇编指令的使用。 Go汇编语言的官方文档非常匮乏。其中“A Quick Guide to Go's Assembler”是唯一的一篇系统讲述Go汇编语言的官方文章,该文章中又引入了另外两篇Plan9的文档:A Manual for the Plan 9 assembler 和 Plan 9 C Compilers。Plan9的两篇文档分别讲述了汇编语言以及和汇编有关联的C语言编译器的细节。看过这几篇文档之后会对Go汇编语言有了一些模糊的概念,剩下的就是在实战中通过代码学习了。