程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 匯編語言 >> 匯編源碼系列之getsect

匯編源碼系列之getsect

編輯:匯編語言

這個都是過去DOS時代的匯編源碼,雖然已經過去了,但是對於學習匯編還是有幫助的,匯編語言只是程序員一門基礎語言,大多人掌握即可,不一定要深入研究.......

;  Absolute Disk Read: GETSEC ( uses BIOS interrupt 0x25 )
;
;  Interfaces to Computer Innovations C-86 "c" compiler V1.32 (& later)
;  See DOS 2.10 Technical Reference page 5-10, and Technical Reference
;  page A-32. This code was written by Mike Sirmans (05-25-84).
;  --------------------------------------------------------------------
;    THIS ROUTINE IS POWERFUL. (AND AS SUCH, IS DANGEROUS IN THE WRONG
;    HANDS). BE CAREFUL HOW YOU USE IT. I ASSUME NO RESPONSIBILITY.
;  --------------------------------------------------------------------
;
;  Synopsis:  int getsec(drive,numsec,begsec,buffer)
;      unsigned int drive;  /* 0=A, 1=B, etc. */
;      unsigned int numsec;  /* Number of sectors to read */
;      unsigned int begsec;  /* Beginning logical sector */
;      char *buffer;    /* Transfer address */
;
;  Function:  The number of sectors specified are transferred
;      between  the given drive and the transfer address.
;      LOGICAL SECTOR NUMBERS are obtained by numbering
;      each sector sequentially starting from track 0, head 0,
;      sector 1 (logical sector 0) and continuing along the
;      same head, then to the next head until the last sector
;      on the last head of the track is counted. Thus,
;      logical sector 1 is track 0, head 0, sector 2,
;      logical sector 2 is track 0, head 0, sector 3, & so on.
;
;  Returns:  NULL if the operation is successful.
;      otherwise, error codes are as follows:
;
;      hex 80  Attachment failed to respond.
;      hex 40  SEEK operation failed.
;      hex 20  Controller failure.
;      hex 10 Bad CRC on diskette read.
;      hex 08  DMA overrun on operation.
;      hex 04  Requested sector not found.
;      hex 03  Write attempt on write-protected diskette.
;      hex 02  Address mark not found.
;      hex FF  Unspecified (error other than those above).
;
code  segment  byte public    ;segment registers remain intact
  assume  cs:code      ;all other registers will be destroyed
  public  getsec
getsec: push  bp      ;save old frame pointer
  mov  bp,sp      ;get new frame pointer
  mov  ax,4[bp]    ;put drive number into AL
  xor  ah,ah
  mov  cx,6[bp]    ;number of sectors to fetch
  mov  dx,8[bp]    ;logical record number of 1st sector
  mov   bx,10[bp]    ;pointer to transfer address
  int  25h      ;BIOS call
  jc  error      ;error has occurred if carry flag = 1
  mov  al,00H      ;NULL to indicate sucessful completion
  jmp  done
error:  cmp  al,00H      ;detect unspecified error code 00H
  jne  done      ;...change to 0FFh if found to
  mov  al,0FFH      ;...differentiate it from success code
done:  xor  ah,ah      ;return AL only
  popf        ;remove flags int 0x25 left on stack
  pop  bp      ;restore original frame pointer
  ret        ;all done
code  ends
  end


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved