WEB开发网
开发学院软件开发汇编语言 汇编源码系列之frespace 阅读

汇编源码系列之frespace

 2008-04-29 09:33:34 来源:WEB开发网   
核心提示:这个都是过去DOS时代的汇编源码,虽然已经过去了,汇编源码系列之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


Tags:汇编 源码 系列

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接