来啊 来啊 来啊 来啊

作者: 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 build and go 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