⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 systree.asm

📁 menuet os应用程序源代码,很多汇编写的应用程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
    mov  eax,edx
    xor  edx,edx
    mov  ebx,62
    mul  ebx
    add  eax,fileinfo
    mov  ebx,155*65536
    shr  ecx,16
    mov  bx,cx
    add  ebx,5*65536+3
    mov  ecx,0xffffff
    cmp  [eax+21],word 'SM'
    jnz  noasm
    mov  ecx,0x88ffff
  noasm:
    cmp  [eax+7],word 'OL'
    jnz  nofolt
    mov  ecx,0xffff00
  nofolt:
    cmp  [eax+7],word 'EL'
    jnz  nodelt
    mov  ecx,0x99aaee
  nodelt:
    mov  edx,eax
    mov  esi,57
    mov  eax,4
    int  0x40
    popa

    add  ecx,(13*65536)
    inc  edx
    cmp  edx,37
    jnz  newb

    popa

    ret



fileinfoblock:

   dd 0x0       ; read
   dd 0x0       ; first block
   dd 0x1       ; number of blocks to read
   dd 0x20000   ; ret
   dd 0x10000   ; work
filedir:
   times 12*10 db 32



read_directory:

    mov  edi,0x20000
    mov  eax,0
    mov  ecx,512
    cld
    rep  stosb

    mov  esi,location
    mov  edi,filedir
    mov  ecx,12*8
    cld
    rep  movsb

    mov  eax,[loclen]
    mov  [filedir+eax],byte 0

    mov  eax,[readblock]
    dec  eax
    mov  [fileinfoblock+4],eax
    mov  eax,58
    mov  ebx,fileinfoblock
    int  0x40

    cmp  eax,0
    jne  hd_read_error

    mov  [dirlen],ebx
    mov  esi,0x20000
    mov  edi,data_area+1024
    mov  ecx,512
    cld
    rep  movsb

    mov  ebx,1024

    ; command succesful

    mov  esi,data_area+1024
    mov  edi,fileinfo+11
    mov  edx,16

  newlineb:

    pusha               ; clear
    mov  al,32
    mov  ecx,58
    sub  edi,11
    cld
    rep  stosb
    popa

    mov  cl,[esi]       ; end of entries ?
    cmp  cl,6
    jnz  noib0

    mov  [edi-5],dword 'EOE '
    add  esi,32
    add  edi,62
    jmp  inf

  noib0:

    mov  cl,[esi+0]
    cmp  cl,0xe5
    je   yesdelfil

    mov  cl,[esi+11]    ; long fat32 name ?
    cmp  cl,0xf
    jnz  noib1

    mov  [edi-5],dword 'F32 '
    add  esi,32
    add  edi,62
    jmp  inf

  noib1:

    mov  eax,'DAT '     ; data or .. ?

    mov  cl,[esi+0]     ; deleted file
    cmp  cl,0xe5
    je   yesdelfil
    cmp  cl,0x0
    je   yesdelfil
    jmp  nodelfil
   yesdelfil:
    mov  eax,'DEL '
    jmp  ffile
  nodelfil:

    mov  cl,[esi+11]    ; folder
    and  cl,0x10
    jz   ffile
    mov  eax,'FOL '
    mov  [edi-5],eax
    mov  [edi+45],byte '-'
    jmp  nosize

  ffile:

    mov  [edi-5],eax

    pusha               ; size
    mov  eax,[esi+28]
    mov  esi,edi
    add  esi,37
    mov  ebx,10
    mov  ecx,8
  newnum:
    xor  edx,edx
    div  ebx
    add  dl,48
    mov  [esi],dl
    cmp  eax,0
    jz   zernum
    sub  esi,1
    loop newnum
  zernum:
    popa
  nosize:

    pusha                    ; date
    mov  [edi+17],dword '.  .'
    mov  [edi+21],dword '2002'
    movzx eax,word [esi+24]
    mov  ecx,eax
    mov  ebx,32
    xor  edx,edx
    div  ebx
    xor  edx,edx
    mov  ebx,10
    div  ebx
    add  al,48 ; year
    movzx eax,dl
    xor  edx,edx
    mov  ebx,10
    div  ebx
    add  al,48
    add  dl,48
    mov  [edi+15],byte '0'   ; day
    mov  [edi+16],byte '0'

    mov  eax,ecx
    xor  edx,edx
    mov  ebx,32
    div  ebx
    xor  edx,edx
    mov  ebx,16
    div  ebx
    mov  eax,edx
    xor  edx,edx
    mov  ebx,10
    div  ebx
    add  al,48
    add  dl,48
    mov  [edi+18],al         ; month
    mov  [edi+19],dl
    popa


    pusha                    ; number
    mov  ecx,17
    sub  ecx,edx
    mov  eax,[readblock]
    sub  eax,1
    shl  eax,4
    add  eax,ecx
    xor  edx,edx
    mov  ebx,10
    div  ebx
    add  dl,48
    mov  [edi-8],dl          ;0001
    xor  edx,edx
    div  ebx
    add  dl,48
    mov  [edi-9],dl          ;0010
    xor  edx,edx
    div  ebx
    add  al,48
    add  dl,48
    mov  [edi-10],dl         ;0100
    mov  [edi-11],al         ;1000
    mov  [edi-7],byte '.'
    popa

    mov  ecx,8          ; first 8
    cld
    rep  movsb
    mov  [edi],byte '.'
    add  edi,1
    mov  ecx,3          ; last 3
    cld
    rep  movsb

    add  esi,(32-11)
    add  edi,(60-12+2)

  inf:

    sub  edx,1
    cmp  edx,0
    jnz  newlineb

    ret


