Go汇编入门资料【强!!!】

1. 汇编角度看go
2. 《plan9 汇编入门,带你打通应用和底层》讲义
3. 《plan9 汇编入门,带你打通应用和底层》视频地址【这B站里面有很多Go夜读活动视频可以学习】
4. 曹大go源码阅读
5. 曹大源码阅读【汇编篇1】
---------------------【汇编篇2】
6. 曹大博客
7. 字节开源性能强悍的工具库,里面用了不少汇编

go tool compile -S生成的汇编代码中,常见的寄存器解释如下:

  • PC:程序计数器,指下一步要执行的程序,伪寄存器PC和硬件寄存器PC作用差不多。
  • SP:指向当前栈帧的栈顶。但是生成的汇编代码中都是硬件寄存器不是伪寄存器。
  • BP:指向当前栈帧的栈底,函数栈的起始位置(Go编译器会将函数栈空间自动加8,用于存储BP寄存器,跳过这8字节后才是函数栈上局部变量的内存)。
  • SB:保存的值就是进程在内存中代码区的起始地址,它主要用来定位全局符号。go汇编中的函数定义、函数调用、全局变量定义以及对其引用会用到这个SB虚拟寄存器,比如runtime.growslice(SB) 函数是全局的,os.Stdout(SB) 常量是全局的。
  • FP:主要用来引用函数参数。go语言规定函数调用时参数都必须放在栈上,比如被调用函数使用 first_arg+0(FP) 来引用调用者传递进来的第一个参数,用second_arg+8(FP)来引用第二个参数 ,以此类推,这里的first_arg和second_arg仅仅是一个帮助我们阅读源代码的符号,对编译器来说无实际意义,+0和+8表示相对于FP寄存器的偏移量。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值