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

汇编源码系列之getsect

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


Tags:汇编 源码 系列

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