hd_read_error:

    cmp  eax,1
    jnz  la1
    mov  edx,nodef
    mov  esi,50
  la1:
    cmp  eax,2
    jnz  la2
    mov  esi,nosup
    mov  edi,data_area+8
    mov  ecx,50
    cld
    rep  movsb
    mov  edx,data_area
    mov  esi,8+50
  la2:
    cmp  eax,3
    jnz  la3
    mov  esi,unknw
    mov  edi,data_area+8
    mov  ecx,50
    cld
    rep  movsb
    mov  edx,data_area
    mov  esi,8+50
  la3:
    cmp  eax,4
    jnz  la4
    mov  edx,xpart
    mov  esi,50
  la4:
    cmp  eax,5
    jnz  la5
    mov  edx,eof
    mov  esi,50
    dec  dword [readblock]
    add  [loclen],dword 12

  la5:
    cmp  eax,6
    jnz  la6
    mov  edx,fnf
    mov  esi,50
  la6:

    mov  eax,4
    mov  ebx,70*65536+265
    mov  ecx,0x00000000
    int  0x40

    sub  [loclen],dword 12
    jmp  read_directory



; DATA AREA


dirlen    dd   0x1
b_color   dd   0x6677cc
editor    db   'TINYPAD    '
param     db   '           ',0
text      db   '/                       '
up        db   0x18
down      db   0x19
xx        db   'x'
loclen    dd  0
readblock dd  1
 labelt    db   'SYSTEM TREE'
 labellen:
root      db   'ROOTDIR     '


location:

          db    '/           /           /           /           '
          db    '/           /           /           /           '
          db    '/           /           /           /           '
          db    '/           /           /           /           '
          db    '/           /           /           /           '
          db    '/           /           /           /           '
          db    '/           /           /           /           '
          db    '/           /           /           /           '

fileinfo:

    db   '  00.              .     10.20  01.01.00                      '
    db   '  00.              .     10.20  01.01.00                      '
    db   '  00.              .     10.20  01.01.00                      '
    db   '  00.              .     10.20  01.01.00                      '
    db   '  00.              .     10.20  01.01.00                      '
    db   '  00.              .     10.20  01.01.00                      '
    db   '  00.              .     10.20  01.01.00                      '
    db   '  00.              .     10.20  01.01.00                      '
    db   '  00.              .     10.20  01.01.00                      '
    db   '  00.              .     10.20  01.01.00                      '
    db   '  00.              .     10.20  01.01.00                      '
    db   '  00.              .     10.20  01.01.00                      '
    db   '  00.              .     10.20  01.01.00                      '
    db   '  00.              .     10.20  01.01.00                      '
    db   '  00.              .     10.20  01.01.00                      '
    db   '  00.              .     10.20  01.01.00                      '

nodef   db   'NO HD BASE AND/OR FAT32 PARTITION DEFINED.         '
xpart   db   'INVALID PARTITION AND/OR HD BASE                   '
nosup   db   '<- FS, NO SUPPORT YET                              '
unknw   db   '<- UNKNOWN FS                                      '
eof     db   'END OF FILE                                        '
fnf     db   'FILE NOT FOUND                                     '

data_area:

I_END:




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -