newlib-cygwin/newlib/libc/sys/go32/int86x.s

104 lines
1.2 KiB
ArmAsm

.data
ds:
.word 0
es:
.word 0
fs:
.word 0
gs:
.word 0
.globl int86
int86:
.byte 0x2e
push ds
pop %ds
.byte 0x2e
push es
pop %es
.byte 0x2e
push fs
pop %fs
.byte 0x2e
push gs
pop %gs
.byte 0xcd
int86_vec:
.byte 0x03
ret
.text
.globl _int86x
_int86x:
movl 16(%esp), %eax
movw 2(%eax), %cx
movw %cx, ds
movw 4(%eax), %cx
movw %cx, es
movw 6(%eax), %cx
movw %cx, fs
movw 8(%eax), %cx
movw %cx, gs
jmp int86_common
.globl _int86
_int86:
movw %ds, %ax
movw %ax, ds
movw %ax, es
movw %ax, fs
movw %ax, gs
jmp int86_common
int86_common:
pushl %ebp
movl %esp,%ebp
pushl %ebx
pushl %esi
pushl %edi
pushf
movl 8(%ebp),%eax
movb %al,int86_vec
movl 12(%ebp),%eax
movl 4(%eax),%ebx
movl 8(%eax),%ecx
movl 12(%eax),%edx
movl 16(%eax),%esi
movl 20(%eax),%edi
movl (%eax),%eax
push %ds
push %es
call int86
pop %es
pop %ds
pushf
pushl %eax
movl %esp,%ebp
addl $24,%ebp
movl 16(%ebp),%eax
popl (%eax)
movl %ebx,4(%eax)
movl %ecx,8(%eax)
movl %edx,12(%eax)
movl %esi,16(%eax)
movl %edi,20(%eax)
popl %ebx /* flags */
movl %ebx,28(%eax)
andl $1,%ebx
movl %ebx,24(%eax)
movl (%eax),%eax
popf
popl %edi
popl %esi
popl %ebx
popl %ebp
ret