首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >金钢总成JMP仪表

金钢总成JMP仪表
EN

Stack Overflow用户
提问于 2018-03-05 03:45:46
回答 1查看 242关注 0票数 1

我建立了戈朗代码和输出汇编语言代码。代码和输出在上面。正确吗,JMP指令在:0x000f 00015 (math.go:17) JMP 23中指向0x0017 (小数点23)?我对在JMP指令之后看到一个十进制值感到有点困惑。

代码:

代码语言:javascript
运行
复制
(math.go:15)    func multiplyLoop(a, b int) int {
(math.go:16)        var res int
(math.go:17)        for i := 0; i < b; i++ {
(math.go:18)            res += a
(math.go:19)        }
(math.go:20)        return res 
(math.go:21)   }

内部版本:

代码语言:javascript
运行
复制
go tool compile -S -m math.go

大会:

代码语言:javascript
运行
复制
"".multiplyLoop STEXT nosplit size=34 args=0x18 locals=0x0
    0x0000 00000 (math.go:15)   TEXT    "".multiplyLoop(SB), NOSPLIT, $0-24
    0x0000 00000 (math.go:15)   FUNCDATA    $0, gclocals·54241e171da8af6ae173d69da0236748(SB)
    0x0000 00000 (math.go:15)   FUNCDATA    $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
    0x0000 00000 (math.go:15)   MOVQ    "".a+8(SP), AX
    0x0005 00005 (math.go:15)   MOVQ    "".b+16(SP), CX
    0x000a 00010 (math.go:15)   MOVL    $0, DX
    0x000c 00012 (math.go:15)   MOVQ    DX, BX
    0x000f 00015 (math.go:17)   JMP 23
    0x0011 00017 (math.go:17)   INCQ    DX
    0x0014 00020 (math.go:18)   ADDQ    AX, BX
    0x0017 00023 (math.go:17)   CMPQ    DX, CX
    0x001a 00026 (math.go:17)   JLT 17
    0x001c 00028 (math.go:20)   MOVQ    BX, "".~r2+24(SP)
    0x0021 00033 (math.go:20)   RET
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-05 04:02:45

JMP 230x0017 00023i < bCMPQ DX, CXJLT 170x0011 00017i++INCQ DX。例如,

代码语言:javascript
运行
复制
package multiply

func multiplyLoop(a, b int) int {
    var res int
    for i := 0; i < b; i++ {
        res += a
    }
    return res
}
代码语言:javascript
运行
复制
$ go tool compile -S multiply.go
"".multiplyLoop STEXT nosplit size=34 args=0x18 locals=0x0
    0x0000 00000 (multiply.go:3)    TEXT    "".multiplyLoop(SB), NOSPLIT, $0-24
    0x0000 00000 (multiply.go:3)    FUNCDATA    $0, gclocals·54241e171da8af6ae173d69da0236748(SB)
    0x0000 00000 (multiply.go:3)    FUNCDATA    $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB)
    0x0000 00000 (multiply.go:3)    MOVQ    "".a+8(SP), AX
    0x0005 00005 (multiply.go:3)    MOVQ    "".b+16(SP), CX
    0x000a 00010 (multiply.go:3)    XORL    DX, DX
    0x000c 00012 (multiply.go:3)    MOVQ    DX, BX
    0x000f 00015 (multiply.go:5)    JMP 23
    0x0011 00017 (multiply.go:5)    INCQ    DX
    0x0014 00020 (multiply.go:6)    ADDQ    AX, BX
    0x0017 00023 (multiply.go:5)    CMPQ    DX, CX
    0x001a 00026 (multiply.go:5)    JLT 17
    0x001c 00028 (multiply.go:8)    MOVQ    BX, "".~r2+24(SP)
    0x0021 00033 (multiply.go:8)    RET
    0x0000 48 8b 44 24 08 48 8b 4c 24 10 31 d2 48 89 d3 eb  H.D$.H.L$.1.H...
    0x0010 06 48 ff c2 48 01 c3 48 39 ca 7c f5 48 89 5c 24  .H..H..H9.|.H.\$
    0x0020 18 c3                                            ..
go.info."".multiplyLoop SDWARFINFO size=78
    0x0000 02 22 22 2e 6d 75 6c 74 69 70 6c 79 4c 6f 6f 70  ."".multiplyLoop
    0x0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    0x0020 00 01 9c 00 00 00 00 01 0e 61 00 00 03 00 00 00  .........a......
    0x0030 00 01 9c 0e 62 00 00 03 00 00 00 00 02 91 08 0e  ....b...........
    0x0040 7e 72 32 00 01 03 00 00 00 00 02 91 10 00        ~r2...........
    rel 17+8 t=1 "".multiplyLoop+0
    rel 25+8 t=1 "".multiplyLoop+34
    rel 35+4 t=29 gofile../home/peter/Dropbox/gopath/src/so/multiply.go+0
    rel 45+4 t=28 go.info.int+0
    rel 56+4 t=28 go.info.int+0
    rel 70+4 t=28 go.info.int+0
go.range."".multiplyLoop SDWARFRANGE size=0
gclocals·54241e171da8af6ae173d69da0236748 SRODATA dupok size=9
    0x0000 01 00 00 00 03 00 00 00 00                       .........
gclocals·33cdeccccebe80329f1fdbee7f5874cb SRODATA dupok size=8
    0x0000 01 00 00 00 00 00 00 00     
$ 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49103204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档