Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
en:multiasm:papc:chapter_6_10 [2025/10/31 17:07] – [Table] ktokarzen:multiasm:papc:chapter_6_10 [2026/02/18 11:29] (current) – [Basic arithmetic instructions] ktokarz
Line 109: Line 109:
 | **fdivp** |  ST(1) / ST(0)  |  ST(1)  |  yes  | | **fdivp** |  ST(1) / ST(0)  |  ST(1)  |  yes  |
 </table> </table>
-The addition and multiplication operations are commutative, while subtraction and division are not. That's why the reversed versions of subtraction and addition are implemented. The difference is the order of operations, while the destination remains the same as in non-reversed versions.+The addition and multiplication operations are commutative, while subtraction and division are not. That's why the reversed versions of subtraction and division are implemented. The difference is the order of operations, while the destination remains the same as in non-reversed versions.
  
 <table frevarithmetic> <table frevarithmetic>
Line 168: Line 168:
 <table ftrans> <table ftrans>
 <caption>Transcendental arithmetic instructions</caption> <caption>Transcendental arithmetic instructions</caption>
-^ Mnemonic     ^ operation                              ^ note                    ^+^ Mnemonic     ^ operation                              ^ note on operands        ^
 | **f2xm1**    | {{ :en:multiasm:cs:f2xm1.png?105 }}    |                         | | **f2xm1**    | {{ :en:multiasm:cs:f2xm1.png?105 }}    |                         |
 | **fyl2x**    | {{ :en:multiasm:cs:fyl2x.png?105 }}    | y is ST(1); x is ST(0)  | | **fyl2x**    | {{ :en:multiasm:cs:fyl2x.png?105 }}    | y is ST(1); x is ST(0)  |
Line 174: Line 174:
 </table> </table>
  
 +===== FPU control instructions =====
 +The FPU control instructions help the programmer to save and restore the contents of chosen registers if there is a need to use them in an interrupt handler or inside a function. It is also possible to initialise the state of the FPU unit or clear errors.
 +The **fincstp** increments and **fdecstp** decrements the FPU register stack pointer.
 +The following set of instructions can perform error checking while execution (instructions without "N") or perform the operation without checking for error conditions (instructions without "N").
 +The **finit** and **fninit** initialise the FPU (after checking error conditions or without checking error conditions).
 +The **fclex** and **fnclex** clear floating-point exception flags.
 +The **fstcw** and **fnstcw** store the FPU control word.
 +The **fldcw** loads the FPU control word.
 +The **fstenv** and **fnstenr** store the FPU environment. The environment consists of the FPU control word, status
 +word, tag word, instruction pointer, data pointer, and last opcode register.
 +The **fldenv** loads the FPU environment.
 +The **fsave** and **fnsave** save the FPU state. The state is the operating environment and full register stack.
 +The **frstor** restores the FPU state.
 +The **fstsw** and **fnstsw** store the FPU status word. There is no instruction for restoring the status word.
 +The **wait** or **fwait** waits for the FPU to finish the operation.
 +The **fnop** instruction is the no operation instruction for the FPU.
en/multiasm/papc/chapter_6_10.1761923272.txt.gz · Last modified: by ktokarz
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0