极简的swapcontext实现

2015-04-18

context.h

	#ifndef _CONTEXT_H
	#define _CONTEXT_H	
	
	struct Context {
	    uint64_t rsp;
	    uint64_t r15;
	    uint64_t r14;
	    uint64_t r13;
	    uint64_t r12;
	    uint64_t rbx;
	    uint64_t rbp;
	};
	void SwapContext(struct Context *old, struct Context *new);

context.s

	.globl _SwapContext, SwapContext
	_SwapContext:
	SwapContext:
	
	        mov     %rsp, 0x00(%rdi)
	        mov     %r15, 0x08(%rdi)
	        mov     %r14, 0x10(%rdi)
	        mov     %r13, 0x18(%rdi)
	        mov     %r12, 0x20(%rdi)
	        mov     %rbx, 0x28(%rdi)
	        mov     %rbp, 0x30(%rdi)
		
	        mov     0x00(%rsi), %rsp
	        mov     0x08(%rsi), %r15
	        mov     0x10(%rsi), %r14
	        mov     0x18(%rsi), %r13
	        mov     0x20(%rsi), %r12
	        mov     0x28(%rsi), %rbx
	        mov     0x30(%rsi), %rbp
		
	        ret
汇编swapcontext