6.Go语言学习笔记-结合chatGPT辅助学习Go语言底层原理

1、Go版本

go1.14.15

2、汇编基础

  • 推荐阅读:GO汇编语言简介

  • 推荐阅读:A Quick Guide to Go's Assembler - The Go Programming Language

  • 精简指令集

    • 数据传输: MOV/LEA

    • 跳转指令: CMP/TEST/JMP/JCC

    • 栈指令: PUSH/POP

    • 函数调用指令: CALL/RET

    • 算术指令: ADD/SUB/MUL/DIV

    • 逻辑指令: AND/OR/XOR/NOT

    • 移位指令: SHL/SHR

    • JCC有条件跳转: JEQ/JNE/JLT/JLE/JGT/JGE

    • 还有针对无符号数的比较条件

  • MOV指令

注:图片来源于GO汇编语言简介

   

  • 伪寄存器

    • SB: 静态基址指针, 全局符号

    • FP: 帧指针, 参数和局部变量

    • SP: 栈指针, 栈的顶端

    • PC: 程序计数器, 跳转和分支

    • 注:伪寄存器仅仅存在于Go汇编中

  • 伪寄存器用法

    • GLOBL text(SB),$1: 全局变量

    • MOVQ a+0(FP) AX: 函数参数

    • MOVQ b+8(SP) AX: 局部变量

    • JMP 2(PC): 向前跳转, 常用于宏函数

    • JMP -2(PC): 向后跳转, 常用于宏函数

3、示例代码

package mainfunc main() {n := 10println(read(&n))}//go:noinline
func read(p *int) (v int) {v = *preturn}
  • //go:noinline:禁止Go对函数进行内联

  • 内联:内联是一种手动或编译器优化,用于将简短函数的调用替换为函数体本身。这么做的原因是它可以消除函数调用本身的开销,也使得编译器能更高效地执行其他的优化策略

  • 使用objdump工具反编译

4、结合chatGPT反编译调试

go build s1.go                                  //编译go tool objdump -S -s "main.read" .\s3.exe      //反编译

  • 图中是用go自带的objdump工具对main.read反编译得到的汇编指令

  • 不懂就问,咱们直接问chatGPT这段汇编指令的含义(首先需要给chatGPT一些引导和背景介绍),如下图

  • 上面解释的很清楚了,为了进一步理解这些指令的含义,追问

5、指针

  • 指针本身是一个无符号整型

package mainfunc main() {n := int32(10)println(read32(&n))}//go:noinline
func read32(p *int32) (v int32) {v = *preturn}

可以看到上述汇编指令中,第一行从参数p中取地址值的操作没变化,只是从AX寄存器中取值的时候,命令有MOVQ(8字节)变为MOVL(4字节),可见不同类型的指针地址本身是一样的类型(无符号整型)

  • 取地址

package mainvar n intfunc main() {println(addr())}//go:noinline
func addr() (p *int) {return &n}

直接问chatGPT,给出的解释是:

    • 从上图可以看到全局变量n是存在main包的静态基地址上(SB),被不同的函数和代码块共享访问,SB 是静态基地址的缩写,它是指向静态基地址的寄存器。因此,"main.n(SB)" 就是通过 SB 指向 main 包的静态基地址上的 n 变量。

    • LEAQ 指令将全局变量 n 的有效地址存储到 AX 寄存器中,这样 AX 寄存器就包含了 n 变量的地址,可以用于读取或写入该变量的值。

    • LEAQ 指令用于将有效地址存储到一个寄存器中

  • 强制类型转换

package mainimport "unsafe"func main() {p := 3convert(&p)}//go:noinline
func convert(p *int) {q := (*int32)(unsafe.Pointer(p))*q = 0}

  • 这段汇编代码是将一个指向int类型变量的指针,转换为指向int32类型变量的指针,并将其所指向的内存空间的值设置为0
  • 把指针的类型强转换为int32后,原本的MOVQ指令变成了MOVL,没有产生任何额外指令,所以转换效率是非常高的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/6731.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT专业应用:自动修复代码

正文共 754 字,阅读大约需要 4 分钟 程序开发必备技巧,您将在4分钟后获得以下超能力: 自动修复代码 Beezy评级 :A级 *经过寻找和一段时间的学习,一部分人能掌握。主要提升效率并增强自身技能。 推荐人 | Kim 编辑者…

个人简历html网页代码(使用chatgpt完成web开发课的实验)

使用chatgpt完成web开发课的实验 前提: chatgpt的使用,建议看https://juejin.cn/post/7198097078005841980或者自己随便找 要学会用“出国旅游”软件 vscode的基本使用 炼丹开始: 炼丹材料: 帮我写一个html页面,内…

ChatGLM2本地部署的实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Centos/Ubuntu离线部署清华chatGLM(特别详细,十分钟搞定)

引言 前段时间,清华公布了中英双语对话模型 ChatGLM-6B,具有60亿的参数,初具问答和对话功能。最!最!最重要的是它能够支持私有化部署,大部分实验室的服务器基本上都能跑起来。因为条件特殊,实验…

chatgpt回答mysql查询优化

chatgpt对一个查询疑问的回答,比百度强太多了,当你的需求明确的时候,能表达出来自己的疑问,chatgpt给你的回答简直是超凡的。 请教个问题:mysql数据库中有个表xn,表中一个字段“代表号"设置为key, 比如…

