图中指明了64bit的通用寄存器共有16个,访问不同大小时有不同名称。
另外就是后面的说明,当一个函数调用另一个函数的时候,可能要保存一些寄存器状态,这么多寄存器,到底由谁保存,编译器的指导方针就是:
一部分由调用者保存——caller saved
一部分由被调用者保存——callee saved
由调用者保存的,在call执行前,要将相关寄存器压栈,然后ret返回后,再弹栈。
由被调用者保存的,在call执行后进入被调用函数,如果函数需要用到某些寄存器,这些寄存器是callee saved,那么必需先将这些寄存器压栈,等处理完在ret返回前,将这些寄存器弹栈。