home *** CD-ROM | disk | FTP | other *** search
- /FHQ15: What are Exceptions 12 and 13?/FB
-
-
-
- An exception 12 (or 13) is caused by the program you are running doing
- something that it is not allowed to do on a 80386 while in Virtual 8086
- (V86) mode. Since QEMM is the 386 ``control program,'' it can only
- report the error caused by the user program. The main cause is operand
- wrapping past the last address in segment, 65,535 (FFFF in hex)
-
-
-
- Note that exceptions are only reported by QEMM, and are not caused by
- either QEMM or DESQview. They are caused by old programs that assume
- they are running on an 80286 or less; or by a program that ``crashed''.
-
-
-
- From the INTEL ``80386 Programmer's Reference Manual,''
-
- /ML4/PART III - COMPATIBILITY
-
- /ML4/chapter 15, VIRTUAL 8086 MODE
-
- /ML4/Section 15.6 DIFFERENCES FROM 8086
-
- /ML4/Stated ``reasons'' 6, 7 & 8
-
- /ML4/(pages 15-10 & 15-11)
-
- /ML-20/Quoting from the INTEL manual:
-
- /ML4/15.6 DIFFERENCES FROM 8086
-
- In general, V86 mode will correctly execute software designed for
- the 8086, 8088, 80186 and 80188. Following is a list of the minor
- differences between 8086 execution on the 80386 and on an 8086.
-
-
-
- /ML4/... (only those causing exception 12 or 13 are listed)
-
-
-
- /ML-4/6. Redundant prefixes.
-
- The 80386 sets a limit of 15 bytes on instruction length. The only
- way to violate this limit is by putting redundant prefixes before
- an instruction. Exception 13 occurs if the limit on instruction
- length is violated. The 8086//8088 has no instruction limit.
-
-
-
- 7. Operand crossing offset 0 or 65,535.
-
- On the 8086, an attempt to access a memory operand that crosses
- offset 65,535 (e.g., MOV a word to offset 65,535) or offset 0
- (e.g., PUSH a word when SP = 1) causes the offset to wrap around
- modulo 65,535. The 80386 raises an exception in these cases -
- exception 13 if the data segment (i.e., if CS, DS, ES, FS, or GS is
- being used to address the segment), exception 12 if the segment is
- a stack segment (i.e., if SS is being used.)
-
-
-
- 8. Sequential execution across offset 65,535.
-
- On the 8086, if sequence execution of instructions proceeds past
- offset 65,535, the processor fetches the next instruction byte from
- offset 0 of the same segment. On the 80386, the processor raises
- exception 13 in such a case.
-
-
-
- In order to fix an Exception 13, you can try to load the program causing
- it into a different area of memory. To do this, try increasing your
- FILES or BUFFERS, or loading some TSRs low rather than high, etc.
- However, the best solution is to contact the programmer. Another
- possible solution is to increase the amount of memory specified in
- Change A Program.
-