Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
        .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:
 |