| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 885 人关注过本帖
标题:汇编菜鸟又遇到问题了,求大神帮助
取消只看楼主 加入收藏
Agdmeg
Rank: 4
来 自:四川成都
等 级:业余侠客
威 望:3
帖 子:101
专家分:201
注 册:2011-8-9
结帖率:92.31%
收藏
已结贴  问题点数:15 回复次数:5 
汇编菜鸟又遇到问题了,求大神帮助
自己写了个文件操作程序,打开文件成功了,可关闭文件出错了,始终不明白
先看代码:
DATA SEGMENT
   TEMP DB 1024 DUP(00H)
   PATH DB "C:\File\12.txt",0
   MSG1 DB "Open File Failed !",0AH,0DH,"$"
   MSG2 DB "Open File Succeed !",0AH,0DH,"$"
   MSG3 DB "ERROR !",0AH,0DH,"$"
   F_HD DW 0000H        ;------------ 文件句柄保存位置
DATA ENDS

CODE SEGMENT
   ASSUME CS:CODE,DS:DATA
START:
   MOV AX,DATA
   MOV DS,AX

   MOV AL,42H        ;----------------调用DOS中断,打开文件
   MOV AH,3DH
   LEA DX,PATH
   INT 21H           ;----------------打开成功,则AX==文件句柄

   JC FAIL           ;----------------打开文件失败跳转并显示Open file faile信息

   LEA DX,MSG2      ;------------------打开文件成功,显示Open file success信息
   MOV AH,09H
   INT 21H
   JMP NEXT         ;-----------------信息显示完后,进行跳到NEXT

 FAIL:
   MOV DX,OFFSET MSG1
   MOV AH,09H
   INT 21H
   JMP EXIT

  NEXT:
 
   LEA SI,F_HD       ;-----------------保存文件句柄到F-HD
   MOV DS:[SI],AX

   MOV BX,[F_HD]    ;------------------调用DOS中断,关闭文件,BX=关闭文件句柄
   MOV AH,3EH
   INT 21H          ;------------------如果CF==0,关闭成功,CF==1关闭失败

   JNC CTN            ;----------------关闭失败,显示失败信息
   MOV DX,OFFSET MSG3
   MOV AH,09H
   INT 21H

  CTN:               ;-----------------程序结束
 EXIT:   
   MOV AH,08H
   INT 21H
   MOV AH,4CH
   INT 21H
CODE ENDS
END START

中断3EH功能:关闭指定句柄的文件
入口参数:AH=3EH
BX=文件句柄
出口参数:CF=0——关闭成功,否则,AX=错误号(06H),其含义见错误代码表
我不明白的是,程序中打开文件成功了,AX==文件句柄,然后我将文件句柄赋值给BX,最终文件确关闭失败(失败后我用DEBUG看到AX==0006),为什么???求大神帮助
搜索更多相关主题的帖子: 1024 成功 Failed 
2012-08-14 00:19
Agdmeg
Rank: 4
来 自:四川成都
等 级:业余侠客
威 望:3
帖 子:101
专家分:201
注 册:2011-8-9
收藏
得分:0 
哪位大神能帮我啊???
2012-08-14 00:50
Agdmeg
Rank: 4
来 自:四川成都
等 级:业余侠客
威 望:3
帖 子:101
专家分:201
注 册:2011-8-9
收藏
得分:0 
怎么又没人???
2012-08-14 01:46
Agdmeg
Rank: 4
来 自:四川成都
等 级:业余侠客
威 望:3
帖 子:101
专家分:201
注 册:2011-8-9
收藏
得分:0 
问题解决了,结贴
2012-08-14 02:25
Agdmeg
Rank: 4
来 自:四川成都
等 级:业余侠客
威 望:3
帖 子:101
专家分:201
注 册:2011-8-9
收藏
得分:0 
我不是看的王爽的汇编,自学的,楼上代码错在哪里我也不知道,可能跳转有问题,我将程序写成子程序就正确了,然后
写了个文件复制程序,小有成就,将C:\TEMP\123.jpg文件50Kb的内容直接复制到C:\TEMP\12.txt,用WinHEX查看两个文件,一模一样,由于能力有限,还有很多不足,只能给新手参考参考
代码:
DATA SEGMENT
   TEMP DB 1024*50 DUP(00H),0AH,0DH,"$"
   PATH1 DB "C:\File\12.txt","$"
   PATH2 DB "C:\File\123.jpg","$"
   ERR1 DB "Open File Failed !",0AH,0DH,"$"
   ERR2 DB "Write To File Error !",0AH,0DH,"$"
   ERR3 DB "Close File Error !",0AH,0DH,"$"
   ERR4 DB "Read File Error !",0AH,0DH,"$"
   MSG1 DB "Please enter any key...",0AH,0DH,"$"
   HANDLE DW ?
   FILEPATH DB 512 DUP(00H),0AH,0DH,"$"
