1.20 Arrays
C.LT.Dcompares two values.LTis the condition “Less Than”.Dimplies values of typedouble. Depending
on the result of the comparison, the FCC0 condition bit is either set or cleared.
BC1Tchecks the FCC0 bit and jumps if the bit is set.Tmeans that the jump is to be taken if the bit is set
(“True”). There is also the instructionBC1Fwhich jumps if the bit is cleared (“False”).
Depending on the jump, one of function arguments is placed into $F0.
1.19.8 Some constants
It’s easy to find representations of some constants in Wikipedia for IEEE 754 encoded numbers. It’s
interesting to know that 0.0 in IEEE 754 is represented as 32 zero bits (for single precision) or 64 zero bits
(for double). So in order to set a floating point variable to 0.0 in register or memory, one can useMOVor
XOR reg, reginstruction. This is suitable for structures where many variables present of various data
types. With usual memset() function one can set all integer variables to 0, all boolean variables tofalse,
all pointers to NULL, and all floating point variables (of any precision) to 0.0.
1.19.9 Copying.
One may think inertially thatFLD/FSTinstructions must be used to load and store (and hence, copy) IEEE
754 values. Nevertheless, same can be achieved easier by usualMOVinstruction, which, of course, copies
values bitwisely.
1.19.10 Stack, calculators and reverse Polish notation
Now we understand why some old calculators use reverse Polish notation^130.
For example, for addition of 12 and 34 one has to enter 12, then 34, then press “plus” sign.
It’s because old calculators were just stack machine implementations, and this was much simpler than to
handle complex parenthesized expressions.
1.19.11 80 bits?.
Internal numbers representation in FPU — 80-bit. Strange number, because the number not in 2 nform.
There is a hypothesis that this is probably due to historical reasons—the standard IBM puched card can
encode 12 rows of 80 bits. 80 ⋅ 25 text mode resolution was also popular in past.
Wikipedia has another explanation:https://en.wikipedia.org/wiki/Extended_precision.
If you know better, please a drop email to the author: [email protected].
1.19.12 x64.
On how floating point numbers are processed in x86-64, read more here:1.31 on page 427.
1.19.13 Exercises.
1.20 Arrays
An array is just a set of variables in memory that lie next to each other and that have the same type^131.
(^130) wikipedia.org/wiki/Reverse_Polish_notation
(^131) AKA“homogeneous container”