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:汇编 源码 系列

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