我是使用DosBox学习8086汇编语言的初学者。我正在使用 int21h 函数 3dh 打开数据文件,如果文件打开成功,我想使用文件处理程序执行代码,如果文件未成功打开,则退出。它的工作方式与正常情况一样,如果打开文件则设置进位标志,否则清除。然而,在 IRET 指令之后,它将标志重置回 int21h 发生之前的状态。有什么方法可以通过阻止 IRET 重置标志来使用进位标志吗?
这是代码
MOV AH,3DH
MOV AL,0
LEA DX,SYSFILENAME
INT 21H
JC DATAFILENOTFOUND
MOV FILEHANDLE,AX
我搜索了一些帖子,我找不到任何与我的帖子相同的帖子。我是否忘记做某事或什么?
iret
指令通过将标志从堆栈弹出到标志寄存器中来将 CF 重置回之前的状态。如果您想在从中断处理程序返回时将 CF 设置为定义的值,请修改堆栈上 CF 的副本,如下所示:
MOV BP, SP ; obtain access to stack
AND BYTE PTR [BP+4], 0FEh ; clear CF on the stack
OR BYTE PTR [BP+4], 1 ; set CF on the stack
...
IRET ; return from interrupt with CF modified