[Back to MEMORY SWAG index] [Back to Main SWAG index] [Original]
UNIT Fill;
(**) INTERFACE (**)
PROCEDURE FillWord(VAR Dest; Count, What : Word);
PROCEDURE FillOthr(VAR Dest; Count : Word; What : Byte);
PROCEDURE FillPatt(VAR Dest, Patt; Count, Siz : Word);
PROCEDURE FillPattOthr(VAR Dest, Patt; Count,
Siz : Word);
(**) IMPLEMENTATION (**)
PROCEDURE FillWord(VAR Dest; Count, What : Word);
Assembler;
ASM
LES DI, Dest {ES:DI points to destination}
MOV CX, Count {count in CX}
MOV AX, What {word to fill with in AX}
CLD {forward direction}
REP STOSW {perform the fill}
END;
PROCEDURE FillOthr(VAR Dest; Count : Word; What : Byte);
Assembler;
ASM
LES DI, Dest {ES:DI points to destination}
MOV CX, Count {count in CX}
MOV AL, What {byte to fill with in AL}
CLD {forward direction}
@TheLoop:
STOSB {store one byte}
INC DI {skip one byte}
Loop @TheLoop
END;
PROCEDURE FillPatt(VAR Dest, Patt; Count, Siz : Word);
Assembler;
ASM
MOV CX, Siz
JCXZ @Out
XCHG CX, DX {size of pattern in DX}
MOV CX, Count {count in CX}
JCXZ @Out
PUSH DS
LES DI, Dest {ES:DI points to destination}
LDS SI, Patt {DS:SI points to pattern}
MOV BX, SI {save SI in BX}
CLD {forward direction}
@PatLoop:
PUSH CX {save count for outer loop}
MOV CX, DX {put inner count in CX}
MOV SI, BX {DS:SI points to source}
REP MOVSB {make one copy of pattern}
POP CX {restore count for outer loop}
LOOP @PatLoop
POP DS
@Out:
END;
PROCEDURE FillPattOthr(VAR Dest, Patt; Count,
Siz : Word); Assembler;
ASM
MOV CX, Siz
JCXZ @Out
XCHG CX, DX {size of pattern in DX}
MOV CX, Count {count in CX}
JCXZ @Out
PUSH DS
LES DI, Dest {ES:DI points to destination}
LDS SI, Patt {DS:SI points to pattern}
MOV BX, SI {save SI in BX}
CLD {forward direction}
@PatLoop:
PUSH CX {save count for outer loop}
MOV CX, DX {put inner count in CX}
MOV SI, BX {DS:SI points to source}
@TheLoop:
LODSB {get a byte from pattern..}
STOSB {.. and store in destination}
INC DI {skip a byte}
LOOP @TheLoop
POP CX {restore count for outer loop}
LOOP @PatLoop
POP DS
@Out:
END;
END.
[Back to MEMORY SWAG index] [Back to Main SWAG index] [Original]