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

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║ Lesson 4 Part 020  F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5.                ┌────────────────────────────────┐
  6.                │  Review of Return Stack Words  │
  7.                └────────────────────────────────┘
  8.  
  9. The Words:  >R  R>  and  R@  are used for accessing the return stack.
  10.  
  11. These words are very dangerous!! Do NOT test or execute them
  12. interactively. They can only be used within colon definitions.
  13.  
  14. Note:   ( P: inputs -- outputs ) Indicates parameter or data stack,
  15.         ( R: inputs -- outputs ) Indicates return stack.
  16.  
  17. \ Transfer top data stack item to return stack.
  18.   >R  ( P: n   -- ) ( R: --   n )
  19. \ Transfer top return stack item to data stack.
  20.   R>  ( P: --   n ) ( R: n   -- )
  21. \ Copy top return stack item to data stack.
  22.   R@  ( P: --   n ) ( R: n   n  )
  23.  
  24.               ┌─────────────────────┐
  25.               │  Return stack Rules │
  26.               └─────────────────────┘
  27.  
  28. 1. Each use of >R must be balanced with a corresponding R>.
  29. 2. Do not use >R R> and R@ within DO ... LOOPs.  Loop control
  30.    information is kept on the return stack and could be destroyed.
  31.  
  32. Here is an application of the Return Stack in the following
  33. solution to problem 3.30 of Lesson 3.
  34.  
  35. Write a word that calculates the area of a triangle
  36. using HERO's formula.   A = sqrt[ s(s-a)(s-b)(s-c) ]
  37. where  s is the semi perimeter.  s = (a+b+c)/2
  38.  
  39. \   Solution to problem 3.30
  40. : AREA  ( a b c   area )
  41.         3DUP + +  2/ >R       ( a b c  )
  42.         R@ 3 ROLL -           ( b c s-a )
  43.         R@ 3 ROLL -           ( c s-a s-b )
  44.         R@ 3 ROLL -           ( s-a s-b s-c )
  45.         * * R> *  SQRT
  46.         CR  ." Triangle area is " . ;
  47.  
  48. \ Warning!  You cannot factor  the R@ 3 ROLL -   out of the
  49. \ above definition.  All user access to the return stack must
  50. \ occur within one word  as FORTH uses the return stack to nest
  51. \ the calling  words return address.
  52.  
  53. Can you give a solution that does not use the return stack?
  54.  
  55.                   ┌──────────────────────┐
  56.                   │   Memory Operators.  │
  57.                   └──────────────────────┘
  58.  
  59. It is time for us to learn somthing about how Forth and F-PC organize
  60. memory.  We will begin our investigation with Forth in Hex mode.
  61. The following is not intended to be a complete picture of what happens
  62. when you make a colon definition in F-PC, it is just intended to be a
  63. start.  Every time we make a colon defintion in F-PC information is
  64. stored in three areas memory areas or memory segments.  The largest
  65. piece, area, chunck or segment of memory that the 8086 can address with
  66. a 16 bit address is 64K or 65,535 bytes. So in order to address more
  67. memory the 8086 has segment registers that can point to 64K chunks or
  68. segments of memory.  F-PC takes advantage of these features by keeping
  69. information about defintions that are made in three separate segments of
  70. memory.  These three segments are called:
  71.  
  72. The CODE segment, The Header segment, and The List segment.
  73.  
  74. Every time we make a colon defintion, each of the above three memory
  75. areas or segments receives the appropriate information about the new
  76. word definition. Let's concentrate on the CODE segment first.  Every new
  77. word that we make stores information in the code segment.  It is called
  78. the CODE segment because this is the segment that contains all of the
  79. 8086 machine code for the Forth system.
  80.  
  81. We can find out the location of the next available memory loacation in
  82. the code segment by executing the word  HERE .   HERE returns a pointer
  83. or the address of the next available free memory location in the code
  84. segment.  We like to work in the HEX mode when we are investigating
  85. actual memory contents so put your Forth system in hex mode and try some
  86. of the following exercises.
  87.  
  88. HEX HERE U.   <enter> 74D8  ok
  89. : MESSAGE ." HELLO" ; <enter> ok
  90. HERE U.       <enter> 74DD  ok
  91. 74DD 74D8 - . <enter> 5  ok
  92. HERE U.       <enter> 74DD ok
  93. : QUOTE ." THE QUICK BROWN FOX JUMPED OVER THE DOG" ;  <enter> ok
  94. HERE U. 74E2  <enter> ok
  95. 74E2 74DD - . <enter> 5  ok
  96.  
  97. The address that you get when you execute will probably be different
  98. than mine.  It depends on which version of F-PC you are using and how
  99. many new words you have added to your system.  The thing to notice above
  100. is that each new colon definition takes exactly 5 bytes in the CODE
  101. segment.
  102.  
  103. ┌────────────────────────────────────┐
  104. │  Please move to Lesson 4 Part 030  │
  105. └────────────────────────────────────┘
  106.