VMS Help MACRO, VAX MACRO Assembler, Instructions, CALLS *Conan The Librarian (sorry for the slow response - running on an old VAX) |
Purpose: Call with stack argument list - invoke a procedure with actual arguments on the stack Format: opcode numarg.rl,dst.ab Operation: {push arg count}; {align stack}; {create stack frame}; {set arithmetic trap enables}; {set new values of AP, FP, PC} C. Codes: N = 0, Z = 0, V = 0, C = 0 Exceptions: Reserved operand Opcode: FB CALLS Call proc. with stack arglist Description: numarg is pushed on the stack as a longword (byte 0 contains the number of arguments, the high-order 24 bits are used by Digital software), SP is saved in a temporary (tmp) and then bits 1:0 of SP are cleared so the stack is longword aligned. The procedure entry mask (pointed to by dst) is scanned from bit 11 to bit 0 and the contents of the registers whose numbers correspond to set bits in the mask are pushed on the stack as longwords. AP, FP and the current PC are pushed onto the stack as longwords. The condition codes are cleared. A longword containing the saved two low bits of SP in bits 31:30 (tmp), 1 in bit 29, a 0 in bit 28, the low 12 bits of the entry mask in bits 27:16 and the PSW in bits 15:0 with T cleared is pushed on the stack. A longword 0 is pushed on the stack (for the condition handler address within the procedure). FP is replaced by SP, AP is set to the saved SP (value of SP after numarg was pushed. The trap enables in PSW are set to a known state. Integer and decimal overflow are set according to bits 14 and 15 of the entry mask respectively. The floating underflow bit is cleared and the T-bit is unaffected. PC is replaced by dst + 2, skipping the entry mask and transferring control to the byte beyond the mask.
|