WNOS hangup/unload ( WNOS3A9 )
- To: "Bob Austin" <RWAUSTIN@GDLVM2.VNET.IBM.COM>
- Subject: WNOS hangup/unload ( WNOS3A9 )
- From: "Jerzy Tarasiuk" <JT@zfja-gate.fuw.edu.pl>
- Date: Wed, 29 Jan 92 13:36:23 PST
The instruction (26 8b 17 ...) is valid opcode (MOV DX,ES:[BX]).
However, in some circuimstances it may cause CPU exception interrupt.
In Protected Mode reason may be: insufficient segment length or segment
ES not readable, Page Fault. In Real Mode the only reason may be access
to address above segment limit - it is possible if BX=FFFF.
If it occurs in same circuimstances in both modes (when NOS is used in
DOS and when it runs under DesqView) probable reason is BX=FFFF.
It causes access to two bytes: ES:FFFF - OK, ES:10000 - outside limit.
Result is general protection exception (interrupt 0D) with stack:
IP (BEFORE the instruction), CS, Flags (Real Mode only).
Because return address is the failing instruction, IRET causes it to
be executed again; furthermore, CPU disables interrupts when services
the exception and (probably) after the IRET for one instruction, so
if vector 0D points to an IRET then interrupts are disabled forever...
Does DesqView show where the failing instruction is ? If not, I can
write short program which will show it. If an address is known, you
can look .MAP to see where it is and find the place in sources...
The access to stack above BP: just in this case a routine has parameter
(if LARGE model is used, it is its first parameter) which type is pointer
(most probably), or long integer and it modifies its parameter on stack.
It is nothing odd and many routines in KA9Q's NET do it.
*** *** * * * * * * *** *** * *** *** *** *** JT