go语言调度器源代码情景分析之二:CPU寄存器

本文是《Go语言调度器源代码情景分析》系列的一部分,探讨CPU寄存器在Go语言中的角色。文章介绍了寄存器的基本概念,通过AMD64 CPU的实例说明其在汇编代码中的使用,并详细阐述了通用寄存器、程序计数寄存器(rip)、栈顶寄存器(rsp)和栈基址寄存器(rbp)的功能和特点。
摘要由CSDN通过智能技术生成

作者:爱写程序的阿波张
版权:转载请注明出处
公众号:go语言核心编程技术

本文是《go调度器源代码情景分析》系列 第一章 预备知识的第二小节。


寄存器是CPU内部的存储单元,用于存放从内存读取而来的数据(包括指令)和CPU运算的中间结果,之所以要使用寄存器来临时存放数据而不是直接操作内存,一是因为CPU的工作原理决定了有些操作运算只能在CPU内部进行,二是因为CPU读写寄存器的速度比读写内存的速度快得多。

为了便于交流和使用汇编语言进行编程,CPU厂商为每个寄存器都取了一个名字,比如AMD64 CPU中的rax, rbx, rcx, rdx等等,这样程序员就可以很方便的在汇编代码中使用寄存器的名字来进行编程,为了对寄存器的使用有个直观的感受,我们用个例子来简单的说明一下。

假设有如下go语言编写的一行代码:

c = a + b

在AMD64 Linux平台下,使用go编译器编译它可得到如下AT&T格式的汇编代码(如果对汇编代码不熟悉的话可以直接看每一条指令后面的注释,不影响我们理解):

mov    (%rsp),%rdx         #把变量a的值从内存中读取到寄存器rdx中
mov    0x8(%rsp),%rax      #把变量b的值从内存中读取到寄存器rax中
add    %rdx,%rax           #把寄存器rdx和rax中的值相加,并把结果放回rax寄存器中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值