On Thursday, 3 November 2016 03:05:47 UTC-4, 刘桂祥 wrote: > > > package main > > import "time" > > func main() { > s := []int{100, 200} > println(&s) > go func() { > s[0] = 300 > s = []int{300, 400} > }() > time.Sleep(1 * time.Second) > } > > just curious about this ,can you help explain the assemble code here > > "".main t=1 size=241 args=0x0 locals=0x28 > 0x0000 00000 (main.go:5) TEXT "".main(SB), $40-0 > 0x0000 00000 (main.go:5) MOVQ (TLS), CX > 0x0009 00009 (main.go:5) CMPQ SP, 16(CX) > 0x000d 00013 (main.go:5) JLS 231 > 0x0013 00019 (main.go:5) SUBQ $40, SP > 0x0017 00023 (main.go:5) MOVQ BP, 32(SP) > 0x001c 00028 (main.go:5) LEAQ 32(SP), BP > 0x0021 00033 (main.go:5) FUNCDATA $0, > gclocals·69c1753bd5f81501d95132d08af04464(SB) > 0x0021 00033 (main.go:5) FUNCDATA $1, > gclocals·0c8aa8e80191a30eac23f1a218103f16(SB) > 0x0021 00033 (main.go:6) LEAQ type.[]int(SB), AX > 0x0028 00040 (main.go:6) MOVQ AX, (SP) > 0x002c 00044 (main.go:6) PCDATA $0, $0 > 0x002c 00044 (main.go:6) CALL runtime.newobject(SB) > 0x0031 00049 (main.go:6) MOVQ 8(SP), AX > 0x0036 00054 (main.go:6) MOVQ AX, "".&s+24(SP) > 0x003b 00059 (main.go:6) LEAQ type.[2]int(SB), CX > 0x0042 00066 (main.go:6) MOVQ CX, (SP) > 0x0046 00070 (main.go:6) PCDATA $0, $1 > 0x0046 00070 (main.go:6) CALL runtime.newobject(SB) > 0x004b 00075 (main.go:6) MOVQ 8(SP), AX > 0x0050 00080 (main.go:6) MOVUPS "".statictmp_2(SB), X0 > 0x0057 00087 (main.go:6) MOVUPS X0, (AX) > 0x005a 00090 (main.go:6) MOVQ "".&s+24(SP), CX > 0x005f 00095 (main.go:6) MOVQ $2, 8(CX) > 0x0067 00103 (main.go:6) MOVQ $2, 16(CX) > 0x006f 00111 (main.go:6) MOVL runtime.writeBarrier(SB), DX > 0x0075 00117 (main.go:6) TESTB DL, DL > 0x0077 00119 (main.go:6) JNE $0, 210 > 0x0079 00121 (main.go:6) MOVQ AX, (CX) > 0x007c 00124 (main.go:7) PCDATA $0, $1 > 0x007c 00124 (main.go:7) CALL runtime.printlock(SB) > 0x0081 00129 (main.go:7) MOVQ "".&s+24(SP), AX > 0x0086 00134 (main.go:7) MOVQ AX, (SP) > 0x008a 00138 (main.go:7) PCDATA $0, $1 > 0x008a 00138 (main.go:7) CALL runtime.printpointer(SB) > 0x008f 00143 (main.go:7) PCDATA $0, $1 > 0x008f 00143 (main.go:7) CALL runtime.printnl(SB) > 0x0094 00148 (main.go:7) PCDATA $0, $1 > 0x0094 00148 (main.go:7) CALL runtime.printunlock(SB) > 0x0099 00153 (main.go:11) MOVQ "".&s+24(SP), AX > 0x009e 00158 (main.go:11) MOVQ AX, 16(SP) > 0x00a3 00163 (main.go:11) MOVL $8, (SP) > 0x00aa 00170 (main.go:11) LEAQ "".main.func1·f(SB), AX > 0x00b1 00177 (main.go:11) MOVQ AX, 8(SP) > 0x00b6 00182 (main.go:11) PCDATA $0, $0 > 0x00b6 00182 (main.go:11) CALL runtime.newproc(SB) > 0x00bb 00187 (main.go:12) MOVQ $1000000000, (SP) > 0x00c3 00195 (main.go:12) PCDATA $0, $0 > 0x00c3 00195 (main.go:12) CALL time.Sleep(SB) > 0x00c8 00200 (main.go:13) MOVQ 32(SP), BP > 0x00cd 00205 (main.go:13) ADDQ $40, SP > 0x00d1 00209 (main.go:13) RET > 0x00d2 00210 (main.go:6) MOVQ CX, (SP) > 0x00d6 00214 (main.go:6) MOVQ AX, 8(SP) > 0x00db 00219 (main.go:6) PCDATA $0, $1 > 0x00db 00219 (main.go:6) CALL runtime.writebarrierptr(SB) > 0x00e0 00224 (main.go:6) MOVQ "".&s+24(SP), CX > 0x00e5 00229 (main.go:7) JMP 124 > 0x00e7 00231 (main.go:7) NOP > 0x00e7 00231 (main.go:5) CALL runtime.morestack_noctxt(SB) > 0x00ec 00236 (main.go:5) JMP 0 >
Tip: put as much thought into your question as you want others to put into the answer. I'm sure you're capable of figuring out what most of this massive block of assembly means. Perhaps you could identify the part you can't understand and ask a specific question about it. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.