Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Conklin E.K.Forth programmer's handbook.2000.pdf
Скачиваний:
321
Добавлен:
23.08.2013
Размер:
2.04 Mб
Скачать

The Language of Innovation...

Forth

Programmer’s

Handbook

Edward K. Conklin

Elizabeth D. Rather

and the technical staff of FORTH, Inc.

FORTH, Inc.

111 N. Sepulveda Boulevard, Suite 300 Manhattan Beach, California USA 90266–6847 310.372.8493 800.55.FORTH FAX: 310.318.7130 forthinc@forth.com www.forth.com

FORTH, Inc. makes no warranty of any kind with regard to this material, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. FORTH, Inc. shall not be liable for errors contained herein or for incidental or consequential damages in connection with the furnishing, performance, or use of this material.

All brand and product names are trademarks or registered trademarks of their respective companies.

Copyright © 1997, 1998 by FORTH, Inc. All rights reserved.

First edition, September 1997

Second printing, November 1997

Third printing (2nd ed.), August 1998

Fourth printing, September 1999

Fifth printing, May 2000

Sixth printing, August 2000

ISBN 0-9662156-0-5

This document contains information proprietary to FORTH, Inc. Any reproduction, disclosure, or unauthorized use of this document, either in whole or in part, is expressly forbidden without prior permission in writing from:

FORTH, Inc.

111 N. Sepulveda Boulevard, Suite 300

Manhattan Beach, California USA 90266–6847

310.372.8493 800.55.FORTH FAX: 310.318.7130

sales@forth.com www.forth.com

ii

CONTENTS

Welcome! xi

About the Forth Programming Language xi About This Book xi

How to Use This Book xi Reference Materials xii How to Proceed xii

1.Introduction 1

1.1Forth Language Features 2

1.1.1 Definitions of Terms 2

1.1.2Dictionary 3

1.1.3Data Stack 7

1.1.4Return Stack 9

1.1.5Text Interpreter 10

1.1.6Numeric Input 13

1.1.7 Two-stack Virtual Machine 15

1.2 Forth Operating System Features 17

1.3The Forth Assembler 19

1.3.1Notational Differences 19

1.3.1.1Instruction Mnemonics 19

1.3.1.2Addressing Modes 20

1.3.1.3Instruction Format 20

1.3.1.4 Labels, Branches, and Structures 20

1.3.2Procedural Differences 21

1.3.2.1

Resident Assembler 21

iii

Forth Programmer’s Handbook

1.3.2.2

Immediately Executable Code

21

1.3.2.3

Relationship to Other Routines

21

1.3.2.4Register Usage 21

1.4 Documentation and Programmer Aids 22

1.4.1Comments 22

1.4.2Locating Command Source 24

1.4.3Cross-references 24

1.4.4 Decompiler and Disassembler 25

1.5Interactive Programming—An Example 27

2.Forth Fundamentals 31

2.1Stack Operations 31

2.1.1Stack Notation 31

2.1.2

Data Stack Manipulation Operations

33

2.1.3

Memory Stack Operations 35

 

2.1.4

Return Stack Manipulation Operations

36

2.1.5Programmer Conveniences 37

2.2

Arithmetic and Logical Operations

39

2.2.1

Arithmetic and Shift Operators

39

 

2.2.2

Logical and Relational Operations

44

 

2.2.3

Comparison and Testing Operations

45

2.3

Character and String Operations

47

 

2.3.1

The PAD—Scratch Storage for Strings

48

2.3.2

Single-Character Reference Words 49

2.3.3

String Management Operations

49

 

2.3.4

Comparing Character Strings

51

 

 

2.4Numeric Output Words 52

2.4.1

Standard Numeric Output Words 53

2.4.2

Pictured Number Conversion 54

2.4.2.1

Using Pictured Numeric Output Words 55

iv

Forth Programmer’s Handbook

2.4.2.2

Using Pictured Fill Characters

57

2.4.2.3

Processing Special Characters

58

2.5Program Structures 59

2.5.1Indefinite Loops 60

2.5.2 Counting (Finite) Loops 63

2.5.3Conditionals 66

2.5.4CASE Statement 67

2.5.5Un-nesting Definitions 69

2.5.6Vectored Execution 70

2.6Exception Handling 74

3.System Functions 77

3.1Vectored Routines 77

3.2System Environment 78

3.3Serial I/O 81

3.3.1Terminal Input 81

3.3.2Terminal Output 84

3.3.3 Support of Special Terminal Features 85

3.4Block-Based Disk Access 86

3.4.1Overview 86

3.4.2Block-Management Fundamentals 87

3.4.3

