Open galaxyzen opened 1 year ago
package main
//go:noinline
func add(a, b int32) (int32, bool) { return a + b, true }
func main() { add(10, 32) }
版本:go1.16.15 amd64
go1.16.15 tool compile -S -N -l main.go
后,add的Go汇编:
"".add STEXT nosplit size=31 args=0x10 locals=0x0 funcid=0x0
0x0000 00000 (main.go:4) TEXT "".add(SB), NOSPLIT|ABIInternal, $0-16
0x0000 00000 (main.go:4) FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x0000 00000 (main.go:4) FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
0x0000 00000 (main.go:4) MOVL $0, "".~r2+16(SP)
0x0008 00008 (main.go:4) MOVB $0, "".~r3+20(SP)
0x000d 00013 (main.go:4) MOVL "".a+8(SP), AX
0x0011 00017 (main.go:4) ADDL "".b+12(SP), AX
0x0015 00021 (main.go:4) MOVL AX, "".~r2+16(SP)
0x0019 00025 (main.go:4) MOVB $1, "".~r3+20(SP)
0x001e 00030 (main.go:4) RET
[pseudo SP + 8]
定位到实参a
,[pseudo SP + 12]
定位到实参b
,所以pseudo SP
的值应该是parent return address
的起始位置?
pseudo SP
的值应该是parent return address
处,不应该和BP
的值相同?