qemu/tests/tcg/test-i386-code16.S
<<
>>
Prefs
   1        .code16
   2        .globl code16_start
   3        .globl code16_end
   4
   5CS_SEG = 0xf
   6
   7code16_start:
   8
   9        .globl code16_func1
  10
  11        /* basic test */
  12code16_func1 = . - code16_start
  13        mov $1, %eax
  14        data32 lret
  15
  16/* test push/pop in 16 bit mode */
  17        .globl code16_func2
  18code16_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
  29code16_func3 = . - code16_start
  30        jmp 1f
  31        nop
  321:
  33        mov $4, %eax
  34        mov $0x12345678, %ebx
  35        xor %bx, %bx
  36        jz 2f
  37        add $2, %ax
  382:
  39
  40        call myfunc
  41
  42        lcall $CS_SEG, $(myfunc2 - code16_start)
  43
  44        ljmp $CS_SEG, $(myjmp1 - code16_start)
  45myjmp1_next:
  46
  47        cs lcall *myfunc2_addr - code16_start
  48
  49        cs ljmp *myjmp2_addr - code16_start
  50myjmp2_next:
  51
  52        data32 lret
  53
  54myfunc2_addr:
  55        .short myfunc2 - code16_start
  56        .short CS_SEG
  57
  58myjmp2_addr:
  59        .short myjmp2 - code16_start
  60        .short CS_SEG
  61
  62myjmp1:
  63        add $8, %ax
  64        jmp myjmp1_next
  65
  66myjmp2:
  67        add $16, %ax
  68        jmp myjmp2_next
  69
  70myfunc:
  71        add $1, %ax
  72        ret
  73
  74myfunc2:
  75        add $4, %ax
  76        lret
  77
  78
  79code16_end:
  80