return - Address Offset |
|||||
AX (CL in danger) | CX (AX in danger) | XX (CL, AX in danger) | |||
parm
Chunk |
AL | entry | ;Preserve CL PUSH CX MOV CL,AL |
;Preserve AH MOV CX,AX |
;Preserve CL,AH XCHG CX,XX MOV CX,AX |
exit | POP CX | XCHG AX,XX | XCHG AX,XX XCHG AX,CX |
||
AH | entry | ;Preserve CL XCHG AL,AH PUSH CX MOV CL,AL |
;Preserve AL XCHG AL,AH MOV CX,AX |
;Preserve CL,AH XCHG AL,AH XCHG CX,XX MOV CX,AX |
|
exit | POP CX | XCHG AX,XX XCHG AL,AH |
XCHG AX,XX XCHG AX,CX XCHG AL,AH |
||
CL | entry | ;Ideal call MOV AL,CL |
;Preserve AX PUSH AX MOV AL,CL |
;Preserve AX XCHG AX,XX MOV AL,CL |
|
exit | XCHG AX,XX POP AX |
XCHG AX,XX | |||
CH | entry | ;Preserve CL XCHG CH,CL MOV AL,CL |
;Preserve AX PUSH AX XCHG CH,CL MOV AL,CL |
;Preserve CL,AX XCHG AX,XX XCHG CL,CH MOV AL,CL |
|
exit | XCHG CH,CL | XCHG AX,XX POP AX |
XCHG AX,XX XCHG CL,CH |
||
XX | entry | ;Preserve CL XCHG XX,CL MOV AL,CL |
;Preserve AX PUSH AX XCHG XX,CL MOV AL,CL |
;Preserve CL,AX XCHG AX,XX XCHG CL,XX MOV AL,CL |
|
exit | XCHG XX,CL | XCHG AX,XX POP AX |
XCHG AX,XX XCHG CL,XX |
cp2oset MACRO ;Preferably chunk pointer in cl and returns result in ax or any other 16 bit reg or var ##IF '#1' EQ 'AH' XCHG AL,AH ##ENDIF ##IF '#1' EQ 'AH' OR '#1' EQ 'AL' ##IF '#2' EQ 'AX' ;AH (now in AL) or AL to AX: Preserve all of CX and destination not available so must use stack PUSH CX MOV CL,AL ##ELSE ##IF '#2' NE 'CX' ;AH (now in AL) or AL to anything but AX or CX: use eventual destination to save CX XCHG CX,#2 ##ENDIF ;AH (now in AL) or AL to anything but AX: Get #1 into CL and use CH to save AH or AL (now in AH) MOV CX,AX ##ENDIF ##ELSE ;not AH or AL ##IF '#2' EQ 'CX' PUSH AX ;not AH or AL to CX: Preserve all of AX and destination not available so must use stack ##ELSE ##IF '#2' NE 'AX';not AH or AL and not AX or CX XCHG AX, #2 ##ENDIF ##ENDIF ##IF '#1' NE 'CL' ;not AH, AL or CL XCHG CL,#1 ##ENDIF MOV AL,CL ##ENDIF XOR AH,AH AND CL,03 SHL AX,CL SHL AX,CL ADD AL,CL ADC AX,0 INC AX ##IF '#2' EQ 'AX' ##IF '#1' EQ 'AL' OR '#1' EQ 'AH' POP CX ##ELSE ; not AL or AH ##IF '#1' NE 'CL' XCHG #1,CL ##ENDIF ##ENDIF ##ELSE ; not AX XCHG AX,#2 ##IF '#2' EQ 'CX' ##IF '#1' EQ 'AL' OR '#1' EQ 'AH' ##ELSE POP AX ##ENDIF ##ELSE ; not AX or CX ##IF '#1' EQ 'AL' OR '#1' EQ 'AH' XCHG AX,CX ##ELSE ; not AX or CX and not AL or AH ##IF '#1' NE 'CL' XCHG #1,CL ##ENDIF ##ENDIF ##ENDIF ; not AX ##IF '#1' EQ 'AH' XCHG AL,AH ##ENDIF ##ENDIF
file: /Techref/language/meta-l/chnkaddr.htm, 5KB, , updated: 1999/5/28 08:23, local time: 2024/12/18 20:59,
13.59.139.202:LOG IN
|
©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions? <A HREF="http://massmind.org/techref/language/meta-l/chnkaddr.htm"> language meta-l chnkaddr</A> |
Did you find what you needed? |
Welcome to massmind.org! |
Welcome to massmind.org! |
.