symbian-qemu-0.9.1-12/qemu-symbian-svp/tests/test-i386-code16.S
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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: