ZBLOG

__asm__ ( " .text \n" " .p2align 4,,15 \n" ".globl _switch \n" ".globl __switch

这段代码是一个汇编语言的函数,主要功能是进行上下文切换(context switch)。其中,使用了一些寄存器来保存当前线程的状态,并将其保存到指定的内存地址(rsi)中。具体注释如下:

  • movq %rsp, 0(%rsi):将栈指针(rsp)的值保存到内存地址为rsi的位置中,用于恢复线程时使用。
  • movq %rbp, 8(%rsi):将帧指针(rbp)的值保存到内存地址为rsi+8的位置中,用于恢复线程时使用。
  • movq (%rsp), %rax:将当前指令(insn_pointer)所在地址的值保存到rax寄存器中,用于恢复线程时使用。
  • movq %rax, 16(%rsi):将rax寄存器中的值保存到内存地址为rsi+16的位置中,用于恢复线程时使用。
  • movq %rbx, 24(%rsi):将bx寄存器中的值保存到内存地址为rsi+24的位置中,用于恢复线程时使用。
  • movq %r12, 32(%rsi):将r12寄存器中的值保存到内存地址为rsi+32的位置中,用于恢复线程时使用。
  • movq %r13, 40(%rsi):将r13寄存器中的值保存到内存地址为rsi+40的位置中,用于恢复线程时使用。
  • movq %r14, 48(%rsi):将r14寄存器中的值保存到内存地址为rsi+48的位置中,用于恢复线程时使用。
  • movq %r15, 56(%rsi):将r15寄存器中的值保存到内存地址为rsi+56的位置中,用于恢复线程时使用。
  • movq 56(%rdi), %r15:从指定的内存地址(rdi+56)读取数据,并将其赋值给r15寄存器,用于恢复现场时使用。
  • movq 48(%rdi), %r14:从指定的内存地址(rdi+48)读取数据,并将其赋值给r14寄存器,用于恢复现场时使用。
  • movq 40(%rdi), %r13:从指定的内存地址(rdi+40)读取数据,并将其赋值给r13寄存器,用于恢复现场时使用。
  • movq 32(%rdi), %r12:从指定的内存地址(rdi+32)读取数据,并将其赋值给r12寄存器,用于恢复现场时使用。
  • movq 24(%rdi), %rbx:从指定的内存地址(rdi+24)读取数据,并将其赋值给rbx寄存器,用于恢复现场时使用。
  • movq 8(%rdi), %rbp:从指定的内存地址(rdi+8)读取数据,并将其赋值给rbp寄存器,用于恢复现场时使用。
  • movq 0(%rdi), %rsp:从指定的内存地址(rdi+0)读取数据,并将其赋值给rsp寄存器,用于恢复现场时使用。
  • movq 16(%rdi), %rax:从指定的内存地址(rdi+16)读取数据,并将其赋值给rax寄存器,用于恢复现场时使用。
  • movq %rax, (%rsp):将rax寄存器中的值保存到栈顶位置中,以便在返回之后继续执行该线程。
  • ret:返回上一级函数。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=667

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?