2
0

More than 3 years have passed since last update.

眺めて覚えるGo言語 その6 MISC

Posted at

Go argsどう扱うの?

args.go
package main
import "fmt"
import "flag"
func main() {
    flag.Parse() //Parseしないと空箱が届く
    fmt.Println(flag.Args())
    for i,arg:=range flag.Args(){
        fmt.Println(i,arg)
    }
}
C:\Users\hirat\go-work\asm>go run main.go a b c d
[a b c d]
0 a
1 b
2 c
3 d

C:\Users\hirat\go-work\asm>

Go言語に疑問持ったらアッセンブラ出力で中身を見てみよう

C:\Users\hirat\go-work\asm>go tool compile -S main.go >main.asm

懐かしい8086のニューモニックが現れる

main.asm
os.(*File).close STEXT dupok nosplit size=26 args=0x18 locals=0x0
    0x0000 00000 (<autogenerated>:1)    TEXT    os.(*File).close(SB), DUPOK|NOSPLIT|ABIInternal, $0-24
    0x0000 00000 (<autogenerated>:1)    FUNCDATA    $0, gclocals·e6397a44f8e1b6e77d0f200b4fba5269(SB)
    0x0000 00000 (<autogenerated>:1)    FUNCDATA    $1, gclocals·69c1753bd5f81501d95132d08af04464(SB)
    0x0000 00000 (<autogenerated>:1)    FUNCDATA    $2, gclocals·9fb7f0986f647f17cb53dda1484e0f7a(SB)
    0x0000 00000 (<autogenerated>:1)    PCDATA  $0, $1
    0x0000 00000 (<autogenerated>:1)    PCDATA  $1, $1
    0x0000 00000 (<autogenerated>:1)    MOVQ    ""..this+8(SP), AX
    0x0005 00005 (<autogenerated>:1)    MOVQ    (AX), AX
    0x0008 00008 (<autogenerated>:1)    PCDATA  $0, $0
    0x0008 00008 (<autogenerated>:1)    PCDATA  $1, $0
    0x0008 00008 (<autogenerated>:1)    MOVQ    AX, ""..this+8(SP)
    0x000d 00013 (<autogenerated>:1)    XORPS   X0, X0
    0x0010 00016 (<autogenerated>:1)    MOVUPS  X0, "".~r0+16(SP)
    0x0015 00021 (<autogenerated>:1)    JMP os.(*file).close(SB)
    0x0000 48 8b 44 24 08 48 8b 00 48 89 44 24 08 0f 57 c0  H.D$.H..H.D$..W.
    0x0010 0f 11 44 24 10 e9 00 00 00 00                    ..D$......
    rel 22+4 t=8 os.(*file).close+0
os.(*File).isdir STEXT dupok nosplit size=23 args=0x10 locals=0x0
    0x0000 00000 (<autogenerated>:1)    TEXT    os.(*File).isdir(SB), DUPOK|NOSPLIT|ABIInternal, $0-16
    0x0000 00000 (<autogenerated>:1)    FUNCDATA    $0, gclocals·1a65e721a2ccc325b382662e7ffee780(SB)
    0x0000 00000 (<autogenerated>:1)    FUNCDATA    $1, gclocals·69c1753bd5f81501d95132d08af04464(SB)
    0x0000 00000 (<autogenerated>:1)    FUNCDATA    $2, gclocals·9fb7f0986f647f17cb53dda1484e0f7a(SB)
    0x0000 00000 (<autogenerated>:1)    PCDATA  $0, $1
    0x0000 00000 (<autogenerated>:1)    PCDATA  $1, $1
    0x0000 00000 (<autogenerated>:1)    MOVQ    ""..this+8(SP), AX
    0x0005 00005 (<autogenerated>:1)    MOVQ    (AX), AX
    0x0008 00008 (<autogenerated>:1)    PCDATA  $0, $0
    0x0008 00008 (<autogenerated>:1)    PCDATA  $1, $0
    0x0008 00008 (<autogenerated>:1)    MOVQ    AX, ""..this+8(SP)
    0x000d 00013 (<autogenerated>:1)    MOVB    $0, "".~r0+16(SP)
    0x0012 00018 (<autogenerated>:1)    JMP os.(*file).isdir(SB)
    0x0000 48 8b 44 24 08 48 8b 00 48 89 44 24 08 c6 44 24  H.D$.H..H.D$..D$
    0x0010 10 00 e9 00 00 00 00                             .......
    rel 19+4 t=8 os.(*file).isdir+0
