You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
export mdbook_download_url=$(curl -s 'https://api.github.com/repos/HollowMan6/mdbook-pdf/releases?per_page=1&page=1' | python3 -c "import sys, json;import pprint;tmp=[print(x['browser_download_url']) if 'x86_64-unknown-linux-gnu' in x['name'] else None for x in json.load(sys.stdin)[0]['assets']]")
Copy file name to clipboardExpand all lines: ch3-asm/ch3-01-basic.md
+10-10Lines changed: 10 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,13 +4,13 @@ Go 汇编程序始终是幽灵一样的存在。我们将通过分析简单的 G
4
4
5
5
## 3.1.1 实现和声明
6
6
7
-
Go 汇编语言并不是一个独立的语言,因为 Go 汇编程序无法独立使用。Go 汇编代码必须以 Go 包的方式组织,同时包中至少要有一个 Go 语言文件用于指明当前包名等基本包信息。如果 Go 汇编代码中定义的变量和函数要被其它 Go 语言代码引用,还需要通过 Go 语言代码将汇编中定义的符号声明出来。用于变量的定义和函数的定义 Go 汇编文件类似于 C 语言中的. c 文件,而用于导出汇编中定义符号的 Go 源文件类似于 C 语言的. h 文件。
7
+
Go 汇编语言并不是一个独立的语言,因为 Go 汇编程序无法独立使用。Go 汇编代码必须以 Go 包的方式组织,同时包中至少要有一个 Go 语言文件用于指明当前包名等基本包信息。如果 Go 汇编代码中定义的变量和函数要被其它 Go 语言代码引用,还需要通过 Go 语言代码将汇编中定义的符号声明出来。用于变量的定义和函数的定义 Go 汇编文件类似于 C 语言中的`.c` 文件,而用于导出汇编中定义符号的 Go 源文件类似于 C 语言的`.h` 文件。
8
8
9
9
## 3.1.2 定义整数变量
10
10
11
11
为了简单,我们先用 Go 语言定义并赋值一个整数变量,然后查看生成的汇编代码。
12
12
13
-
首先创建一个 pkg.go 文件,内容如下:
13
+
首先创建一个 `pkg.go` 文件,内容如下:
14
14
15
15
```go
16
16
package pkg
@@ -59,7 +59,7 @@ GLOBL ·Id, $8
59
59
60
60
现在已经初步完成了用汇编定义一个整数变量的工作。
61
61
62
-
为了便于其它包使用该 Id 变量,我们还需要在 Go 代码中声明该变量,同时也给变量指定一个合适的类型。修改 pkg.go 的内容如下:
62
+
为了便于其它包使用该 Id 变量,我们还需要在 Go 代码中声明该变量,同时也给变量指定一个合适的类型。修改 `pkg.go` 的内容如下:
63
63
64
64
```go
65
65
package pkg
@@ -69,7 +69,7 @@ var Id int
69
69
70
70
现状 Go 语言的代码不再是定义一个变量,语义变成了声明一个变量(声明一个变量时不能再进行初始化操作)。而 Id 变量的定义工作已经在汇编语言中完成了。
71
71
72
-
我们将完整的汇编代码放到 pkg_amd64.s 文件中:
72
+
我们将完整的汇编代码放到 `pkg_amd64.s` 文件中:
73
73
74
74
```
75
75
#include "textflag.h"
@@ -86,7 +86,7 @@ DATA ·Id+6(SB)/1,$0x00
86
86
DATA ·Id+7(SB)/1,$0x00
87
87
```
88
88
89
-
文件名 pkg_amd64.s 的后缀名表示 AMD64 环境下的汇编代码文件。
89
+
文件名 `pkg_amd64.s` 的后缀名表示 AMD64 环境下的汇编代码文件。
90
90
91
91
虽然 pkg 包是用汇编实现,但是用法和之前的 Go 语言版本完全一样:
92
92
@@ -107,7 +107,7 @@ func main() {
107
107
108
108
在前一个例子中,我们通过汇编定义了一个整数变量。现在我们提高一点难度,尝试通过汇编定义一个字符串变量。虽然从 Go 语言角度看,定义字符串和整数变量的写法基本相同,但是字符串底层却有着比单个整数更复杂的数据结构。
109
109
110
-
实验的流程和前面的例子一样,还是先用 Go 语言实现类似的功能,然后观察分析生成的汇编代码,最后用 Go 汇编语言仿写。首先创建 pkg.go 文件,用 Go 语言定义字符串:
110
+
实验的流程和前面的例子一样,还是先用 Go 语言实现类似的功能,然后观察分析生成的汇编代码,最后用 Go 汇编语言仿写。首先创建 `pkg.go` 文件,用 Go 语言定义字符串:
0 commit comments