寄存器

作者: 絮语时光杨 | 来源:发表于2018-08-15 15:44 被阅读14次

    寄存器
    体系结构 长度 名称

    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

    相关文章

      网友评论

          本文标题:寄存器

          本文链接:https://www.haomeiwen.com/subject/tbswbftx.html