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

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║ Lesson 3 Part 040  F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5.  
  6. In part 3 of lesson 4 we introduced the words DECIMAL  OCTAL and HEX for
  7. switching the radix of Forth's number system to 10, 8 and 16
  8. respectively.  These words are included as part of the F-PC system.
  9. However F-PC does not include a word to set the radix to 2 so that we
  10. can study binary or base 2 numbers.  We can easily make a word called
  11. BINARY that will switch the radix to 2.
  12.  
  13. : BINARY ( -- )  2 BASE ! ;
  14.  
  15. In this definition BASE is a Forth variable that contains the system
  16. radix.  We are not going to discuss variables at this time as we prefer
  17. to give you plenty of time to become familiar with Forth's parameter
  18. stack before introducing CONSTANTS and VARIABLES.  But we will say this
  19. much....  " ! " means store and the action of BINARY is to store the
  20. number 2 in the system variable BASE.  If you are curious VIEW  DECIMAL
  21. to see how it is defined.
  22.  
  23. Some examples:
  24. DECIMAL  15 BINARY . <enter> 1111  ok
  25. DECIMAL 255 BINARY . <enter> 11111111  ok
  26. DECIMAL 255 HEX    . <enter> FF  ok
  27.  
  28. The only problem in using these words to see what decimal numbers look
  29. like in binary , hex and octal is that the procedure is clumsy.  We must
  30. first make sure that we are in DECIMAL, enter the number, switch to the
  31. base we are interested in, display the number and then switch back to
  32. DECIMAL again...  Let's make some words to make the switch faster.
  33.  
  34. :  .H ( n -- ) HEX     . DECIMAL ;  \ Display top number in HEX
  35. : U.H ( n -- ) HEX    U. DECIMAL ;  \ Display top as unsigned HEX
  36. :  .O ( n -- ) OCTAL   . DECIMAL ;  \ Display top number in OCTAL
  37. : U.O ( n -- ) OCTAL  U. DECIMAL ;  \ Display top as unsigned OCTAL
  38. :  .B ( n -- ) BINARY  . DECIMAL ;  \ Display top number in BINARY
  39. : U.B ( n -- ) BINARY U. DECIMAL ;  \ Display top as unsigned BINARY
  40.  
  41. ╓──────────────╖
  42. ║ Problem 3.7  ║
  43. ╙──────────────╜
  44. Use the above definitions to display numbers in different bases and
  45. upload your results.  Why does each of the above definitions end with
  46. DECIMAL ?  Should there also be a word called .D that displays the top
  47. number in DECIMAL?
  48.  
  49. ╓──────────────╖
  50. ║ Problem 3.8  ║
  51. ╙──────────────╜
  52. Modify the table program you wrote in Problem 3.6 replacing the OCTAL
  53. output with BINARY output. Note, You may have to modify the column
  54. widths to get decent looking output.
  55.  
  56.                  ┌────────────────────────┐
  57.                  │  True and False Flags. │
  58.                  └────────────────────────┘
  59.  
  60. Forth has a family of words that allow us to determine if certain
  61. conditions are true or false.  To indicate that something is true Forth
  62. will leave a True Flag on the parameter stack.  To indicate that
  63. something is false Forth will leave a False Flag on the parameter stack.
  64.  
  65. In Forth a True Flag is just the number -1 decimal, FFFF hex or
  66. 1111111111111111 binary.  A false flag is just the number 0 decimal, 0
  67. hex or 0 binary.  Shown below are are the unsigned versions of True.
  68.  
  69. -1 U.B <enter> 1111111111111111  ok
  70. -1 U.H <enter> FFFF  ok            -1 U.  <enter> 65535  ok
  71.  
  72. Forth also has a word called TRUE that is used to make programs more
  73. readable.  The word TRUE could be simply defined as : TRUE -1 ;
  74.  
  75. TRUE U.B <enter> 1111111111111111  ok  TRUE U.H <enter> FFFF  ok
  76. TRUE U.  <enter> 65535  ok             TRUE  .  <enter> -1  ok
  77.  
  78. Forth also has a word called FALSE that could be defined  : FALSE 0 ;
  79.  
  80. FALSE U. <enter> 0  ok  FALSE U.H <enter> 0  ok  FALSE U.B <enter> 0  ok
  81.  
  82. TRUE and FALSE are used instead of -1 and 0 to make programs more
  83. readable.  Note that FALSE or 0 looks the same in all number bases.
  84.  
  85.                  ┌─────────────────────────────┐
  86.                  │  Logicals and Conditionals  │
  87.                  └─────────────────────────────┘
  88.  
  89. Listed below are Forth's Logical and conditional tests. In stack
  90. pictures we often use  " flag " , " f1 " , " f2 " etc for flags that
  91. could be either true of false. " tf " and " ff " are used for true flag
  92. and false flag respectively.
  93.  
  94.   TRUE  ( -- tf )         Leave true flag on top of data stack.
  95.   FALSE ( -- ff )         Leave false flag on top of data stack.
  96.   =     ( n m -- flag )   Leave tf if n = m , otherwise ff.
  97.   <>    ( n m -- flag )   Leave tf if n<> m , otherwise ff.
  98.   <     ( n m -- flag )   Leave tf if n < m , otherwise ff.
  99.   >     ( n m -- flag )   Leave tf if n > m , otherwise ff.
  100.   0=    ( n -- flag )     Leave tf if n = 0 , otherwise ff.
  101.   0<>   ( n -- flag )     Leave tf if n<> 0 , otherwise ff.
  102.   0<    ( n -- flag )     Leave tf if n < 0 , otherwise ff.
  103.   0>    ( n -- flag )     Leave tf if n > 0 , otherwise ff.
  104.   AND   ( f1 f2 -- flag ) Leave tf only if f1 and f2 are true.
  105.   OR    ( f1 f2 -- flag ) Leave tf if either f1 or f2 are true.
  106.   NOT   ( f1 --  not-f1 ) Reverse the flag f1.
  107.  
  108. ╓─────────────╖
  109. ║ Problem 3.9 ║
  110. ╙─────────────╜
  111. Construct two sets of input data for each of the above words.
  112. One set that leaves a true flag and on set that leaves a false flag.
  113.  
  114. ┌────────────────────────────────────┐
  115. │  Please move to Lesson 3 Part 050  │
  116. └────────────────────────────────────┘
  117.