"".main STEXT size=576 args=0x0 locals=0xa8
    0x0000 00000 (main.go:4)    TEXT    "".main(SB), ABIInternal, $168-0
    0x0000 00000 (main.go:4)    MOVQ    TLS, CX
    0x0009 00009 (main.go:4)    MOVQ    (CX)(TLS*2), CX
    0x0010 00016 (main.go:4)    LEAQ    -40(SP), AX
    0x0015 00021 (main.go:4)    CMPQ    AX, 16(CX)
    0x0019 00025 (main.go:4)    JLS 566
    0x001f 00031 (main.go:4)    SUBQ    $168, SP
    0x0026 00038 (main.go:4)    MOVQ    BP, 160(SP)
    0x002e 00046 (main.go:4)    LEAQ    160(SP), BP
    0x0036 00054 (main.go:4)    FUNCDATA    $0, gclocals·0ce64bbc7cfa5ef04d41c861de81a3d7(SB)
    0x0036 00054 (main.go:4)    FUNCDATA    $1, gclocals·fc489d478c2f14f71401274d72d26b36(SB)
    0x0036 00054 (main.go:4)    FUNCDATA    $2, gclocals·26aa568588dc81dc6bc6fa762e87fc5c(SB)
    0x0036 00054 (main.go:4)    FUNCDATA    $3, "".main.stkobj(SB)
    0x0036 00054 (main.go:5)    PCDATA  $0, $0
    0x0036 00054 (main.go:5)    PCDATA  $1, $0
    0x0036 00054 (<unknown line number>)    NOP
    0x0036 00054 (main.go:5)    MOVQ    os.Args+16(SB), DX
    0x003d 00061 ($GOROOT\src\flag\flag.go:996) MOVQ    os.Args+8(SB), CX
    0x0044 00068 ($GOROOT\src\flag\flag.go:996) PCDATA  $0, $1
    0x0044 00068 ($GOROOT\src\flag\flag.go:996) MOVQ    os.Args(SB), BX
    0x004b 00075 ($GOROOT\src\flag\flag.go:996) CMPQ    CX, $1
    0x004f 00079 ($GOROOT\src\flag\flag.go:996) JCS 555
    0x0055 00085 ($GOROOT\src\flag\flag.go:996) PCDATA  $0, $2
    0x0055 00085 ($GOROOT\src\flag\flag.go:996) MOVQ    flag.CommandLine(SB), AX
    0x005c 00092 ($GOROOT\src\flag\flag.go:996) PCDATA  $0, $1
    0x005c 00092 ($GOROOT\src\flag\flag.go:996) MOVQ    AX, (SP)
    0x0060 00096 ($GOROOT\src\flag\flag.go:996) LEAQ    -1(DX), AX
    0x0064 00100 ($GOROOT\src\flag\flag.go:996) MOVQ    AX, DX
    0x0067 00103 ($GOROOT\src\flag\flag.go:996) NEGQ    AX
    0x006a 00106 ($GOROOT\src\flag\flag.go:996) SARQ    $63, AX
    0x006e 00110 ($GOROOT\src\flag\flag.go:996) ANDQ    $16, AX
    0x0072 00114 ($GOROOT\src\flag\flag.go:996) PCDATA  $0, $3
    0x0072 00114 ($GOROOT\src\flag\flag.go:996) ADDQ    BX, AX
    0x0075 00117 ($GOROOT\src\flag\flag.go:996) PCDATA  $0, $0
    0x0075 00117 ($GOROOT\src\flag\flag.go:996) MOVQ    AX, 8(SP)
    0x007a 00122 ($GOROOT\src\flag\flag.go:996) LEAQ    -1(CX), AX
    0x007e 00126 ($GOROOT\src\flag\flag.go:996) MOVQ    AX, 16(SP)
    0x0083 00131 ($GOROOT\src\flag\flag.go:996) MOVQ    DX, 24(SP)
    0x0088 00136 ($GOROOT\src\flag\flag.go:996) CALL    flag.(*FlagSet).Parse(SB)
    0x008d 00141 ($GOROOT\src\flag\flag.go:616) PCDATA  $0, $3
    0x008d 00141 ($GOROOT\src\flag\flag.go:616) MOVQ    flag.CommandLine(SB), AX
    0x0094 00148 (<unknown line number>)    NOP
    0x0094 00148 ($GOROOT\src\flag\flag.go:616) PCDATA  $0, $4
    0x0094 00148 ($GOROOT\src\flag\flag.go:616) MOVQ    48(AX), CX
    0x0098 00152 ($GOROOT\src\flag\flag.go:616) MOVQ    56(AX), DX
    0x009c 00156 ($GOROOT\src\flag\flag.go:616) PCDATA  $0, $5
    0x009c 00156 ($GOROOT\src\flag\flag.go:616) MOVQ    64(AX), AX
    0x00a0 00160 (main.go:6)    PCDATA  $0, $0
    0x00a0 00160 (main.go:6)    MOVQ    CX, (SP)
    0x00a4 00164 (main.go:6)    MOVQ    DX, 8(SP)
    0x00a9 00169 (main.go:6)    MOVQ    AX, 16(SP)
    0x00ae 00174 (main.go:6)    CALL    runtime.convTslice(SB)
    0x00b3 00179 (main.go:6)    PCDATA  $0, $3
    0x00b3 00179 (main.go:6)    MOVQ    24(SP), AX
    0x00b8 00184 (main.go:6)    PCDATA  $1, $1
    0x00b8 00184 (main.go:6)    XORPS   X0, X0
    0x00bb 00187 (main.go:6)    MOVUPS  X0, ""..autotmp_24+112(SP)
    0x00c0 00192 (main.go:6)    PCDATA  $0, $4
    0x00c0 00192 (main.go:6)    LEAQ    type.[]string(SB), CX
    0x00c7 00199 (main.go:6)    PCDATA  $0, $3
    0x00c7 00199 (main.go:6)    MOVQ    CX, ""..autotmp_24+112(SP)
    0x00cc 00204 (main.go:6)    PCDATA  $0, $0
    0x00cc 00204 (main.go:6)    MOVQ    AX, ""..autotmp_24+120(SP)
    0x00d1 00209 (<unknown line number>)    NOP
    0x00d1 00209 ($GOROOT\src\fmt\print.go:274) PCDATA  $0, $3
    0x00d1 00209 ($GOROOT\src\fmt\print.go:274) MOVQ    os.Stdout(SB), AX
    0x00d8 00216 ($GOROOT\src\fmt\print.go:274) PCDATA  $0, $4
    0x00d8 00216 ($GOROOT\src\fmt\print.go:274) LEAQ    go.itab.*os.File,io.Writer(SB), CX
    0x00df 00223 ($GOROOT\src\fmt\print.go:274) PCDATA  $0, $3
    0x00df 00223 ($GOROOT\src\fmt\print.go:274) MOVQ    CX, (SP)
    0x00e3 00227 ($GOROOT\src\fmt\print.go:274) PCDATA  $0, $0
    0x00e3 00227 ($GOROOT\src\fmt\print.go:274) MOVQ    AX, 8(SP)
    0x00e8 00232 ($GOROOT\src\fmt\print.go:274) PCDATA  $0, $3
    0x00e8 00232 ($GOROOT\src\fmt\print.go:274) PCDATA  $1, $0
    0x00e8 00232 ($GOROOT\src\fmt\print.go:274) LEAQ    ""..autotmp_24+112(SP), AX
    0x00ed 00237 ($GOROOT\src\fmt\print.go:274) PCDATA  $0, $0
    0x00ed 00237 ($GOROOT\src\fmt\print.go:274) MOVQ    AX, 16(SP)
    0x00f2 00242 ($GOROOT\src\fmt\print.go:274) MOVQ    $1, 24(SP)
    0x00fb 00251 ($GOROOT\src\fmt\print.go:274) MOVQ    $1, 32(SP)
    0x0104 00260 ($GOROOT\src\fmt\print.go:274) CALL    fmt.Fprintln(SB)
    0x0109 00265 ($GOROOT\src\flag\flag.go:616) PCDATA  $0, $3
    0x0109 00265 ($GOROOT\src\flag\flag.go:616) MOVQ    flag.CommandLine(SB), AX
    0x0110 00272 (<unknown line number>)    NOP
    0x0110 00272 ($GOROOT\src\flag\flag.go:616) MOVQ    56(AX), CX
    0x0114 00276 ($GOROOT\src\flag\flag.go:616) MOVQ    48(AX), AX
    0x0118 00280 (main.go:7)    TESTQ   CX, CX
    0x011b 00283 (main.go:7)    JLE 539
    0x0121 00289 ($GOROOT\src\flag\flag.go:616) MOVQ    CX, "".~R0.len+64(SP)
    0x0126 00294 ($GOROOT\src\flag\flag.go:616) XORL    DX, DX
    0x0128 00296 (main.go:7)    JMP 313
    0x012a 00298 (main.go:7)    PCDATA  $0, $1
    0x012a 00298 (main.go:7)    MOVQ    ""..autotmp_56+104(SP), BX
    0x012f 00303 (main.go:7)    ADDQ    $16, BX
    0x0133 00307 (main.go:7)    MOVQ    AX, DX
    0x0136 00310 (main.go:7)    PCDATA  $0, $3
    0x0136 00310 (main.go:7)    MOVQ    BX, AX
    0x0139 00313 (main.go:7)    PCDATA  $1, $2
    0x0139 00313 (main.go:7)    MOVQ    AX, ""..autotmp_56+104(SP)
    0x013e 00318 (main.go:7)    MOVQ    DX, "".i+72(SP)
    0x0143 00323 (main.go:7)    MOVQ    8(AX), CX
    0x0147 00327 (main.go:7)    MOVQ    CX, "".arg.len+80(SP)
    0x014c 00332 (main.go:7)    PCDATA  $0, $1
    0x014c 00332 (main.go:7)    MOVQ    (AX), BX
    0x014f 00335 (main.go:7)    PCDATA  $0, $0
    0x014f 00335 (main.go:7)    PCDATA  $1, $3
    0x014f 00335 (main.go:7)    MOVQ    BX, "".arg.ptr+88(SP)
    0x0154 00340 (main.go:8)    MOVQ    DX, (SP)
    0x0158 00344 (main.go:8)    CALL    runtime.convT64(SB)
    0x015d 00349 (main.go:8)    PCDATA  $0, $3
    0x015d 00349 (main.go:8)    MOVQ    8(SP), AX
    0x0162 00354 (main.go:8)    PCDATA  $0, $0
    0x0162 00354 (main.go:8)    PCDATA  $1, $4
    0x0162 00354 (main.go:8)    MOVQ    AX, ""..autotmp_57+96(SP)
    0x0167 00359 (main.go:8)    PCDATA  $0, $5
    0x0167 00359 (main.go:8)    PCDATA  $1, $5
    0x0167 00359 (main.go:8)    MOVQ    "".arg.ptr+88(SP), CX
    0x016c 00364 (main.go:8)    PCDATA  $0, $0
    0x016c 00364 (main.go:8)    MOVQ    CX, (SP)
    0x0170 00368 (main.go:8)    MOVQ    "".arg.len+80(SP), CX
    0x0175 00373 (main.go:8)    MOVQ    CX, 8(SP)
    0x017a 00378 (main.go:8)    CALL    runtime.convTstring(SB)
    0x017f 00383 (main.go:8)    PCDATA  $0, $3
    0x017f 00383 (main.go:8)    MOVQ    16(SP), AX
    0x0184 00388 (main.go:8)    PCDATA  $1, $6
    0x0184 00388 (main.go:8)    XORPS   X0, X0
    0x0187 00391 (main.go:8)    MOVUPS  X0, ""..autotmp_35+128(SP)
    0x018f 00399 (main.go:8)    MOVUPS  X0, ""..autotmp_35+144(SP)
    0x0197 00407 (main.go:8)    PCDATA  $0, $4
    0x0197 00407 (main.go:8)    LEAQ    type.int(SB), CX
    0x019e 00414 (main.go:8)    PCDATA  $0, $3
    0x019e 00414 (main.go:8)    MOVQ    CX, ""..autotmp_35+128(SP)
    0x01a6 00422 (main.go:8)    PCDATA  $0, $6
    0x01a6 00422 (main.go:8)    PCDATA  $1, $7
    0x01a6 00422 (main.go:8)    MOVQ    ""..autotmp_57+96(SP), DX
    0x01ab 00427 (main.go:8)    PCDATA  $0, $3
    0x01ab 00427 (main.go:8)    MOVQ    DX, ""..autotmp_35+136(SP)
    0x01b3 00435 (main.go:8)    PCDATA  $0, $6
    0x01b3 00435 (main.go:8)    LEAQ    type.string(SB), DX
    0x01ba 00442 (main.go:8)    PCDATA  $0, $3
    0x01ba 00442 (main.go:8)    MOVQ    DX, ""..autotmp_35+144(SP)
    0x01c2 00450 (main.go:8)    PCDATA  $0, $0
    0x01c2 00450 (main.go:8)    MOVQ    AX, ""..autotmp_35+152(SP)
    0x01ca 00458 (<unknown line number>)    NOP
    0x01ca 00458 ($GOROOT\src\fmt\print.go:274) PCDATA  $0, $3
    0x01ca 00458 ($GOROOT\src\fmt\print.go:274) MOVQ    os.Stdout(SB), AX
    0x01d1 00465 ($GOROOT\src\fmt\print.go:274) PCDATA  $0, $2
    0x01d1 00465 ($GOROOT\src\fmt\print.go:274) LEAQ    go.itab.*os.File,io.Writer(SB), BX
    0x01d8 00472 ($GOROOT\src\fmt\print.go:274) PCDATA  $0, $3
    0x01d8 00472 ($GOROOT\src\fmt\print.go:274) MOVQ    BX, (SP)
    0x01dc 00476 ($GOROOT\src\fmt\print.go:274) PCDATA  $0, $0
    0x01dc 00476 ($GOROOT\src\fmt\print.go:274) MOVQ    AX, 8(SP)
    0x01e1 00481 ($GOROOT\src\fmt\print.go:274) PCDATA  $0, $3
    0x01e1 00481 ($GOROOT\src\fmt\print.go:274) PCDATA  $1, $2
    0x01e1 00481 ($GOROOT\src\fmt\print.go:274) LEAQ    ""..autotmp_35+128(SP), AX
    0x01e9 00489 ($GOROOT\src\fmt\print.go:274) PCDATA  $0, $0
    0x01e9 00489 ($GOROOT\src\fmt\print.go:274) MOVQ    AX, 16(SP)
    0x01ee 00494 ($GOROOT\src\fmt\print.go:274) MOVQ    $2, 24(SP)
    0x01f7 00503 ($GOROOT\src\fmt\print.go:274) MOVQ    $2, 32(SP)
    0x0200 00512 ($GOROOT\src\fmt\print.go:274) CALL    fmt.Fprintln(SB)
    0x0205 00517 (main.go:7)    MOVQ    "".i+72(SP), AX
    0x020a 00522 (main.go:7)    INCQ    AX
    0x020d 00525 (main.go:7)    MOVQ    "".~R0.len+64(SP), CX
    0x0212 00530 (main.go:7)    CMPQ    AX, CX
    0x0215 00533 (main.go:7)    JLT 298
    0x021b 00539 (<unknown line number>)    PCDATA  $0, $-2
    0x021b 00539 (<unknown line number>)    PCDATA  $1, $-2
    0x021b 00539 (<unknown line number>)    MOVQ    160(SP), BP
    0x0223 00547 (<unknown line number>)    ADDQ    $168, SP
    0x022a 00554 (<unknown line number>)    RET
    0x022b 00555 ($GOROOT\src\flag\flag.go:996) PCDATA  $0, $0
    0x022b 00555 ($GOROOT\src\flag\flag.go:996) PCDATA  $1, $0
    0x022b 00555 ($GOROOT\src\flag\flag.go:996) MOVL    $1, AX
    0x0230 00560 ($GOROOT\src\flag\flag.go:996) CALL    runtime.panicSliceB(SB)
    0x0235 00565 ($GOROOT\src\flag\flag.go:996) XCHGL   AX, AX
    0x0236 00566 ($GOROOT\src\flag\flag.go:996) NOP
    0x0236 00566 (main.go:4)    PCDATA  $1, $-1
    0x0236 00566 (main.go:4)    PCDATA  $0, $-1
    0x0236 00566 (main.go:4)    CALL    runtime.morestack_noctxt(SB)
    0x023b 00571 (main.go:4)    JMP 0
    0x0000 65 48 8b 0c 25 28 00 00 00 48 8b 89 00 00 00 00  eH..%(...H......
    0x0010 48 8d 44 24 d8 48 3b 41 10 0f 86 17 02 00 00 48  H.D$.H;A.......H
    0x0020 81 ec a8 00 00 00 48 89 ac 24 a0 00 00 00 48 8d  ......H..$....H.
    0x0030 ac 24 a0 00 00 00 48 8b 15 00 00 00 00 48 8b 0d  .$....H......H..
    0x0040 00 00 00 00 48 8b 1d 00 00 00 00 48 83 f9 01 0f  ....H......H....
    0x0050 82 d6 01 00 00 48 8b 05 00 00 00 00 48 89 04 24  .....H......H..$
    0x0060 48 8d 42 ff 48 89 c2 48 f7 d8 48 c1 f8 3f 48 83  H.B.H..H..H..?H.
    0x0070 e0 10 48 01 d8 48 89 44 24 08 48 8d 41 ff 48 89  ..H..H.D$.H.A.H.
    0x0080 44 24 10 48 89 54 24 18 e8 00 00 00 00 48 8b 05  D$.H.T$......H..
    0x0090 00 00 00 00 48 8b 48 30 48 8b 50 38 48 8b 40 40  ....H.H0H.P8H.@@
    0x00a0 48 89 0c 24 48 89 54 24 08 48 89 44 24 10 e8 00  H..$H.T$.H.D$...
    0x00b0 00 00 00 48 8b 44 24 18 0f 57 c0 0f 11 44 24 70  ...H.D$..W...D$p
    0x00c0 48 8d 0d 00 00 00 00 48 89 4c 24 70 48 89 44 24  H......H.L$pH.D$
    0x00d0 78 48 8b 05 00 00 00 00 48 8d 0d 00 00 00 00 48  xH......H......H
    0x00e0 89 0c 24 48 89 44 24 08 48 8d 44 24 70 48 89 44  ..$H.D$.H.D$pH.D
    0x00f0 24 10 48 c7 44 24 18 01 00 00 00 48 c7 44 24 20  $.H.D$.....H.D$ 
    0x0100 01 00 00 00 e8 00 00 00 00 48 8b 05 00 00 00 00  .........H......
    0x0110 48 8b 48 38 48 8b 40 30 48 85 c9 0f 8e fa 00 00  H.H8H.@0H.......
    0x0120 00 48 89 4c 24 40 31 d2 eb 0f 48 8b 5c 24 68 48  .H.L$@1...H.\$hH
    0x0130 83 c3 10 48 89 c2 48 89 d8 48 89 44 24 68 48 89  ...H..H..H.D$hH.
    0x0140 54 24 48 48 8b 48 08 48 89 4c 24 50 48 8b 18 48  T$HH.H.H.L$PH..H
    0x0150 89 5c 24 58 48 89 14 24 e8 00 00 00 00 48 8b 44  .\$XH..$.....H.D
    0x0160 24 08 48 89 44 24 60 48 8b 4c 24 58 48 89 0c 24  $.H.D$`H.L$XH..$
    0x0170 48 8b 4c 24 50 48 89 4c 24 08 e8 00 00 00 00 48  H.L$PH.L$......H
    0x0180 8b 44 24 10 0f 57 c0 0f 11 84 24 80 00 00 00 0f  .D$..W....$.....
    0x0190 11 84 24 90 00 00 00 48 8d 0d 00 00 00 00 48 89  ..$....H......H.
    0x01a0 8c 24 80 00 00 00 48 8b 54 24 60 48 89 94 24 88  .$....H.T$`H..$.
    0x01b0 00 00 00 48 8d 15 00 00 00 00 48 89 94 24 90 00  ...H......H..$..
    0x01c0 00 00 48 89 84 24 98 00 00 00 48 8b 05 00 00 00  ..H..$....H.....
    0x01d0 00 48 8d 1d 00 00 00 00 48 89 1c 24 48 89 44 24  .H......H..$H.D$
    0x01e0 08 48 8d 84 24 80 00 00 00 48 89 44 24 10 48 c7  .H..$....H.D$.H.
    0x01f0 44 24 18 02 00 00 00 48 c7 44 24 20 02 00 00 00  D$.....H.D$ ....
    0x0200 e8 00 00 00 00 48 8b 44 24 48 48 ff c0 48 8b 4c  .....H.D$HH..H.L
    0x0210 24 40 48 39 c8 0f 8c 0f ff ff ff 48 8b ac 24 a0  $@H9.......H..$.
    0x0220 00 00 00 48 81 c4 a8 00 00 00 c3 b8 01 00 00 00  ...H............
    0x0230 e8 00 00 00 00 90 e8 00 00 00 00 e9 c0 fd ff ff  ................
    rel 12+4 t=16 TLS+0
    rel 57+4 t=15 os.Args+16
    rel 64+4 t=15 os.Args+8
    rel 71+4 t=15 os.Args+0
    rel 88+4 t=15 flag.CommandLine+0
    rel 137+4 t=8 flag.(*FlagSet).Parse+0
    rel 144+4 t=15 flag.CommandLine+0
    rel 175+4 t=8 runtime.convTslice+0
    rel 195+4 t=15 type.[]string+0
    rel 212+4 t=15 os.Stdout+0
    rel 219+4 t=15 go.itab.*os.File,io.Writer+0
    rel 261+4 t=8 fmt.Fprintln+0
    rel 268+4 t=15 flag.CommandLine+0
    rel 345+4 t=8 runtime.convT64+0
    rel 379+4 t=8 runtime.convTstring+0
    rel 410+4 t=15 type.int+0
    rel 438+4 t=15 type.string+0
    rel 461+4 t=15 os.Stdout+0
    rel 468+4 t=15 go.itab.*os.File,io.Writer+0
    rel 513+4 t=8 fmt.Fprintln+0
    rel 561+4 t=8 runtime.panicSliceB+0
    rel 567+4 t=8 runtime.morestack_noctxt+0
type..hash.[2]interface {} STEXT dupok size=117 args=0x18 locals=0x28
    0x0000 00000 (<autogenerated>:1)    TEXT    type..hash.[2]interface {}(SB), DUPOK|ABIInternal, $40-24
    0x0000 00000 (<autogenerated>:1)    MOVQ    TLS, CX
    0x0009 00009 (<autogenerated>:1)    MOVQ    (CX)(TLS*2), CX
    0x0010 00016 (<autogenerated>:1)    CMPQ    SP, 16(CX)
    0x0014 00020 (<autogenerated>:1)    JLS 110
    0x0016 00022 (<autogenerated>:1)    SUBQ    $40, SP
    0x001a 00026 (<autogenerated>:1)    MOVQ    BP, 32(SP)
    0x001f 00031 (<autogenerated>:1)    LEAQ    32(SP), BP
    0x0024 00036 (<autogenerated>:1)    FUNCDATA    $0, gclocals·1a65e721a2ccc325b382662e7ffee780(SB)
    0x0024 00036 (<autogenerated>:1)    FUNCDATA    $1, gclocals·69c1753bd5f81501d95132d08af04464(SB)
    0x0024 00036 (<autogenerated>:1)    FUNCDATA    $2, gclocals·ee104e299ed2e4539b82c61c5a4b843d(SB)
    0x0024 00036 (<autogenerated>:1)    PCDATA  $0, $0
    0x0024 00036 (<autogenerated>:1)    PCDATA  $1, $0
    0x0024 00036 (<autogenerated>:1)    XORL    AX, AX
    0x0026 00038 (<autogenerated>:1)    MOVQ    "".h+56(SP), CX
    0x002b 00043 (<autogenerated>:1)    JMP 89
    0x002d 00045 (<autogenerated>:1)    MOVQ    AX, "".i+24(SP)
    0x0032 00050 (<autogenerated>:1)    SHLQ    $4, AX
    0x0036 00054 (<autogenerated>:1)    PCDATA  $0, $1
    0x0036 00054 (<autogenerated>:1)    MOVQ    "".p+48(SP), BX
    0x003b 00059 (<autogenerated>:1)    PCDATA  $0, $2
    0x003b 00059 (<autogenerated>:1)    ADDQ    BX, AX
    0x003e 00062 (<autogenerated>:1)    PCDATA  $0, $0
    0x003e 00062 (<autogenerated>:1)    MOVQ    AX, (SP)
    0x0042 00066 (<autogenerated>:1)    MOVQ    CX, 8(SP)
    0x0047 00071 (<autogenerated>:1)    CALL    runtime.nilinterhash(SB)
    0x004c 00076 (<autogenerated>:1)    MOVQ    16(SP), CX
    0x0051 00081 (<autogenerated>:1)    MOVQ    "".i+24(SP), AX
    0x0056 00086 (<autogenerated>:1)    INCQ    AX
    0x0059 00089 (<autogenerated>:1)    CMPQ    AX, $2
    0x005d 00093 (<autogenerated>:1)    JLT 45
    0x005f 00095 (<autogenerated>:1)    PCDATA  $1, $1
    0x005f 00095 (<autogenerated>:1)    MOVQ    CX, "".~r2+64(SP)
    0x0064 00100 (<autogenerated>:1)    MOVQ    32(SP), BP
    0x0069 00105 (<autogenerated>:1)    ADDQ    $40, SP
    0x006d 00109 (<autogenerated>:1)    RET
    0x006e 00110 (<autogenerated>:1)    NOP
    0x006e 00110 (<autogenerated>:1)    PCDATA  $1, $-1
    0x006e 00110 (<autogenerated>:1)    PCDATA  $0, $-1
    0x006e 00110 (<autogenerated>:1)    CALL    runtime.morestack_noctxt(SB)
    0x0073 00115 (<autogenerated>:1)    JMP 0
    0x0000 65 48 8b 0c 25 28 00 00 00 48 8b 89 00 00 00 00  eH..%(...H......
    0x0010 48 3b 61 10 76 58 48 83 ec 28 48 89 6c 24 20 48  H;a.vXH..(H.l$ H
    0x0020 8d 6c 24 20 31 c0 48 8b 4c 24 38 eb 2c 48 89 44  .l$ 1.H.L$8.,H.D
    0x0030 24 18 48 c1 e0 04 48 8b 5c 24 30 48 01 d8 48 89  $.H...H.\$0H..H.
    0x0040 04 24 48 89 4c 24 08 e8 00 00 00 00 48 8b 4c 24  .$H.L$......H.L$
    0x0050 10 48 8b 44 24 18 48 ff c0 48 83 f8 02 7c ce 48  .H.D$.H..H...|.H
    0x0060 89 4c 24 40 48 8b 6c 24 20 48 83 c4 28 c3 e8 00  .L$@H.l$ H..(...
    0x0070 00 00 00 eb 8b                                   .....
    rel 12+4 t=16 TLS+0
    rel 72+4 t=8 runtime.nilinterhash+0
    rel 111+4 t=8 runtime.morestack_noctxt+0
type..eq.[2]interface {} STEXT dupok size=186 args=0x18 locals=0x30
    0x0000 00000 (<autogenerated>:1)    TEXT    type..eq.[2]interface {}(SB), DUPOK|ABIInternal, $48-24
    0x0000 00000 (<autogenerated>:1)    MOVQ    TLS, CX
    0x0009 00009 (<autogenerated>:1)    MOVQ    (CX)(TLS*2), CX
    0x0010 00016 (<autogenerated>:1)    CMPQ    SP, 16(CX)
    0x0014 00020 (<autogenerated>:1)    JLS 176
    0x001a 00026 (<autogenerated>:1)    SUBQ    $48, SP
    0x001e 00030 (<autogenerated>:1)    MOVQ    BP, 40(SP)
    0x0023 00035 (<autogenerated>:1)    LEAQ    40(SP), BP
    0x0028 00040 (<autogenerated>:1)    FUNCDATA    $0, gclocals·dc9b0298814590ca3ffc3a889546fc8b(SB)
    0x0028 00040 (<autogenerated>:1)    FUNCDATA    $1, gclocals·69c1753bd5f81501d95132d08af04464(SB)
    0x0028 00040 (<autogenerated>:1)    FUNCDATA    $2, gclocals·a1bdf42ea3370bf425f59e11a41daee2(SB)
    0x0028 00040 (<autogenerated>:1)    PCDATA  $0, $1
    0x0028 00040 (<autogenerated>:1)    PCDATA  $1, $0
    0x0028 00040 (<autogenerated>:1)    MOVQ    "".p+56(SP), AX
    0x002d 00045 (<autogenerated>:1)    PCDATA  $0, $2
    0x002d 00045 (<autogenerated>:1)    MOVQ    "".q+64(SP), CX
    0x0032 00050 (<autogenerated>:1)    XORL    DX, DX
    0x0034 00052 (<autogenerated>:1)    JMP 79
    0x0036 00054 (<autogenerated>:1)    PCDATA  $0, $0
    0x0036 00054 (<autogenerated>:1)    MOVQ    ""..autotmp_8+32(SP), BX
    0x003b 00059 (<autogenerated>:1)    LEAQ    1(BX), DX
    0x003f 00063 (<autogenerated>:1)    PCDATA  $0, $3
    0x003f 00063 (<autogenerated>:1)    MOVQ    "".p+56(SP), BX
    0x0044 00068 (<autogenerated>:1)    PCDATA  $0, $4
    0x0044 00068 (<autogenerated>:1)    MOVQ    "".q+64(SP), SI
    0x0049 00073 (<autogenerated>:1)    PCDATA  $0, $5
    0x0049 00073 (<autogenerated>:1)    MOVQ    BX, AX
    0x004c 00076 (<autogenerated>:1)    PCDATA  $0, $2
    0x004c 00076 (<autogenerated>:1)    MOVQ    SI, CX
    0x004f 00079 (<autogenerated>:1)    CMPQ    DX, $2
    0x0053 00083 (<autogenerated>:1)    JGE 161
    0x0055 00085 (<autogenerated>:1)    MOVQ    DX, BX
    0x0058 00088 (<autogenerated>:1)    SHLQ    $4, DX
    0x005c 00092 (<autogenerated>:1)    PCDATA  $0, $6
    0x005c 00092 (<autogenerated>:1)    MOVQ    8(DX)(AX*1), SI
    0x0061 00097 (<autogenerated>:1)    PCDATA  $0, $7
    0x0061 00097 (<autogenerated>:1)    MOVQ    (DX)(AX*1), DI
    0x0065 00101 (<autogenerated>:1)    PCDATA  $0, $8
    0x0065 00101 (<autogenerated>:1)    MOVQ    8(DX)(CX*1), R8
    0x006a 00106 (<autogenerated>:1)    PCDATA  $0, $9
    0x006a 00106 (<autogenerated>:1)    MOVQ    (DX)(CX*1), DX
    0x006e 00110 (<autogenerated>:1)    CMPQ    DI, DX
    0x0071 00113 (<autogenerated>:1)    JNE 146
    0x0073 00115 (<autogenerated>:1)    MOVQ    BX, ""..autotmp_8+32(SP)
    0x0078 00120 (<autogenerated>:1)    MOVQ    DI, (SP)
    0x007c 00124 (<autogenerated>:1)    PCDATA  $0, $10
    0x007c 00124 (<autogenerated>:1)    MOVQ    SI, 8(SP)
    0x0081 00129 (<autogenerated>:1)    PCDATA  $0, $0
    0x0081 00129 (<autogenerated>:1)    MOVQ    R8, 16(SP)
    0x0086 00134 (<autogenerated>:1)    CALL    runtime.efaceeq(SB)
    0x008b 00139 (<autogenerated>:1)    CMPB    24(SP), $0
    0x0090 00144 (<autogenerated>:1)    JNE 54
    0x0092 00146 (<autogenerated>:1)    PCDATA  $1, $1
    0x0092 00146 (<autogenerated>:1)    MOVB    $0, "".~r2+72(SP)
    0x0097 00151 (<autogenerated>:1)    MOVQ    40(SP), BP
    0x009c 00156 (<autogenerated>:1)    ADDQ    $48, SP
    0x00a0 00160 (<autogenerated>:1)    RET
    0x00a1 00161 (<autogenerated>:1)    MOVB    $1, "".~r2+72(SP)
    0x00a6 00166 (<autogenerated>:1)    MOVQ    40(SP), BP
    0x00ab 00171 (<autogenerated>:1)    ADDQ    $48, SP
    0x00af 00175 (<autogenerated>:1)    RET
    0x00b0 00176 (<autogenerated>:1)    NOP
    0x00b0 00176 (<autogenerated>:1)    PCDATA  $1, $-1
    0x00b0 00176 (<autogenerated>:1)    PCDATA  $0, $-1
    0x00b0 00176 (<autogenerated>:1)    CALL    runtime.morestack_noctxt(SB)
    0x00b5 00181 (<autogenerated>:1)    JMP 0
    0x0000 65 48 8b 0c 25 28 00 00 00 48 8b 89 00 00 00 00  eH..%(...H......
    0x0010 48 3b 61 10 0f 86 96 00 00 00 48 83 ec 30 48 89  H;a.......H..0H.
    0x0020 6c 24 28 48 8d 6c 24 28 48 8b 44 24 38 48 8b 4c  l$(H.l$(H.D$8H.L
    0x0030 24 40 31 d2 eb 19 48 8b 5c 24 20 48 8d 53 01 48  $@1...H.\$ H.S.H
    0x0040 8b 5c 24 38 48 8b 74 24 40 48 89 d8 48 89 f1 48  .\$8H.t$@H..H..H
    0x0050 83 fa 02 7d 4c 48 89 d3 48 c1 e2 04 48 8b 74 02  ...}LH..H...H.t.
    0x0060 08 48 8b 3c 02 4c 8b 44 0a 08 48 8b 14 0a 48 39  .H.<.L.D..H...H9
    0x0070 d7 75 1f 48 89 5c 24 20 48 89 3c 24 48 89 74 24  .u.H.\$ H.<$H.t$
    0x0080 08 4c 89 44 24 10 e8 00 00 00 00 80 7c 24 18 00  .L.D$.......|$..
    0x0090 75 a4 c6 44 24 48 00 48 8b 6c 24 28 48 83 c4 30  u..D$H.H.l$(H..0
    0x00a0 c3 c6 44 24 48 01 48 8b 6c 24 28 48 83 c4 30 c3  ..D$H.H.l$(H..0.
    0x00b0 e8 00 00 00 00 e9 46 ff ff ff                    ......F...
    rel 12+4 t=16 TLS+0
    rel 135+4 t=8 runtime.efaceeq+0
    rel 177+4 t=8 runtime.morestack_noctxt+0
go.cuinfo.packagename. SDWARFINFO dupok size=0
    0x0000 6d 61 69 6e                                      main
go.info.flag.Parse$abstract SDWARFINFO dupok size=15
    0x0000 04 66 6c 61 67 2e 50 61 72 73 65 00 01 01 00     .flag.Parse....
go.info.flag.Args$abstract SDWARFINFO dupok size=14
    0x0000 04 66 6c 61 67 2e 41 72 67 73 00 01 01 00        .flag.Args....
go.info.fmt.Println$abstract SDWARFINFO dupok size=42
    0x0000 04 66 6d 74 2e 50 72 69 6e 74 6c 6e 00 01 01 11  .fmt.Println....
    0x0010 61 00 00 00 00 00 00 11 6e 00 01 00 00 00 00 11  a.......n.......
    0x0020 65 72 72 00 01 00 00 00 00 00                    err.......
    rel 19+4 t=28 go.info.[]interface {}+0
    rel 27+4 t=28 go.info.int+0
    rel 37+4 t=28 go.info.error+0
go.loc.os.(*File).close SDWARFLOC dupok size=0
go.info.os.(*File).close SDWARFINFO dupok size=55
    0x0000 03 6f 73 2e 28 2a 46 69 6c 65 29 2e 63 6c 6f 73  .os.(*File).clos
    0x0010 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  e...............
    0x0020 00 00 01 9c 00 00 00 00 01 0f 7e 72 30 00 01 bd  ..........~r0...
    0x0030 01 00 00 00 00 00 00                             .......
    rel 18+8 t=1 os.(*File).close+0
    rel 26+8 t=1 os.(*File).close+26
    rel 36+4 t=29 gofile..<autogenerated>+0
    rel 49+4 t=28 go.info.error+0
go.range.os.(*File).close SDWARFRANGE dupok size=0
go.isstmt.os.(*File).close SDWARFMISC dupok size=0
    0x0000 04 05 01 10 02 05 00                             .......
go.loc.os.(*File).isdir SDWARFLOC dupok size=0
go.info.os.(*File).isdir SDWARFINFO dupok size=54
    0x0000 03 6f 73 2e 28 2a 46 69 6c 65 29 2e 69 73 64 69  .os.(*File).isdi
    0x0010 72 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  r...............
    0x0020 00 00 01 9c 00 00 00 00 01 0f 7e 72 30 00 01 63  ..........~r0..c
    0x0030 00 00 00 00 00 00                                ......
    rel 18+8 t=1 os.(*File).isdir+0
    rel 26+8 t=1 os.(*File).isdir+23
    rel 36+4 t=29 gofile..<autogenerated>+0
    rel 48+4 t=28 go.info.bool+0
go.range.os.(*File).isdir SDWARFRANGE dupok size=0
go.isstmt.os.(*File).isdir SDWARFMISC dupok size=0
    0x0000 04 05 01 0d 02 05 00                             .......
go.loc."".main SDWARFLOC size=190
    0x0000 ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00  ................
    0x0010 2a 01 00 00 00 00 00 00 2b 02 00 00 00 00 00 00  *.......+.......
    0x0020 03 00 91 98 7f 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0030 00 00 00 00 00 ff ff ff ff ff ff ff ff 00 00 00  ................
    0x0040 00 00 00 00 00 2a 01 00 00 00 00 00 00 39 01 00  .....*.......9..
    0x0050 00 00 00 00 00 0a 00 91 a8 7f 93 08 91 a0 7f 93  ................
    0x0060 08 47 01 00 00 00 00 00 00 4f 01 00 00 00 00 00  .G.......O......
    0x0070 00 05 00 93 08 52 93 08 4f 01 00 00 00 00 00 00  .....R..O.......
    0x0080 5d 01 00 00 00 00 00 00 08 00 53 93 08 91 a0 7f  ].........S.....
    0x0090 93 08 5d 01 00 00 00 00 00 00 2b 02 00 00 00 00  ..].......+.....
    0x00a0 00 00 0a 00 91 a8 7f 93 08 91 a0 7f 93 08 00 00  ................
    0x00b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00        ..............
    rel 8+8 t=1 "".main+0
    rel 61+8 t=1 "".main+0
go.info."".main SDWARFINFO size=197
    0x0000 03 22 22 2e 6d 61 69 6e 00 00 00 00 00 00 00 00  ."".main........
    0x0010 00 00 00 00 00 00 00 00 00 01 9c 00 00 00 00 01  ................
    0x0020 14 00 00 00 00 0b 69 00 07 00 00 00 00 00 00 00  ......i.........
    0x0030 00 0a 7e 52 30 2e 6c 65 6e 00 07 00 00 00 00 00  ..~R0.len.......
    0x0040 0b 61 72 67 00 07 00 00 00 00 00 00 00 00 00 07  .arg............
    0x0050 00 00 00 00 00 00 00 00 00 00 00 00 05 00 07 00  ................
    0x0060 00 00 00 00 00 00 00 00 00 00 00 06 00 06 00 00  ................
    0x0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0080 00 00 00 00 00 00 06 12 00 00 00 00 00 12 00 00  ................
    0x0090 00 00 00 00 07 00 00 00 00 00 00 00 00 00 00 00  ................
    0x00a0 00 07 00 06 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x00b0 00 00 00 00 00 00 00 00 00 00 00 00 08 12 00 00  ................
    0x00c0 00 00 00 00 00                                   .....
    rel 9+8 t=1 "".main+0
    rel 17+8 t=1 "".main+576
    rel 27+4 t=29 gofile..C:\Users\hirat\go-work\asm\main.go+0
    rel 33+4 t=28 go.range."".main+0
    rel 41+4 t=28 go.info.int+0
    rel 45+4 t=28 go.loc."".main+0
    rel 59+4 t=28 go.info.int+0
    rel 70+4 t=28 go.info.string+0
    rel 74+4 t=28 go.loc."".main+53
    rel 80+4 t=28 go.info.flag.Parse$abstract+0
    rel 84+4 t=28 go.range."".main+80
    rel 88+4 t=29 gofile..C:\Users\hirat\go-work\asm\main.go+0
    rel 95+4 t=28 go.info.flag.Args$abstract+0
    rel 99+4 t=28 go.range."".main+144
    rel 103+4 t=29 gofile..C:\Users\hirat\go-work\asm\main.go+0
    rel 110+4 t=28 go.info.fmt.Println$abstract+0
    rel 114+8 t=1 "".main+209
    rel 122+8 t=1 "".main+265
    rel 130+4 t=29 gofile..C:\Users\hirat\go-work\asm\main.go+0
    rel 136+4 t=28 go.info.fmt.Println$abstract+15
    rel 142+4 t=28 go.info.fmt.Println$abstract+23
    rel 149+4 t=28 go.info.flag.Args$abstract+0
    rel 153+4 t=28 go.range."".main+208
    rel 157+4 t=29 gofile..C:\Users\hirat\go-work\asm\main.go+0
    rel 164+4 t=28 go.info.fmt.Println$abstract+0
    rel 168+8 t=1 "".main+458
    rel 176+8 t=1 "".main+517
    rel 184+4 t=29 gofile..C:\Users\hirat\go-work\asm\main.go+0
    rel 190+4 t=28 go.info.fmt.Println$abstract+23
go.range."".main SDWARFRANGE size=288
    0x0000 ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00  ................
    0x0010 18 01 00 00 00 00 00 00 21 01 00 00 00 00 00 00  ........!.......
    0x0020 28 01 00 00 00 00 00 00 ca 01 00 00 00 00 00 00  (...............
    0x0030 05 02 00 00 00 00 00 00 1b 02 00 00 00 00 00 00  ................
    0x0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0050 ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00  ................
    0x0060 3d 00 00 00 00 00 00 00 8d 00 00 00 00 00 00 00  =...............
    0x0070 2b 02 00 00 00 00 00 00 36 02 00 00 00 00 00 00  +.......6.......
    0x0080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0090 ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00  ................
    0x00a0 8d 00 00 00 00 00 00 00 94 00 00 00 00 00 00 00  ................
    0x00b0 94 00 00 00 00 00 00 00 a0 00 00 00 00 00 00 00  ................
    0x00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x00d0 ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00  ................
    0x00e0 09 01 00 00 00 00 00 00 10 01 00 00 00 00 00 00  ................
    0x00f0 10 01 00 00 00 00 00 00 18 01 00 00 00 00 00 00  ................
    0x0100 21 01 00 00 00 00 00 00 28 01 00 00 00 00 00 00  !.......(.......
    0x0110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    rel 8+8 t=1 "".main+0
    rel 88+8 t=1 "".main+0
    rel 152+8 t=1 "".main+0
    rel 216+8 t=1 "".main+0
go.isstmt."".main SDWARFMISC size=0
    0x0000 04 1f 04 17 03 0e 01 44 02 0c 01 0c 02 04 01 0a  .......D........
    0x0010 02 05 01 1e 02 07 01 2c 02 0c 01 08 02 03 01 1e  .......,........
    0x0020 02 05 01 16 02 09 01 1d 02 05 01 4b 02 07 01 2f  ...........K.../
    0x0030 02 0a 01 2b 02 0b 00                             ...+...
runtime.gcbits.01 SRODATA dupok size=1
    0x0000 01                                               .
type..namedata.*interface {}- SRODATA dupok size=16
    0x0000 00 00 0d 2a 69 6e 74 65 72 66 61 63 65 20 7b 7d  ...*interface {}
type.*interface {} SRODATA dupok size=56
    0x0000 08 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00  ................
    0x0010 4f 0f 96 9d 00 08 08 36 00 00 00 00 00 00 00 00  O......6........
    0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0030 00 00 00 00 00 00 00 00                          ........
    rel 24+8 t=1 runtime.algarray+80
    rel 32+8 t=1 runtime.gcbits.01+0
    rel 40+4 t=5 type..namedata.*interface {}-+0
    rel 48+8 t=1 type.interface {}+0
runtime.gcbits.02 SRODATA dupok size=1
    0x0000 02                                               .
type.interface {} SRODATA dupok size=80
    0x0000 10 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00  ................
    0x0010 e7 57 a0 18 02 08 08 14 00 00 00 00 00 00 00 00  .W..............
    0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    rel 24+8 t=1 runtime.algarray+144
    rel 32+8 t=1 runtime.gcbits.02+0
    rel 40+4 t=5 type..namedata.*interface {}-+0
    rel 44+4 t=6 type.*interface {}+0
    rel 56+8 t=1 type.interface {}+80
type..namedata.*[]interface {}- SRODATA dupok size=18
    0x0000 00 00 0f 2a 5b 5d 69 6e 74 65 72 66 61 63 65 20  ...*[]interface 
    0x0010 7b 7d                                            {}
type.*[]interface {} SRODATA dupok size=56
    0x0000 08 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00  ................
    0x0010 f3 04 9a e7 00 08 08 36 00 00 00 00 00 00 00 00  .......6........
    0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0030 00 00 00 00 00 00 00 00                          ........
    rel 24+8 t=1 runtime.algarray+80
    rel 32+8 t=1 runtime.gcbits.01+0
    rel 40+4 t=5 type..namedata.*[]interface {}-+0
    rel 48+8 t=1 type.[]interface {}+0
type.[]interface {} SRODATA dupok size=56
    0x0000 18 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00  ................
    0x0010 70 93 ea 2f 02 08 08 17 00 00 00 00 00 00 00 00  p../............
    0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0030 00 00 00 00 00 00 00 00                          ........
    rel 24+8 t=1 runtime.algarray+0
    rel 32+8 t=1 runtime.gcbits.01+0
    rel 40+4 t=5 type..namedata.*[]interface {}-+0
    rel 44+4 t=6 type.*[]interface {}+0
    rel 48+8 t=1 type.interface {}+0
type..namedata.*[1]interface {}- SRODATA dupok size=19
    0x0000 00 00 10 2a 5b 31 5d 69 6e 74 65 72 66 61 63 65  ...*[1]interface
    0x0010 20 7b 7d                                          {}
type.*[1]interface {} SRODATA dupok size=56
    0x0000 08 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00  ................
    0x0010 bf 03 a8 35 00 08 08 36 00 00 00 00 00 00 00 00  ...5...6........
    0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0030 00 00 00 00 00 00 00 00                          ........
    rel 24+8 t=1 runtime.algarray+80
    rel 32+8 t=1 runtime.gcbits.01+0
    rel 40+4 t=5 type..namedata.*[1]interface {}-+0
    rel 48+8 t=1 type.[1]interface {}+0
type.[1]interface {} SRODATA dupok size=72
    0x0000 10 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00  ................
    0x0010 50 91 5b fa 02 08 08 11 00 00 00 00 00 00 00 00  P.[.............
    0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0040 01 00 00 00 00 00 00 00                          ........
    rel 24+8 t=1 runtime.algarray+144
    rel 32+8 t=1 runtime.gcbits.02+0
    rel 40+4 t=5 type..namedata.*[1]interface {}-+0
    rel 44+4 t=6 type.*[1]interface {}+0
    rel 48+8 t=1 type.interface {}+0
    rel 56+8 t=1 type.[]interface {}+0
go.loc.type..hash.[2]interface {} SDWARFLOC dupok size=174
    0x0000 ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00  ................
    0x0010 32 00 00 00 00 00 00 00 59 00 00 00 00 00 00 00  2.......Y.......
    0x0020 02 00 91 68 59 00 00 00 00 00 00 00 75 00 00 00  ...hY.......u...
    0x0030 00 00 00 00 01 00 50 00 00 00 00 00 00 00 00 00  ......P.........
    0x0040 00 00 00 00 00 00 00 ff ff ff ff ff ff ff ff 00  ................
    0x0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 75  ...............u
    0x0060 00 00 00 00 00 00 00 01 00 9c 00 00 00 00 00 00  ................
    0x0070 00 00 00 00 00 00 00 00 00 00 ff ff ff ff ff ff  ................
    0x0080 ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0090 00 00 75 00 00 00 00 00 00 00 02 00 91 08 00 00  ..u.............
    0x00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00        ..............
    rel 8+8 t=1 type..hash.[2]interface {}+0
    rel 79+8 t=1 type..hash.[2]interface {}+0
    rel 130+8 t=1 type..hash.[2]interface {}+0
go.info.type..hash.[2]interface {} SDWARFINFO dupok size=102
    0x0000 03 74 79 70 65 2e 2e 68 61 73 68 2e 5b 32 5d 69  .type..hash.[2]i
    0x0010 6e 74 65 72 66 61 63 65 20 7b 7d 00 00 00 00 00  nterface {}.....
    0x0020 00 00 00 00 00 00 00 00 00 00 00 00 01 9c 00 00  ................
    0x0030 00 00 01 0b 69 00 01 00 00 00 00 00 00 00 00 10  ....i...........
    0x0040 70 00 00 01 00 00 00 00 00 00 00 00 10 68 00 00  p............h..
    0x0050 01 00 00 00 00 00 00 00 00 0f 7e 72 32 00 01 01  ..........~r2...
    0x0060 00 00 00 00 00 00                                ......
    rel 28+8 t=1 type..hash.[2]interface {}+0
    rel 36+8 t=1 type..hash.[2]interface {}+117
    rel 46+4 t=29 gofile..<autogenerated>+0
    rel 55+4 t=28 go.info.int+0
    rel 59+4 t=28 go.loc.type..hash.[2]interface {}+0
    rel 68+4 t=28 go.info.*[2]interface {}+0
    rel 72+4 t=28 go.loc.type..hash.[2]interface {}+71
    rel 81+4 t=28 go.info.uintptr+0
    rel 85+4 t=28 go.loc.type..hash.[2]interface {}+122
    rel 96+4 t=28 go.info.uintptr+0
go.range.type..hash.[2]interface {} SDWARFRANGE dupok size=0
go.isstmt.type..hash.[2]interface {} SDWARFMISC dupok size=0
    0x0000 04 16 04 0e 03 02 01 21 02 05 01 0d 02 04 01 02  .......!........
    0x0010 02 05 01 0a 02 07 00                             .......
go.loc.type..eq.[2]interface {} SDWARFLOC dupok size=154
    0x0000 ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00  ................
    0x0010 4f 00 00 00 00 00 00 00 5c 00 00 00 00 00 00 00  O.......\.......
    0x0020 01 00 51 00 00 00 00 00 00 00 00 00 00 00 00 00  ..Q.............
    0x0030 00 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 00  ................
    0x0040 00 00 00 00 00 00 00 00 00 00 00 ba 00 00 00 00  ................
    0x0050 00 00 00 01 00 9c 00 00 00 00 00 00 00 00 00 00  ................
    0x0060 00 00 00 00 00 00 ff ff ff ff ff ff ff ff 00 00  ................
    0x0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ba 00  ................
    0x0080 00 00 00 00 00 00 02 00 91 08 00 00 00 00 00 00  ................
    0x0090 00 00 00 00 00 00 00 00 00 00                    ..........
    rel 8+8 t=1 type..eq.[2]interface {}+0
    rel 59+8 t=1 type..eq.[2]interface {}+0
    rel 110+8 t=1 type..eq.[2]interface {}+0
go.info.type..eq.[2]interface {} SDWARFINFO dupok size=100
    0x0000 03 74 79 70 65 2e 2e 65 71 2e 5b 32 5d 69 6e 74  .type..eq.[2]int
    0x0010 65 72 66 61 63 65 20 7b 7d 00 00 00 00 00 00 00  erface {}.......
    0x0020 00 00 00 00 00 00 00 00 00 00 01 9c 00 00 00 00  ................
    0x0030 01 0b 69 00 01 00 00 00 00 00 00 00 00 10 70 00  ..i...........p.
    0x0040 00 01 00 00 00 00 00 00 00 00 10 71 00 00 01 00  ...........q....
    0x0050 00 00 00 00 00 00 00 0f 7e 72 32 00 01 01 00 00  ........~r2.....
    0x0060 00 00 00 00                                      ....
    rel 26+8 t=1 type..eq.[2]interface {}+0
    rel 34+8 t=1 type..eq.[2]interface {}+186
    rel 44+4 t=29 gofile..<autogenerated>+0
    rel 53+4 t=28 go.info.int+0
    rel 57+4 t=28 go.loc.type..eq.[2]interface {}+0
    rel 66+4 t=28 go.info.*[2]interface {}+0
    rel 70+4 t=28 go.loc.type..eq.[2]interface {}+51
    rel 79+4 t=28 go.info.*[2]interface {}+0
    rel 83+4 t=28 go.loc.type..eq.[2]interface {}+102
    rel 94+4 t=28 go.info.bool+0
go.range.type..eq.[2]interface {} SDWARFRANGE dupok size=0
go.isstmt.type..eq.[2]interface {} SDWARFMISC dupok size=0
    0x0000 04 1a 04 0e 03 05 01 22 02 04 01 33 02 05 01 07  ......."...3....
    0x0010 02 05 01 0a 02 05 01 0a 02 0a 00                 ...........
type..hashfunc.[2]interface {} SRODATA dupok size=8
    0x0000 00 00 00 00 00 00 00 00                          ........
    rel 0+8 t=1 type..hash.[2]interface {}+0
type..eqfunc.[2]interface {} SRODATA dupok size=8
    0x0000 00 00 00 00 00 00 00 00                          ........
    rel 0+8 t=1 type..eq.[2]interface {}+0
type..alg.[2]interface {} SRODATA dupok size=16
    0x0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    rel 0+8 t=1 type..hashfunc.[2]interface {}+0
    rel 8+8 t=1 type..eqfunc.[2]interface {}+0
type..namedata.*[2]interface {}- SRODATA dupok size=19
    0x0000 00 00 10 2a 5b 32 5d 69 6e 74 65 72 66 61 63 65  ...*[2]interface
    0x0010 20 7b 7d                                          {}
type.*[2]interface {} SRODATA dupok size=56
    0x0000 08 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00  ................
    0x0010 be 73 2d 71 00 08 08 36 00 00 00 00 00 00 00 00  .s-q...6........
    0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0030 00 00 00 00 00 00 00 00                          ........
    rel 24+8 t=1 runtime.algarray+80
    rel 32+8 t=1 runtime.gcbits.01+0
    rel 40+4 t=5 type..namedata.*[2]interface {}-+0
    rel 48+8 t=1 type.[2]interface {}+0
runtime.gcbits.0a SRODATA dupok size=1
    0x0000 0a                                               .
type.[2]interface {} SRODATA dupok size=72
    0x0000 20 00 00 00 00 00 00 00 20 00 00 00 00 00 00 00   ....... .......
    0x0010 2c 59 a4 f1 02 08 08 11 00 00 00 00 00 00 00 00  ,Y..............
    0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0040 02 00 00 00 00 00 00 00                          ........
    rel 24+8 t=1 type..alg.[2]interface {}+0
    rel 32+8 t=1 runtime.gcbits.0a+0
    rel 40+4 t=5 type..namedata.*[2]interface {}-+0
    rel 44+4 t=6 type.*[2]interface {}+0
    rel 48+8 t=1 type.interface {}+0
    rel 56+8 t=1 type.[]interface {}+0
""..inittask SNOPTRDATA size=40
    0x0000 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00  ................
    0x0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0020 00 00 00 00 00 00 00 00                          ........
    rel 24+8 t=1 fmt..inittask+0
    rel 32+8 t=1 flag..inittask+0
type..namedata.*[]string- SRODATA dupok size=12
    0x0000 00 00 09 2a 5b 5d 73 74 72 69 6e 67              ...*[]string
type.*[]string SRODATA dupok size=56
    0x0000 08 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00  ................
    0x0010 92 22 76 84 00 08 08 36 00 00 00 00 00 00 00 00  ."v....6........
    0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0030 00 00 00 00 00 00 00 00                          ........
    rel 24+8 t=1 runtime.algarray+80
    rel 32+8 t=1 runtime.gcbits.01+0
    rel 40+4 t=5 type..namedata.*[]string-+0
    rel 48+8 t=1 type.[]string+0
type.[]string SRODATA dupok size=56
    0x0000 18 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00  ................
    0x0010 d3 a8 f3 0a 02 08 08 17 00 00 00 00 00 00 00 00  ................
    0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0030 00 00 00 00 00 00 00 00                          ........
    rel 24+8 t=1 runtime.algarray+0
    rel 32+8 t=1 runtime.gcbits.01+0
    rel 40+4 t=5 type..namedata.*[]string-+0
    rel 44+4 t=6 type.*[]string+0
    rel 48+8 t=1 type.string+0
go.itab.*os.File,io.Writer SRODATA dupok size=32
    0x0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0010 44 b5 f3 33 00 00 00 00 00 00 00 00 00 00 00 00  D..3............
    rel 0+8 t=1 type.io.Writer+0
    rel 8+8 t=1 type.*os.File+0
    rel 24+8 t=1 os.(*File).Write+0
go.itablink.*os.File,io.Writer SRODATA dupok size=8
    0x0000 00 00 00 00 00 00 00 00                          ........
    rel 0+8 t=1 go.itab.*os.File,io.Writer+0
type..importpath.flag. SRODATA dupok size=7
    0x0000 00 00 04 66 6c 61 67                             ...flag
type..importpath.fmt. SRODATA dupok size=6
    0x0000 00 00 03 66 6d 74                                ...fmt
gclocals·e6397a44f8e1b6e77d0f200b4fba5269 SRODATA dupok size=10
    0x0000 02 00 00 00 03 00 00 00 01 00                    ..........
gclocals·69c1753bd5f81501d95132d08af04464 SRODATA dupok size=8
    0x0000 02 00 00 00 00 00 00 00                          ........
gclocals·9fb7f0986f647f17cb53dda1484e0f7a SRODATA dupok size=10
    0x0000 02 00 00 00 01 00 00 00 00 01                    ..........
gclocals·1a65e721a2ccc325b382662e7ffee780 SRODATA dupok size=10
    0x0000 02 00 00 00 01 00 00 00 01 00                    ..........
gclocals·0ce64bbc7cfa5ef04d41c861de81a3d7 SRODATA dupok size=8
    0x0000 08 00 00 00 00 00 00 00                          ........
gclocals·fc489d478c2f14f71401274d72d26b36 SRODATA dupok size=24
    0x0000 08 00 00 00 09 00 00 00 00 00 10 00 04 00 05 00  ................
    0x0010 07 00 06 00 46 01 44 01                          ....F.D.
gclocals·26aa568588dc81dc6bc6fa762e87fc5c SRODATA dupok size=15
    0x0000 07 00 00 00 04 00 00 00 00 08 09 01 03 02 05     ...............
"".main.stkobj SRODATA dupok size=40
    0x0000 02 00 00 00 00 00 00 00 d0 ff ff ff ff ff ff ff  ................
    0x0010 00 00 00 00 00 00 00 00 e0 ff ff ff ff ff ff ff  ................
    0x0020 00 00 00 00 00 00 00 00                          ........
    rel 16+8 t=1 type.[1]interface {}+0
    rel 32+8 t=1 type.[2]interface {}+0
gclocals·ee104e299ed2e4539b82c61c5a4b843d SRODATA dupok size=11
    0x0000 03 00 00 00 04 00 00 00 00 08 01                 ...........
gclocals·dc9b0298814590ca3ffc3a889546fc8b SRODATA dupok size=10
    0x0000 02 00 00 00 02 00 00 00 03 00                    ..........
gclocals·a1bdf42ea3370bf425f59e11a41daee2 SRODATA dupok size=19
    0x0000 0b 00 00 00 08 00 00 00 00 01 03 08 28 21 23 22  ............(!#"
    0x0010 a2 a0 80                                         ...

main.go:7 のところを見るとfor loopがどのように扱われるかわかる

calc.go
package calc

func calc(a int, b int) int {
    return a + b
}


>go tool compile -S calc.go >calc.asm
calc.asm
"".calc STEXT nosplit size=19 args=0x18 locals=0x0
    0x0000 00000 (calc.go:3)    TEXT    "".calc(SB), NOSPLIT|ABIInternal, $0-24
    0x0000 00000 (calc.go:3)    FUNCDATA    $0, gclocals路33cdeccccebe80329f1fdbee7f5874cb(SB)
    0x0000 00000 (calc.go:3)    FUNCDATA    $1, gclocals路33cdeccccebe80329f1fdbee7f5874cb(SB)
    0x0000 00000 (calc.go:3)    FUNCDATA    $2, gclocals路33cdeccccebe80329f1fdbee7f5874cb(SB)
    0x0000 00000 (calc.go:4)    PCDATA  $0, $0
    0x0000 00000 (calc.go:4)    PCDATA  $1, $0
    0x0000 00000 (calc.go:4)    MOVQ    "".b+16(SP), AX
    0x0005 00005 (calc.go:4)    MOVQ    "".a+8(SP), CX
    0x000a 00010 (calc.go:4)    ADDQ    CX, AX
    0x000d 00013 (calc.go:4)    MOVQ    AX, "".~r2+24(SP)
    0x0012 00018 (calc.go:4)    RET
    0x0000 48 8b 44 24 10 48 8b 4c 24 08 48 01 c8 48 89 44  H.D$.H.L$.H..H.D
    0x0010 24 18 c3 
  • calc.go:3は、引数の準備
  • calc.go:4は、メモリからレジスタにロード(MOVQ 64bit)
  • ADDQ CX, AXは、足し算
  • MOVQ AX, "".~r2+24(SP) 戻り値をスタックに戻す
  • RET 読んで字のごとくreturn

ちゃんと中間言語では、ありませんでした。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0