AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 汇编语言

汇编源码--DOSSYM

51自学网 http://www.51zixue.net
include DOSMAC.ASMIF2    %OUT    DOSSYM in Pass 2ENDIFIFNDEF  ALTVECTALTVECT EQU     0       ;FALSEENDIFBREAK c_DEL       EQU     7Fh         ;    ASCII rubout or delete previous charc_BS        EQU     08h         ; ^H ASCII backspacec_CR        EQU     0Dh         ; ^M ASCII carriage returnc_LF        EQU     0Ah         ; ^J ASCII linefeedc_ETB       EQU     17h         ; ^W ASCII end of transmissionc_NAK       EQU     15h         ; ^U ASCII negative acknowledgec_ETX       EQU     03h         ; ^C ASCII end of textc_HT        EQU     09h         ; ^I ASCII tabBREAK ;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;; Certain structures, constants and system  calls  below  are  private  to ;; the DOS  and  are  extremely  version-dependent.  They may change at any ;; time at  the  implementors'  whim.   As  a  result,  they  must  not  be ;; documented to  the  general  public.   If  an  extreme case arises, they ;; must be documented with this warning.                                    ;;                                                                          ;; Those structures and constants that are subject to  the  above  will  be ;; marked and bracketed with the flag:                                      ;;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;BREAK  ;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;; Bios Parameter Block definition; This structure is used to build a full DPBBPBLOCK STRUCBPSECSZ DW      ?       ; Size in bytes of physical sectorBPCLUS  DB      ?       ; Sectors/Alloc unitBPRES   DW      ?       ; Number of reserved sectorsBPFTCNT DB      ?       ; Number of FATsBPDRCNT DW      ?       ; Number of directory entriesBPSCCNT DW      ?       ; Total number of sectorsBPMEDIA DB      ?       ; Media descriptor byteBPFTSEC DW      ?       ; Number of sectors taken up by one FATBPBLOCK ENDS;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;BREAK ;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;; Field definition for I/O buffer informationBUFFINFO        STRUCNEXTBUF         DD      ?       ; Pointer to next buffer in list; The next two items are often refed as a wordBUFDRV          DB      ?       ; Logical drive # assoc with buffer FF = freeBUFDIRTY        DB      ?       ; Dirty flagBUFPRI          DB      ?       ; Buffer selection priority (see EQUs below)VISIT           DB      ?       ; Visit flag for buffer pool scansBUFSECNO        DW      ?       ; Sector number of buffer; The next two items are often refed as a wordBUFWRTCNT       DB      ?       ; For FAT sectors, # times sector written outBUFWRTINC       DB      ?       ; "   "     "   , # sectors between each writeBUFDRVDP        DD      ?       ; Pointer to drive parametersBUFFINFO        ENDSBUFINSIZ        EQU     SIZE BUFFINFO                                ; Size of structure in bytesFREEPRI EQU     0LBRPRI  EQU     2               ; Last byte of buffer readLBWPRI  EQU     4               ; Last byte writtenRPRI    EQU     6               ; Read but not last byteWPRI    EQU     8               ; Written but not last byteDIRPRI  EQU     15              ; Directory SectorFATPRI  EQU     30              ; FAT sector;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;BREAK ; Location of user registers relative user stack pointeruser_environ    STRUCuser_AX     DW      ?user_BX     DW      ?user_CX     DW      ?user_DX     DW      ?user_SI     DW      ?user_DI     DW      ?user_BP     DW      ?user_DS     DW      ?user_ES     DW      ?user_IP     DW      ?user_CS     DW      ?user_F      DW      ?user_environ    ENDSBREAK INTTAB          EQU     20HINTBASE         EQU     4 * inttabENTRYPOINT      EQU     INTBASE+40H        IF      ALTVECTALTTAB  EQU     0F0HALTBASE EQU     4 * ALTTAB        ENDIF;; interrupt assignments;        IF      NOT ALTVECTint_abort           EQU     INTTAB          ; abort processint_command         EQU     int_abort+1     ; call MSDOSint_terminate       EQU     int_abort+2     ; int to terminate addressint_ctrl_c          EQU     int_abort+3     ; ^c trapperint_fatal_abort     EQU     int_abort+4     ; hard disk errorint_disk_read       EQU     int_abort+5     ; logical sector disk readint_disk_write      EQU     int_abort+6     ; logical sector disk writeint_keep_process    EQU     int_abort+7     ; terminate program and stay resident;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;int_spooler         EQU     int_abort+8     ; spooler callint_fastcon         EQU     int_abort+9     ; fast CON interrupt;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;        ELSEint_abort           EQU     INTTAB          ; abort processint_command         EQU     int_abort+1     ; call MSDOSint_terminate       EQU     ALTTAB          ; int to terminate addressint_ctrl_c          EQU     int_terminate+1 ; ^c trapperint_fatal_abort     EQU     int_terminate+2 ; hard disk errorint_disk_read       EQU     int_abort+5     ; logical sector disk readint_disk_write      EQU     int_abort+6     ; logical sector disk writeint_keep_process    EQU     int_abort+7     ; terminate program and stay resident;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;int_spooler         EQU     int_terminate+3 ; spooler callint_fastcon         EQU     int_abort+9     ; fast CON interrupt;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;        ENDIFaddr_int_abort          EQU    4 * int_abortaddr_int_command        EQU    4 * int_commandaddr_int_terminate      EQU    4 * int_terminateaddr_int_ctrl_c         EQU    4 * int_ctrl_caddr_int_fatal_abort    EQU    4 * int_fatal_abortaddr_int_disk_read      EQU    4 * int_disk_readaddr_int_disk_write     EQU    4 * int_disk_writeaddr_int_keep_process   EQU    4 * int_keep_process;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;addr_int_spooler        EQU    4 * int_spooleraddr_int_fastcon        EQU    4 * int_fastcon;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;BREAK ;  MSDOS partitions the disk into 4 sections:;;  phys sector 0:   +-------------------+;       |           | boot/reserved     |;       |           +-------------------+;       |           |  File allocation  |;       v           |      table(s)     |;                   |  (multiple copies |;                   |     are kept)     |;                   +-------------------+;                   |     Directory     |;                   +-------------------+;                   |     File space    |;                   +-------------------+;                   |   Unaddressable   |;                   |  (to end of disk) |;                   +-------------------+;; All partition boundaries are sector boundaries.  The size of the FAT is; adjusted to maximize the file space addressable.BREAK ;;       +---------------------------+;       |  (12 BYTE) filename/ext   |       0       0;       +---------------------------+;       |     (BYTE) attributes     |       11      B;       +---------------------------+;       |    (10 BYTE) reserved     |       12      C;       +---------------------------+;       | (WORD) time of last write |       22      16;       +---------------------------+;       | (WORD) date of last write |       24      18;       +---------------------------+;       |   (WORD) First cluster    |       26      1A;       +---------------------------+;       |     (DWORD) file size     |       28      1C;       +---------------------------+;;   First byte of filename  = E5 -> free directory entry;                           = 00 -> end of allocated directory;   Time:   Bits 0-4=seconds/2, bits 5-10=minute, 11-15=hour;   Date:   Bits 0-4=day, bits 5-8=month, bits 9-15=year-1980;dir_entry   STRUCdir_name    DB      11 DUP (?)          ; file namedir_attr    DB      ?                   ; attribute bitsdir_pad     DB      10 DUP (?)          ; reserved for expansiondir_time    DW      ?                   ; time of last writedir_date    DW      ?                   ; date of last writedir_first   DW      ?                   ; first allocation unit of filedir_size_l  DW      ?                   ; low 16 bits of file sizedir_size_h  DW      ?                   ; high 16 bits of file sizedir_entry   ENDSattr_read_only      EQU      1hattr_hidden         EQU      2hattr_system         EQU      4hattr_volume_id      EQU      8hattr_directory      EQU     10hattr_archive        EQU     20hattr_all            EQU     attr_hidden+attr_system+attr_directory                                        ; OR of hard attributes for FINDENTRYattr_ignore         EQU     attr_read_only+attr_archive                                        ; ignore this(ese) attribute(s)                                        ; during search first/nextattr_changeable     EQU     attr_read_only+attr_hidden+attr_system+attr_archive                                        ; changeable via CHMODBREAK ;; The File Allocation Table uses a 12-bit entry for each allocation unit on the; disk.  These entries are packed, two for every three bytes.  The contents of; entry number N is found by 1) multiplying N by 1.5; 2) adding the result to; the base address of the Allocation Table; 3) fetching the 16-bit word at this; address; 4) If N was odd (so that N*1.5 was not an integer), shift the word; right four bits; 5) mask to 12 bits (AND with 0FFF hex).  Entry number zero; is used as an end-of-file trap in the OS and is passed to the BIOS to help; determine disk format.  Entry 1 is reserved for future use.  The first; available allocation unit is assigned entry number two, and even though it is; the first, is called cluster 2.  Entries greater than 0FF8H are end of file; marks; entries of zero are unallocated.  Otherwise, the contents of a FAT; entry is the number of the next cluster in the file.;; Clusters with bad sectors are tagged with FF7H.  Any non-zero number would do; because these clusters show as allocated, but are not part of any allocation; chain and thus will never be allocated to a file.  A particular number is; selected so that disk checking programs know what to do (ie.  a cluster with; entry FF7H which is not in a chain is not an error).BREAK ;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;DIRSTRLEN       EQU     64      ; Max length in bytes of directory stringsdpb     STRUCdpb_drive           DB      ?   ; Logical drive # assoc with DPB (A=0,B=1,...)dpb_UNIT            DB      ?   ; Driver unit number of DPBdpb_sector_size     DW      ?   ; Size of physical sector in bytesdpb_cluster_mask    DB      ?   ; Sectors/cluster - 1dpb_cluster_shift   DB      ?   ; Log2 of sectors/clusterdpb_first_FAT       DW      ?   ; Starting record of FATsdpb_FAT_count       DB      ?   ; Number of FATs for this drivedpb_root_entries    DW      ?   ; Number of directory entriesdpb_first_sector    DW      ?   ; First sector of first clusterdpb_max_cluster     DW      ?   ; Number of clusters on drive + 1dpb_FAT_size        DB      ?   ; Number of records occupied by FATdpb_dir_sector      DW      ?   ; Starting record of directorydpb_driver_addr     DD      ?   ; Pointer to driverdpb_media           DB      ?   ; Media bytedpb_first_access    DB      ?   ; This is initialized to -1 to force a media                                ; check the first time this DPB is useddpb_next_dpb        DD      ?   ; Pointer to next Drive parameter blockdpb_current_dir     DW      ?   ; Cluster number of start of current directory                                ; 0 indicates root, -1 indicates invalid                                ; (disk ? changed)dpb_dir_text        DB      DIRSTRLEN DUP(?)                                ; ASCIZ string of current directorydpb     ENDSDPBSIZ  EQU     SIZE dpb        ; Size of the structure in bytesDSKSIZ  =       dpb_max_cluster ; Size of disk (temp used during init only);                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;BREAK ;; Field definition for FCBs; The FCB has the following structure:;;       +---------------------------+;       |   Drive indicator(byte)   |;       +---------------------------+;       |    Filename (8 chars)     |;       +---------------------------+;       |    Extension (3 chars)    |;       +---------------------------+;       |   Current Extent(word)    |;       +---------------------------+;       |    Record size (word)     |;       +---------------------------+;       |    File Size (2 words)    |;       +---------------------------+;       |       Date of write       |;       +---------------------------+;       |       Time of write       |;       +---------------------------+;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;;       | Flags:                    |;       |  bit 7=0 file/1 device    |;       |  bit 6=0 if dirty         |;       |  bits 0-5 deviceid        |;       +---------------------------+;       |   first cluster in file   |;       +---------------------------+;       | position of last cluster  |;       +---------------------------+;       |   last cluster accessed   |   12 bit-+--- packed in 3 bytes;       +---------------------------+          |;       |     parent directory      |   <------+;       +---------------------------+;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;       |    next record number     |;       +---------------------------+;       |   random record number    |;       +---------------------------+;sys_fcb     STRUCfcb_drive   DB      ?fcb_name    DB      8 DUP (?)fcb_ext     DB      3 DUP (?)fcb_EXTENT  DW      ?fcb_RECSIZ  DW      ?       ; Size of record (user settable)fcb_FILSIZ  DW      ?       ; Size of file in bytes; used with the following                            ; wordfcb_DRVBP   DW      ?       ; BP for SEARCH FIRST and SEARCH NEXTfcb_FDATE   DW      ?       ; Date of last writingfcb_FTIME   DW      ?       ; Time of last writing;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;fcb_DEVID   DB      ?       ; Device ID number, bits 0-5 if file.                            ; bit 7=0 for file, bit 7=1 for I/O device                            ; If file, bit 6=0 if dirty                            ; If I/O device, bit 6=0 if EOF (input)                            ;               Bit 5=1 if Raw mode                            ;               Bit 0=1 if console input device                            ;               Bit 1=1 if console output device                            ;               Bit 2=1 if null device                            ;               Bit 3=1 if clock devicefcb_FIRCLUS DW      ?       ; First cluster of filefcb_CLUSPOS DW      ?       ; Position of last cluster accessedfcb_LSTCLUS DW      ?       ; Last cluster accessed and directory            DB      ?       ; pack 2 12 bit numbers into 24 bits...;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;fcb_NR      DB      ?       ; Next recordfcb_RR      DB      4 DUP (?)               ; Random recordsys_fcb     ENDSFILDIRENT       = fcb_FILSIZ            ; Used only by SEARCH FIRST and                                        ; SEARCH NEXT;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;devid_file_clean        EQU     40h     ; true if file and not writtendevid_file_mask_drive   EQU     3Fh     ; mask for drive numberdevid_device            EQU     80h     ; true if a devicedevid_device_EOF        EQU     40h     ; true if end of file reacheddevid_device_raw        EQU     20h     ; true if in raw modedevid_device_special    EQU     10h     ; true if special devicedevid_device_clock      EQU     08h     ; true if clock devicedevid_device_null       EQU     04h     ; true if null devicedevid_device_con_out    EQU     02h     ; true if console outputdevid_device_con_in     EQU     01h     ; true if consle input;; structure of devid field as returned by IOCTL is:;;       BIT     7   6   5   4   3   2   1   0;             |---|---|---|---|---|---|---|---|;             | I | E | R | S | I | I | I | I |;             | S | O | A | P | S | S | S | S |;             | D | F | W | E | C | N | C | C |;             | E |   |   | C | L | U | O | I |;             | V |   |   | L | K | L | T | N |;             |---|---|---|---|---|---|---|---|;       ISDEV = 1 if this channel is a device;             = 0 if this channel is a disk file;;       If ISDEV = 1;;             EOF = 0 if End Of File on input;             RAW = 1 if this device is in Raw mode;                 = 0 if this device is cooked;             ISCLK = 1 if this device is the clock device;             ISNUL = 1 if this device is the null device;             ISCOT = 1 if this device is the console output;             ISCIN = 1 if this device is the console input;;       If ISDEV = 0;             EOF = 0 if channel has been written;             Bits 0-5  are  the  block  device  number  for;                 the channel (0 = A, 1 = B, ...);devid_ISDEV     EQU     80hdevid_EOF       EQU     40hdevid_RAW       EQU     20hdevid_SPECIAL   EQU     10Hdevid_ISCLK     EQU     08hdevid_ISNUL     EQU     04hdevid_ISCOT     EQU     02hdevid_ISCIN     EQU     01hdevid_block_dev EQU     1Fh             ; mask for block device number;; find first/next buffer;find_buf    STRUCfind_buf_sattr      DB  ?           ; attribute of searchfind_buf_drive      DB  ?           ; drive of searchfind_buf_name       DB  11 DUP (?)  ; formatted namefind_buf_LastEnt    DW  ?           ; LastEntfind_buf_ThisDPB    DD  ?           ; This DPBfind_buf_DirStart   DW  ?           ; DirStart;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;find_buf_attr       DB  ?           ; attribute foundfind_buf_time       DW  ?           ; timefind_buf_date       DW  ?           ; datefind_buf_size_l     DW  ?           ; low(size)find_buf_size_h     DW  ?           ; high(size)find_buf_pname      DB  13 DUP (?)  ; packed namefind_buf    ENDSBREAK ;; Process data block (otherwise known as program header);FilPerProc          EQU     20Process_data_block  STRUCPDB_Exit_Call       DW      ?           ; INT int_abort system terminatePDB_block_len       DW      ?           ; size of execution block                    DB      ?PDB_CPM_Call        DB  5 DUP (?)       ; ancient call to systemPDB_Exit            DD      ?           ; pointer to exit routinePDB_Ctrl_C          DD      ?           ; pointer to ^C routinePDB_Fatal_abort     DD      ?           ; pointer to fatal error;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;PDB_Parent_PID      DW      ?           ; PID of parent (terminate PID)PDB_JFN_Table       DB  FilPerProc DUP (?)                                        ; indices into system table;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;PDB_environ         DW      ?           ; seg addr of environment;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;PDB_User_stack      DD      ?           ; stack of self during system callsPDB_PAD1            DB      1Eh DUP (?);                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;PDB_Call_system     DB      5 DUP (?)   ; portable method of system call;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;PDB_PAD2            DB      6h DUP (?)  ;;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;Process_data_block  ENDSBREAK ;; EXEC arg block - load/go program;;; The following get used as arguments to the EXEC system call.  They indicate; whether or not the program is executed or whether or not a program header; gets created.;exec_func_no_execute    EQU 1           ; no execute bitexec_func_overlay       EQU 2           ; overlay bitExec0           STRUCExec0_environ   DW      ?               ; seg addr of environmentExec0_com_line  DD      ?               ; pointer to asciz command lineExec0_5C_FCB    DD      ?               ; default fcb at 5CExec0_6C_FCB    DD      ?               ; default fcb at 6CExec0           ENDSExec1           STRUCExec1_environ   DW      ?               ; seg addr of environmentExec1_com_line  DD      ?               ; pointer to asciz command lineExec1_5C_FCB    DD      ?               ; default fcb at 5CExec1_6C_FCB    DD      ?               ; default fcb at 6CExec1_SP        DW      ?               ; stack pointer of programExec1_SS        DW      ?               ; stack seg register of programExec1_IP        DW      ?               ; entry point IPExec1_CS        DW      ?               ; entry point CSExec1           ENDSExec3           STRUCExec3_load_addr DW      ?               ; seg address of load pointExec3_reloc_fac DW      ?               ; relocation factorExec3           ENDS;; Exit codes in upper byte;Exit_terminate      EQU     0Exit_abort          EQU     0Exit_Ctrl_C         EQU     1Exit_Hard_Error     EQU     2Exit_Keep_process   EQU     3;; EXE file header;EXE_file    STRUCexe_signature   DW  ?                   ; must contain 4D5A  (yay zibo!)exe_len_mod_512 DW  ?                   ; low 9 bits of lengthexe_pages       DW  ?                   ; number of 512b pages in fileexe_rle_count   DW  ?                   ; count of reloc entriesexe_par_dir     DW  ?                   ; number of paragraphs before imageexe_min_BSS     DW  ?                   ; minimum number of para of BSSexe_max_BSS     DW  ?                   ; max number of para of BSSexe_SS          DW  ?                   ; stack of imageexe_SP          DW  ?                   ; SP of imageexe_chksum      DW  ?                   ; checksum  of file (ignored)exe_IP          DW  ?                   ; IP of entryexe_CS          DW  ?                   ; CS of entryexe_rle_table   DW  ?                   ; byte offset of reloc tableexe_iov         DW  ?                   ; overlay number (0 for root)exe_sym_tab     DD  ?                   ; offset of symbol table in fileEXE_file    ENDSexe_valid_signature     EQU 5A4Dhexe_valid_old_signature EQU 4D5Ahsymbol_entry    STRUCsym_value       DD  ?sym_type        DW  ?sym_len         DB  ?sym_name        DB  255 dup (?)symbol_entry    ENDSBREAK ;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;;; system file table;sft             STRUCsft_link        DD      ?sft_count       DW      ?               ; number of entriessft_table       DW      ?               ; beginning of array of the followingsft             ENDS;; system file table entry;sf_entry        STRUCsf_ref_count    DB      ?               ; number of processes sharing fcbsf_mode         DB      ?               ; mode of accesssf_attr         DB      ?               ; attribute of filesf_fcb          DB      (SIZE sys_fcb) DUP (?)                                        ; actual FCBsf_entry        ENDSsf_default_number   EQU     5h;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;BREAK ;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;;; arena item;arena   STRUCarena_signature     DB  ?               ; 4D for valid item, 5A for last itemarena_owner         DW  ?               ; owner of arena itemarena_size          DW  ?               ; size in paragraphs of itemarena   ENDSarena_owner_system  EQU 0               ; free block indicationarena_signature_normal  EQU 4Dh         ; valid signature, not end of arenaarena_signature_end     EQU 5Ah         ; valid signature, last block in arena;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;BREAK mi_INT          EQU     0CDhmi_Long_JMP     EQU     0EAhmi_Long_CALL    EQU     09Ahmi_Long_RET     EQU     0CBhBREAK stdin       EQU     0stdout      EQU     1stderr      EQU     2stdaux      EQU     3stdprn      EQU     4BREAK open_for_read   EQU 0open_for_write  EQU 1open_for_both   EQU 2BREAK ;; XENIX calls all return error codes through AX.  If an error occurred then the; carry bit will be set and the error code is in AX.  If no error occurred then; the carry bit is reset and AX contains returned info.;no_error_occurred               EQU     0                                        ?error_invalid_function          EQU     1error_file_not_found            EQU     2error_path_not_found            EQU     3error_too_many_open_files       EQU     4error_access_denied             EQU     5error_invalid_handle            EQU     6error_arena_trashed             EQU     7error_not_enough_memory         EQU     8error_invalid_block             EQU     9error_bad_environment           EQU     10error_bad_format                EQU     11error_invalid_access            EQU     12error_invalid_data              EQU     13;**** unused                    EQU     14error_invalid_drive             EQU     15error_current_directory         EQU     16error_not_same_device           EQU     17error_no_more_files             EQU     18alloc_not_enough_memory         EQU     error_not_enough_memoryalloc_arena_trashed             EQU     error_arena_trashedclose_invalid_handle            EQU     error_invalid_handleclose_invalid_function          EQU     error_invalid_functionchdir_path_not_found            EQU     error_path_not_foundchmod_path_not_found            EQU     error_path_not_foundchmod_access_denied             EQU     error_access_deniedchmod_invalid_function          EQU     error_invalid_functioncreat_access_denied             EQU     error_access_deniedcreat_path_not_found            EQU     error_path_not_foundcreat_too_many_open_files       EQU     error_too_many_open_filescurdir_invalid_drive            EQU     error_invalid_drivedealloc_invalid_block           EQU     error_invalid_blockdealloc_arena_trashed           EQU     error_arena_trasheddup_invalid_handle              EQU     error_invalid_handledup_too_many_open_files         EQU     error_too_many_open_filesdup2_invalid_handle             EQU     error_invalid_handleexec_invalid_function           EQU     error_invalid_functionexec_bad_environment            EQU     error_bad_environmentexec_bad_format                 EQU     error_bad_formatexec_not_enough_memory          EQU     error_not_enough_memoryexec_file_not_found             EQU     error_file_not_foundfiletimes_invalid_function      EQU     error_invalid_functionfiletimes_invalid_handle        EQU     error_invalid_handlefindfirst_file_not_found        EQU     error_file_not_foundfindfirst_no_more_files         EQU     error_no_more_filesfindnext_no_more_files          EQU     error_no_more_filesinternational_invalid_function  EQU     error_invalid_functionioctl_invalid_handle            EQU     error_invalid_handleioctl_invalid_function          EQU     error_invalid_functionioctl_invalid_data              EQU     error_invalid_datalseek_invalid_handle            EQU     error_invalid_handlelseek_invalid_function          EQU     error_invalid_functionmkdir_path_not_found            EQU     error_path_not_foundmkdir_access_denied             EQU     error_access_deniedopen_invalid_access             EQU     error_invalid_accessopen_file_not_found             EQU     error_file_not_foundopen_access_denied              EQU     error_access_deniedopen_too_many_open_files        EQU     error_too_many_open_filesread_invalid_handle             EQU     error_invalid_handleread_access_denied              EQU     error_access_deniedrename_file_not_found           EQU     error_file_not_foundrename_not_same_device          EQU     error_not_same_devicerename_access_denied            EQU     error_access_deniedrmdir_path_not_found            EQU     error_path_not_foundrmdir_access_denied             EQU     error_access_deniedrmdir_current_directory         EQU     error_current_directorysetblock_invalid_block          EQU     error_invalid_blocksetblock_arena_trashed          EQU     error_arena_trashedsetblock_not_enough_memory      EQU     error_not_enough_memorysetblock_invalid_function       EQU     error_invalid_functionunlink_file_not_found           EQU     error_file_not_foundunlink_access_denied            EQU     error_access_deniedwrite_invalid_handle            EQU     error_invalid_handlewrite_access_denied             EQU     error_access_deniedBREAK ABORT                           EQU 0   ;  0      0STD_CON_INPUT                   EQU 1   ;  1      1STD_CON_OUTPUT                  EQU 2   ;  2      2STD_AUX_INPUT                   EQU 3   ;  3      3STD_AUX_OUTPUT                  EQU 4   ;  4      4STD_PRINTER_OUTPUT              EQU 5   ;  5      5RAW_CON_IO                      EQU 6   ;  6      6RAW_CON_INPUT                   EQU 7   ;  7      7STD_CON_INPUT_NO_ECHO           EQU 8   ;  8      8STD_CON_STRING_OUTPUT           EQU 9   ;  9      9STD_CON_STRING_INPUT            EQU 10  ; 10      ASTD_CON_INPUT_STATUS            EQU 11  ; 11      BSTD_CON_INPUT_FLUSH             EQU 12  ; 12      CDISK_RESET                      EQU 13  ; 13      DSET_DEFAULT_DRIVE               EQU 14  ; 14      EFCB_OPEN                        EQU 15  ; 15      FFCB_CLOSE                       EQU 16  ; 16     10DIR_SEARCH_FIRST                EQU 17  ; 17     11DIR_SEARCH_NEXT                 EQU 18  ; 18     12FCB_DELETE                      EQU 19  ; 19     13FCB_SEQ_READ                    EQU 20  ; 20     14FCB_SEQ_WRITE                   EQU 21  ; 21     15FCB_CREATE                      EQU 22  ; 22     16FCB_RENAME                      EQU 23  ; 23     17GET_DEFAULT_DRIVE               EQU 25  ; 25     19SET_DMA                         EQU 26  ; 26     1A;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;GET_DEFAULT_DPB                 EQU 31  ; 31     1F;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;FCB_RANDOM_READ                 EQU 33  ; 33     21FCB_RANDOM_WRITE                EQU 34  ; 34     22GET_FCB_FILE_LENGTH             EQU 35  ; 35     23GET_FCB_POSITION                EQU 36  ; 36     24SET_INTERRUPT_VECTOR            EQU 37  ; 37     25CREATE_PROCESS_DATA_BLOCK       EQU 38  ; 38     26FCB_RANDOM_READ_BLOCK           EQU 39  ; 39     27FCB_RANDOM_WRITE_BLOCK          EQU 40  ; 40     28PARSE_FILE_DESCRIPTOR           EQU 41  ; 41     29GET_DATE                        EQU 42  ; 42     2ASET_DATE                        EQU 43  ; 43     2BGET_TIME                        EQU 44  ; 44     2CSET_TIME                        EQU 45  ; 45     2DSET_VERIFY_ON_WRITE             EQU 46  ; 46     2E; Extended functionality groupGET_DMA                         EQU 47  ; 47     2FGET_VERSION                     EQU 48  ; 48     30KEEP_PROCESS                    EQU 49  ; 49     31;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;GET_DPB                         EQU 50  ; 50     32;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;SET_CTRL_C_TRAPPING             EQU 51  ; 51     33GET_INDOS_FLAG                  EQU 52  ; 52     34GET_INTERRUPT_VECTOR            EQU 53  ; 53     35GET_DRIVE_FREESPACE             EQU 54  ; 54     36CHAR_OPER                       EQU 55  ; 55     37INTERNATIONAL                   EQU 56  ; 56     38; XENIX CALLS;   Directory GroupMKDIR                           EQU 57  ; 57     39RMDIR                           EQU 58  ; 58     3ACHDIR                           EQU 59  ; 59     3B;   File GroupCREAT                           EQU 60  ; 60     3COPEN                            EQU 61  ; 61     3DCLOSE                           EQU 62  ; 62     3EREAD                            EQU 63  ; 63     3FWRITE                           EQU 64  ; 64     40UNLINK                          EQU 65  ; 65     41LSEEK                           EQU 66  ; 66     42CHMOD                           EQU 67  ; 67     43IOCTL                           EQU 68  ; 68     44XDUP                            EQU 69  ; 69     45XDUP2                           EQU 70  ; 70     46CURRENT_DIR                     EQU 71  ; 71     47;    Memory GroupALLOC                           EQU 72  ; 72     48DEALLOC                         EQU 73  ; 73     49SETBLOCK                        EQU 74  ; 74     4A;    Process GroupEXEC                            EQU 75  ; 75     4BEXIT                            EQU 76  ; 76     4CWAIT                            EQU 77  ; 77     4DFIND_FIRST                      EQU 78  ; 78     4E;   Special GroupFIND_NEXT                       EQU 79  ; 79     4F; SPECIAL SYSTEM GROUP;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;SET_CURRENT_PDB                 EQU 80  ; 80     50GET_CURRENT_PDB                 EQU 81  ; 81     51GET_IN_VARS                     EQU 82  ; 82     52SETDPB                          EQU 83  ; 83     53;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;GET_VERIFY_ON_WRITE             EQU 84  ; 84     54;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;                                                                          ;DUP_PDB                         EQU 85  ; 85     55;                                                                          ;;            C  A  V  E  A  T     P  R  O  G  R  A  M  M  E  R             ;;----+----+----+----+----+----+----+----+----+----+----+----+----+----+----;RENAME                          EQU 86  ; 86     56FILE_TIMES                      EQU 87  ; 87     57SET_OEM_HANDLER                 EQU 248 ; 248    F8OEM_C1                          EQU 249 ; 249    F9OEM_C2                          EQU 250 ; 250    FAOEM_C3                          EQU 251 ; 251    FBOEM_C4                          EQU 252 ; 252    FCOEM_C5                          EQU 253 ; 253    FDOEM_C6                          EQU 254 ; 254    FEOEM_C7                          EQU 255 ; 255    FFSUBTTL

 

 

 
上一篇:汇编源码--DRIVER  下一篇:鼠标控制CD-Audio播放程序