root / tests / test-i386-code16.S @ 564c8f99
History | View | Annotate | Download (1.3 kB)
1 |
.code16 |
---|---|
2 |
.globl code16_start |
3 |
.globl code16_end |
4 |
|
5 |
CS_SEG = 0xf |
6 |
|
7 |
code16_start: |
8 |
|
9 |
.globl code16_func1 |
10 |
|
11 |
/* basic test */ |
12 |
code16_func1 = . - code16_start |
13 |
mov $1, %eax |
14 |
data32 lret |
15 |
|
16 |
/* test push/pop in 16 bit mode */ |
17 |
.globl code16_func2 |
18 |
code16_func2 = . - code16_start |
19 |
xor %eax, %eax |
20 |
mov $0x12345678, %ebx |
21 |
movl %esp, %ecx |
22 |
push %bx |
23 |
subl %esp, %ecx |
24 |
pop %ax |
25 |
data32 lret |
26 |
|
27 |
/* test various jmp opcodes */ |
28 |
.globl code16_func3 |
29 |
code16_func3 = . - code16_start |
30 |
jmp 1f |
31 |
nop |
32 |
1: |
33 |
mov $4, %eax |
34 |
mov $0x12345678, %ebx |
35 |
xor %bx, %bx |
36 |
jz 2f |
37 |
add $2, %ax |
38 |
2: |
39 |
|
40 |
call myfunc |
41 |
|
42 |
lcall $CS_SEG, $(myfunc2 - code16_start) |
43 |
|
44 |
ljmp $CS_SEG, $(myjmp1 - code16_start) |
45 |
myjmp1_next: |
46 |
|
47 |
cs lcall myfunc2_addr - code16_start |
48 |
|
49 |
cs ljmp myjmp2_addr - code16_start |
50 |
myjmp2_next: |
51 |
|
52 |
data32 lret |
53 |
|
54 |
myfunc2_addr: |
55 |
.short myfunc2 - code16_start |
56 |
.short CS_SEG |
57 |
|
58 |
myjmp2_addr: |
59 |
.short myjmp2 - code16_start |
60 |
.short CS_SEG |
61 |
|
62 |
myjmp1: |
63 |
add $8, %ax |
64 |
jmp myjmp1_next |
65 |
|
66 |
myjmp2: |
67 |
add $16, %ax |
68 |
jmp myjmp2_next |
69 |
|
70 |
myfunc: |
71 |
add $1, %ax |
72 |
ret |
73 |
|
74 |
myfunc2: |
75 |
add $4, %ax |
76 |
lret |
77 |
|
78 |
|
79 |
code16_end: |
80 |
|