|         .code16 | 
 |         .globl code16_start | 
 |         .globl code16_end | 
 |  | 
 | CS_SEG = 0xf | 
 |  | 
 | code16_start: | 
 |  | 
 |         .globl code16_func1 | 
 |  | 
 |         /* basic test */ | 
 | code16_func1 = . - code16_start | 
 |         mov $1, %eax | 
 |         data32 lret | 
 |  | 
 | /* test push/pop in 16 bit mode */ | 
 |         .globl code16_func2 | 
 | code16_func2 = . - code16_start | 
 |         xor %eax, %eax | 
 |         mov $0x12345678, %ebx | 
 |         movl %esp, %ecx | 
 |         push %bx | 
 |         subl %esp, %ecx | 
 |         pop %ax | 
 |         data32 lret | 
 |  | 
 | /* test various jmp opcodes */ | 
 |         .globl code16_func3 | 
 | code16_func3 = . - code16_start | 
 |         jmp 1f | 
 |         nop | 
 | 1: | 
 |         mov $4, %eax | 
 |         mov $0x12345678, %ebx | 
 |         xor %bx, %bx | 
 |         jz 2f | 
 |         add $2, %ax | 
 | 2: | 
 |  | 
 |         call myfunc | 
 |  | 
 |         lcall $CS_SEG, $(myfunc2 - code16_start) | 
 |  | 
 |         ljmp $CS_SEG, $(myjmp1 - code16_start) | 
 | myjmp1_next: | 
 |  | 
 |         cs lcall *myfunc2_addr - code16_start | 
 |  | 
 |         cs ljmp *myjmp2_addr - code16_start | 
 | myjmp2_next: | 
 |  | 
 |         data32 lret | 
 |  | 
 | myfunc2_addr: | 
 |         .short myfunc2 - code16_start | 
 |         .short CS_SEG | 
 |  | 
 | myjmp2_addr: | 
 |         .short myjmp2 - code16_start | 
 |         .short CS_SEG | 
 |  | 
 | myjmp1: | 
 |         add $8, %ax | 
 |         jmp myjmp1_next | 
 |  | 
 | myjmp2: | 
 |         add $16, %ax | 
 |         jmp myjmp2_next | 
 |  | 
 | myfunc: | 
 |         add $1, %ax | 
 |         ret | 
 |  | 
 | myfunc2: | 
 |         add $4, %ax | 
 |         lret | 
 |  | 
 |  | 
 | code16_end: |