1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
| go build -gcflags "-N -S -l" >> arg.info
# 然后截取部分生成 plan9 汇编
# go_18/arg
"".longArgs STEXT nosplit size=411 args=0x68 locals=0x50 funcid=0x0 align=0x0
0x0000 00000 TEXT "".longArgs(SB), NOSPLIT|ABIInternal, $80-104
0x0000 00000 SUBQ $80, SP
0x0004 00004 MOVQ BP, 72(SP)
0x0009 00009 LEAQ 72(SP), BP
0x000e 00014 FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x000e 00014 FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x000e 00014 FUNCDATA $5, "".longArgs.arginfo1(SB)
0x000e 00014 MOVQ AX, "".a1+120(SP) # 注意这里的读取参数寄存器
0x0013 00019 MOVQ BX, "".a2+128(SP)
0x001b 00027 MOVQ CX, "".a3+136(SP)
0x0023 00035 MOVQ DI, "".a4+144(SP)
0x002b 00043 MOVQ SI, "".a5+152(SP)
0x0033 00051 MOVQ R8, "".a6+160(SP)
0x003b 00059 MOVQ R9, "".a7+168(SP)
0x0043 00067 MOVQ R10, "".a8+176(SP)
0x004b 00075 MOVQ R11, "".a9+184(SP)
0x0053 00083 MOVQ $0, "".r1+64(SP)
0x005c 00092 MOVQ $0, "".r2+56(SP)
0x0065 00101 MOVQ $0, "".r3+48(SP)
0x006e 00110 MOVQ $0, "".r4+40(SP)
0x0077 00119 MOVQ $0, "".r5+32(SP)
0x0080 00128 MOVQ $0, "".r6+24(SP)
0x0089 00137 MOVQ $0, "".r7+16(SP)
0x0092 00146 MOVQ $0, "".r8+8(SP)
0x009b 00155 MOVQ $0, "".r9(SP)
0x00a3 00163 MOVQ $0, "".r10+104(SP)
0x00ac 00172 MOVQ $0, "".r11+112(SP)
0x00b5 00181 MOVQ "".a1+120(SP), DX
0x00ba 00186 INCQ DX
0x00bd 00189 MOVQ DX, "".r1+64(SP)
0x00c2 00194 MOVQ "".a2+128(SP), DX
0x00ca 00202 ADDQ $2, DX
0x00ce 00206 MOVQ DX, "".r2+56(SP)
0x00d3 00211 MOVQ "".a3+136(SP), DX
0x00db 00219 ADDQ $3, DX
0x00df 00223 MOVQ DX, "".r3+48(SP)
0x00e4 00228 MOVQ "".a4+144(SP), DX
0x00ec 00236 ADDQ $4, DX
0x00f0 00240 MOVQ DX, "".r4+40(SP)
0x00f5 00245 MOVQ "".a5+152(SP), DX
0x00fd 00253 ADDQ $5, DX
0x0101 00257 MOVQ DX, "".r5+32(SP)
0x0106 00262 MOVQ "".a6+160(SP), DX
0x010e 00270 ADDQ $6, DX
0x0112 00274 MOVQ DX, "".r6+24(SP)
0x0117 00279 MOVQ "".a7+168(SP), DX
0x011f 00287 ADDQ $7, DX
0x0123 00291 MOVQ DX, "".r7+16(SP)
0x0128 00296 MOVQ "".a8+176(SP), DX
0x0130 00304 ADDQ $8, DX
0x0134 00308 MOVQ DX, "".r8+8(SP)
0x0139 00313 MOVQ "".a9+184(SP), DX
0x0141 00321 ADDQ $9, DX
0x0145 00325 MOVQ DX, "".r9(SP)
0x0149 00329 MOVQ "".a10+88(SP), DX # 这里使用栈传递a10
0x014e 00334 ADDQ $10, DX
0x0152 00338 MOVQ DX, "".r10+104(SP)
0x0157 00343 MOVQ "".a11+96(SP), DX
0x015c 00348 ADDQ $11, DX
0x0160 00352 MOVQ DX, "".r11+112(SP) # 这里使用栈传递 a11
0x0165 00357 MOVQ "".r1+64(SP), AX # 注意这里返回参数的寄存器
0x016a 00362 MOVQ "".r2+56(SP), BX
0x016f 00367 MOVQ "".r3+48(SP), CX
0x0174 00372 MOVQ "".r4+40(SP), DI
0x0179 00377 MOVQ "".r5+32(SP), SI
0x017e 00382 MOVQ "".r6+24(SP), R8
0x0183 00387 MOVQ "".r7+16(SP), R9
0x0188 00392 MOVQ "".r8+8(SP), R10
0x018d 00397 MOVQ "".r9(SP), R11
0x0191 00401 MOVQ 72(SP), BP
0x0196 00406 ADDQ $80, SP
0x019a 00410 RET
|