DATA ENDS

STACK SEGMENT
   DB 64 DUP(00H)
STACK ENDS

CODE SEGMENT
   ASSUME CS:CODE,DS:DATA,SS:STACK
START:
   MOV AX,47104
   MOV DS,AX
   MOV SI,0000H
   MOV CX,2048
 LOOP1:
   MOV DS:[SI+1],70H
   INC SI
   INC SI
   LOOP LOOP1
   MOV AX,DATA
   MOV DS,AX
   LEA DX,PATH2
   CALL LDFPATH
   MOV CX,51200
   CALL RdFile
   CALL CLFPATH
   MOV DX,OFFSET PATH1
   CALL LDFPATH
   MOV CX,51200
   CALL WtFiLe
   CALL DISP_FP
   JMP EXIT

ERROR1:
   LEA DX,ERR1
   MOV AH,09H
   INT 21H
   JMP EXIT
ERROR2:
   LEA DX,ERR2
   MOV AH,09H
   INT 21H
   JMP EXIT
ERROR3:  
   LEA DX,ERR3
   MOV AH,09H
   INT 21H
   JMP EXIT
ERROR4:  
   LEA DX,ERR4
   MOV AH,09H
   INT 21H
   JMP EXIT

RdFile PROC NEAR
   PUSH BX
   PUSH DX
   PUSH AX
   MOV AL,2
   MOV AH,3DH
   LEA DX,FILEPATH
   INT 21H
   JC ERROR1
   MOV HANDLE,AX
   MOV BX,HANDLE
   LEA DX,TEMP
   MOV AH,3FH
   INT 21H
   JC ERROR4
   MOV AH,3EH
   MOV BX,HANDLE
   INT 21H
   JC ERROR3
   POP AX
   POP DX
   POP BX
   RET
RdFile ENDP

WtFile PROC NEAR
   PUSH AX
   PUSH BX
   PUSH DX
   MOV AL,2
   MOV AH,3DH
   LEA DX,FILEPATH
   INT 21H
   JC ERROR1
   MOV HANDLE,AX
   MOV BX,HANDLE
   MOV AH,40H
   MOV BX,HANDLE
   LEA DX,TEMP
   INT 21H
   JC ERROR2
   MOV AH,3EH
   MOV BX,HANDLE
   INT 21H
   JC ERROR3
   POP DX
   POP BX
   POP AX
   RET
WtFile ENDP

CLFPATH PROC NEAR
   PUSH SI
   PUSH CX
   LEA SI,FILEPATH
   MOV CX,512
  LP:
   MOV DS:[SI],00H
   INC SI
   LOOP LP
   POP CX
   POP SI
   RET
CLFPATH ENDP

LDFPATH PROC NEAR
   PUSH DI
   PUSH SI
   PUSH DX
   PUSH AX
   MOV DI,OFFSET FILEPATH
   MOV SI,DX
  NET:
   MOV AL,DS:[SI]
   CMP AL,24H
   JZ EXT
   MOV DS:[DI],AL
   INC SI
   INC DI
   JMP NET
  EXT:
   POP AX
   POP DX
   POP SI
   POP DI
   RET
LDFPATH ENDP

DISP_TP PROC NEAR
   PUSH DX
   PUSH AX
   MOV DX,OFFSET TEMP
   MOV AH,09H
   INT 21H
   POP DX
   POP AX
   RET
DISP_TP ENDP

DISP_FP PROC NEAR
   PUSH DX
   PUSH AX
   MOV DX,OFFSET FILEPATH
   MOV AH,09H
   INT 21H
   POP DX
   POP AX
   RET
DISP_FP ENDP

EXIT:   
   LEA DX,MSG1
   MOV AH,09H
   INT 21H
   MOV AH,08H
   INT 21H
   MOV AH,4CH
   INT 21H
CODE ENDS
END START
2012-08-14 15:54
Agdmeg
Rank: 4
来 自:四川成都
等 级:业余侠客
威 望:3
帖 子:101
专家分:201
注 册:2011-8-9
收藏
得分:0 
42H=01000010,也就是读写方式,不拒绝任何操作啊,AL赋值为1我试过,好像也不对

[ 本帖最后由 Agdmeg 于 2012-8-14 22:18 编辑 ]
2012-08-14 22:12
快速回复:汇编菜鸟又遇到问题了,求大神帮助
数据加载中...
 
   



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

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