gpt4 book ai didi

assembly - 使用golang汇编语言下划线实现golang方法

转载 作者:IT王子 更新时间:2023-10-29 02:21:39 27 4
gpt4 key购买 nike

我写了一个简单的go包如下:

package mytest

type T int32

func (a T) MyTest(b T) (T, T)
func (p *T) MyTestp(b T) (T, T)
func MyTest(a, b T) (T, T)
func MyTestp(p *T, b T) (T, T)

对应的汇编代码(由go tool objdump生成),如下:

TEXT ·MyTest(SB), $0-16
MOVL a + 0x0(FP), AX
MOVL b + 0x4(FP), BX
MOVL BX, CX
ADDL AX, CX
MOVL CX, r1 + 0x8(FP)
SUBL BX, AX
MOVL AX, r2 + 0xc(FP)
RET

TEXT ·MyTestp(SB), $0-24
MOVQ p + 0x0(FP), CX
MOVL b + 0x8(FP), BX
MOVL (CX), AX
MOVL BX, CX
ADDL AX, CX
MOVL CX, r1 + 0x10(FP)
SUBL BX, AX
MOVL AX, r2 + 0x14(FP)
RET

TEXT ·T·MyTest(SB), $0-16
MOVL a + 0x0(FP), AX
MOVL b + 0x4(FP), BX
MOVL BX, CX
ADDL AX, CX
MOVL CX, r1 + 0x8(FP)
SUBL BX, AX
MOVL AX, r2 + 0xc(FP)
RET

TEXT ·(*T)·MyTestp(SB), $0-24
MOVQ p + 0x0(FP), CX
MOVL b + 0x8(FP), BX
MOVL (CX), AX
MOVL BX, CX
ADDL AX, CX
MOVL CX, r1 + 0xC(FP)
SUBL BX, AX
MOVL AX, r2 + 0x10(FP)
RET

当我编译这些汇编代码时,除了“TEXT·(*T)·MyTestp(SB), $0-24”,其他都正常,错误信息如下:

expected identifier, found *

我认为 objdump 使用可读的表示 (*T) 作为输出,但对于编译器来说,这是错误的。所以有人知道正确的含义吗?提前致谢!

最佳答案

好吧,您正在谈论 3 种不同的工具,至于 go object dump,它会转储正确的符号。 go 编译器编译 go 源代码并生成如上所示的符号。 go 汇编程序不能在没有修改符号的情况下使用 '(', "*", ")"和许多其他符号。当它看到括号时,它期望里面的内容是一个寄存器。所以你有几个选择,比如使用支持这样的符号的不同汇编器,你可以修改汇编器以允许这样的符号,或者你可以将你的符号重命名为 go 汇编器允许的名称。

关于assembly - 使用golang汇编语言下划线实现golang方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45937105/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com