rdos/kernel/far.asm

53 lines
590 B
NASM

; far pointer load
; IN ES:BX far pointer to data
; CX number of bytes to copy
; 0:DX destination buffer
; only CX is trashed
lod: push si
push di
push es
; ES:DI := DS:DX
mov ax, ds
mov es, ax
mov di, dx
; DS:SI := 0:BX
xor ax, ax
mov ds, ax
mov si, bx
; copy
pushf
cld
rep movsb
popf
; reset DS to kernel data
mov ds, cx
pop es
pop di
pop si
ret
; far pointer store
; IN ES:BX far ptr
; CX number of bytes
; 0:DX source buffer
; only CX is trashed
sto: push si
push di
mov si, dx
mov di, bx
; do the copy
pushf
cld
rep movsb
popf
pop di
pop si
ret