您应该查看的5个ChatGPT WordPress插件

要创建免费网站?从易服客建站平台免费开始 500M免费空间,可升级为20GB电子商务网站 您应该查看的5个ChatGPT WordPress插件 发布于 2023年4月1日 ChatGPT 席卷了数字世界。作为内容创建者或营销者,您可能希望通过在您的网站上使用ChatGPT…

体验了基于ChatGPT的谷歌翻译插件后,我把其他翻译插件移除了

最近,一个基于 ChatGPT 的谷歌浏览器翻译插件挺火的,我体验了下,总结下来就一个字“666”。 github 上已经有 14.9k 的 star 了 传送门:GitHub - yetone/openai-translator: 基于 ChatGPT API 的划词翻译浏览器插件和跨平台桌面端…

最近很火的ChatGPT究竟是什么?本文解释得非常全面,还通俗易懂

目录 01 ChatGPT是什么? 02 ChatGPT能做什么? 1)回答问题。 2)撰写文章。 3)总结提炼。 4)生成代码。 03 ChatGPT 的缺点和问题 04 ChatGPT的未来前景 1)搜索。 2)阅读…

ChatGPT迎华人产品老大,斯坦福毕业,扎克伯克最喜欢的产品经理!

整理 | 朱珂欣 出品 | CSDN程序人生(ID:coder_life) ChatGPT 大家早已不陌生,那么“Peter Deng”是何许人也? 答案是:ChatGPT 的“新掌门人”! 6 月 1 日,Peter Deng 在 LinkedIn…

2023全国科技工作者日——回顾2023小蛮腰科技大会暨AIGC人工智能峰会,致敬全国科技工作者

文章目录 一、前言二、2023全国科技工作者日三、回顾2023小蛮腰科技大会暨AIGC人工智能峰会3.1 关于小蛮腰科技大会暨AIGC人工智能峰会的背景3.2 2023小蛮腰科技大会:探寻AIGC新未来3.2.1 开幕式暨主论坛3.2.2 平行论坛1&6:迈向智能时代,…

ChatGPT也涨不动了

将深燃设为“星标⭐” 第一时间收到文章更新 深燃(shenrancaijing)原创 作者 | 李秋涵 编辑 | 魏佳 你还在用ChatGPT吗? 在全球掀起AI热潮的ChatGPT,似乎进入了瓶颈期。 首先是关于ChatGPT的使用率,有不利的数据出现。…

ChatGPT 也能用来造芯,说说英语就可以了?!

整理 | 屠敏 出品 | CSDN(ID:CSDNnews) ChatGPT 真的那么牛吗? 来自纽约大学 Tandon 工程学院的研究人员发布了一篇《Chip-Chat: Challenges and Opportunities in Conversational Hardware Design》论文,用实验回答道…

衔远科技天使轮融资数亿元打造ChatGPT助力企业创新数智化

日前,全球领先的专注于企业创新数智化的技术服务公司衔远科技宣布已经完成数亿元天使轮融资,本轮融资由启明创投领投,经纬创投跟投。 衔远科技成立于2021年底,致力于让每一件商品都应需而生,让每一位消费者都得偿所愿。…

从GPT-1到GPT-4看ChatGPT的崛起

整理了一下ChatGPT的发展历程、背后的技术原理,以及它的局限性在哪。(请注意:有部分内容来自于文内的参考资料,如有兴趣还请阅读原文,本文不构成任何投资建议或者对项目的推荐) *转载请扫码添加后台微信二维…

ChatGPT常用prompts汇总

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

ChatGPT Prompt Engineering for Developers(面向开发人员的 ChatGPT 提示工程)资源汇总

ChatGPT Prompt Engineering for Developers(面向开发人员的 ChatGPT 提示工程)资源汇总 吴恩达老师上新课了《开发者的ChatGPT提示工程课程》。 官网地址: 链接地址为ChatGPT Prompt Engineering for Developers B站中英文字幕视频 01.…

太太太恐怖了!闲来无事测试了一下chatGPT,感觉人类危机要成真了!

太太太恐怖了!闲来无事测试了一下chatGPT,感觉人类危机要成真了!

留学论文写作中引用ChatGPT创建的内容会被允许吗?

【欧洲时报2月28日编译】在智能聊天机器人ChatGPT在全球掀起热潮之际,国际文凭组织(International Baccalaureate,下称IB)近日表示,学生可以在论文写作中引用ChatGPT创建的内容。 英国《卫报》报道,IB是A-l…

玩转ChatGPT:Transformer分类模型

一、写在前面 之前,我们介绍了Sklearn包以及Boost辈的各种分类模型,这些模型都很经典了,实际上也很强大,比如说Xgboost。 然而,近期随着ChatGPT的大火,其底层框架Transformer也逐渐火了,现在大…

ChatGPT进化的过程简介

Chat GPT可以做什么? 分点列条的回答问题 写代码或SQL 翻译 语法检查 ChatGPT官方还未公开论文,ChatGPT有一个“孪生兄弟”InstructGPT,InstructGPT有论文,可以根据InstructGPT论文推导ChatGPT的训练过程: ChatGPT的…