汇编源码系列之frespace

这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究.......

; frespace.ASM  10/04/84 gwf
;
;
;
;  CALL FRESPACE(AH,AL,BH,BL,CH,CL). CL SHOULD BE 0 for default
;   drive 1 for A, 2 for B, 3 for C, etc. The value of the
;   other variables does not matter. They will come back
;   with a meaningful value.
;
;      AN EXAMPLE PROGRAM:
;
;   10 defint a-z
;   20 color 7,1:cls
;   30 test1=1:ah=0:al=0:bh=0:ch=0:cl=1:test2=2
;   35 INPUT"DRIVE 0=DEFAULT, 1=A, 2=B, 3=C";CL
;   37 PRINT"JUST BEFORE CALL"
;   40 CALL FRESPACE(AH,AL,BH,BL,CH,CL)
;   45 PRINT"JUST AFTER CALL"
;   50 PRINT" AH=";AH;" AL=";AL;" BH=";BH;" BL=";BL;" CH=";CH;" CL=";CL;
;   60 UFREE!=256*AH+AL
;   70 UBYTES!=256*BH+BL
;   80 USECTOR!=256*CH+CL
;   90 PRINT"UFREE!=";UFREE!;" UBYTES!=";UBYTES!;"  USECTOR!=";USECTOR!
;   100 FRESPACE!=UFREE!*UBYTES!*USECTOR!
;   110 PRINT"FRESPACE!=";FRESPACE!
;   120 PRINT"THIS SHOULD BE 1",TEST1
;   130 PRINT"THIS SHOULD BE 2",TEST2
;
get_spa equ  36h  ;Get disk free space function call
doscall equ  21h  ;DOS interrupt number
dgroup  group  datarea
datarea segment para public 'DATA'
ah_ret  dw  ?    ;ah to be sent back
al_ret  dw  ?    ;al to be sent back
bh_ret  dw  ?    ;bh to be sent back
bl_ret  dw  ?    ;bl to be sent back
ch_ret  dw  ?    ;ch to be sent back
cl_ret  dw  ?    ;cl to be sent back
datarea ENDS
;
cseg    segment 'CODE'
    assume cs:cseg
    public frespace
frespace  proc  far
  push  bp    ;BP from BASIC
  mov  bp,sp    ;set base for parm list
  push  ds    ;DS from basic work area
  push  es    ;ES from basic work area
  mov  ax,datarea  ;establish data addressability
  mov  ds,ax    ;now DS is local data
  assume  ds:datarea
;
;
;
;
  push  bp
  sub  ax,ax
  mov  si,ss:[bp+6]  ;get addr of parameter
  mov  al,es:[si]  ;get value of parm
  mov  dx,ax    ;dl contains the drive number on call
        ;dh will be zero
  mov ah,get_spa   ;get space function number
  int doscall    ;Call DOS
; Move the values into local work area to prepare to send back to basic
  xchg  dx,ax    ;must have a word. Want to zero out DH.
  sub  ax,ax    ; produce the zero
  xchg  dx,ax    ; DX is now zero.
        ; DH is what we really want as zero.
  mov  dl,ah    ;want to send back a byte
  mov  ah_ret,dx  ;  prepare to return ah
  mov  dl,al    ;want to send back a byte
  mov  al_ret,dx  ;  prepare to return al
  mov  dl,bh    ;want to send back a byte
  mov  bh_ret,dx  ;  prepare to return bh
  mov  dl,bl    ;want to send back a byte
  mov  bl_ret,dx  ;  prepare to return bl
  mov  dl,ch    ;want to send back a byte
  mov  ch_ret,dx  ;  prepare to return ch
  mov  dl,cl    ;want to send back a byte
  mov  cl_ret,dx  ;  prepare to return cl
; Go back
  pop  bp    ;get back Basic's workspace
  mov  ax,cl_ret
  mov  si,ss:[bp+6]
  mov  es:[si],ax  ;return cl
  mov  ax,ch_ret
  mov  si,ss:[bp+8]
  mov  es:[si],ax  ;return ch
  mov  ax,bl_ret
  mov  si,ss:[bp+10]
  mov  es:[si],ax  ;return bl
  mov  ax,bh_ret
  mov  si,ss:[bp+12]
  mov  es:[si],ax  ;return bh
  mov  ax,al_ret
  mov  si,ss:[bp+14]
  mov  es:[si],ax  ;return al
  mov  ax,ah_ret
  mov  si,ss:[bp+16]
  mov  es:[si],ax  ;return ah
;
  pop  es
  pop  ds
  pop  bp
  ret  12    ;return to basic 6 parameters were sent
frespace  endp
;-----------------------------------------------------------------------
cseg  ends
  end      ;end for assembler

时间: 2024-08-01 06:29:15

汇编源码系列之frespace的相关文章

汇编源码系列之clear

这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究....... name clear page 55,132 title 'CLEAR --- control PC display';; CLEAR Utility to clear display; and set character attributes;; Ray Duncan, Uncopyright (u) August 1983; This

汇编源码系列之clock

这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究....... CGROUP GROUP VECTOR,CODESEGVECTOR SEGMENT AT 0H DB 6CH DUP(?) ;FILLERTIME_LO DW ? ;DOS TIMETIME_HI DW ? ;DOS TIMEVEC_IP DW ;CLOCK UPDATE VECTOR IPVEC_CS DW ;CLOCK UPDATE

汇编源码系列之charop

这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究....... title MSDOS 2.00 Function Library for Lattice Csubttl -;;;;FUNCTION: Sets and returns switch char-;; acter and device availability.;;;;;;CALL:;;;; ret= _charop(al,dl);; i

汇编源码系列之clean

这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究....... name clean page 55,132 title 'CLEAN --- Filter text file';; CLEAN --- a utility to filter text files.; This program removes all control codes except; for line feeds, carr

汇编源码系列之cleanf

这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究....... name cleanf page 55,132 title 'CLEANF - Filter text file';; CLEANF - a DOS 2.0 filter for word processing document files.;; CLEAN.ASM Originally written by Ray Duncan; Co

汇编源码系列之burnout

这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究....... COMMENT * Demo (and semi-useful) program to read/set burnout device parameters. Usage: burnout [ticks] [C+-] [V+-] [H+-] Parameters can be separated by almost anything. W

汇编源码系列之calc

这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究....... PAGE ,132 TITLE CALCCGROUP GROUP CODESEGCODESEG SEGMENT PARA PUBLIC 'CODE' ASSUME CS:CGROUP,DS:CGROUP,ES:CGROUP PUBLIC CALC ORG 100HCALC PROC FAR JMP START;--------------

汇编源码系列之char

这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究....... ctable segment para public 'DATA db 9 dup(' ') db 9,10,' ',12,13 db 13 dup(' ') db 27 db 4 dup(' ') db ' !"#$%&',39,'()*+,-./0123456789:;<=>?@' db 'ABCDEFGHIJKL

汇编源码系列之brk

这个都是过去DOS时代的汇编源码,虽然已经过去了,但是对于学习汇编还是有帮助的,汇编语言只是程序员一门基础语言,大多人掌握即可,不一定要深入研究....... PGROUP Group PROGDGROUP Group DATADATA Segment Public 'DATA'public brkflagbrkflag DW 0DATA endsPROG Segment Para Public 'PROG'public TrapBreaassume cs:PGROUP,DS:DGROUPTra