来啊 来啊 来啊 来啊
作者: qshuai创建于 2024年7月16日更新于 2024年11月24日
- Go version:
go version go1.22.1 linux/amd64- Implementing add function with go code:
package main
//go:noinline
func add(a, b uint64) uint64 {
return a + b
}
func main() {
_ = add(2, 3)
}- Using assembly to implement add function:
// asm
TEXT add(SB), $0-0
ADDQ BX, AX
RET- Using stack parameters (command:
go buildandgo tool objdump -s '^main.' xxx):
TEXT main.main(SB) /root/project/go/src/ZZTERM4ZZ.com/qshuai/test/asm/add.s
add.s:6 0x45d140 493b6610 CMPQ SP, 0x10(R14)
add.s:6 0x45d144 7632 JBE 0x45d178
add.s:6 0x45d146 55 PUSHQ BP
add.s:6 0x45d147 4889e5 MOVQ SP, BP
add.s:6 0x45d14a 4883ec18 SUBQ $0x18, SP
add.s:7 0x45d14e 48c7042402000000 MOVQ $0x2, 0(SP) // Using stack parameters: 2
add.s:7 0x45d156 48c744240803000000 MOVQ $0x3, 0x8(SP) // Using stack parameters: 3
add.s:7 0x45d15f 90 NOPL
add.s:7 0x45d160 e81b000000 CALL main.add.abi0(SB)
add.s:7 0x45d165 450f57ff XORPS X15, X15
add.s:7 0x45d169 644c8b3425f8ffffff MOVQ FS:0xfffffff8, R14
add.s:8 0x45d172 4883c418 ADDQ $0x18, SP
add.s:8 0x45d176 5d POPQ BP
add.s:8 0x45d177 c3 RET
add.s:6 0x45d178 e8a3cdffff CALL runtime.morestack_noctxt.abi0(SB)
add.s:6 0x45d17d ebc1 JMP main.main(SB)内容来源: chai2010/advanced-go-programming-book