寄存器

寄存器
体系结构 长度 名称

x64 64 RAX,RBX,RCX,RDX,RDI,RSI, R8-R15
x64 32 EAX,EBX,ECX,EDX,EDI,ESI, R8D-R15D
x64 16 AX,BX,CX,DX,DI,SI, R8W-R15W
x64 8 AL,BL,CL,DL,DIL,SIL, R8L-R15L
arm64 64 X0-X30, XZR
arm64 32 W0-W30, WZR

EAX
EBX
ECX
EDX
EDI
ESI
EBP
ESP

_add_a_and_b:push%ebx
mov%eax,[%esp+8]
mov%ebx,[%esp+12]
add%eax,%ebx
pop%ebx
ret
_main:push3push2call_add_a_and_b
add%esp,8
ret

线程切换时的寄存器复用
具体的实现是每创建一个线程时都会为这线程创建一个数据结构来保存这个线程的信息,我们称这个数据结构为线程上下文,每个线程的上下文中有一部分数据是用来保存当前所有寄存器的副本。每当操作系统暂停一个线程时,就会将CPU中的所有寄存器的当前内容都保存到线程上下文数据结构中。而操作系统要让另外一个线程执行时则将要执行的线程的上下文中保存的所有寄存器的内容再写回到CPU中,并将要运行的线程中上次保存暂停的指令也赋值给CPU
的指令寄存器,并让新线程再次执行。可以看出操作系统正是通过这种机制保证了即使是多线程运行时也不会导致寄存器的内容发生错乱的问题。因为每当线程切换时操作系统都帮它们将数据处理好了。
函数调用时的寄存器复用

解决的方法就是高级语言里面的每一行代码在编译为机器指令时总是先将数据从内存读取到寄存器中,处理完毕后立即写回到内存中去,中间并不将数据进行任何在寄存器上的缓存
1432482-02b548861ac4928a.png


0.jpg
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 组件 计算机是一种数据处理设备,它由CPU和内存以及外部设备组成。CPU负责数据处理,内存负责存储,外部设备负责数...
    哆啦灬少A梦阅读 1,641评论 1 2
  • 一弹指六十刹那,一刹那九百生灭。 --《仁王经》 组件 计算机是一种数据处理设备,它由CPU和内存以及外部设备组成...
    欧阳大哥2013阅读 21,490评论 15 147
  • 这篇文章主要针对eip,esp,ebp寄存器进行介绍,有关别的通用寄存器在很多汇编相关书籍中都有介绍,由于篇幅有限...
    Hello密斯托李阅读 676评论 0 0
  • 1、数据寄存器ax、bx、cx、dx4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-...
    倒数第三阅读 1,774评论 0 1
  • 原文地址:C语言函数调用栈(一)C语言函数调用栈(二) 0 引言 程序的执行过程可看作连续的函数调用。当一个函数执...
    小猪啊呜阅读 4,727评论 1 19