- [somniumchase] 我一运行就说没有数字 01/01 11:44
- [游客] 为什么啊 08/07 15:36
- [游客] 如果想快一些 就改下面这里 dx值改成1H delay: push ax 04/19 02:53
- [lshhjx] 注释在程序中很重要,楼主不知道吗? 12/08 13:40
- [biaggi] 看不明白,在下還須學習 11/06 08:11
- [游客] 我运行的时候直接显示Unkown filename跳出了- -请问怎么改 06/16 21:44
- [游客] 勿庸置疑,注释是好习惯。与人方便自己方便。 04/12 10:33
- [游客] 老实说,看着真心累呀! 04/07 18:37
- [游客] 很无语,初学者就多看书,不要动不动要别人注释,基础打好了,再自己注释,这样比别人帮你注释好得多 12/17 19:43
- [dgkepu] 初学者:不懂,希望有多点注释带着学习学习! 12/07 20:52
- [游客] windows 7是一个64Bit操作系统,它不兼容DOS,无法识别16Bit系统。重装系统wind 02/28 21:05
- [游客] windows 7是一个64Bit操作系统,它不兼容DOS,无法识别16Bit系统。重装系统wind 02/28 21:05
- [466987333] 你好,高手,我想请教一个问题。 我用的是win7操作系统,32位的,里面没有找masm目录,是不是 12/12 17:30
- [lanfioncc] 那个太高级了。。。我还有点看不懂。。不过谢谢!!! 11/27 11:23
- [yc2010] 实验16中的 table: dw sub1,sub2,sub3,sub4 可不可以改成呢? 09/11 09:08
- [yc2010] mov bl,ah mov bh,0 add bx,bx ----------->这里为 09/07 21:03
- [yc2010] 为什么要add bx,bx呢? 09/07 20:55
- [yc2010] 那是不是像table[bx],ds[bx]....等(内存单元)都是表示一个字节呢? 09/06 21:10
- [masmaster] 杨季文的《80X86汇编语言程序设计教程》 09/01 12:52
- [游客] to masmaster shl左移4位,那al传进来的4,5,6位背景色不就没了. 为什 09/01 11:00
[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+行的代码啦~, 哈哈。
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) |
类型(程序与练习) |
收藏此文 |