0

我正在学习如何用 Go 编写程序集,我对程序集不是很熟悉。我试图了解如何从特定于模型的寄存器中读取数据,但遇到了错误。

// main.go
package main

import (
    "fmt"
)

func readmsr(register int64) int64

func main() {
    fmt.Println(readmsr(0xC0000080))
}
// intrinsics_amd64.s
// readmsr(register int64) int64
TEXT ·readmsr(SB), $0-24
    RDMSR register+0(FP), AX
    MOVQ AX, ret+16(FP)
    RET

当我尝试编译代码时,出现以下错误:

go build -v .
_/gopath/go/workspace/temp
# _/gopath/go/workspace/temp
asm: invalid instruction: 00000 (/gopath/go/workspace/temp/instrinsics_amd64.s:3)   RDMSR   register+8(FP), AX
asm: assembly failed

查看x86asm 包中的操作码,它看起来像是RDMSR受支持的指令,至少据我所知。

我对汇编不是很熟悉,所以我不确定我做错的是汇编错误还是 Go 错误。你能帮我理解我做错了什么以及为什么错了吗?

4

0 回答 0