Groups List Use The DOS services are invoked by placing the number of the desired function in register AH, subfunction in AL, setting the other registers to any specific requirements of the function, and invoking int 21h. On return, the requested service will be performed if possible. Most codes will return an error; some return more information. Details are contained in the listings for the individual functions. Extended error return may be obtained by calling function Int\21f\59. Register settings listed are the ones used by DOS. Some functions will return with garbage values in unused registers. Do not test for values in unspecified registers; your program may exhibit odd behavior. DOSs -GENERAL REGISTERS DS:DX pointers are the data segment register (DS) indexed to the DH and DL registers (DX). DX always contains the offset address, DS contains the segment address. The File Control Block services struc -FCB were part of DOS 1.0. Since the release of DOS 2.0, Microsoft has recommended that these services not be used. A set of considerably more enhanced services (handle services) were introduced with DOS 2.0. The handle services provide support for wildcards and subdirectories, and enhanced error detection via function Int\21f\59. The data for the following calls was compiled from various Intel, Microsoft, IBM, and other publications. There are many subtle differences between MSDOS and PCDOS and between the individual versions. Differences between the versions are noted as they occur. There are various ways of calling the DOS functions. For all methods, the function number is loaded into register AH, subfunctions and/or parameters are loaded into AL or other registers, and call int 21 by one of the following methods: A) call interrupt 21h directly (the recommended procedure) B) perform a long call to offset 50h in the program's PSP. 1) This method will not work under DOS 1.x 2) Though recommended by Microsoft for DOS 2.0, this method takes more time and is no longer recommended. C) place the function number in CL and perform an intrasegment call to location 05h in the current code segment. This location contains a long call to the DOS function dispatcher. 1) IBM recommends this method be used only when using existing programs written for different calling ng conventions. (such as converting CP/M programs). This method should be avoided unless you have some specific use for it. 2) AX is always destroyed by this method. 3) This method is valid only for functions 00h-24h. There are also various ways of exiting from a program. (assuming it is not intended to be a TSR). All methods except call Int\21f\4C must ensure that the segment register contains the segment address of the PSP. A) Int\21f\4C (Terminate with Result Code). This is the "official" recommended method of returning to DOS. B) Int\21f\00 (Exit Program). This is the early style int 21 function call. It simply calls Int\20. C) Int\20 (Exit). D) A INTEL\80x86op -JMP to offset 00h (Int\20 vector) in the Program Segment Prefix. This is just a roundabout method to call int 20h. This method was set up in DOS 1.0 for ease of conversion for CP/M programs. It is no longer recommended for use. E) A INTEL\80x86op -JMP to offset 05h (Int\21 vector) in the Program Segment Prefix, with AH set to 00h or 4Ch. This is a CP/M type function.