Chapter 12 - Procedures: Advanced Topics
- 12.0 - Chapter Overview
- 12.1 - Lexical Nesting, Static Links, and Displays
- 12.1.1 - Scope
- 12.1.2 - Unit Activation, Address Binding, and Variable Lifetime
- 12.1.3 - Static Links
- 12.1.4 - Accessing Non-Local Variables Using Static Links
- 12.1.5 - The Display
- 12.1.6 - The 80286 ENTER and LEAVE Instructions
- 12.2 - Passing Variables at Different Lex Levels as Parameters.
- 12.2.1 - Passing Parameters by Value in a Block Structured Language
- 12.2.2 - Passing Parameters by Reference, Result, and Value-Result in a Block Structured Language
- 12.2.3 - Passing Parameters by Name and Lazy-Evaluation in a Block Structured Language
- 12.3 - Passing Parameters as Parameters to Another Procedure
- 12.3.1 - Passing Reference Parameters to Other Procedures
- 12.3.2 - Passing Value-Result and Result Parameters as Parameters
- 12.3.3 - Passing Name Parameters to Other Procedures
- 12.3.4 - Passing Lazy Evaluation Parameters as Parameters
- 12.3.5 - Parameter Passing Summary
- 12.4 - Passing Procedures as Parameters
- 12.5 - Iterators
- 12.5.1 - Implementing Iterators Using In-Line Expansion
- 12.5.2 - Implementing Iterators with Resume Frames
- 12.6 - Sample Programs
- 12.6.1 - An Example of an Iterator
- 12.6.2 - Another Iterator Example
12.7 Laboratory Exercises
12.7.1 Iterator Exercise
12.7.2 The 80x86 Enter and Leave Instructions
12.7.3 Parameter Passing Exercises
12.8 Programming Projects
12.9 Summary
12.10 Questions
- Chapter 13 - MS-DOS, PC-BIOS, and File I/O
- 13.0 - Chapter Overview
- 13.1 - The IBM PC BIOS
- 13.2 - An Introduction to the BIOS' Services
- 13.2.1 - INT 5- Print Screen
- 13.2.2 - INT 10h - Video Services
- 13.2.3 - INT 11h - Equipment Installed
- 13.2.4 - INT 12h - Memory Available
- 13.2.5 - INT 13h - Low Level Disk Services
- 13.2.6 - INT 14h - Serial I/O
- 13.2.6.1 - AH=0: Serial Port Initialization
- 13.2.6.2 - AH=1: Transmit a Character to the Serial Port
- 13.2.6.3 - AH=2: Receive a Character from the Serial Port
- 13.2.6.4 - AH=3: Serial Port Status
- 13.2.7 - INT 15h - Miscellaneous Services
- 13.2.8 - INT 16h - Keyboard Services
- 13.2.8.1 - AH=0: Read a Key From the Keyboard
- 13.2.8.2 - AH=1: See if a Key is Available at the Keyboard
- 13.2.8.3 - AH=2: Return Keyboard Shift Key Status
- 13.2.9 - INT 17h - Printer Services
- 13.2.9.1 - AH=0: Print a Character
- 13.2.9.2 - AH=1: Initialize Printer
- 13.2.9.3 - AH=2: Return Printer Status
- 13.2.10 - INT 18h - Run BASIC
- 13.2.11 - INT 19h - Reboot Computer
- 13.2.12 - INT 1Ah - Real Time Clock
- 13.2.12.1 - AH=0: Read the Real Time Clock
- 13.2.12.2 - AH=1: Setting the Real Time Clock
- 13.3 - An Introduction to MS-DOS'
- 13.3.1 - MS-DOS Calling Sequence
- 13.3.2 - MS-DOS Character Oriented Functions
- 13.3.3 - MS-DOS Drive Commands
- 13.3.4 - MS-DOS "Obsolete" Filing Calls
- 13.3.5 - MS-DOS Date and Time Functions
- 13.3.6 - MS-DOS Memory Management Functions
- 13.3.6.1 - Allocate Memory
- 13.3.6.2 - Deallocate Memory
- 13.3.6.3 - Modify Memory Allocation
- 13.3.6.4 - Advanced Memory Management Functions
- 13.3.7 - MS-DOS Process Control Functions
- 13.3.7.1 - Terminate Program Execution
- 13.3.7.2 - Terminate, but Stay Resident
- 13.3.7.3 - Execute a Program
- 13.3.8 - MS-DOS "New" Filing Calls
- 13.3.8.1 - Open File
- 13.3.8.2 - Create File
- 13.3.8.3 - Close File
- 13.3.8.4 - Read From a File
- 13.3.8.5 - Write to a File
- 13.3.8.6 - Seek (Move File Pointer)
- 13.3.8.7 - Set Disk Transfer Address (DTA)
- 13.3.8.8 - Find First File
- 13.3.8.9 - Find Next File
- 13.3.8.10 - Delete File
- 13.3.8.11 - Rename File
- 13.3.8.12 - Change/Get File Attributes
- 13.3.8.13 - Get/Set File Date and Time
- 13.3.8.14 - Other DOS Calls
- 13.3.9 - File I/O Examples
- 13.3.9.1 - Example #1: A Hex Dump Utility
- 13.3.9.2 - Example #2: Upper Case Conversion
- 13.3.10 - Blocked File I/O
- 13.3.11 - The Program Segment Prefix (PSP)
- 13.3.12 - Accessing Command Line Parameters
- 13.3.13 - ARGC and ARGV
- 13.4 - UCR Standard Library File I/O Routines
- 13.4.1 - Fopen
- 13.4.2 - Fcreate
- 13.4.3 - Fclose
- 13.4.4 - Fflush
- 13.4.5 - Fgetc
- 13.4.6 - Fread
- 13.4.7 - Fputc
- 13.4.8 - Fwrite
- 13.4.9 - Redirecting I/O Through the StdLib File I/O Routines
- 13.4.10 - A File I/O Example
- 13.5 - Sample Program
13.6 Laboratory Exercises
13.7 Programming Projects
13.8 Summary
13.9 Questions
- Chapter 14 - Floating Point Arithmetic
- 14.0 - Chapter Overview
- 14.1 - The Mathematics of Floating Point Arithmetic
- 14.2 - IEEE Floating Point Formats
- 14.3 - The UCR Standard Library Floating Point Routines
- 14.3.1 - Load and Store Routines
- 14.3.2 - Integer/Floating Point Conversion
- 14.3.3 - Floating Point Arithmetic
- 14.3.4 - Float/Text Conversion and Printff
- 14.4 - The 80x87 Floating Point Coprocessors
- 14.4.1 - FPU Registers
- 14.4.1.1 - The FPU Data Registers
- 14.4.1.2 - The FPU Control Register
- 14.4.1.3 - The FPU Status Register
- 14.4.2 - FPU Data Types
- 14.4.3 - The FPU Instruction Set
- 14.4.4 - FPU Data Movement Instructions
- 14.4.4.1 - The FLD Instruction
- 14.4.4.2 - The FST and FSTP Instructions
- 14.4.4.3 - The FXCH Instruction
- 14.4.5 - Conversions
- 14.4.5.1 - The FILD Instruction
- 14.4.5.2 - The FIST and FISTP Instructions
- 14.4.5.3 - The FBLD and FBSTP Instructions
- 14.4.6 - Arithmetic Instructions
- 14.4.6.1 - The FADD and FADDP Instructions
- 14.4.6.2 - The FSUB, FSUBP, FSUBR, and FSUBRP Instructions
- 14.4.6.3 - The FMUL and FMULP Instructions
- 14.4.6.4 - The FDIV, FDIVP, FDIVR, and FDIVRP Instructions
- 14.4.6.5 - The FSQRT Instruction
- 14.4.6.6 - The FSCALE Instruction
- 14.4.6.7 - The FPREM and FPREM1 Instructions
- 14.4.6.8 - The FRNDINT Instruction
- 14.4.6.9 - The FXTRACT Instruction
- 14.4.6.10 - The FABS Instruction
- 14.4.6.11 - The FCHS Instruction
- 14.4.7 - Comparison Instructions
- 14.4.7.1 - The FCOM, FCOMP, and FCOMPP Instructions
- 14.4.7.2 - The FUCOM, FUCOMP, and FUCOMPP Instructions
- 14.4.7.3 - The FTST Instruction
- 14.4.7.4 - The FXAM Instruction
- 14.4.8 - Constant Instructions
- 14.4.9 - Transcendental Instructions
- 14.4.9.1 - The F2XM1 Instruction
- 14.4.9.2 - The FSIN, FCOS, and FSINCOS Instructions
- 14.4.9.3 - The FPTAN Instruction
- 14.4.9.4 - The FPATAN Instruction
- 14.4.9.5 - The FYL2X and FYL2XP1 Instructions
- 14.4.10 - Miscellaneous instructions
- 14.4.10.1 - The FINIT and FNINIT Instructions
- 14.4.10.2 - The FWAIT Instruction
- 14.4.10.3 - The FLDCW and FSTCW Instructions
- 14.4.10.4 - The FCLEX and FNCLEX Instructions
- 14.4.10.5 - The FLDENV, FSTENV, and FNSTENV Instructions
- 14.4.10.6 - The FSAVE, FNSAVE, and FRSTOR Instructions
- 14.4.10.7 - The FSTSW and FNSTSW Instructions
- 14.4.10.8 - The FINCSTP and FDECSTP Instructions
- 14.4.10.9 - The FNOP Instruction
- 14.4.10.10 - The FFREE Instruction
- 14.4.11 - Integer Operations
- 14.5 - Sample Program: Additional Trigonometric Functions
14.6 Laboratory Exercises
14.6.1 FPU vs StdLib Accuracy
14.7 Programming Projects
14.8 Summary
14.9 Questions
- Chapter 15 - Strings and Character Sets
- 15.0 - Chapter Overview
- 15.1 - The 80x86 String Instructions
- 15.1.1 - How the String Instructions Operate
- 15.1.2 - The REP/REPE/REPZ and REPNZ/REPNE Prefixes
- 15.1.3 - The Direction Flag
- 15.1.4 - The MOVS Instruction
- 15.1.5 - The CMPS Instruction
- 15.1.6 - The SCAS Instruction
- 15.1.7 - The STOS Instruction
- 15.1.8 - The LODS Instruction
- 15.1.9 - Building Complex String Functions from LODS and STOS
- 15.1.10 - Prefixes and the String Instructions
- 15.2 - Character Strings
- 15.2.1 - Types of Strings
- 15.2.2 - String Assignment
- 15.2.3 - String Comparison
- 15.3 - Character String Functions
- 15.3.1 - Substr
- 15.3.2 - Index
- 15.3.3 - Repeat
- 15.3.4 - Insert
- 15.3.5 - Delete
- 15.3.6 - Concatenation
- 15.4 - String Functions in the UCR Standard Library
- 15.4.1 - StrBDel, StrBDelm
- 15.4.2 - Strcat, Strcatl, Strcatm, Strcatml
- 15.4.3 - Strchr
- 15.4.4 - Strcmp, Strcmpl, Stricmp, Stricmpl
- 15.4.5 - Strcpy, Strcpyl, Strdup, Strdupl
- 15.4.6 - Strdel, Strdelm
- 15.4.7 - Strins, Strinsl, Strinsm, Strinsml
- 15.4.8 - Strlen
- 15.4.9 - Strlwr, Strlwrm, Strupr, Struprm
- 15.4.10 - Strrev, Strrevm
- 15.4.11 - Strset, Strsetm
- 15.4.12 - Strspan, Strspanl, Strcspan, Strcspanl
- 15.4.13 - Strstr, Strstrl
- 15.4.14 - Strtrim, Strtrimm
- 15.4.15 - Other String Routines in the UCR Standard Library
- 15.5 - The Character Set Routines in the UCR Standard Library
- 15.6 - Using the String Instructions on Other Data Types
- 15.6.1 - Multi-precision Integer Strings
- 15.6.2 - Dealing with Whole Arrays and Records
- 15.7 - Sample Programs
- 15.7.1 - Find.asm
- 15.7.2 - StrDemo.asm
- 15.7.3 - Fcmp.asm
15.8 Laboratory Exercises
15.8.1 MOVS Performance Exercise #1
15.8.2 MOVS Performance Exercise #2
15.8.3 Memory Performance Exercise
15.8.4 The Performance of Length-Prefixed vs. Zero-Terminated Strings
15.9 Programming Projects
15.10 Summary
15.11 Questions
- Chapter 16 - Pattern Matching
- 16.1 - An Introduction to Formal Language (Automata) Theory
- 16.1.1 - Machines vs. Languages
- 16.1.2 - Regular Languages
- 16.1.2.1 - Regular Expressions
- 16.1.2.2 - Nondeterministic Finite State Automata (NFAs)
- 16.1.2.3 - Converting Regular Expressions to NFAs
- 16.1.2.4 - Converting an NFA to Assembly Language
- 16.1.2.5 - Deterministic Finite State Automata (DFAs)
- 16.1.2.6 - Converting a DFA to Assembly Language
- 16.1.3 - Context Free Languages
- 16.1.4 - Eliminating Left Recursion and Left Factoring CFGs
- 16.1.5 - Converting REs to CFGs
- 16.1.6 - Converting CFGs to Assembly Language
- 16.1.7 - Some Final Comments on CFGs
- 16.1.8 - Beyond Context Free Languages
- 16.2 - The UCR Standard Library Pattern Matching Routines
- 16.3 - The Standard Library Pattern Matching Functions
- 16.3.1 - Spancset
- 16.3.2 - Brkcset
- 16.3.3 - Anycset
- 16.3.4 - Notanycset
- 16.3.5 - MatchStr
- 16.3.6 - MatchiStr
- 16.3.7 - MatchToStr
- 16.3.8 - MatchChar
- 16.3.9 - MatchToChar
- 16.3.10 - MatchChars
- 16.3.11 - MatchToPat
- 16.3.12 - EOS
- 16.3.13 - ARB
- 16.3.14 - ARBNUM
- 16.3.15 - Skip
- 16.3.16 - Pos
- 16.3.17 - RPos
- 16.3.18 - GotoPos
- 16.3.19 - RGotoPos
- 16.3.20 - SL_Match2
- 16.4 - Designing Your Own Pattern Matching Routines
- 16.5 - Extracting Substrings from Matched Patterns
- 16.6 - Semantic Rules and Actions
- 16.7 - Constructing Patterns for the MATCH Routine
- 16.8 - Some Sample Pattern Matching Applications
- 16.8.1 - Converting Written Numbers to Integers
- 16.8.2 - Processing Dates
- 16.8.3 - Evaluating Arithmetic Expressions
- 16.8.4 - A Tiny Assembler
- 16.8.5 - The "MADVENTURE" Game
16.10 Programming Projects
16.11 Summary
16.12 Questions