home *** CD-ROM | disk | FTP | other *** search
-
-
-
- ; Example 2 - USER Function plus routine to print out an atom and
- ; return its length.
- ; External data block areas - these are defined as PUBLIC in M1AUX.OBJ.
-
- EXTRN OP:BYTE, INCNT:BYTE, OUTCNT:BYTE, INARG:WORD
- EXTRN OUTARG:WORD, INTYPE:BYTE, OUTYPE:BYTE
-
- PUBLIC USER
-
- CODE SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:CODE, DS:CODE
-
- USER PROC NEAR
- CALL STROUT
- RET
- USER ENDP
-
- STROUT PROC NEAR
- MOV SI, INARG ; Fetch string ptr from argument area.
- MOV CL, (ES:[SI]) ; Fetch string length from heap.
- XOR CH, CH ;
- DEC CX ; Reduce to # of characters.
- MOV STRLEN, CX ; Save string length.
- Loop:
- INC SI ; Advance offset.
- MOV AL, (ES:[SI]) ; Char to write.
- MOV AH, 14 ; BIOS tty write function.
- MOV BH, 0
- INT 10H ; Call BIOS routine.
- LOOP Loop ; Loop until CX = 0.
-
- MOV OUTCNT, 1 ; 1 argument to return.
- MOV AX, STRLEN ;
- MOV OUTARG, AX ; Return string length.
- MOV OUTYPE, 0 ; Return type = integer.
- RET
- STROUT ENDP
-
- STRLEN DW 0 ; String length.
-
- CODE ENDS
-
- END
-