35 lines
557 B
ArmAsm
35 lines
557 B
ArmAsm
|
#
|
||
|
! $Source$
|
||
|
! $State$
|
||
|
! $Revision$
|
||
|
|
||
|
#include "libsysasm.h"
|
||
|
|
||
|
! .sys_cpyout: copy ecx bytes starting from ds:eax to the transfer
|
||
|
! buffer. Return eax := offset of transfer buffer in the real mode data
|
||
|
! segment. Preserve all other registers, except the flags.
|
||
|
|
||
|
.extern .sys_cpyout
|
||
|
.sys_cpyout:
|
||
|
push ecx
|
||
|
push edx
|
||
|
push esi
|
||
|
push edi
|
||
|
xchg esi, eax
|
||
|
movzx edi, (transfer_buffer_ptr)
|
||
|
mov eax, edi
|
||
|
mov es, (pmode_ds)
|
||
|
mov edx, ecx
|
||
|
shr ecx, 2
|
||
|
rep movs
|
||
|
movb cl, dl
|
||
|
andb cl, 3
|
||
|
rep movsb
|
||
|
mov ecx, ss
|
||
|
mov es, ecx
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop edx
|
||
|
pop ecx
|
||
|
ret
|