1、线程在切换时,仅仅保存中间结果。例如,b=a+10
包含 tmp=a+10
与 b=tmp
两个过程,当执行完 tmp = a+10
后,线程出现切换,那么OS需要保存这个中间结果。
2、汇编跳转指令——BL指令(即Branch And Link)
BL指令的作用之一是记录返回地址,然后执行当前指令。
如下函数:
fun()
{
add_val(a, b); ---> BL.W 0x0810001 add_val =>[记录A的返回地址,执行指令A]
return 0;
}
以如下汇编语句为例分析:
BL.W 0x0810001 add_val
调用地址为 0x0810001 的子程序 add_val,并将子程序的返回地址(下一条语句,此处为 return 0)保存在 LR 寄存器。BL.W表示使用32位跳转指令进行函数调用。
3、LR(Link Register)链接寄存器
用于存放子程序的返回地址。在进入子程序之前,先将子程序的返回地址存入LR
4、C语言一条局部赋值语句,它是如何在汇编语言实现的?它的具体过程是如何的?
第一步将数值放到寄存器,第二步将寄存器的值放到栈里
举例:
【C语言】int a = 1;
【汇编】 1) MOVS r0, #0x01 2) STR r0, [sp, #0x04]