亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rxdosfat.asm

?? dos source
?? ASM
?? 第 1 頁 / 共 4 頁
字號:
        TITLE   'fat - walk through FAT Tables for rxdos'
        PAGE 59, 132
        .LALL

        ;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
        ;  FAT Walk Through FAT Tables for rxdos                        ;
        ;...............................................................;

        ;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
        ;  Real Time Dos                                                ;
        ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
        ;                                                               ;
        ;  This material  was created as a published version  of a DOS  ;
        ;  equivalent product.   This program  logically  functions in  ;
        ;  the same way as  MSDOS functions and it  is  internal  data  ;
        ;  structure compliant with MSDOS 6.0                           ;
        ;                                                               ;
        ;  This product is distributed  AS IS and contains no warranty  ;
        ;  whatsoever,   including  warranty  of   merchantability  or  ;
        ;  fitness for a particular purpose.                            ;
        ;                                                               ;
        ;                                                               ;
        ;  (c) Copyright 1990, 1997. Api Software and Mike Podanoffsky  ;
        ;      All Rights Reserved Worldwide.                           ;
        ;                                                               ;
        ;  This product is protected under copyright laws and  may not  ;
        ;  be reproduced  in whole  or in part, in any form  or media,  ;
        ;  included but not limited to source listing, facsimile, data  ;
        ;  transmission, cd-rom, or  floppy disk without the expressed  ;
        ;  written consent of the author.                               ;
        ;                                                               ;
        ;  License  for  distribution  for commercial  use  or  resale  ;
        ;  required from:                                               ;
        ;                                                               ;
        ;  Api Software                                                 ;
        ;  12 South Walker Street                                       ;
        ;  Lowell,  MA   01851                                          ;
        ;                                                               ;
        ;  internet: mikep@world.std.com                                ;
        ;                                                               ;
        ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
        ;  Compile with MASM 5.1                                        ;
        ;...............................................................;

        include rxdosmac.asm
        include rxdosdef.asm

RxDOS   SEGMENT PUBLIC 'CODE'
        assume cs:RxDOS, ds:RxDOS, es:RxDOS, ss:RxDOS

        ;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
        ;  Walk Through FAT Tables                                      ;
        ;...............................................................;

        public AllocateCluster
        public AllocateInitCluster
        public AmountFreeSpace
        public AppendCluster
        public getNextCluster
        public ReleaseClusterChain
        public scanClusterMap
        public updateClusterValue
        public _FATReadRandom

        extrn CCBChanged                        : near
        extrn computeLogSectorNumber            : near
        extrn getDPB                            : near
        extrn getAddrDPB                        : near
        extrn readBuffer                        : near
        extrn readSelBuffer                     : near
        extrn SelBuffer                         : near
        extrn CCBChanged                        : near
        extrn updateChangedCCB                  : near
        extrn updateAllChangedCCBBuffers        : near
        extrn _DebugInterruptTrap               : near
        extrn DevRead                           : near

        ;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
        ;  Definitions                                                  ;
        ;...............................................................;

MINCLUSTER      EQU 2                                   ; min cluster value


        ;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
        ;  Get Next Cluster                                             ;
        ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
        ;                                                               ;
        ;  Input:                                                       ;
        ;   ax     drive                                                ;
        ;   dx     current cluster                                      ;
        ;                                                               ;
        ;  Output:                                                      ;
        ;   ax     drive                                                ;
        ;   dx     next cluster                                         ;
        ;   zr     if end of cluster chain.                             ;
        ;                                                               ;
        ;  Preserves:                                                   ;
        ;   es, di, si, cx, bx, ax                                      ;
        ;...............................................................;

getNextCluster:

        Entry
        def _drive, ax
        def _cluster, dx

        saveRegisters es, di, si, cx, bx, ax
        call getAddrDPB                                 ; (es:bx) Device Parameter Block
        mov dx, -1                                      ; presume end if error
        jc getNextCluster_Return                        ; exit if error -->

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;  determine whether its 12 or 16 bit FAT entries
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        mov ax, word ptr [ _cluster ][ bp ]             ; get cluster #
        cmp ax, MINCLUSTER                              ; less than min cluster ?
        jc getNextCluster_04                            ; exit with -1 -->
        cmp ax, word ptr es:[ _dpbMaxClusterNumber ][ bx ]
        jc getNextCluster_08                            ; if valid cluster # -->
        
