absdisk.asm

来自「国外网站上的一些精典的C程序」· 汇编 代码 · 共 73 行

ASM
73
字号
        page    55, 132;;  ABSDISK.ASM;;  Originally published as part of The MicroFirm Function Library;  This version released to the public domain by the author, Bob Stout;;  Requires MASM 5.1 or later or equivalent;;  Assemble with:       MASM /Mx /z ...;                       TASM /jMASM /mx /z ...;%       .MODEL  memodel,C               ;Add model support via                                        ;command line macro,                                        ;e.g. MASM /Dmemodel=LARGE ...        extrn   _osmajor:BYTE        public  absdisk        .DATAstart   dw      ?fill    dw      0number  dw      ?buf     dw      ?,?        .CODEabsdisk PROC USES SI DI BP, func:BYTE, drive:WORD, num_sec:WORD, start_sec:WORD, buffer:PTR        mov     AX,drive        ;Get drive number in AL        mov     AH,_osmajor     ;Load OS version in AH        mov     CX,num_sec      ;Set up regs for DOS 3 call        mov     DX,start_sec    IF  @DataSize        push    DS              ;Save DS in L & C models        lds     BX,buffer    ELSE        mov     BX,buffer    ENDIF        cmp     AH,4            ;DOS 4+?        jb      doint           ;No, skip it        mov     start,DX        ;Yes, fill in DCB structure        mov     number,CX        mov     buf,BX        mov     buf+2,DS        mov     cx,-1    IF  @DataSize               ;Point to DCB        mov     BX,@Data        mov     DS,BX    ENDIF        mov     bx,OFFSET startdoint:  mov     AH,func         ;Read or Write?        cmp     AH,25h        jne     skip_1        int     25h             ;Read sector        jmp     skip_3skip_1: cmp     AH,26h        jne     skip_2        int     26h             ;Write sector        jmp     skip_3skip_2: stc                     ;Invalid command        mov     AX,-1skip_3: jc      bye             ;Error?        mov     AX,0            ;No, return SUCCESSbye:    add     SP,2            ;Int 25h leave the flags on the stack    IF  @DataSize        pop     DS              ;Restore DS in L & C models    ENDIF        retabsdisk ENDP          end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?