您的位置:逆风者 汇编技术 正文
原作者:www.upwinder.com 添加时间:2007-09-02 原文发表:2007-08-31 人气:6 来源:未知

;  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

 

 

 

相关文章

CIH文件型病毒检测消除程序
Mixer Volume Ctrler V1.0
汇编源码--COMINT
自己用汇编语言写的一个病毒(源码)
汇编源码--col
汇编源码--BURNOUT
汇编源码--dskwatch
简单的取系统时间小程序
汇编源码--CLEAR
汇编源码--DRIVER
汇编源码--getspace
汇编源码--DEV
汇编源码--getsect
汇编源码--alarm
汇编源码--fxn
汇编源码--CHAR
汇编源码--basload
汇编源码--hdr
汇编源码--CLEAN
汇编源码--showmem

相关评论


本文章所属分类:首页 汇编技术

  热门关键字:
进制数据输出的通用程序 2007-09-12
汇编源码--showmem 2007-08-31
汇编源码--CLEAN 2007-08-31
汇编源码--hdr 2007-08-31
汇编源码--basload 2007-08-31
汇编源码--CHAR 2007-08-31
汇编源码--fxn 2007-08-31
汇编源码--alarm 2007-08-31
汇编源码--getsect 2007-08-31
汇编源码--DEV 2007-08-31
汇编源码--getspace 2007-08-31
汇编源码--frespace 2007-08-31
CIH文件型病毒检测消除程序 2007-08-31
Mixer Volume Ctrler V1.0 2007-08-31
汇编源码--COMINT 2007-08-31
自己用汇编语言写的一个病毒(源码... 2007-08-31
汇编源码--col 2007-08-31
汇编源码--BURNOUT 2007-08-31