AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > 汇编语言

汇编源码--frespace

51自学网 http://www.51zixue.net
;  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 calldoscall equ 21h ;DOS interrupt numberdgroup group datareadatarea segment para public 'DATA'ah_ret dw ?  ;ah to be sent backal_ret dw ?  ;al to be sent backbh_ret dw ?  ;bh to be sent backbl_ret dw ?  ;bl to be sent backch_ret dw ?  ;ch to be sent backcl_ret dw ?  ;cl to be sent backdatarea ENDS;cseg     segment 'CODE'     assume  cs:cseg     public frespacefrespace    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 sentfrespace    endp;-----------------------------------------------------------------------cseg ends end   ;end for assembler

 

 

 
上一篇:汇编源码--fxn  下一篇:汇编源码--free