Introduction |
xiii | ||||
New and Extended Features in MASM 6.1 | xiii | ||||
MASM Features New Since Version 5.1 | xiv | ||||
MASM Features New Since Version 6.0 | xv | ||||
ML and MASM Command Lines | xvi | ||||
Compatibility with Earlier Versions of MASM | xvi | ||||
A Word About Instruction Timings | xvii | ||||
Books for Further Reading | xviii | ||||
Document Conventions | xix | ||||
Getting Assistance and Reporting Problems | xx | ||||
Chapter 1 Understanding Global Concepts |
1 | ||||
The Processing Environment | 1 | ||||
8086-Based Processors | 2 | ||||
Operating Systems | 4 | ||||
Segmented Architecture | 5 | ||||
Segment Protection | 6 | ||||
Segmented Addressing | 7 | ||||
Segment Arithmetic | 7 | ||||
Language Components of MASM | 8 | ||||
Reserved Words | 8 | ||||
Identifiers | 9 | ||||
Predefined Symbols | 10 | ||||
Integer Constants and Constant Expressions | 11 | ||||
Operators | 13 | ||||
Data Types | 14 | ||||
Registers | 16 | ||||
Statements | 21 | ||||
The Assembly Process | 22 | ||||
Generating and Running Executable Programs | 23 | ||||
Using the OPTION Directive | 24 | ||||
Conditional Directives | 28 | ||||
Chapter 2 Organizing Segments |
31 | ||||
Physical Memory Segments | 32 | ||||
Logical Segments | 32 | ||||
Using Simplified Segment Directives | 33 | ||||
Defining Basic Attributes with .MODEL | 34 | ||||
Specifying a Processor and Coprocessor | 38 | ||||
Creating a Stack | 38 | ||||
Creating Data Segments | 39 | ||||
Creating Code Segments | 40 | ||||
Starting and Ending Code with .STARTUP and .EXIT | 41 | ||||
Using Full Segment Definitions | 44 | ||||
Defining Segments with the SEGMENT Directive | 44 | ||||
Controlling the Segment Order | 47 | ||||
Setting the ASSUME Directive for Segment Registers | 49 | ||||
Defining Segment Groups | 51 | ||||
Chapter 3 Using Addresses and Pointers |
53 | ||||
Programming Segmented Addresses | 53 | ||||
Initializing Default Segment Registers | 53 | ||||
Near and Far Addresses | 57 | ||||
Operands | 60 | ||||
Register Operands | 61 | ||||
Immediate Operands | 61 | ||||
Direct Memory Operands | 62 | ||||
Indirect Memory Operands | 64 | ||||
The Program Stack | 71 | ||||
Saving Operands on the Stack | 71 | ||||
Saving Flags on the Stack | 73 | ||||
Saving Registers on the Stack (80186-80486 Only) | 74 | ||||
Accessing Data with Pointers and Addresses | 74 | ||||
Defining Pointer Types with TYPEDEF | 75 | ||||
Defining Register Types with ASSUME | 77 | ||||
Basic Pointer and Address Operations | 78 | ||||
Chapter 4 Defining and Using Simple Data Types |
85 | ||||
Declaring Integer Variables | 85 | ||||
Allocating Memory for Integer Variables | 85 | ||||
Data Initialization | 87 | ||||
Working with Simple Variables | 88 | ||||
Copying Data | 89 | ||||
Adding and Subtracting Integers | 92 | ||||
Multiplying and Dividing Integers | 95 | ||||
Manipulating Numbers at the Bit Level | 98 | ||||
Logical Instructions | 99 | ||||
Shifting and Rotating Bits | 100 | ||||
Multiplying and Dividing with Shift Instructions | 102 | ||||
Chapter 5 Defining and Using Complex Data Types |
105 | ||||
Arrays and Strings | 105 | ||||
Declaring and Referencing Arrays | 105 | ||||
Declaring and Initializing Strings | 108 | ||||
Processing Strings | 110 | ||||
Structures and Unions | 117 | ||||
Declaring Structure and Union Types | 118 | ||||
Defining Structure and Union Variables | 121 | ||||
Referencing Structures, Unions, and Fields | 126 | ||||
Nested Structures and Unions | 128 | ||||
Records | 129 | ||||
Declaring Record Types | 130 | ||||
Defining Record Variables | 131 | ||||
Record Operators | 133 | ||||
Chapter 6 Using Floating-Point and Binary Coded Decimal Numbers |
135 | ||||
Using Floating-Point Numbers | 136 | ||||
Declaring Floating-Point Variables and Constants | 136 | ||||
Storing Numbers in Floating-Point Format | 138 | ||||
Using a Math Coprocessor | 139 | ||||
Coprocessor Architecture | 140 | ||||
Instruction and Operand Formats | 141 | ||||
Coordinating Memory Access | 145 | ||||
Using Coprocessor Instructions | 146 | ||||
Using An Emulator Library | 155 | ||||
Using Binary Coded Decimal Numbers | 156 | ||||
Defining BCD Constants and Variables | 157 | ||||
BCD Calculations on a Coprocessor | 157 | ||||
BCD Calculations on the Main Processor | 158 | ||||
Chapter 7 Controlling Program Flow |
161 | ||||
Jumps | 161 | ||||
Unconditional Jumps | 162 | ||||
Conditional Jumps | 164 | ||||
Loops | 172 | ||||
Loop-Generating Directives | 173 | ||||
Writing Loop Conditions | 178 | ||||
Procedures | 180 | ||||
Defining Procedures | 180 | ||||
Passing Arguments on the Stack | 182 | ||||
Declaring Parameters with the PROC Directive | 184 | ||||
Using Local Variables | 188 | ||||
Creating Local Variables Automatically | 190 | ||||
Declaring Procedure Prototypes | 193 | ||||
Calling Procedures with INVOKE | 194 | ||||
Generating Prologue and Epilogue Code | 198 | ||||
MS-DOS Interrupts | 204 | ||||
Calling MS-DOS and ROM-BIOS Interrupts | 204 | ||||
Replacing an Interrupt Routine | 206 | ||||
Chapter 8 Sharing Data and Procedures Among Modules and Libraries |
211 | ||||
Selecting Data-Sharing Methods | 211 | ||||
Sharing Symbols with Include Files | 212 | ||||
Organizing Modules | 212 | ||||
Declaring Symbols Public and External | 214 | ||||
Positioning External Declarations | 228 | ||||
Using Alternatives to Include Files | 219 | ||||
PUBLIC and EXTERN | 220 | ||||
Other Alternatives | 221 | ||||
Developing Libraries | 221 | ||||
Associating Libraries with Modules | 222 | ||||
Using EXTERN with Library Routines | 223 | ||||
Chapter 9 Using Macros |
225 | ||||
Text Macros | 226 | ||||
Macro Procedures | 226 | ||||
Creating Macro Procedures | 227 | ||||
Passing Arguments to Macros | 228 | ||||
Specifying Required and Default Parameters | 229 | ||||
Defining Local Symbols in Macros | 232 | ||||
Assembly-Time Variables and Macro Operators | 233 | ||||
Text Delimiters and the Literal-Character Operator | 234 | ||||
Expansion Operator | 235 | ||||
Substitution Operator | 237 | ||||
Defining Repeat Blocks with Loop Directives | 239 | ||||
REPEAT Loops | 240 | ||||
WHILE Loops | 241 | ||||
FOR Loops and Variable-Length Parameters | 242 | ||||
FORC Loops | 244 | ||||
String Directives and Predefined Functions | 245 | ||||
Returning Values with Macro Functions | 248 | ||||
Returning Values with EXITM | 248 | ||||
Using Macro Functions with Variable-Length Parameter Lists | 249 | ||||
Expansion Operator in Macro Functions | 251 | ||||
Advanced Macro Techniques | 251 | ||||
Defining Macros within Macros | 251 | ||||
Testing for Argument Type and Environment | 252 | ||||
Using Recursive Macros | 255 | ||||
Chapter 10 Writing a Dynamic-Link Library For Windows |
257 | ||||
Overview of DLLs | 257 | ||||
Loading a DLL | 258 | ||||
Building a DLL | 260 | ||||
DLL Code | 261 | ||||
DLL Data | 265 | ||||
DLL Stack | 265 | ||||
DLL Extension Names | 266 | ||||
Summary | 266 | ||||
Example of a DLL: SYSINFO | 267 | ||||
Entry Routine for SYSINFO | 268 | ||||
Expanding SYSINFO | 270 | ||||
Chapter 11 Writing Memory-Resident Software |
273 | ||||
Terminate-and-Stay-Resident Programs | 273 | ||||
Structure of a TSR | 274 | ||||
Passive TSRs | 274 | ||||
Active TSRs | 275 | ||||
Interrupt Handlers in Active TSRs | 275 | ||||
Auditing Hardware Events for TSR Requests | 275 | ||||
Monitoring System Status | 277 | ||||
Determining Whether to Invoke the TSR | 279 | ||||
Example of a Simple TSR: ALARM | 279 | ||||
Using MS-DOS in Active TSRs | 285 | ||||
Understanding MS-DOS Stacks | 285 | ||||
Determining MS-DOS Activity | 285 | ||||
Interrupting MS-DOS Functions | 286 | ||||
Monitoring the Critical Error Flag | 287 | ||||
Preventing Interference | 288 | ||||
Trapping Errors | 288 | ||||
Preserving an Existing Condition | 289 | ||||
Preserving Existing Data | 290 | ||||
Communicating Through the Multiplex Interrupt | 290 | ||||
The Multiplex Handler | 291 | ||||
Using the Multiplex Interrupt Under MS-DOS Version 2.x | 292 | ||||
Deinstalling a TSR | 292 | ||||
Example of an Advanced TSR: SNAP | 293 | ||||
Building SNAP.EXE | 294 | ||||
Outline of SNAP | 295 | ||||
Chapter 12 Mixed-Language Programming |
307 | ||||
Naming and Calling Conventions | 308 | ||||
Naming Conventions | 309 | ||||
The C Calling Convention | 309 | ||||
The Pascal Calling Convention | 310 | ||||
The STDCALL and SYSCALL Calling Conventions | 311 | ||||
Writing an Assembly Procedure For a Mixed-Language Program | 312 | ||||
The MASM/High-Level-Language Interface | 313 | ||||
The C/MASM Interface | 315 | ||||
The C++/MASM Interface | 322 | ||||
The FORTRAN/MASM Interface | 323 | ||||
The Basic/MASM Interface | 328 | ||||
Chapter 13 Writing 32-Bit Applications |
335 | ||||
32-Bit Memory Addressing | 335 | ||||
MASM Directives for 32-Bit Programming | 336 | ||||
Sample Program | 337 | ||||
Appendixes |
|||||
Appendix A Differences Between MASM 6.1 and 5.1 |
341 | ||||
New Features of Version 6.1 | 342 | ||||
The Assembler, Environment, and Utilities | 342 | ||||
Segment Management | 343 | ||||
Data Types | 344 | ||||
Procedures, Loops, and Jumps | 347 | ||||
Simplifying Multiple-Module Projects | 348 | ||||
Expanded State Control | 349 | ||||
New Processor Instructions | 350 | ||||
Renamed Directives | 350 | ||||
Macro Enhancements | 351 | ||||
MASM 6.1 Programming Practices | 352 | ||||
Compatibility Between MASM 5.1 and 6.1 | 352 | ||||
Rewriting Code for Compatibility | 353 | ||||
Using the OPTION Directive | 361 | ||||
Changes to Instruction Encodings | 377 | ||||
Appendix B BNF Grammar |
379 | ||||
Appendix C Generating and Reading Assembly Listings |
397 | ||||
Generating Listing Files | 397 | ||||
Precedence of Command-Line Options and Listing Directives | 399 | ||||
Reading the Listing File | 399 | ||||
Generated Code | 399 | ||||
Error Messages | 400 | ||||
Symbols and Abbreviations | 400 | ||||
Reading Tables in a Listing File | 404 | ||||
Appendix D MASM Reserved Words |
407 | ||||
Operands and Symbols | 407 | ||||
Special Operands for the 80386/486 | 409 | ||||
Predefined Symbols | 409 | ||||
Registers | 409 | ||||
Operators and Directives | 410 | ||||
Processor Instructions | 412 | ||||
8086/8088 Processor Instructions | 412 | ||||
80186 Processor Instructions | 413 | ||||
80286 Processor Instructions | 413 | ||||
80286 and 80386 Privileged-Mode Instructions | 413 | ||||
80386 Processor Instructions | 413 | ||||
80486 Processor Instructions | 414 | ||||
Instruction Prefixes | 414 | ||||
Coprocessor Instructions | 414 | ||||
8087 Coprocessor Instructions | 414 | ||||
80287 Privileged-Mode Instruction | 415 | ||||
80387 Instructions | 415 | ||||
Appendix E Default Segment Names |
417 | ||||
Glossary |
421 | ||||
Index |
435 | ||||
Figures and Tables |
|||||
Figures |
|||||
1.1 Segment Allocation | 6 | ||||
1.2 Calculating Physical Addresses | 8 | ||||
1.3 Registers for 8088-80286 Processors | 17 | ||||
1.4 Extended Registers for the 80386/486 Processors | 18 | ||||
1.5 Flags for 8088-80486 Processors | 20 | ||||
3.1 Stack Status Before and After Pushes and Pops | 72 | ||||
4.1 Integer Formats | 87 | ||||
4.2 Shifts and Rotates | 101 | ||||
6.1 Encoding for Real Numbers in IEEE Format | 138 | ||||
6.2 Coprocessor Data Registers | 140 | ||||
6.3 Status of the Register Stack | 142 | ||||
6.4 Status of the Register Stack and Memory Locations | 143 | ||||
6.5 Status of the Previously Initialized Register Stack | 144 | ||||
6.6 Status of the Already Initialized Register Stack | 144 | ||||
6.7 Status of the Register Stack: Main Memory and Coprocessor | 148 | ||||
6.8 Coprocessor Control Registers | 154 | ||||
6.9 Coprocessor and Processor Control Flags | 155 | ||||
7.1 Program Arguments on the Stack | 183 | ||||
7.2 Local Variables on the Stack | 190 | ||||
7.3 Operation of Interrupts | 206 | ||||
8.1 Using EXTERNDEF for Variables | 215 | ||||
8.2 Using PROTO and INVOKE | 217 | ||||
8.3 Using PUBLIC and EXTERN | 221 | ||||
11.1 Time Line of Interaction Between Interrupt Handlers for a Typical TSR | 278 | ||||
11.2 Flowchart for SNAP.EXE: Installation Phase | 296 | ||||
11.3 Flowchart for SNAP.EXE Resident Phase | 297 | ||||
11.4 Flowchart for SNAP.EXE Deinstallation Phase | 298 | ||||
12.1 C String Format | 316 | ||||
12.2 C Stack Frame | 320 | ||||
12.3 FORTRAN String Frame | 324 | ||||
12.4 FORTRAN Stack Frame | 327 | ||||
12.5 Basic String Descriptor Format | 330 | ||||
12.6 Basic Stack Frame | 333 | ||||
B.1 BNF Definition of the TYPEDEF Directive | 380 | ||||
Tables |
|||||
1.1 8086 Family of Processors | 2 | ||||
1.2 The MS-DOS and Windows Operating Systems Compared | 4 | ||||
1.3 Operator Precedence | 14 | ||||
2.1 Attributes of Memory Models | 35 | ||||
3.1 Indirect Addressing with 16-Bit Registers | 68 | ||||
4.1 Division Operations | 97 | ||||
5.1 Requirements for String Instructions | 112 | ||||
6.1 Ranges of Floating-Point Variables | 136 | ||||
6.2 Coprocessor Operand Formats | 141 | ||||
6.3 Control-Flag Settings After Comparison or Test | 151 | ||||
7.1 Conditional Jumps Based on Comparisons of Two Values | 167 | ||||
9.1 MASM Macro Operators | 234 | ||||
11.1 MS-DOS Internal Stacks | 286 | ||||
12.1 Naming and Calling Conventions | 309 | ||||
12.2 Register Conventions for Simple Return Values | 317 | ||||
A.1 Requirements for String Instructions | 353 | ||||
C.1 Options for Generating or Modifying Listing Files | 398 | ||||
C.2 Symbols and Abbreviations in Listings | 400 | ||||
C.3 Symbols in Timing Column | 401 |
file: /Techref/language/masm/toc.htm, 37KB, , updated: 2017/11/1 08:16, local time: 2024/11/27 20:02,
owner: MNS-AqU-552a,
18.117.188.105:LOG IN
|
©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions? <A HREF="http://sxlist.com/TECHREF/language/masm/toc.htm"> Contents</A> |
Did you find what you needed? |
Welcome to sxlist.com!sales, advertizing, & kind contributors just like you! Please don't rip/copy (here's why Copies of the site on CD are available at minimal cost. |
Welcome to sxlist.com! |
.