markd@silogic.UUCP (Mark DiVecchio) (09/26/90)
I'v been writing assembly language programs for years and I continue
to use the macro described in the next paragraph mostly out of fear.
Does anyone know if I should still worry about the problem worked
around by the macro?
;
; For the PC-AT:
; POPF macro described in the IBM Personal Computer
; Seminar Proceedings Volume 2, Number 4 September 1984
; QUOTE
; "If the system microprocessor executes a POPF instruction in either
; the real or the virtual address mode with CPL <= IOPL, then a
; pending maskable interrupt (the INTR pin active) may be improperly
; recognized after executing the POPF instruction even if maskable
; interrupts were disabled before the POPF instruction and the value
; popped had IF=0. If the interrupt is improperly recognized, the
; interrupt is still correctly executed. This errata has no effect
; when interrupts are enabled in either real or virtual address mode.
; The errata has no effect in the virtual address mode when
; CPL > IOPL."
;
popff macro ;use POPFF instead of POPF
local popem,skip
;simulate popping flags using IRET
jmp short skip ;jump around iret
popem:
iret ;pop CS,IP,flags
skip:
push CS
call popem ;call within segment
;program will continue here
endm
--
Mark DiVecchio, Silogic Systems, 619-549-9841 K3FWT
----- 9888 Carroll Center Road, Suite 113, San Diego, CA 92126 -----
markd@silogic BBS 619-549-3927
...!ucsd!celerity!celit!silogic!markd celerity!silogic!markd@ucsd.edu