注册 登录
编程论坛 汇编论坛

16位汇编如何打开运行程序目录下的文件?

shweei 发布于 2011-08-11 20:42, 1036 次点击

运行的文件是 1.exe 功能是打开一个文件
 要求   打开和1.exe存放目录相同的文件
7 回复
#2
iamsky19812011-08-11 20:55
这里有一个例子,你可以参考一下
程序代码:
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
#3
shweei2011-08-11 21:04
这样是不是固定了文件的路径了?

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

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

不好意思  刚才没表达清楚

[ 本帖最后由 shweei 于 2011-8-11 21:07 编辑 ]
#4
iamsky19812011-08-11 21:53
回复 3楼 shweei
那你就获取程序运行当前目录就是了,获得全路径后,你后面补上要打开的文件名,不就行了
#5
iamsky19812011-08-11 22:05
回复 3楼 shweei
用INT 21H中断的功能47H可以获得当前目录


功能47H
功能描述:取当前目录的完全路径字符串
入口参数:AH=47H
DL=驱动器号(0=缺省,1=A,…)
DS:SI=存放当前目录字符串的地址
出口参数:CF=0——读取成功,否则,AX=错误号
#6
shweei2011-08-11 22:42
谢谢~~
        搞定

[ 本帖最后由 shweei 于 2011-8-11 23:41 编辑 ]
#7
iamsky19812011-08-12 20:48
回复 6楼 shweei
貌似在代码中的文件名不带路径就可以解决这个问题吧,这样程序运行的时候默认就会在当前目录下找这个文件,从而就不用通过获得当前目录去打开文件了。
刚刚随手翻看一下杨季文的《80x86汇编语言程序设计教程》的第四章的4.4.2应用举例,这个例子就能解决你的问题吧?
#8
coraline19912011-09-19 14:10
。。。。受教,受教。。还有个问题,那个程序的文件内容少于255个字符,便可全部显示,内容要是多于255个字符,便要循环分次显示。。
1