所在小组
第六组
组内昵称
吴斌
心得体会
package main
func main() {
sum(1, 2)
}
func sum(i1, i2 int) int {
return i1 + i2
}
汇编代码:
"".sum STEXT nosplit size=25 args=0x18 locals=0x0
0x0000 00000 (var.go:7) TEXT "".sum(SB), NOSPLIT|ABIInternal, $0-24
0x0000 00000 (var.go:7) FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x0000 00000 (var.go:7) FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x0000 00000 (var.go:7) FUNCDATA $2, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x0000 00000 (var.go:7) PCDATA $0, $0
0x0000 00000 (var.go:7) PCDATA $1, $0
0x0000 00000 (var.go:7) MOVQ $0, "".~r2+24(SP)
0x0009 00009 (var.go:8) MOVQ "".i1+8(SP), AX
0x000e 00014 (var.go:8) ADDQ "".i2+16(SP), AX
0x0013 00019 (var.go:8) MOVQ AX, "".~r2+24(SP)
0x0018 00024 (var.go:8) RET
golang 参数传递并非小于6个使用寄存器,而是全部使用栈
package main
import (
"fmt"
)
func main() {
iv := []int {1,2,3,4,5}
fmt.Println("sum[1,2,3,4,5] = ", sum(iv))
}
func sum(s []int) int {
ret := 0
for _, v := range s {
ret += v
}
return ret
}
"".sum STEXT nosplit size=173 args=0x20 locals=0x48
0x0000 00000 (slice_debug2.go:12) TEXT "".sum(SB), NOSPLIT|ABIInternal, $72-32
0x0000 00000 (slice_debug2.go:12) SUBQ $72, SP
0x0004 00004 (slice_debug2.go:12) MOVQ BP, 64(SP)
0x0009 00009 (slice_debug2.go:12) LEAQ 64(SP), BP
0x000e 00014 (slice_debug2.go:12) FUNCDATA $0, gclocals·2d7c1615616d4cf40d01b3385155ed6e(SB)
0x000e 00014 (slice_debug2.go:12) FUNCDATA $1, gclocals·6d81f9fc90b2254ac2f1067a7bf2c67c(SB)
0x000e 00014 (slice_debug2.go:12) FUNCDATA $2, gclocals·db688afbc90e26183a53c9ad23b80c29(SB)
0x000e 00014 (slice_debug2.go:12) PCDATA $0, $0
0x000e 00014 (slice_debug2.go:12) PCDATA $1, $0
0x000e 00014 (slice_debug2.go:12) MOVQ $0, "".~r1+104(SP)
0x0017 00023 (slice_debug2.go:13) MOVQ $0, "".ret+8(SP)
0x0020 00032 (slice_debug2.go:14) MOVQ "".s+96(SP), AX
0x0025 00037 (slice_debug2.go:14) MOVQ "".s+88(SP), CX
0x002a 00042 (slice_debug2.go:14) PCDATA $0, $1
0x002a 00042 (slice_debug2.go:14) PCDATA $1, $1
0x002a 00042 (slice_debug2.go:14) MOVQ "".s+80(SP), DX
0x002f 00047 (slice_debug2.go:14) PCDATA $0, $0
0x002f 00047 (slice_debug2.go:14) PCDATA $1, $2
0x002f 00047 (slice_debug2.go:14) MOVQ DX, ""..autotmp_4+40(SP)
0x0034 00052 (slice_debug2.go:14) MOVQ CX, ""..autotmp_4+48(SP)
0x0039 00057 (slice_debug2.go:14) MOVQ AX, ""..autotmp_4+56(SP)
0x003e 00062 (slice_debug2.go:14) MOVQ $0, ""..autotmp_5+32(SP)
0x0047 00071 (slice_debug2.go:14) MOVQ ""..autotmp_4+48(SP), AX
0x004c 00076 (slice_debug2.go:14) MOVQ AX, ""..autotmp_6+24(SP)
0x0051 00081 (slice_debug2.go:14) JMP 83
0x0053 00083 (slice_debug2.go:14) MOVQ ""..autotmp_6+24(SP), AX
0x0058 00088 (slice_debug2.go:14) CMPQ ""..autotmp_5+32(SP), AX
0x005d 00093 (slice_debug2.go:14) JLT 97
0x005f 00095 (slice_debug2.go:14) JMP 153
0x0061 00097 (slice_debug2.go:14) MOVQ ""..autotmp_5+32(SP), AX
0x0066 00102 (slice_debug2.go:14) SHLQ $3, AX
0x006a 00106 (slice_debug2.go:14) PCDATA $0, $2
0x006a 00106 (slice_debug2.go:14) ADDQ ""..autotmp_4+40(SP), AX
0x006f 00111 (slice_debug2.go:14) PCDATA $0, $0
0x006f 00111 (slice_debug2.go:14) MOVQ (AX), AX
0x0072 00114 (slice_debug2.go:14) MOVQ AX, ""..autotmp_7+16(SP)
0x0077 00119 (slice_debug2.go:14) MOVQ AX, "".v(SP)
0x007b 00123 (slice_debug2.go:15) MOVQ "".ret+8(SP), CX
0x0080 00128 (slice_debug2.go:15) ADDQ CX, AX
0x0083 00131 (slice_debug2.go:15) MOVQ AX, "".ret+8(SP)
0x0088 00136 (slice_debug2.go:15) JMP 138
0x008a 00138 (slice_debug2.go:14) MOVQ ""..autotmp_5+32(SP), AX
0x008f 00143 (slice_debug2.go:14) INCQ AX
0x0092 00146 (slice_debug2.go:14) MOVQ AX, ""..autotmp_5+32(SP)
0x0097 00151 (slice_debug2.go:14) JMP 83
0x0099 00153 (slice_debug2.go:18) PCDATA $1, $1
0x0099 00153 (slice_debug2.go:18) MOVQ "".ret+8(SP), AX
0x009e 00158 (slice_debug2.go:18) MOVQ AX, "".~r1+104(SP)
0x00a3 00163 (slice_debug2.go:18) MOVQ 64(SP), BP
0x00a8 00168 (slice_debug2.go:18) ADDQ $72, SP
0x00ac 00172 (slice_debug2.go:18) RET