|  | .globl _tas | 
|  | _tas: | 
|  | movl $0xCAFEBABE, %eax | 
|  | movl 4(%esp), %ecx | 
|  | xchgl %eax, 0(%ecx) | 
|  | ret | 
|  |  | 
|  | .globl _getmcontext | 
|  | _getmcontext: | 
|  | movl	4(%esp), %eax | 
|  |  | 
|  | movl	%fs, 8(%eax) | 
|  | movl	%es, 12(%eax) | 
|  | movl	%ds, 16(%eax) | 
|  | movl	%ss, 76(%eax) | 
|  | movl	%edi, 20(%eax) | 
|  | movl	%esi, 24(%eax) | 
|  | movl	%ebp, 28(%eax) | 
|  | movl	%ebx, 36(%eax) | 
|  | movl	%edx, 40(%eax) | 
|  | movl	%ecx, 44(%eax) | 
|  |  | 
|  | movl	$1, 48(%eax)	/* %eax */ | 
|  | movl	(%esp), %ecx	/* %eip */ | 
|  | movl	%ecx, 60(%eax) | 
|  | leal	4(%esp), %ecx	/* %esp */ | 
|  | movl	%ecx, 72(%eax) | 
|  |  | 
|  | movl	44(%eax), %ecx	/* restore %ecx */ | 
|  | movl	$0, %eax | 
|  | ret | 
|  |  | 
|  | .globl _setmcontext | 
|  | _setmcontext: | 
|  | movl	4(%esp), %eax | 
|  |  | 
|  | movl	8(%eax), %fs | 
|  | movl	12(%eax), %es | 
|  | movl	16(%eax), %ds | 
|  | movl	76(%eax), %ss | 
|  | movl	20(%eax), %edi | 
|  | movl	24(%eax), %esi | 
|  | movl	28(%eax), %ebp | 
|  | movl	36(%eax), %ebx | 
|  | movl	40(%eax), %edx | 
|  | movl	44(%eax), %ecx | 
|  |  | 
|  | movl	72(%eax), %esp | 
|  | pushl	60(%eax)	/* new %eip */ | 
|  | movl	48(%eax), %eax | 
|  | ret | 
|  |  |