代码拉取完成,页面将自动刷新
同步操作将从 秋来冬风/U语言 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package amd64
import (
"fmt"
"strings"
"gitee.com/u-language/u-language/ucom/ast"
"gitee.com/u-language/u-language/ucom/internal/utils"
)
var Deferfunc func() = utils.Deferfunc
const (
IncludeRun = `
include 'win64a.inc'
`
_pe64 = "format PE64\n"
_text = "section '.text' code readable executable\n"
_data = "section '.data' data readable writeable\n"
_idata = ` section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL'
include 'api/kernel32.inc'`
Exit = "invoke ExitProcess,0\n"
)
type AstToAsm struct {
Texts *Text
Datas *Data
Regrun *RegRun
Sserun *SseRegRun
Stack *Stack
VReg *VReg
Thread bool
}
func NewAstToAsm(Thread bool) *AstToAsm {
return &AstToAsm{
Texts: NewText(Thread),
Datas: NewData(Thread),
Regrun: NewRegRun(Thread),
Sserun: NewSseRegRun(Thread),
Stack: nil,
Thread: Thread,
VReg: NewVReg(),
}
}
func (to *AstToAsm) Parser(ast *ast.Tree) {
ret := ParserNode(to, ast.Nodes, ast.Sbt, to.Stack, to.VReg, false, to.Thread)
if Debug == "true" { //调试时行为
fmt.Println(ret)
}
AllocReg(ret, to.Regrun, to.Sserun, _NewvRegToReg(), _NewvregToRegTable(), to.Thread) //为虚拟寄存器分配实际寄存器
to.Texts.AddSlice(ret)
to.Datas.Silce()
to.Texts.Silce()
}
func (to *AstToAsm) String() string {
var buf strings.Builder
buf.WriteString("ast to asm \n{")
buf.WriteString(to.Texts.GoString())
buf.WriteString(to.Datas.GoString())
buf.WriteString("\n")
buf.WriteString("}")
return buf.String()
}
func (to *AstToAsm) Asm() string {
var buf strings.Builder
buf.Grow(10)
buf.WriteString(_pe64)
buf.WriteString(IncludeRun)
buf.WriteString(to.Texts.Asm())
buf.WriteString(to.Datas.Asm())
buf.WriteString(_idata)
return buf.String()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。