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 + -
显示快捷键?