getNextCluster_04:
        jmp short getNextCluster_Return

getNextCluster_08:
        xor dx, dx
        test word ptr es:[ _dpbMaxClusterNumber ][ bx ], 0F000h
        jnz getNextCluster_16Bits                       ; if 16 -->

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;  12 bit FAT entries
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

getNextCluster_12Bits:
        mov ax, word ptr [ _drive ][ bp ]               ; get drive
        mov dx, word ptr [ _cluster ][ bp ]             ; and cluster
        call _get_12Bit_ClusterValue
        jmp short getNextCluster_Return

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;  16 bit FAT entries
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

getNextCluster_16Bits:
        mov cx, word ptr es:[ _dpbBytesPerSector ][ bx ]
        shr cx, 1
        div cx                                          ; FAT sector/ Offset

      ; ax will contain FAT sector
      ; dx will contain byte offset into FAT sector

        add dx, dx                                      ; make word offset
        push dx

        xor cx, cx
        mov dx, word ptr es:[ _dpbFirstFAT ][ bx ]      ; where is first FAT table ?
        add dx, ax                                      ; add offset required
        mov ax, word ptr [ _drive ][ bp ]               ; get drive
        call readBuffer                                 ; read FAT Table
        or byte ptr es:[ ccbStatus ][ di ], ( ccb_isFAT )

        pop bx                                          ; word offset into FAT table
        mov dx, word ptr es:[ ccbData ][ bx + di ]      ; get FAT word

        mov ax, dx
        and ax, 0FFF8h                                  ; FAT value, 12 bit entries.
        cmp ax, 0FFF8h                                  ; end of chain ?
        jnz getNextCluster_Return                       ; no -->
        mov dx, -1                                      ; if end, set end value

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;  return
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

getNextCluster_Return:
        restoreRegisters ax, bx, cx, si, di, es
        cmp dx, -1                                      ; set if end of chain
        Return

        ;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
        ;  Scan Ahead Cluster Map                                       ;
        ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
        ;                                                               ;
        ;  Input:                                                       ;
        ;   ax     drive                                                ;
        ;   cx     max clusters to scan                                 ;
        ;   dx     current cluster                                      ;
        ;                                                               ;
        ;  Output:                                                      ;
        ;   cx     # clusters that can be sequentially read             ;
        ;   dx     last cluster value                                   ;
        ;...............................................................;

scanClusterMap:

        Entry
        def  _drive, ax
        def  _cluster, dx
        def  _maxClustersToScan, cx
        def  _nextCluster
        def  _clusterCount, 0001

        or cx, cx                                       ; zero max clusters ?
        jz scanClusterMap_22                            ; yes, exit -->
        mov word ptr [ _clusterCount ][ bp ], 0000      ; cluster count

scanClusterMap_12:
        inc word ptr [ _clusterCount ][ bp ]            ; cluster count

        mov cx, dx                                      ; save original request
        call getNextCluster                             ; get next cluster
        cmp dx, -1                                      ; end ?
        jz scanClusterMap_22                            ; yes -->

        sub cx, dx                                      ; sequential clusters are ...
        cmp cx, -1                                      ;  ... identified by a -1 offset
        jnz scanClusterMap_22                           ; if still sequential -->

        dec word ptr [ _maxClustersToScan ][ bp ]       ; scan more ?
        jnz scanClusterMap_12                           ; yes -->

