73 lines
1.7 KiB
NASM
73 lines
1.7 KiB
NASM
;
|
|
; Copyright (c) Mix Software 1988
|
|
;
|
|
; -------------------------------------------------------
|
|
; setmem(address,count,value) - fill memory with value
|
|
; memset(address,value,count)
|
|
; -------------------------------------------------------
|
|
;
|
|
IDT setmem
|
|
DEF setmem
|
|
IF UPPER
|
|
DEF SETMEM
|
|
ENDIF
|
|
;
|
|
SETMEM EQU $
|
|
setmem PUSH BP
|
|
MOV BP,SP
|
|
MOV CX,[BP][%PARM2]
|
|
MOV AX,[BP][%PARM3]
|
|
SETMEM1 MOV DI,[BP][%PARM1]
|
|
PUSH CX
|
|
SHR CX,1
|
|
JCXZ LASTCHAR
|
|
MOV AH,AL
|
|
MOV DX,DS
|
|
MOV ES,DX
|
|
CLD
|
|
REP
|
|
STOSW
|
|
LASTCHAR POP CX
|
|
AND CX,>0001
|
|
JCXZ DONE
|
|
STOSB
|
|
DONE MOV AX,[BP][%PARM1] ; Return pointer to destination
|
|
POP BP
|
|
RETSEG
|
|
memset equ $
|
|
MEMSET PUSH BP
|
|
MOV BP,SP
|
|
MOV AX,[BP][%PARM2]
|
|
MOV CX,[BP][%PARM3]
|
|
JMPS SETMEM1
|
|
END
|
|
;
|
|
; -------------------------------------------------------
|
|
; repmem(address,data,datasize, copies)
|
|
; fill memory with copies of a template
|
|
; -------------------------------------------------------
|
|
;
|
|
IDT repmem
|
|
DEF repmem
|
|
;
|
|
repmem PUSH BP
|
|
MOV BP,SP
|
|
MOV DX,[BP][%PARM4] ; number of copies
|
|
TEST DX,DX
|
|
JZ DONE
|
|
MOV CX,[BP][%PARM3] ; size of block
|
|
JCXZ DONE
|
|
MOV DI,[BP][%PARM1] ; address of data
|
|
MOV CX,DS
|
|
MOV ES,CX
|
|
CLD
|
|
FILL MOV SI,[BP][%PARM2] ; pattern data
|
|
MOV CX,[BP][%PARM3] ; size of block
|
|
REP
|
|
MOVSB
|
|
DEC DX
|
|
JNZ FILL
|
|
DONE POP BP
|
|
RETSEG
|
|
END
|