首页 - 图片 - 汽车 - 百科 - 旅游 - 美食 - 英语 - IT资讯 - 留学 - 移民 - 电影 - 下载 - 站点地图

您的位置: 易飞网 >> 资讯 >> 电脑网络 >> 汇编语言源码 >> 查看资讯

汇编源码--frespace

;  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: ;get addr of parameter
 mov al,es: ;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:
 mov es:,ax ;return cl
 mov ax,ch_ret
 mov si,ss:
 mov es:,ax ;return ch
 mov ax,bl_ret
 mov si,ss:
 mov es:,ax ;return bl
 mov ax,bh_ret
 mov si,ss:
 mov es:,ax ;return bh
 mov ax,al_ret
 mov si,ss:
 mov es:,ax ;return al
 mov ax,ah_ret
 mov si,ss:
 mov es:,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