home *** CD-ROM | disk | FTP | other *** search
- ;[]-----------------------------------------------------------------[]
- ;| H_SPUSH.ASM -- struct argument routine |
- ;| |
- ;| Turbo-C Run Time Library Version 3.0 |
- ;| |
- ;| Copyright (c) 1987,1988,1990 by Borland International Inc. |
- ;| All Rights Reserved. |
- ;[]-----------------------------------------------------------------[]
-
- INCLUDE RULES.ASI
-
- ; calls to this routine are generated by the compiler to copy
- ; a "struct" argument to the stack
- ;
- ; DX:AX = address of struct to copy to stack
- ; CX = size of struct, in bytes
- ;
-
- _TEXT SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:_TEXT
-
- PUBLIC SPUSH@
- PUBLIC F_SPUSH@
- PUBLIC N_SPUSH@
-
- N_SPUSH@:
- pop bx ;fetch return address off stack
- sub sp,cx ;make room on stack for struct
- push cs ;save return address back on stack
- jmp short PUSHIT
- SPUSH@:
- F_SPUSH@:
- pop bx ;fetch return address off stack
- pop es
- sub sp,cx ;make room on stack for struct
- push es ;save return address back on stack
- PUSHIT:
- push bx
-
- push di ;save regs
- push ds
-
- mov di,sp ;set up di for move
- add di,8
- mov bx,ss ;es = ss for move
- mov es,bx
- mov ds,dx ;set up ds for move
- xchg ax,si ;set up si for move (also saves si)
-
- cld
- shr cx,1
- rep movsw
- adc cx,cx
- rep movsb
-
- xchg si,ax ;restore si
- pop ds
- pop di
- retf
- _TEXT ENDS
- END
-
-