Masm32 SDK description, downloads and other helpful links
Message to All Guests

Main Menu

FPU shortcuts/behavior.

Started by FORTRANS, December 06, 2012, 02:10:54 AM

Previous topic - Next topic



   In another posting, I mentioned some defaul behavior
of MASM with regard to FPU instructions.  There are some
instructions that have a shortcut form.  To refesh my
memory, I coded up the ones that look likely to be useful.

   And a few other tests as well, just to test some coding
standards.  Note that the ones that cause an error prevent
an object file being created.

Microsoft (R) Macro Assembler Version 6.14.8444     12/05/12 08:50:08
FPU Question      Page 2 - 1


0005  9B DC C1         FADD    ST(1),ST
0008  9B DE C1         FADDP   ST(1),ST        ; Same as FADD no operand form.
000B  9B DE C1         FADD

000E  9B D8 C1         FADD    ST,ST(1)        ; Shows you can muck about with operand order.
        FADDP   ST,ST(1)        ; Shows you have to POP the stack top only.
fpubit.asm(43) : error A2070: invalid instruction operands
0011  9B DE C0         FADDP   ST,ST           ; What you end up with if you ignore error.
        FADD    ST(2),ST(1)     ; Shows you have to use the stack top.
fpubit.asm(45) : error A2070: invalid instruction operands
0014  9B DC C2         FADD    ST(2),ST

0017  9B DC E9         FSUB    ST(1),ST
001A  9B DE E9         FSUBP   ST(1),ST        ; Same as FSUB no operand form.
001D  9B DE E9         FSUB

0020  9B DC E1         FSUBR   ST(1),ST
0023  9B DE E1         FSUBRP  ST(1),ST        ; Same as FSUBR no operand form.
0026  9B DE E1         FSUBR

0029  9B DC C9         FMUL    ST(1),ST
002C  9B DE C9         FMULP   ST(1),ST        ; Same as FMUL no operand form.
002F  9B DE C9         FMUL

0032  9B DC F9         FDIV    ST(1),ST
0035  9B DE F9         FDIVP   ST(1),ST        ; Same as FDIV no operand form.
0038  9B DE F9         FDIV

003B  9B DC F1         FDIVR   ST(1),ST
003E  9B DE F1         FDIVRP  ST(1),ST        ; Same as FDIVR no operand form.
0041  9B DE F1         FDIVR

0044  9B D8 D1         FCOM    ST(1)
0047  9B D8 D9         FCOMP   ST(1)           ; Not the same as the FCOM no operand form.
004A  9B D8 D1         FCOM
004D  9B D8 D9         FCOMP

   I hope this is useful to others.  Tested with versions 3.0,
5.0, and 6.14.  I believe that many other assemblers also
follow these defaults.


Steve N.


Raymond covers most, if not all, of these in his tutorial
they just aren't all in one place
the detail for each instruction mentions the default and MASM behaviour