8086 family CPU bug
Hugh Redelmeier
hugh at hcrvx1.UUCP
Tue Jul 16 02:57:10 AEST 1985
In article <190 at stl.UUCP> dww at stl.UUCP (David Wright) writes:
>1 - If I remember rightly, the 8086 (et al) Users Guides say that for count of
>0 "the result is undefined" - in practice you seem to have discovered that the
>result is <do nothing> (not even set flags). I think it is very bad to have
>undefined results unnecessarily, but at least it's a "feature" not a bug
>(a "feature" is a bug that you documented .... ).
As I said in my original posting "All 8086 manuals I have read say...".
I guess I should have been more explicit. Here goes. I found the
various manuals were not easy to follow on this point. The discussion
is divided among several places. Here goes chapter and verse; these are
all the manuals I have acccess to (and the only ones the XENIX 2.1
C-compiler porters had access to too, I bet).
INTEL: MCS-86 User's Manual; 1978 January [marked preliminary]
4-16 under heading "SHIFTS":
"... and PF, SF, and ZF are set to reflect the result value."
under subheading "Mnemonic: SHL and SAL":
"Flags affected: CF, OF, PF, SF, ZF. AF undefined"
INTEL: 8086 Family User's Manual; 1979 October
2-35 (discussing arithmetic instructions and flags)
"- ZF (zero flag): If the result of an arithmetic or logical
operation is zero then ZF is set; otherwise ZF is cleared"
2-39 "Shift instructions affect the flags as follows:
... PF, SF and ZF are updated normally, as in logical
instructions."
2-65 says SAL/SAR do NOT affect ZF etc! But I know they do
affect ZF sometimes -- clearly this does not describe what
the chips do. Nor does this agree with the other quotes
from this same manual.
INTEL: iAPX 86, 88 User's Manual; 1981 July
same as previous manual EXCEPT:
2-65 SAR does set ZF. A documentation fix?
also in this manual:
2-8 "6) if ZF(the zero flag) is set, the result of the operation
is zero". This sentence seems to imply backwards causality!
Other flags are described in a similar way nearby.
INTEL: iAPX 88 Book; 1981 July
2-13 (discussing shifts) "... PF, SF, and ZF are set to reflect
the result value"
2-139 SAL affects ZF. This section does not say in what way the flag
is set (but then neither does the description of the ADD
instruction). Clearly 2-13 is the operative section.
<end of chapter-and-verse>
If newer manuals say something different, please tell me. I am also
curious about what the 286 actually does, since I understand that it
has fancy shifting hardware. (I just tried to find out, but after half
an hour, Xenix 3.0 has defeated me. I did learn that the 3.0 compiler
generates an explicit compare, so I had to try assembler. Unfortunately,
I couldn't get cc to accept as input a .s that it created.)
> I guess the C manual you're
>using didn't get round to documenting it - not Intel's fault if their "feature"
>wasn't recognised!
What is it that you feel the C manual should have said?
Hugh Redelmeier (416) 922-1937
{utzoo, ihnp4, decvax}!hcr!hugh
More information about the Net.bugs
mailing list