为什么IRET后进位不跳转

问题描述 投票:0回答:1

我是使用DosBox学习8086汇编语言的初学者。我正在使用 int21h 函数 3dh 打开数据文件,如果文件打开成功,我想使用文件处理程序执行代码,如果文件未成功打开,则退出。它的工作方式与正常情况一样,如果打开文件则设置进位标志,否则清除。然而,在 IRET 指令之后,它将标志重置回 int21h 发生之前的状态。有什么方法可以通过阻止 IRET 重置标志来使用进位标志吗?

这是代码

 MOV AH,3DH
 MOV AL,0
 LEA DX,SYSFILENAME
 INT 21H
 JC DATAFILENOTFOUND
 MOV FILEHANDLE,AX

我搜索了一些帖子,我找不到任何与我的帖子相同的帖子。我是否忘记做某事或什么?

assembly interrupt x86-16 dosbox bitflags
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.