Spaces:
Runtime error
Runtime error
| code16_start | |
| 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 */ | |
| 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 */ | |
| 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: | |
| myfunc2 - code16_start | |
| CS_SEG | |
| myjmp2_addr: | |
| myjmp2 - code16_start | |
| 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: | |