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

汇编菜鸟,我用JNC指令又出问题了,求大神帮助

Agdmeg 发布于 2012-08-11 13:41, 2598 次点击
DATA SEGMENT
   S  DB "ERROR !",0DH,0AH,"$"
DATA ENDS
CODE SEGMENT
     ASSUME CS:CODE,DS:DATA
START:
     CLC
     MOV AX,DATA
     MOV DS,AX

     MOV AH,47H   ;DOS的47H中断
     INT 21H

     JNC NEXT     根据47H中断结果是否显示错误“EEROR !"

     MOV DX,OFFSET S
     MOV AH,09H
     INT 21H

NEXT:     
     MOV AH,4CH
     INT 21H
CODE ENDS
END START
运行后显示:
只有本站会员才能查看附件,请 登录

显示EEROR !说明程序中没有跳转,然后DEBUG,输入G然它运行到47H中断完成停止,
但看到CF=0,那就应该跳转吧,为什么运行是没有跳转??
只有本站会员才能查看附件,请 登录
12 回复
#2
zklhp2012-08-11 14:10
不懂 帮顶
#3
Agdmeg2012-08-11 14:53
版主一定懂的,我刚学汇编,就遇到一堆问题,版主这么热心,一定要帮帮我啊
#4
zklhp2012-08-11 14:58
其实我真不懂啊 主要是神马47中断是干啥的我不知道。。
#5
Agdmeg2012-08-11 15:15
我只是想得到当前目录完全字符串,于是百度文库下了DOS中段列表,BIOS中断列表,在DOS中断列表中查到:

(4)、功能47H
功能描述:取当前目录的完全路径字符串
入口参数:AH=47H
DL=驱动器号(0=缺省,1=A,…)
DS:SI=存放当前目录字符串的地址
出口参数:CF=0——读取成功,否则,AX=错误号(0FH),其含义见错误代码表

其实我是想写个程序打开当前程序文件夹内另一个文件,我想这必须要得到当前目录的完全路径,看到47H这个可以,没想到一试就出现这莫名其妙的问题
#6
Agdmeg2012-08-11 15:17
书上的中段列表不全,只是常用的,所以在百度文库下载了全面的DOS,BIOS中断列表
#7
Agdmeg2012-08-11 15:19
版主一定要帮帮我啊,这汇编真TM扯淡,明明CF=0应该跳转,可程序运行就没有跳
#8
zklhp2012-08-11 15:23
我觉得出错是正常的 你中断调用写的不对罢
#9
zklhp2012-08-11 15:23
以下是引用Agdmeg在2012-8-11 15:15:44的发言:

我只是想得到当前目录完全字符串,于是百度文库下了DOS中段列表,BIOS中断列表,在DOS中断列表中查到:

(4)、功能47H
功能描述:取当前目录的完全路径字符串
入口参数:AH=47H
DL=驱动器号(0=缺省,1=A,…)
DS:SI=存放当前目录字符串的地址
出口参数:CF=0——读取成功,否则,AX=错误号(0FH),其含义见错误代码表

其实我是想写个程序打开当前程序文件夹内另一个文件,我想这必须要得到当前目录的完全路径,看到47H这个可以,没想到一试就出现这莫名其妙的问题

入口参数:AH=47H
DL=驱动器号(0=缺省,1=A,…)
DS:SI=存放当前目录字符串的地址

入口参数有三个 你写了几个
#10
Agdmeg2012-08-11 15:33
入口参数我也不明白,尤其是DL,我是因为不知道程序当前目录路径在哪才用的47H中断,而DL要我指定驱动器,程序可能在我电脑中在C盘,但被人运行我的程序不一定就在C盘啊,我怎么指定?
#11
Agdmeg2012-08-11 15:37
DS:SI入口参数我明白,但我运行时我想SI已经是0000H,所以没必要了吧
#12
Agdmeg2012-08-11 16:42
代码改了,加入了参数,可仍然在JNC位置有问题
DATA SEGMENT
   S  DB "AAAAAAAAAAAAAA",0DH,0AH,"$"
DATA ENDS
CODE SEGMENT
     ASSUME CS:CODE,DS:DATA
START:
     CLC          ;程序初始化
     MOV AX,DATA  
     MOV DS,AX

     MOV DL,00H   ;中断的三个入口参数
     MOV SI,0000H
     MOV AH,47H   

     INT 21H     ;中断

     JNC NEXT    ;运行结果判断是否显示“AAAAAAAAAAAAAA”并退出程序
     MOV DX,OFFSET S
     MOV AH,09H
     INT 21H
     JMP EXIT

NEXT:     ;中断正确显示出目录路径
     MOV DX,SI
     MOV AH,09H
     INT 21H

EXIT:   
     MOV AH,4CH
     INT 21H
CODE ENDS
END START

运行后:
只有本站会员才能查看附件,请 登录

很明显,程序依然没有跳转,先是显示了14个A,然后将文件路径asm显示出来(我的程序的确在C:\ASM文件夹中)后,覆盖掉了4个A,那就是说MOV AH,47H      int  21H这是运行成功了的,但怎么JNC依然没有跳转,我将JNC改为JC运行结果和JNC一样,真不明白,JNC、JC指令要怎么用????

[ 本帖最后由 Agdmeg 于 2012-8-11 16:49 编辑 ]
#13
Agdmeg2012-08-11 16:52
既然都显示了14个A,那为什么JMP指令没起作用
1