slice

Posted by 夏泽民

slice 翻译成中文就是切片,它和数组(array)很类似,可以用下标的方式进行访问,如果越界,就会产生 panic。但是它比数组更灵活,可以自动地进行扩容。



plan9

Posted by 夏泽民

https://golang.org/doc/asm GO语言汇编:plan9(贝尔操作系统) go开发者与plan 9开发者同一人,Rob Pike 寄存器: 数据寄存器:R0-R7,地址寄存器:A0-A7,浮点寄存器:F0-F7。 伪栈寄存器:FP, SP, TOS 数据: PC用来控制程序执行,SB用来引用全局变量。 Go语言汇编 FUNCDATA和PCDATA是编译器产生的,用于保存一些给垃圾收集的信息。 NOPTR和RODATA的数据不需要被垃圾收集。比指针还要小的数据也被当做NOPTR。不要在go汇编里写非只读数据。 plan9函数调用协议中采用的是caller-save的模式,也就是由调用者负责保存寄存器。 TEXT !$Add(SB),$0 MOVQ x+0(FP), BX MOVQ y+8(FP), BP ADDQ BP, BX MOVQ BX, ret+16(FP) RET TEXT ““.main(SB), $56-0 56 代表local 大小 0 代表args大小 movl 四字节mov intel指令集 movq 八字节 例子中的TEXT指令就定义了一个叫bytes·Equal的符号(注意是中点号·),接下来就是对应的指令(可以理解成函数体),而最后RET则是返回指令(退出当前stack)。通常情况下,参数大小后跟随着stack frame的大小,使用减号(-)分割。$0-49意味着这是一个0-byte的栈,并且有49-byte长的参数。NOSPLIT说明,不允许调度器调整stack frame的大小,这就意味着必须人工指定stack frame大小。 字符串 函数都放在SB stack basic register



goasm

Posted by 夏泽民

一、资源



asm

Posted by 夏泽民

https://github.com/yangyuqian/technical-articles/blob/master/asm/golang-plan9-assembly-cn.md http://xargin.com/go-and-plan9-asm/ https://davidwong.fr/goasm/ https://github.com/teh-cmc/go-internals/blob/master/chapter1_assembly_primer/README.md https://golang.org/doc/asm https://github.com/yangyuqian/technical-articles/blob/master/asm/golang-plan9-assembly-cn.md https://colobu.com/goasm/ https://laily.net/article/Golang%20%E4%BB%8E%E6%B1%87%E7%BC%96%E7%9C%8B%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8



binaryen

Posted by 夏泽民

https://github.com/WebAssembly/binaryen WebAssembly 的生态大致分为两部分, 编译器等工具链, 和执行环境 两者依据 spec 来完成对接, 并且实现解耦 工具链部分重要的新项目是 Binaryen, 一个编译器 https://github.com/WebAssembly/binaryen 实现语言是 C++, 可以用于 parse 和 emit WebAssembly 也可以基于 AST 规范进行转换 基于几个部分的工具:



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required