scanClusterMap_22:
        mov cx, word ptr [ _clusterCount ][ bp ]        ; # sequential clusters
        Return

        ;''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''';
        ;  Update Cluster Value                                         ;
        ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
        ;                                                               ;
        ;  Updates the value given for any cluster.                     ;
        ;                                                               ;
        ;  Input:                                                       ;
        ;   ax     drive                                                ;
        ;   dx     cluster                                              ;
        ;   cx     update value                                         ;
        ;                                                               ;
        ;  Returns:                                                     ;
        ;   cx     original contents in cluster cell                    ;
        ;                                                               ;
        ;...............................................................;

updateClusterValue:

        Entry
        def _drive, ax
        def _cluster, dx
        def _value, cx
        def _sectorsize
        ddef _sector

        saveRegisters es, di, si, dx, bx, ax

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;  determine whether its 12 or 16 bit FAT entries
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        call getAddrDPB                                 ; (es:bx) Device Parameter Block
        jc updateClusterValue_04                        ; if error -->

        mov ax, word ptr [ _cluster ][ bp ]             ; get cluster #
        cmp ax, MINCLUSTER                              ; invalid number 
        jc updateClusterValue_04                        ; exit -->
        cmp ax, word ptr es:[ _dpbMaxClusterNumber ][ bx ]
        jc updateClusterValue_08                        ; if valid cluster # -->

updateClusterValue_04:
        mov dx, -1
        cmp dx, -1                                      ; sets zero (end of list)
        stc                                             ; and set carry (error )
        jmp updateClusterValue_Return

updateClusterValue_08:
        xor dx, dx
        
        test word ptr es:[ _dpbMaxClusterNumber ][ bx ], 0F000h
        jz updateClusterValue_12Bits                    ; if 12 -->
        jmp updateClusterValue_16Bits                   ; if 16 -->

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;  12 bit FAT entries
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

updateClusterValue_12Bits:
        mov cx, ax
        add ax, ax
        add ax, cx                                      ; nibble address

        mov cx, word ptr es:[ _dpbBytesPerSector ][ bx ]
        mov word ptr [ _sectorsize ][ bp ], cx
        dec word ptr [ _sectorsize ][ bp ]
        shl cx, 1                                       ; nibbles / sector
        div cx                                          ; sector to read

      ; ax will contain sector
      ; dx will contain nibble offset

        shr dx, 1                                       ; word offset
        push dx                                         ; word offset

        xor cx, cx                                      ; 32 bit address
        mov dx, ax
        add dx, word ptr es:[ _dpbFirstFAT ][ bx ]      ; where is first FAT table ?
        stordarg _sector, cx, dx                        ; read next cluster sector
        mov ax, word ptr [ _drive ][ bp ]               ; get drive
        call readBuffer                                 ; read FAT Table
        or byte ptr es:[ ccbStatus ][ di ], ( ccb_isFAT )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲在线观看av| 国产日韩欧美制服另类| 欧美色涩在线第一页| 午夜日韩在线电影| 亚洲欧美另类小说视频| 91免费精品国自产拍在线不卡| 首页国产欧美日韩丝袜| 亚洲美女偷拍久久| 亚洲综合一二三区| 亚洲人成网站色在线观看| 中文字幕精品在线不卡| 久久久99精品免费观看| 久久毛片高清国产| 色94色欧美sute亚洲线路一久| 精品国产乱码久久久久久久久| 粉嫩av亚洲一区二区图片| 亚洲一区二区三区爽爽爽爽爽 | 国产美女久久久久| 欧美电影免费观看高清完整版在| 91在线观看下载| 成人免费观看视频| 日韩精品乱码免费| 九九视频精品免费| 激情综合色丁香一区二区| 麻豆专区一区二区三区四区五区| 美女被吸乳得到大胸91| 色婷婷综合久色| 国内精品久久久久影院薰衣草 | 欧美日韩亚洲综合在线| 色综合天天综合网国产成人综合天| 欧美久久久一区| 国产伦精品一区二区三区在线观看| 欧美在线你懂的| 精品在线免费观看| 久久久99精品免费观看| 欧美日韩在线播| 国内精品伊人久久久久av一坑 | 中文字幕乱码久久午夜不卡| 国产精品萝li| 日韩久久一区二区| 成人动漫一区二区在线| 亚洲午夜久久久久久久久电影网| 欧美日韩视频在线第一区| 欧美日韩精品福利| 欧美一区二区成人6969| 欧美国产1区2区| 欧美mv和日韩mv的网站| 夜夜爽夜夜爽精品视频| 日本中文字幕一区二区视频| 国产乱子伦视频一区二区三区| 国产中文字幕一区| 91精品国产综合久久久蜜臀图片| 国产日韩欧美a| 91精品国产品国语在线不卡| 久久精品一区二区三区av| 久久婷婷国产综合国色天香| 午夜久久电影网| 国产iv一区二区三区| 色老汉一区二区三区| 91麻豆精品国产自产在线观看一区| 中文字幕在线播放不卡一区| 视频一区欧美精品| 99在线热播精品免费| 欧美日韩午夜在线| 亚洲美女视频在线观看| 国产不卡视频一区二区三区| 欧美亚洲综合久久| 国产日韩视频一区二区三区| 日韩av成人高清| 色哟哟国产精品| 欧美激情一区三区| 亚洲色欲色欲www| 国产成人av在线影院| 欧美一区二区成人6969| 一区二区免费看| 一本一本大道香蕉久在线精品| 日韩欧美亚洲国产另类| 亚洲国产日韩一区二区| zzijzzij亚洲日本少妇熟睡| 欧美tickling挠脚心丨vk| 亚洲国产精品一区二区www| 成人av网址在线观看| 亚洲国产精品二十页| 成人av网址在线| 国产精品成人免费精品自在线观看| 成人三级伦理片| 亚洲精品乱码久久久久久黑人| 色婷婷综合激情| 亚洲一区二区三区精品在线| 欧美喷水一区二区| 韩国一区二区三区| 国产精品无人区| 色狠狠桃花综合| 日韩va欧美va亚洲va久久| 日韩精品一区国产麻豆| 粉嫩高潮美女一区二区三区 | 国产午夜精品一区二区三区视频| 成人一道本在线| 亚洲国产成人精品视频| 欧美成人在线直播| av不卡在线播放| 视频一区免费在线观看| 欧美激情一区二区三区| 欧美图片一区二区三区| 精品一二三四区| 最近中文字幕一区二区三区| 91 com成人网| 成人av动漫网站| 亚洲444eee在线观看| 欧美精品一区二区三| 色婷婷一区二区三区四区| 热久久免费视频| 亚洲人成电影网站色mp4| 在线成人av网站| 99国产精品久久久久| 蜜桃在线一区二区三区| 亚洲人成亚洲人成在线观看图片 | 成av人片一区二区| 免费国产亚洲视频| 亚洲激情第一区| 久久久久久久综合色一本| 欧美丰满少妇xxxbbb| 99re热视频精品| 国产毛片精品一区| 日韩中文字幕91| 亚洲激情欧美激情| 国产精品乱人伦| www久久久久| 日韩天堂在线观看| 欧美性一级生活| 91丨九色丨尤物| 国产不卡在线一区| 国产福利一区二区| 久久99国产精品麻豆| 亚洲国产精品自拍| 亚洲图片一区二区| 亚洲乱码精品一二三四区日韩在线| 精品国产凹凸成av人网站| 欧美一区二区成人6969| 欧美日韩国产bt| 欧美日韩一二三区| 精品视频在线视频| 欧美视频在线一区| 欧美日韩国产在线观看| 精品视频色一区| 欧美日韩一区成人| 91精品综合久久久久久| 7777精品伊人久久久大香线蕉最新版| 91福利视频在线| 欧美性大战久久久久久久蜜臀| 91影院在线免费观看| 色综合天天性综合| 91天堂素人约啪| 欧美亚洲日本一区| 欧美疯狂做受xxxx富婆| 欧美一区二区在线不卡| 日韩一区二区免费高清| 久久中文娱乐网| 欧美激情一区不卡| 亚洲欧美日韩综合aⅴ视频| 一区二区国产盗摄色噜噜| 一区二区三区在线视频免费观看| 一区二区三区在线免费| 天天av天天翘天天综合网色鬼国产 | 成人免费视频视频在线观看免费 | 91精品福利在线| 在线精品视频小说1| 欧美日韩国产中文| 精品伦理精品一区| 国产调教视频一区| 亚洲男同性视频| 天涯成人国产亚洲精品一区av| 美女在线一区二区| 国产成人午夜精品影院观看视频| 国产99久久久国产精品潘金网站| 国产成人精品一区二| 91免费视频网| 日韩视频一区二区三区在线播放 | 欧亚一区二区三区| 日韩一级完整毛片| 中文字幕欧美国产| 香蕉久久一区二区不卡无毒影院| 免费精品视频最新在线| 99精品欧美一区二区三区综合在线| 在线视频欧美精品| 亚洲精品一区二区三区福利| 亚洲欧美国产三级| 久久99精品久久久久久国产越南| 成人午夜视频在线| 欧美精品色一区二区三区| 久久久亚洲精品一区二区三区| 成人欧美一区二区三区黑人麻豆| 日本午夜精品一区二区三区电影| 成人免费毛片高清视频| 在线不卡欧美精品一区二区三区| 亚洲国产精品成人综合| 欧美a一区二区| 日本久久一区二区三区| 久久精品视频一区二区| 婷婷国产在线综合|