1# Context switch 2# 3# void swtch(struct context **old, struct context *new); 4# 5# Save the current registers on the stack, creating 6# a struct context, and save its address in *old. 7# Switch stacks to new and pop previously-saved registers. 8 9.globl swtch 10swtch: 11 movl 4(%esp), %eax 12 movl 8(%esp), %edx 13 14 # Save old callee-saved registers 15 pushl %ebp 16 pushl %ebx 17 pushl %esi 18 pushl %edi 19 20 # Switch stacks 21 movl %esp, (%eax) 22 movl %edx, %esp 23 24 # Load new callee-saved registers 25 popl %edi 26 popl %esi 27 popl %ebx 28 popl %ebp 29 ret 30