私は割り込みを扱っていますが、コードの実行中にこの問題に直面しています:
DATA SEGMENT
INPUTV DW 0035H, 0855H, 2011H, 1359H
OUTPUTV DB 4 DUP(0)
DIVIDER DB 09
ERROR_FLAG DB 0
DATA ENDS
_STACK SEGMENT STACK
DW 100 DUP(0)
TOP_STACK LABEL WORD
_STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:_STACK
MAIN:
MOV AX, _STACK
MOV SS, AX
MOV SP, OFFSET TOP_STACK
MOV AX, DATA
MOV DS, AX
MOV AX, 0000H
MOV ES, AX
MOV WORD PTR ES:0002, SEG INT_PROC ;PUSHING CS TO STACK
MOV WORD PTR ES:0000, OFFSET INT_PROC ;PUSHING IP TO STACK
MOV SI, OFFSET INPUTV
MOV BX, OFFSET OUTPUTV
MOV CX, 4H
REPEAT:
MOV AX, [SI]
DIV DIVIDER
CMP ERROR_FLAG, 1H
JE ERROR_ENCOUNTER
MOV [BX], AL
JMP SKIP
ERROR_ENCOUNTER:
MOV BYTE PTR [BX], 0H
MOV ERROR_FLAG, 0H
SKIP:
ADD SI,2
INC BX
LOOP REPEAT
INT 3H
CODE ENDS
INT_SEG SEGMENT
ASSUME CS:INT_SEG
INT_PROC PROC
MOV ERROR_FLAG, 1
IRET
INT_PROC ENDP
INT_SEG ENDS
END MAIN
プログラムが IRET 命令から ISR (ここでは INT_PROC) から戻った後
INT_PROC PROC
MOV ERROR_FLAG, 1
IRET
次の行を実行しています:
DIV DIVIDER
それが行くはずだった間、何度も何度も:
CMP ERROR_FLAG, 1H
同じことを言っているフォーラムでこれを見つけました:
割り込みハンドラを返した後、プログラムカウンタはどこに行きますか?
なぜそれが起こっているのですか?どうすれば解決できますか?助けてください。