Loading Forth Source Blocks 91

3.4.3.1

The LOAD Operation 92

3.4.3.2

Named Program Blocks 94

3.4.3.3

Block-based Programmer Aids and Utilities 95

3.5 File-Based Disk Access 96

3.5.1Overview 96

3.5.2

Global File Operations

97

3.5.3

File Reading and Writing

99

v

Forth Programmer’s Handbook

3.5.4 File Support Words 100

3.6 Time and Timing Functions 102

3.7Dynamic Memory Management 102

3.8Floating Point 103

3.8.1

Floating-Point System Guidelines 104

3.8.2

Input Number Conversion 105

3.8.3Output Formats 106

3.8.4 Floating-Point Constants, Variables, and Literals 107

3.8.5Memory Access 107

3.8.6 Floating-Point Stack Operators 108

3.8.7Floating-Point Arithmetic 110

3.8.8Floating-Point Conditionals 111

3.8.9 Logarithmic and Trigonometric Functions 112

3.8.10Address Management 114

3.8.11Custom I/O 116

4. The Forth Interpreter and Compiler 119

4.1 The Text Interpreter 119

4.1.1Input Sources 119

4.1.2 Source Selection and Parsing 121

4.1.3Dictionary Searches 123

4.1.4

Input Number Conversion

125

 

4.1.5

Character String Processing

127

 

4.1.5.1

Scanning Characters to a Delimiter

127

4.1.5.2

Compiling and Interpreting Strings

129

4.1.6

Text Interpreter Directives

131

 

4.2 Defining Words 132

 

 

4.2.1

Creating a Dictionary Entry

132

 

4.2.2Variables 134

4.2.3CONSTANTs and VALUEs 136

4.2.4Colon Definitions 138

4.2.5Code Definitions 141

vi

 

 

 

Forth Programmer’s Handbook

4.2.6

Custom Defining Words 142

 

 

4.2.6.1

Basic Principles of Defining Words 142

4.2.6.2

High-level Defining Words

144

 

4.3 Compiling Words and Literals

146

 

4.3.1

ALLOTing Space in the Dictionary

147

4.3.2

Use of , and C, to Compile Values

147

4.3.3

The Forth Compiler 149

 

 

4.3.4

Use of Literals and Constants in : Definitions 154

4.3.5Explicit Literals 154

4.3.6 Use of ['] to Compile Literal Addresses 156

4.3.7Compiling Strings 156

4.4Compiler Directives 158

4.4.1

Making Compiler Directives 159

4.4.2

The Control-flow Stack and Custom Compiling Structures 161

4.5Overlays 163

4.6Word Lists 165

4.6.1Basic Principles 165

4.6.2

Managing Word Lists 167

4.6.3

Sealed Word Lists 168

5.The Assembler 169

5.1Code Definitions 169

5.2Code Endings 171

5.3Assembler Instructions 171

5.4Notational Conventions 172

5.5 Use of the Stack in Code 174

vii

Forth Programmer’s Handbook

5.6Addressing Modes 174

5.7Macros 176

5.8Program Structures 177

5.9Literals 179

5.10Device Handlers 179

5.11Interrupts 180

5.12Example 181

6. Programming Style and Editing Standards 183

6.1 Guidelines for BLOCK-based source 184

6.1.1Stack Effects 184

6.1.2General Comments 185

6.1.3 Spacing Within Source 185

6.2 Open Firmware Coding Style 186

6.2.1Typographic Conventions 186

6.2.2 Use of Spaces 187

6.2.3Conditional Structures 187

6.2.4do…loop Structures 188

6.2.5begin…while…repeat Structures 188

6.2.6begin…until…again Structures 189

6.2.7Block Comments 189

6.2.8Stack Comments 190

6.2.9

Return Stack Comments 190

6.2.10

Numbers 190

viii

Forth Programmer’s Handbook

6.3 Wong’s Rules for Readable Forth 191

6.3.1Example: Magic Numbers 192

6.3.2Example: Factoring 192

6.3.3Example: Simplicity 193

6.3.4

Example: Testing Assumptions 194

6.3.5

Example: IF Avoidance

194

6.3.6

Example: Stack Music

196

6.3.7Summary 197

6.4Naming Conventions 197

Appendix A:

Bibliography

201

 

Appendix B:

Glossary & Notation

203

B.1

Abbreviations

203

 

B.2

Glossary 204

 

 

B.3

Data Types in Stack Notation 207

B.4

Flags and IOR Codes 210

B.5

Forth Glossary Notation

210

Appendix C:

Index to Forth Words

213

General Index

227

 

 

ix

Соседние файлы в предмете Электротехника