home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / tutor / l5p010 < prev    next >
Text File  |  1990-07-15  |  5KB  |  122 lines

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║ Lesson 5 Part 010  F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5.                 ┌───────────────────────┐
  6.                 │  Return Stack Review  │
  7.                 └───────────────────────┘
  8.  
  9. We covered a lot of material in Lesson 4.  So it would be wise for us to
  10. review the new words we introduced in Lesson 4.
  11.  
  12. Return Stack: D) indicates data stack,  R) indicates return stack.
  13.  
  14. >R  ( n -- D) ( -- n R)   Transfer top data stack item to return stack.
  15. R>  ( -- n D) ( n -- R)   Transfer top return stack item to data stack.
  16. R@  ( -- n D) ( n -- n R) Copy top return stack item to data stack.
  17.  
  18. Return Stack Rules:
  19. 1. Do not test or execute these words interactively.
  20. 2. Only use these words within colon definitions.
  21. 3. Each use of >R must be balanced with a corresponding R>.
  22. 4. Do not use >R R> and R@ within DO ... LOOPs.  Loop control
  23.    info is kept on the return stack and could be destroyed.
  24.  
  25.            ┌──────────────────────────┐
  26.            │  Memory  Operator Review │
  27.            └──────────────────────────┘
  28.  
  29. HERE    ( --     adr ) Leave address of next location in code seg.
  30. DUMP    ( adr n   -- ) Dump n bytes of memory starting at adr.
  31. ERASE   ( adr n   -- ) Erase n bytes of memory starting at adr
  32.                        to zeros.
  33. FILL  ( adr n m   -- ) Fill n bytes of memory starting at adr
  34.                        with low 8 bits of m ( 0 - 255 ).
  35.  
  36.   !     ( n adr   -- ) Store 16b value n at address adr.
  37.   @     ( adr     n  ) Fetch 16b value at adr and leave as n.
  38.  C!     ( n adr -- )   Store low 8 bits of n at address adr.
  39.  C@     ( adr -- n )   Fetch 8 bit value at adr and leave as n.
  40.   ?     ( adr  -- )    Display contents of cell at adr.
  41.  
  42.  
  43.  VARIABLE <name>  ( -- )    Create 16bit data storage called <name>.
  44.  CONSTANT <name>  ( n -- )  Create a constant  <name> whose
  45.                             value is  n.
  46.  
  47.   */  ( a b c -- a*b/c)  Form 32 bit product a*b and divide by c
  48.   +!     ( n adr -- )    Add n to the value found at address adr
  49.   ON     ( adr -- )      Set cell at adr to true or -1.
  50.   OFF    ( adr -- )      Set cell at addr to false or 0.
  51.  
  52.               ┌──────────────────────────────┐
  53.               │  Dictionary Operator Review  │
  54.               └──────────────────────────────┘
  55.  
  56. CREATE  <name> ( -- )    Creates a dictionary entry named <name>
  57.                          When executed, <name> leaves the address
  58.  <name>    ( -- adr)     of the first memory cell which follows
  59.                          the word name.  No memory is allocated.
  60.  
  61. ALLOT         ( n  -- )  Allocate n bytes of memory in the
  62.                          dictionary.
  63.   ,           ( n   -- ) Allocate 16 bits ( 2 bytes ) of memory
  64.                          initializing it to the value n.
  65.  C,           ( n   -- ) Allocate 8 bits ( 1 byte ) of memory
  66.                          initializing it to low 8 bits of n.
  67.  
  68.             ┌─────────────────────────┐
  69.             │  Double Operator Review │
  70.             └─────────────────────────┘
  71.  
  72. 2VARIABLE   <name>      Creates a 2 cell ( 4 byte ) variable
  73.                         called <name>.
  74. <name>    ( --   adr )  When <name> is executed it will push the
  75.                         address of the first cell onto the stack
  76.  
  77. 2CONSTANT   <name>      Creates a double constant called <name>
  78.             ( d -- )    with the initial value of d
  79. <name>      ( -- d )    When <name> is executed the double
  80.                         number is pushed to the data stack.
  81.  
  82. 2!      ( d  adr   -- ) Store the double number d at adr.
  83. 2@      ( adr      d  ) Fetch the double number d from adr.
  84.  
  85.  
  86.            ┌─────────────────────────────────┐
  87.            │  From Smith's file DMULDIV.SEQ  │
  88.            └─────────────────────────────────┘
  89.  
  90. For dividing and unsigned 64-bit dividend by an unsigned 32-bit divisor
  91. to yield an unsigned 32-bit quotient and unsigned 32-bit remainder:
  92.  
  93. UMD/MOD ( uqdividend uddivisor -- udremainder udquotient )
  94. UMD*    ( ud1 ud2 -- uq )    uq is the unsigned 64 bit product.
  95. D*      ( d1 d2 -- dn )      dn is the signed 32 bit product of d1 and d2.
  96.  
  97. \ Some standard double aritmetic words built on those in DMULDIV.SEQ
  98.  
  99. Unsigned 32 bit division.
  100.  
  101. : UD/MOD ( ud1 ud2 -- udr udq )  0. 2SWAP UMD/MOD  ;
  102. : UD/    ( ud1 ud2 -- udq )      UD/MOD  2SWAP 2DROP ;
  103. : UDMOD  ( ud1 ud2 -- udr )      UD/MOD  2DROP ;
  104.  
  105. Signed Forth 83 floored style double division operators.
  106.  
  107. D/MOD ( ddividend ddivisor -- dremainder dquotient )
  108. D/    ( ddividend ddivisor -- dquotient )
  109. DMOD  ( ddividend ddivisor -- dremainder )
  110.  
  111. 32-bit unsigned radicand to 16-bit unsigned square root
  112.  
  113. SQRT ( ud -- un )   un is the 16-bit square root of 32-bit ud.
  114.  
  115. Definitions of the signed floored double division operators were
  116. given as Problem 4.23 See solution provided. The definition of square
  117. root was given in lesson 4 part 17.
  118.  
  119. ┌────────────────────────────────────┐
  120. │  Please move to Lesson 5 Part 020  │
  121. └────────────────────────────────────┘
  122.