回 帖 发 新 帖 刷新版面

主题:请帮定成为老手的新手看一下这个程序!先谢!!

data            segment
file             db    'd:\pro\Cpp1.cpp' , 0       ;什么意思?
buf             db   256 dup(0)        
error_message    db   0ah , 'error !' , '$'    ;什么意思?
handle           dw  ?                
data             ends
code            segment
                assume  cs:code  , ds:data
start:
              mov ax , data
              mov ds , ax   
              mov dx , offset file  
              mov al , 0               ;这0 和3dh都是怎么样控制程序的?
              mov ah , 3dh             
              int 21h                  ;21h会做什么在这里?
              jc error                  
              mov handle , ax           
              mov bx , ax
              mov cx , 255
              mov dx , offset buf
              mov ah , 3fh
              int 21h                  
              jc error                  
              mov bx , ax              
              mov buf[bx] , '$'          
              mov dx , offset buf
              mov ah , 9
              int 21h                            
              mov bx , handle
              mov ah , 3eh
              int 21h                            
              jnc end1             
error:
              mov dx , offset error_message
              mov ah , 9
              int 21h                           
end1:
             mov ah , 4ch
             int 21h
code   ends
             end  start



   程序中不懂的地方就是一些数字是如何控制程序的。还有就是那个21h了。
   请高手指点!!

回复列表 (共4个回复)

沙发

data            segment
file             db    'd:\pro\Cpp1.cpp' , 0       ;要打开的文件路径
buf             db   256 dup(0)        
error_message    db   0ah , 'error !' , '$'    ;操作失败号,输出的错误信息
handle           dw  ?                
data             ends
code            segment
                assume  cs:code  , ds:data
start:
              mov ax , data
              mov ds , ax
         ;打开文件用于读操作
              mov dx, offset file        ;文件名地址送入 BX
              mov al, 0                    ;打开文件用于读取
              mov ah, 3dh                ;打开文件(功能号)
              int 21h                ;要想知道?只有跟进去
              jc error                ;打开文件失败
              mov handle, ax            ;保存文件号
         ;从文件中读取 255 个字节
              mov bx, ax            ;文件号
              mov cx, 255            ;读取字节数
              mov dx, offset buf        ;数据缓冲区
              mov ah, 3fh            ;读去文件(功能号)
              int 21h                    
              jc error                ;读取失败
          ;输出读出的数据
              mov bx, ax        
              mov buf[bx], '$'          ;在读出的数据后面添加 '$'
              mov dx, offset buf    ;数据地址
              mov ah, 9            ;显示字符串(功能号)
              int 21h
         ;关闭文件
              mov bx, handle        ;文件号送入 BX
              mov ah, 3eh        ;关闭文件(功能号)
              int 21h

              jnc end1            ;如果成功跳到 end1
error:          ;错误处理
              mov dx , offset error_message
              mov ah , 9
              int 21h                           
end1:
             mov ah , 4ch        ;结束程序
             int 21h
code   ends
             end  start

板凳

能不能讲细点,上面的说明好像只是表面的东西,能不能说一下他是怎么实现的?谢谢

3 楼

你想知道 DOS 是如何处理文件的吗?
要是这样,你可以找一些 FAT 文件系统结构的文章看看, 网上很多这样的资料

4 楼

谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册