| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1036 人关注过本帖
标题:16位汇编如何打开运行程序目录下的文件?
只看楼主 加入收藏
shweei
Rank: 2
等 级:论坛游民
帖 子:24
专家分:10
注 册:2011-7-27
结帖率:100%
收藏
已结贴  问题点数:0 回复次数:7 
16位汇编如何打开运行程序目录下的文件?

运行的文件是 1.exe 功能是打开一个文件
 要求   打开和1.exe存放目录相同的文件
搜索更多相关主题的帖子: 如何 运行程序 
2011-08-11 20:42
iamsky1981
Rank: 2
等 级:论坛游民
帖 子:20
专家分:76
注 册:2009-10-23
收藏
得分:0 
这里有一个例子,你可以参考一下
程序代码:
data            segment
file             db    'c:\masm\l.txt' , 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
              mov ah , 3dh
              int 21h                  ;打开文件
              jc error                  ;若打开出错,转error
              mov handle , ax           ;保存文件号
              mov bx , ax
              mov cx , 255
              mov dx , offset buf
              mov ah , 3fh
              int 21h                  ;从文件中读255字节→buf
              jc error                  ;若读出错,转error
              mov bx , ax              ;实际读到的字符数送入bx
              mov buf[bx] , '$'          ;在文件结束处放置一“$”符
              mov dx , offset buf
              mov ah , 9
              int 21h                            ;显示文件内容
              mov bx , handle
              mov ah , 3eh
              int 21h                            ;关闭文件
              jnc end1             ;若关闭过程无错,转到end1处返回dos
error:
              mov dx , offset error_message
              mov ah , 9
              int 21h                            ;显示错误提示
end1:
             mov ah , 4ch
             int 21h
code   ends
             end  start
2011-08-11 20:55
shweei
Rank: 2
等 级:论坛游民
帖 子:24
专家分:10
注 册:2011-7-27
收藏
得分:0 
这样是不是固定了文件的路径了?

    1.txt 和运行的 1.exe
    两个文件在一个SSS目录里
    而且 SSS可以随便改变目录 比如 C:    D:    F:

运行1.exe后 打开1.txt都正确

不好意思  刚才没表达清楚

[ 本帖最后由 shweei 于 2011-8-11 21:07 编辑 ]
2011-08-11 21:04
iamsky1981
Rank: 2
等 级:论坛游民
帖 子:20
专家分:76
注 册:2009-10-23
收藏
得分:0 
回复 3楼 shweei
那你就获取程序运行当前目录就是了,获得全路径后,你后面补上要打开的文件名,不就行了
2011-08-11 21:53
iamsky1981
Rank: 2
等 级:论坛游民
帖 子:20
专家分:76
注 册:2009-10-23
收藏
得分:20 
回复 3楼 shweei
用INT 21H中断的功能47H可以获得当前目录


功能47H
功能描述:取当前目录的完全路径字符串
入口参数:AH=47H
DL=驱动器号(0=缺省,1=A,…)
DS:SI=存放当前目录字符串的地址
出口参数:CF=0——读取成功,否则,AX=错误号
2011-08-11 22:05
shweei
Rank: 2
等 级:论坛游民
帖 子:24
专家分:10
注 册:2011-7-27
收藏
得分:0 
谢谢~~
        搞定

[ 本帖最后由 shweei 于 2011-8-11 23:41 编辑 ]
2011-08-11 22:42
iamsky1981
Rank: 2
等 级:论坛游民
帖 子:20
专家分:76
注 册:2009-10-23
收藏
得分:0 
回复 6楼 shweei
貌似在代码中的文件名不带路径就可以解决这个问题吧,这样程序运行的时候默认就会在当前目录下找这个文件,从而就不用通过获得当前目录去打开文件了。
刚刚随手翻看一下杨季文的《80x86汇编语言程序设计教程》的第四章的4.4.2应用举例,这个例子就能解决你的问题吧?
2011-08-12 20:48
coraline1991
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-9-18
收藏
得分:0 
。。。。受教,受教。。还有个问题,那个程序的文件内容少于255个字符,便可全部显示,内容要是多于255个字符,便要循环分次显示。。
2011-09-19 14:10
快速回复:16位汇编如何打开运行程序目录下的文件?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017018 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved