汇编网首页登录博客注册
masmaster的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
文章收藏

[2010-07-22 16:25] 练习:一个显示文件基本信息的程序

图片载入中
;-----------------------------------------------------
  1 ;Filename:stat.asm
  2 ;Function:print file basic infomation
  3 ;Usage:stat [filename]
  4 ;
  5 assume  cs:code,ds:data,ss:stack
  6 stack   segment stack
  7         dw      128 dup (0)
  8 stack   ends
  9 ;
 10 data    segment
 11 buffer  dw      2048 dup (?)
 12 fname   db      11 dup (0),0
 13 errmsg  db      'No Found or Open Failue!','$'
 14 cr      db      0dh,0ah,'$'
 15 fsize   db      'File Size:','$'
 16 handle  dw      0
 17 tmp     dw      0,0
 18 divi    dw      10000,1000,100,10,1
 19 temp    db      5 dup (?)
 20 bytes   db      'bytes$'
 21 stamp   db      'Timestamp:$'
 22 attrib  db      'Attribcode:$'
 23 data    ends
 24 ;
 25 code    segment
 26 start:  mov ax,stack
 27         mov ss,ax
 28         mov sp,128
 29         mov ax,data
 30         mov ds,ax
 31 ;-------------------------------------------------
 32 ;check filename
 33 ;
 34         mov al,es:[80h]
 35         cmp al,0
 36         jz err
 37 ;-------------------------------------------------
 38 ;read filename from es:82h to ds:fname
 39 ;
 40         mov si,82h
 41         mov di,offset fname
 42 sa:     mov al,es:[si]
 43         cmp al,0dh
 44         jz ok
 45         mov [di],al
 46         inc si
 47         inc di
 48         jmp sa
 49 ok:
 50 ;-------------------------------------------------
 51 ;open file
 52 ;
 53         mov ah,3dh
 54         mov dx,offset fname
 55         int 21h
 56         jc err                  ;open fail
 57         mov bx,ax               ;save FH
 58         mov handle,ax
 59 ;-------------------------------------------------
 60 ;read file into buffer
 61 ;
 62         mov ah,3fh
 63         mov cx,offset fname-offset buffer
 64         mov dx,offset buffer
 65         int 21h                 ;AX=FileSize
 66         jc err                  ;read fail
 67         mov tmp,ax              ;save file size
 68 ;-------------------------------------------------
 69 ;clean buffer
 70 ;
 71         mov di,offset buffer
 72         mov cx,tmp
 73 clean:
 74         mov byte ptr [di],0
 75         inc di
 76         loop clean
 77 ;-------------------------------------------------
 78 ;display file size
 79 ;
 80         mov dx,offset fsize
 81         mov ah,9
 82         int 21h
 83
 84         mov si,offset divi
 85         mov di,offset temp
 86         mov ax,tmp
 87         call _disp
 88
 89         mov dx,offset bytes
 90         mov ah,9
 91         int 21h
 92
 93         mov dx,offset cr
 94         mov ah,9
 95         int 21h
 96 ;-------------------------------------------------
 97 ;get file date and time
 98 ;
 99         mov dx,offset stamp
100         mov ah,9
101         int 21h
102         mov ax,5700h
103         mov bx,handle
104         int 21h
105         jc err
106 ;
107         mov tmp,cx              ;save time
108         mov tmp+2,dx            ;save date
109 ;
110         mov dx,tmp+2
111 ;print year-month-day
112         push dx
113         mov cl,7
114         rol dx,cl
115         and dx,3fh
116         add dx,1980
117         mov ax,dx
118         call _disp
119         mov dl,'-'
120         mov ah,2
121         int 21h
122         pop dx
123         push dx
124         mov cl,5
125         shr dx,cl
126         and dx,0fh
127         mov ax,dx
128         call _disp
129         mov dl,'-'
130         mov ah,2
131         int 21h
132         pop dx
133         and dx,1fh
134         mov ax,dx
135         call _disp
136         mov dl,' '
137         mov ah,2
138         int 21h
139 ;
140         mov dx,tmp
141 ;print hour:min:sec
142         push dx
143         mov cl,5
144         rol dx,cl
145         and dx,1fh
146         mov ax,dx
147         call _disp
148         mov dl,':'
149         mov ah,2
150         int 21h
151         pop dx
152         push dx
153         mov cl,5
154         shr dx,cl
155         and dx,3fh
156         mov ax,dx
157         call _disp
158         mov dl,':'
159         mov ah,2
160         int 21h
161         pop dx
162         and dx,1fh
163         mov ax,dx
164         call _disp
165 ;
166         mov dx,offset cr
167         mov ah,9
168         int 21h
169 ;-------------------------------------------------
170 ;get file attrib
171 ;
172         mov dx,offset attrib
173         mov ah,9
174         int 21h                 
175
176         mov ax,4300h
177         mov dx,offset fname
178         int 21h                ;CX=fileAttrib
179         jc err
180 ;
181         mov dx,cx
182         mov cl,12
183         rol dx,cl
184         push dx
185         and dl,0fh
186         add dl,30h
187         mov ah,2
188         int 21h
189         pop dx
190         and dl,0fh
191         mov dl,30h
192         mov ah,2
193         int 21h
194         mov dl,'H'
195         mov ah,2
196         int 21h
197 ;-------------------------------------------------
198 ;close file
199 ;
200         mov ah,3eh
201         mov bx,handle           ;move FH to BX
202         int 21h
203         jc err                  ;close fail
204 ;-------------------------------------------------
205 over:   mov ah,4ch
206         int 21h
207 err:    lea dx,errmsg
208         mov ah,9
209         int 21h
210         jmp over
211 ;-------------------------------------------------
212 ;sub-proc:conv hex to dec
213 ;
214 _disp   proc near uses ax cx dx si di
215         mov cx,5
216 s0:     xor dx,dx
217         div word ptr [si]
218         add al,30h
219         mov byte ptr [di],al
220         mov ax,dx
221         add si,2
222         inc di
223         loop s0
224         mov cx,5
225         mov si,offset temp
226 s1:     mov dl,[si]
227         cmp dl,30h
228         jnz s2
229         inc si
230         loop s1
231 s2:     mov dl,[si]
232         mov ah,2
233         int 21h
234         inc si
235         loop s2
236         ret
237 _disp   endp
238 ;-------------------------------------------------
239 code    ends
240 end     start
;----------------------------------------------------

这个程序, 耗费我不少心血~~,两天的时间调试了N+N遍! 终于可以正常运行啦~, 遗憾的是, 没有文件详细属性的资料, 书里就了了几句。 乖乖~~,我也写了200+行的代码啦~, 哈哈。
评论次数(0)  |  浏览次数(353)  |  类型(程序与练习) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码