我写了一个简单的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)作为输出,但对于编译器,它是错误的。所以任何人都知道正确的指示?提前谢谢!
答案 0 :(得分:0)
好吧,你有3个不同的工具,至于go对象转储它会转储正确的符号。 go编译器编译go源代码并生成如上所述的符号。 go汇编程序无法使用'('," *",")"和许多其他人。当它看到括号时,它希望里面的内容是一个寄存器。所以你有一些选择,比如使用支持这种符号的不同汇编程序,你可以修改汇编程序以允许这样的符号,或者你可以将你的符号重命名为go汇编程序允许的东西。