寄存器的使用
寄存器需要在主程序和过程中使用时,在被过程使用前,需要先把它们的内容入栈保存。如果只在过程中使用时,程序可直接修改这些寄存器的值。在过程的结尾,压入栈中的数据要被恢复。
GCC为一个C过程产生的汇编代码的前部有下面的代码:
1、2、3和4行指令将三个寄存器(%ebx、%esi和%edi)的值保存到栈中。
第5行、第7行指令, %ebx作为指针使用,把其指向单元的数送%esi
第6行、第8行指令,%edi作为指针使用,把其指向单元的数送%eax
第9行、第10行指令,%edx作为指针使用,把其指向单元的数送%ecx
寄存器%ebx、%esi和%edi是主程序和过程均要使用的。寄存器%eax、%ecx和%edx是过程要使用的。
因此,在过程的末尾,寄存器%ebx、%esi和%edi的值要被恢复(没有显示出来)。