EW430_AssemblerReference

EW430_AssemblerReference - MSP430 IAR Assembler Reference...

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: MSP430 IAR Assembler Reference Guide for Texas Instruments' MSP430 Microcontroller Family COPYRIGHT NOTICE Copyright 19952003 IAR Systems. All rights reserved. No part of this document may be reproduced without the prior written consent of IAR Systems. The software described in this document is furnished under a license and may only be used or copied in accordance with the terms of such a license. DISCLAIMER The information in this document is subject to change without notice and does not represent a commitment on any part of IAR Systems. While the information contained herein is assumed to be accurate, IAR Systems assumes no responsibility for any errors or omissions. In no event shall IAR Systems, its employees, its contractors, or the authors of this document be liable for special, direct, indirect, or consequential damage, losses, costs, charges, claims, demands, claim for lost profits, fees, or expenses of any nature or kind. TRADEMARKS IAR, IAR Embedded Workbench, IAR XLINK Linker, IAR XAR Library Builder, IAR XLIB Librarian, IAR MakeApp, and IAR PreQual are trademarks owned by IAR Systems. C-SPY is a trademark registered in Sweden by IAR Systems. IAR visualSTATE is a registered trademark owned by IAR Systems. Texas Instruments is a registered trademark of Texas Instruments Incorporated. All other product names are trademarks or registered trademarks of their respective owners. EDITION NOTICE Second edition: January 2003 Part number: A430-2 This guide applies to version 2.x of the IAR Embedded Workbench for Texas Instruments' MSP430 microcontroller family. Contents Tables ...................................................................................................................... vii ..................................................................................................................... ix Preface Who should read this guide ................................................................ ix How to use this guide ............................................................................ ix What this guide contains ....................................................................... x Other documentation ............................................................................. x Document conventions ......................................................................... xi Introduction to the MSP430 IAR Assembler ....................................... 1 Syntax conventions .................................................................................. 1 Labels and comments ........................................................................... 1 Parameters ............................................................................................ 2 Source format ............................................................................................ 2 List file format ............................................................................................ 3 Header .................................................................................................. 3 Body ..................................................................................................... 3 Summary .............................................................................................. 3 Symbol and cross-reference table ........................................................ 3 Assembler expressions ........................................................................... 4 TRUE and FALSE ............................................................................... 4 Using symbols in relocatable expressions ........................................... 4 Symbols ................................................................................................ 5 Labels ................................................................................................... 5 Integer constants .................................................................................. 6 ASCII character constants .................................................................... 6 Floating-point constants ....................................................................... 7 Predefined symbols .............................................................................. 7 Programming hints .................................................................................. 9 Accessing special function registers .................................................... 9 Using C-style preprocessor directives ................................................ 10 iii Assembler options ........................................................................................... 11 Setting command line options .......................................................... 11 Extended command line file .............................................................. 11 Error return codes ............................................................................... 12 Assembler environment variables ...................................................... 12 Summary of assembler options ........................................................ 13 Descriptions of assembler options .................................................. 14 Assembler operators ...................................................................................... 25 Precedence of operators ..................................................................... 25 Summary of assembler operators ................................................... 25 Unary operators 1 ............................................................................ 25 Multiplicative arithmetic operators 2 .............................................. 26 Additive arithmetic operators 3 ....................................................... 26 Shift operators 4 .............................................................................. 26 AND operators 5 ............................................................................. 26 OR operators 6 ................................................................................ 26 Comparison operators 7 .................................................................. 27 Description of operators ..................................................................... 27 Assembler directives ....................................................................................... 39 Summary of assembler directives ................................................... 39 Module control directives ................................................................... 42 Syntax ................................................................................................. 43 Parameters .......................................................................................... 43 Description ......................................................................................... 43 Symbol control directives ................................................................... 45 Syntax ................................................................................................. 46 Parameters .......................................................................................... 46 Description ......................................................................................... 46 Examples ............................................................................................ 47 Segment control directives ................................................................ 47 Syntax ................................................................................................. 48 Parameters .......................................................................................... 48 MSP430 IAR Assembler iv Reference Guide Contents Description ......................................................................................... 49 Examples ............................................................................................ 50 Value assignment directives .............................................................. 52 Syntax ................................................................................................. 53 Parameters .......................................................................................... 53 Description ......................................................................................... 53 Examples ............................................................................................ 55 Conditional assembly directives ....................................................... 56 Syntax ................................................................................................. 56 Parameters .......................................................................................... 56 Description ......................................................................................... 57 Examples ............................................................................................ 57 Macro processing directives ............................................................... 57 Syntax ................................................................................................. 58 Parameters .......................................................................................... 58 Description ......................................................................................... 58 Examples ............................................................................................ 61 Listing control directives ..................................................................... 64 Syntax ................................................................................................. 64 Parameters .......................................................................................... 64 Description ......................................................................................... 65 Examples ............................................................................................ 66 C-style preprocessor directives ........................................................ 69 Syntax ................................................................................................. 69 Parameters .......................................................................................... 69 Description ......................................................................................... 70 Examples ............................................................................................ 72 Data definition or allocation directives ......................................... 73 Syntax ................................................................................................. 74 Parameters .......................................................................................... 74 Descriptions ....................................................................................... 75 Examples ............................................................................................ 75 Assembler control directives ............................................................ 76 Syntax ................................................................................................. 76 v Parameters .......................................................................................... 76 Description ......................................................................................... 76 Examples ............................................................................................ 77 Call frame information directives ................................................... 78 Syntax ................................................................................................. 79 Parameters .......................................................................................... 80 Descriptions ....................................................................................... 81 Simple rules ........................................................................................ 85 CFI expressions .................................................................................. 87 Example ............................................................................................. 89 Diagnostics ........................................................................................................... 93 Message format ....................................................................................... 93 Severity levels .......................................................................................... 93 Internal error ...................................................................................... 94 Index ....................................................................................................................... 95 MSP430 IAR Assembler vi Reference Guide Tables 1: Typographic conventions used in this guide .......................................................... xi 2: Assembler directive parameters .............................................................................. 2 3: Symbol and cross-reference table ........................................................................... 3 4: Integer constant formats .......................................................................................... 6 5: ASCII character constant formats ........................................................................... 6 6: Floating-point constants .......................................................................................... 7 7: Predefined symbols ................................................................................................. 8 8: Predefined register symbols .................................................................................... 9 9: Assembler error return codes ................................................................................ 12 10: Assembler environment variables ....................................................................... 12 11: Assembler options summary ............................................................................... 13 12: Conditional list (-c) ............................................................................................. 15 13: Generating debug information (-r) ...................................................................... 20 14: Controlling case sensitivity in user symbols (-s) ................................................ 20 15: Disabling assembler warnings (-w) ..................................................................... 22 16: Including cross-references in assembler list file (-x) .......................................... 22 17: Assembler directives summary ........................................................................... 39 18: Module control directives ................................................................................... 42 19: Symbol control directives ................................................................................... 45 20: Segment control directives .................................................................................. 47 21: Value assignment directives ................................................................................ 52 22: Conditional assembly directives ......................................................................... 56 23: Macro processing directives ................................................................................ 57 24: Listing control directives ..................................................................................... 64 25: C-style preprocessor directives ........................................................................... 69 26: Data definition or allocation directives ............................................................... 73 27: Using data definition or allocation directives ..................................................... 75 28: Assembler control directives ............................................................................... 76 29: Call frame information directives ....................................................................... 78 30: Unary operators in CFI expressions .................................................................... 88 31: Binary operators in CFI expressions ................................................................... 88 vii 32: Ternary operators in CFI expressions ................................................................. 89 33: Code sample with backtrace rows and columns ................................................. 90 MSP430 IAR Assembler viii Reference Guide Preface Welcome to the MSP430 IAR Assembler Reference Guide. The purpose of this guide is to provide you with detailed reference information that can help you to use the MSP430 IAR Assembler to develop your application according to your requirements. Who should read this guide You should read this guide if you plan to develop an application, or part of an application, using assembler language for the MSP430 microcontroller and need to get detailed reference information on how to use the MSP430 IAR Assembler. In addition, you should have working knowledge of the following: G G G G The architecture and instruction set of the MSP430 microcontroller. Refer to the documentation from Texas Instruments for information about the MSP430 microcontroller General assembler language programming Application development for embedded systems The operating system of your host machine. How to use this guide When you first begin using the MSP430 IAR Assembler, you should read the Introduction to the MSP430 IAR Assembler chapter in this reference guide. If you are an intermediate or advanced user, you can focus more on the reference chapters that follow the introduction. If you are new to using the IAR toolkit, we recommend that you first read the initial chapters of the MSP430 IAR Embedded WorkbenchTM IDE User Guide. They give product overviews, as well as tutorials that can help you get started. ix What this guide contains What this guide contains Below is a brief outline and summary of the chapters in this guide. G G G G G Introduction to the MSP430 IAR Assembler provides programming information. It also describes the source code format, and the format of assembler listings. Assembler options first explains how to set the assembler options from the command line and how to use environment variables. It then gives an alphabetical summary of the assembler options, and contains detailed reference information about each option. Assembler operators gives a summary of the assembler operators, arranged in order of precedence, and provides detailed reference information about each operator. Assembler directives gives an alphabetical summary of the assembler directives, and provides detailed reference information about each of the directives, classified into groups according to their function. Diagnostics contains information about the formats and severity levels of diagnostic messages. Other documentation The complete set of IAR Systems development tools for the MSP430 microcontroller is described in a series of guides. For information about: G G G G G Using the IAR Embedded WorkbenchTM and the IAR C-SPYTM Debugger, refer to the MSP430 IAR Embedded WorkbenchTM IDE User Guide Programming for the MSP430 IAR C/EC++ Compiler, refer to the MSP430 IAR C/EC++ Compiler Reference Guide Using the IAR XLINK LinkerTM, the IAR XLIB LibrarianTM, and the IAR XAR Library BuilderTM, refer to the IAR Linker and Library Tools Reference Guide. Using the IAR C Library, refer to the IAR C Library Functions Reference Guide, available from the IAR Embedded Workbench IDE Help menu. Using the Embedded C++ Library, refer to the C++ Library Reference, available from the IAR Embedded Workbench IDE Help menu. All of these guides are delivered in PDF format on the installation media. Some of them are also delivered as printed books. MSP430 IAR Assembler x Reference Guide Preface Document conventions This guide uses the following typographic conventions: Style Used for computer parameter [option] {a | b | c} bold reference Text that you enter or that appears on the screen. A label representing the actual value you should enter as part of a command. An optional part of a command. Alternatives in a command. Names of menus, menu commands, buttons, and dialog boxes that appear on the screen. A cross-reference within this or to another guide. Identifies instructions specific to the IAR Embedded Workbench interface. Identifies instructions specific to the command line interface. Table 1: Typographic conventions used in this guide xi Document conventions MSP430 IAR Assembler xii Reference Guide Introduction to the MSP430 IAR Assembler This chapter describes the syntax conventions and source code format for the MSP430 IAR Assembler and provides programming hints. Refer to Texas Instruments' hardware documentation for syntax descriptions of the instruction mnemonics. Syntax conventions In the syntax definitions the following conventions are used: G Parameters, representing what you would type, are shown in italics. So, for example, in: ORG expr expr represents an arbitrary expression. G Optional parameters are shown in square brackets. So, for example, in: END [expr] the expr parameter is optional. An ellipsis indicates that the previous item can be repeated an arbitrary number of times. For example: PUBLIC symbol [,symbol] ... indicates that PUBLIC can be followed by one or more symbols, separated by commas. G Alternatives are enclosed in { and } brackets, separated by a vertical bar, for example: LSTOUT{+|-} indicates that the directive must be followed by either + or -. LABELS AND COMMENTS Where a label must precede a directive, this is indicated in the syntax, as in: label VAR expr An optional label, which will assume the value and type of the current program location counter (PLC), can precede all directives. For clarity, this is not included in each syntax definition. 1 Source format In addition, unless explicitly specified, all directives can be followed by a comment, preceded by ; (semicolon). PARAMETERS The following table shows the correct form of the most commonly used types of parameter: Parameter What it consists of expr label symbol An expression; see Assembler expressions, page 4. A symbolic label. An assembler symbol. Table 2: Assembler directive parameters Source format The format of an assembler source line is as follows: [label [:]] [operation] [operands] [; comment] where the components are as follows: label A label, which is assigned the value and type of the current program location counter (PLC). The : (colon) is optional if the label starts in the first column. An assembler instruction or directive. This must not start in the first column. An assembler instruction can have zero, one, or more operands. The data definition directives, for example DB and DC8, can have any number of operands. For reference information about the data definition directives, see Data definition or allocation directives, page 73. Other assembler directives can have one, two, or three operands, separated by commas. comment Comment, preceded by a ; (semicolon) Use /* ... */ to comment sections Use // to mark the rest of the line as comment. operation operands The fields can be separated by spaces or tabs. A source line may not exceed 2047 characters. MSP430 IAR Assembler 2 Reference Guide Introduction to the MSP430 IAR Assembler Tab characters, ASCII 09H, are expanded according to the most common practice; i.e. to columns 8, 16, 24 etc. The MSP430 IAR Assembler uses the default filename extensions s43, asm, and msa for source files. List file format The format of an assembler list file is as follows: HEADER The header section contains product version information, the date and time when the file was created, and which options were used. BODY The body of the listing contains the following fields of information: G G G G The line number in the source file. Lines generated by macros will, if listed, have a . (period) in the source line number field. The address field shows the location in memory, which can be absolute or relative depending on the type of segment. The notation is hexadecimal. The data field shows the data generated by the source line. The notation is hexadecimal. Unresolved values are represented by ..... (periods), where two periods signify one byte. These unresolved values will be resolved during the linking process. The assembler source line. SUMMARY The end of the file contains a summary of errors and warnings that were generated, and a checksum (CRC). Note: The CRC number depends on the date when the source file was assembled. SYMBOL AND CROSS-REFERENCE TABLE When you specify the Include cross-reference option, or if the LSTXRF+ directive has been included in the source file, a symbol and cross-reference table is produced. The following information is provided for each symbol in the table: Information Description Label The label's user-defined name. Table 3: Symbol and cross-reference table 3 Assembler expressions Information Description Mode Type Segment Value/Offset ABS (Absolute), or REL (Relative). The label type. The name of the segment that this label is defined relative to. The value (address) of the label within the current module, relative to the beginning of the current segment part. Table 3: Symbol and cross-reference table (Continued) Assembler expressions Expressions consist of operands and operators. The assembler will accept a wide range of expressions, including both arithmetic and logical operations. All operators use 32-bit two's complement integers, and the range is only checked when a value is used for generating code. Expressions are evaluated from left to right, unless this order is overridden by the priority of operators; see also Precedence of operators, page 25. The following operands are valid in an expression: G G G User-defined symbols and labels. Constants, excluding floating-point constants. The program location counter (PLC) symbol, $. These are described in greater detail in the following sections. The valid operators are described in the chapter Assembler operators, page 25. TRUE AND FALSE In expressions a zero value is considered FALSE, and a non-zero value is considered TRUE. Conditional expressions return the value 0 for FALSE and 1 for TRUE. USING SYMBOLS IN RELOCATABLE EXPRESSIONS Expressions that include symbols in relocatable segments cannot be resolved at assembly time, because they depend on the location of the segments. Such expressions are evaluated and resolved at link time, by the IAR XLINK LinkerTM. There are no restrictions on the expression; any operator can be used on symbols from any segment, or any combination of segments. MSP430 IAR Assembler 4 Reference Guide Introduction to the MSP430 IAR Assembler For example, a program could define the segments DATA and CODE as follows: NAME EXTERN RSEG first: DC8 second: DC8 ENDMOD MODULE RSEG prog1 third DATA 5 3 prog2 CODE start ... Then in the segment CODE the following relocatable expressions are legal: DC8 DC8 DC8 DC8 first first+1 1+first (first/second)*third Note: At assembly time, there will be no range check. The range check will occur at link time and, if the values are too large, there will be a linker error. SYMBOLS User-defined symbols can be up to 255 characters long, and all characters are significant. Symbols must begin with a letter, az or AZ, ? (question mark), or _ (underscore). Symbols can include the digits 09 and $ (dollar). For built-in symbols like instructions, registers, operators, and directives case is insignificant. For user-defined symbols case is by default significant but can be turned on and off using the Case sensitive user symbols (-s) assembler option. See page 20 for additional information. Notice that symbols and labels are byte addresses. For additional information, see Generating lookup table, page 75. LABELS Symbols used for memory locations are referred to as labels. Program location counter (PLC) The assembler keeps track of the address of the current instruction. This is called the program location counter. 5 Assembler expressions If you need to refer to the program location counter in your assembler source code you can use the $ sign. For example: BR $ ; Loop forever INTEGER CONSTANTS Since all IAR Systems assemblers use 32-bit two's complement internal arithmetic, integers have a (signed) range from -2147483648 to 2147483647. Constants are written as a sequence of digits with an optional - (minus) sign in front to indicate a negative number. Commas and decimal points are not permitted. The following types of number representation are supported: Integer type Example Binary Octal Decimal Hexadecimal Table 4: Integer constant formats 1010b, b'1010' 1234q, q'1234' 1234, -1, d'1234' 0FFFFh, 0xFFFF, h'FFFF' Note: Both the prefix and the suffix can be written with either uppercase or lowercase letters. ASCII CHARACTER CONSTANTS ASCII constants can consist of between zero and more characters enclosed in single or double quotes. Only printable characters and spaces may be used in ASCII strings. If the quote character itself is to be accessed, two consecutive quotes must be used: Format Value 'ABCD' "ABCD" 'A''B' ABCD (four characters). ABCD'\0' (five characters the last ASCII null). A'B A' ' Empty string (no value). Empty string (an ASCII null character). ', for quote within a string, as in `I\'d love to' 'A''' '''' (4 quotes) '' (2 quotes) "" (2 double quotes) \' Table 5: ASCII character constant formats MSP430 IAR Assembler 6 Reference Guide Introduction to the MSP430 IAR Assembler Format Value \\ \" \, for \ within a string ", for double quote within a string Table 5: ASCII character constant formats (Continued) FLOATING-POINT CONSTANTS The MSP430 IAR Assembler will accept floating-point values as constants and convert them into IEEE single-precision (signed 32-bit) floating-point format or fractional format. Floating-point numbers can be written in the format: [+|-][digits].[digits][{E|e}[+|-]digits] The following table shows some valid examples: Format Value 10.23 1.23456E-24 1.0E3 1.023 x 101 1.23456 x 10-24 1.0 x 103 Table 6: Floating-point constants Spaces and tabs are not allowed in floating-point constants. Note: Floating-point constants will not give meaningful results when used in expressions. The MSP430 single and double precision floating point format The MSP430 IAR Assemble supports the single and double precision floating point format of Texas Instruments. For a description of this format, see the MSP430 documentation provided by Texas Instruments. PREDEFINED SYMBOLS The MSP430 IAR Assembler defines a set of symbols for use in assembler source files. The symbols provide information about the current assembly, allowing you to test them in preprocessor directives or include them in the assembled code. The strings returned by the assembler are enclosed in double quotes. 7 Assembler expressions The following predefined symbols are available: Symbol Value __DATE__ __FILE__ __IAR_SYSTEMS_ASM__ __LINE__ __TID__ __TIME__ __VER__ Table 7: Predefined symbols Current date in dd/Mmm/yyyy format (string). Current source filename (string). IAR assembler identifier (number). Current source line number (number). Target identity, consisting of two bytes (number). The high byte is the target identity, which is 43 for A430. Current time in hh:mm:ss format (string). Version number in integer format; for example, version 4.17 is returned as 417 (number). Notice that the symbol __TID__ in the assembler is related to the predefined symbol __TID__ in the MSP430 IAR C/EC++ Compiler. It is described in the MSP430 IAR C/EC++ Compiler Reference Guide. Including symbol values in code To include a symbol value in the code, several data definition directives are provided. These directives define values or reserve memory. You define a symbol using the appropriate data definition directive. For example, to include the time of assembly as a string for the program to display: tim DC8 ... MOV CALL __TIME__ tim,R4 printstr ; Time string ; Load address of string ; Call string output ; routine For details of each data definition directive, see Data definition or allocation directives, page 73. Testing symbols for conditional assembly To test a symbol at assembly time, you can use one of the provided conditional assembly directives. These directives let you control the assembly process at assembly time. MSP430 IAR Assembler 8 Reference Guide Introduction to the MSP430 IAR Assembler For example, in a source file written for any processor, you may want to assemble, and verify the code for the MSP430 processor. You could do this using the __TID__ symbol as follows: #define TARGET ((__TID__ >> 8) #if (TARGET!=43) #error "Not the IAR MSP430 Assembler" #endif For details of each data definition directive, see Conditional assembly directives, page 56. Register symbols The following table shows the existing predefined register symbols: Name Address size Description R4R15 PC SP SR 16 bits 16 bits 16 bits 16 bits General purpose registers Program counter Stack pointer Status register Table 8: Predefined register symbols Programming hints This section gives hints on how to write efficient code for the MSP430 IAR Assembler. For information about projects including both assembler and C or Embedded C++ source files, see the MSP430 IAR C/EC++ Compiler Reference Guide. ACCESSING SPECIAL FUNCTION REGISTERS Specific header files for a number of MSP430 devices are included in the IAR product package, in the \430\inc directory. These header files define the device-specific special function registers (SFRs) and interrupt vector numbers. The header files are intended to be used also with the MSP430 IAR C/EC++ Compiler. If any assembler-specific additions are needed in the header file, these can be added easily in the assembler-specific part of the file: #ifdef __IAR_SYSTEMS_ASM__ (assembler-specific defines) #endif 9 Programming hints USING C-STYLE PREPROCESSOR DIRECTIVES The C-style preprocessor directives are processed before other assembler directives. Therefore, do not use preprocessor directives in macros and do not mix them with assembler-style comments. MSP430 IAR Assembler 10 Reference Guide Assembler options This chapter first explains how to set the options from the command line, and gives an alphabetical summary of the assembler options. It then provides detailed reference information for each assembler option. The MSP430 IAR Embedded WorkbenchTM IDE User Guide describes how to set assembler options in the IAR Embedded Workbench, and gives reference information about the available options. Setting command line options To set assembler options from the command line, you include them on the command line, after the a430 command: a430 [options] [sourcefile] [options] These items must be separated by one or more spaces or tab characters. If all the optional parameters are omitted the assembler will display a list of available options a screen at a time. Press Enter to display the next screen. For example, when assembling the source file power2.s43, use the following command to generate a list file to the default filename (power2.lst): a430 power2 -L Some options accept a filename, included after the option letter with a separating space. For example, to generate a list file with the name list.lst: a430 power2 -l list.lst Some other options accept a string that is not a filename. This is included after the option letter, but without a space. For example, to generate a list file to the default filename but in the subdirectory named list: a430 power2 -Llist\ Note: The subdirectory you specify must already exist. The trailing backslash is required to separate the name of the subdirectory and the default filename. EXTENDED COMMAND LINE FILE In addition to accepting options and source filenames from the command line, the assembler can accept them from an extended command line file. 11 Setting command line options By default, extended command line files have the extension xcl, and can be specified using the -f command line option. For example, to read the command line options from extend.xcl, enter: a430 -f extend.xcl ERROR RETURN CODES When using the MSP430 IAR Assembler from within a batch file, you may need to determine whether the assembly was successful in order to decide what step to take next. For this reason, the assembler returns the following error return codes: Return code Description 0 1 2 Assembly successful, warnings may appear There were warnings (only if the -ws option is used) There were errors Table 9: Assembler error return codes ASSEMBLER ENVIRONMENT VARIABLES Options can also be specified using the ASM430 environment variable. The assembler appends the value of this variable to every command line, so it provides a convenient method of specifying options that are required for every assembly. The following environment variables can be used with the MSP430 IAR Assembler: Environment variable Description ASM430 A430_INC Specifies command line options; for example: set ASM430=-L -ws Specifies directories to search for include files; for example: set A430_INC=c:\myinc\ Table 10: Assembler environment variables For example, setting the following environment variable will always generate a list file with the name temp.lst: ASM430=-l temp.lst For information about the environment variables used by the IAR XLINK Linker and the IAR XLIB Librarian, see the IAR Linker and Library Tools Reference Guide. MSP430 IAR Assembler 12 Reference Guide Assembler options Summary of assembler options The following table summarizes the assembler options available from the command line: Command line option Description -B -b -c{DMEAO} -Dsymbol[=value] -Enumber -f filename -G -Iprefix -i -L[prefix] -l filename -Mab -N -Oprefix -o filename -plines -r[e|n] -S -s{+|-} -tn -Usymbol -w[string][s] -x{DI2} Table 11: Assembler options summary Macro execution information Makes a library module Conditional list Defines a symbol Maximum number of errors Extends the command line Opens standard input as source Includes paths Lists #included text Lists to prefixed source name Lists to named file Macro quote characters Omit header from assembler listing Sets object filename prefix Sets object filename Lines/page Generates debug information Set silent operation Case sensitive user symbols Tab spacing Undefines a symbol Disables warnings Includes cross-references 13 Descriptions of assembler options Descriptions of assembler options The following sections give full reference information about each assembler option. -B -B Use this option to make the assembler print macro execution information to the standard output stream on every call of a macro. The information consists of: G G G G The name of the macro The definition of the macro The arguments to the macro The expanded text of the macro. This option is mainly used in conjunction with the list file options -L or -l; for additional information, see page 17. This option is identical to the Macro execution info option on the List page of the A430 category in the IAR Embedded Workbench. -b -b This option causes the object file to be a library module rather than a program module. By default, the assembler produces a program module ready to be linked with the IAR XLINK Linker. Use the -b option if you instead want the assembler to make a library module for use with XLIB. If the NAME directive is used in the source (to specify the name of the program module), the -b option is ignored, i.e. the assembler produces a program module regardless of the -b option. This option is identical to the Make a LIBRARY module option on the Code generation page of the A430 category in the IAR Embedded Workbench. -c -c{DMEAO} Use this option to control the contents of the assembler list file. This option is mainly used in conjunction with the list file options -L and -l; see page 17 for additional information. MSP430 IAR Assembler 14 Reference Guide Assembler options The following table shows the available parameters: Command line option Description -cD Table 12: Conditional list (-c) Disable list file Macro definitions No macro expansions Assembled lines only Multiline code -cM -cE -cA -cO This option is related to the List file options on the List page of the A430 category in -D -Dsymbol[=value] Use this option to define a preprocessor symbol with the name symbol and the value value. If no value is specified, 1 is used. The -D option allows you to specify a value or choice on the command line instead of in the source file. Example For example, you could arrange your source to produce either the test or production version of your program dependent on whether the symbol TESTVER was defined. To do this, use include sections such as: #ifdef TESTVER ... ; additional code lines for test version only #endif Then select the version required in the command line as follows: Production version: Test version: a430 prog a430 prog -DTESTVER Alternatively, your source might use a variable that you need to change often. You can then leave the variable undefined in the source, and use -D to specify the value on the command line; for example: a430 prog -DFRAMERATE=3 This option is related the #define page in the A430 category in the IAR Embedded Workbench. 15 Descriptions of assembler options -E -Enumber This option specifies the maximum number of errors that the assembler will report. By default, the maximum number is 100. The -E option allows you to decrease or increase this number to see more or fewer errors in a single assembly. -f -f extend.xcl This option extends the command line with text read from the file named extend.xcl. Notice that there must be a space between the option itself and the filename. The -f option is particularly useful where there is a large number of options which are more conveniently placed in a file than on the command line itself. Example To run the assembler with further options taken from the file Extend.xcl, use: a430 prog -f extend.xcl -G -G This option causes the assembler to read the source from the standard input stream, rather than from a specified source file. When -G is used, no source filename may be specified. -I -Iprefix Use this option to specify paths to be used by the preprocessor by adding the #include file search prefix prefix. By default, the assembler searches for #include files only in the current working directory and in the paths specified in the A430_INC environment variable. The -I option allows you to give the assembler the names of directories where it will also search if it fails to find the file in the current working directory. Example Using the options: -Ic:\global\ -Ic:\thisproj\headers\ and then writing: #include "asmlib.h" MSP430 IAR Assembler 16 Reference Guide Assembler options in the source, will make the assembler search first in the current directory, then in the directory c:\global\, and finally in the directory c:\thisproj\headers\. You can also specify the include path with the A430_INC environment variable, see Assembler environment variables, page 12. This option is related to the Include page in the A430 category in the IAR Embedded Workbench. -i -i Includes #include files in the list file. By default, the assembler does not list #include file lines since these often come from standard files and would waste space in the list file. The -i option allows you to list these file lines. This option is identical to the #included text option on the List page of the A430 category in the IAR Embedded Workbench. -L -L[prefix] By default the assembler does not generate a list file. Use this option to make the assembler generate one and sent it to file [prefix]sourcename.lst. To simply generate a listing, use the -L option without a prefix. The listing is sent to the file with the same name as the source, but the extension will be lst. The -L option lets you specify a prefix, for example to direct the list file to a subdirectory. Notice that you cannot include a space before the prefix. -L may not be used at the same time as -l. Example To send the list file to list\prog.lst rather than the default prog.lst: a430 prog -Llist\ This option is related to the List options in the A430 category in the IAR Embedded Workbench, as well as to the Output Directories option in the General category -l -l filename Use this option to make the assembler generate a listing and send it to the file filename. If no extension is specified, lst is used. Notice that you must include a space before the filename. 17 Descriptions of assembler options By default, the assembler does not generate a list file. The -l option generates a listing, and directs it to a specific file. To generate a list file with the default filename, use the -L option instead. This option is related to the List options in the A430 category in the IAR Embedded Workbench. In the Embedded Workbench the list filename always is sourcefilename.lst. -M -Mab This option sets the characters to be used as left and right quotes of each macro argument to a and b respectively. By default, the characters are < and >. The -M option allows you to change the quote characters to suit an alternative convention or simply to allow a macro argument to contain < or > themselves. Example For example, using the option: -M in the source you would write, for example: print [>] to call a macro print with > as the argument. This option is identical to the Macro quote chars option on the Code generation page of the A430 category in the IAR Embedded Workbench. -N -N Use this option to omit the header section that is printed by default in the beginning of the list file. This option is useful in conjunction with the list file options -L or -l; see page 17 for additional information. This option is identical to deselecting the option Include header on the List page of the A430 category in the IAR Embedded Workbench. MSP430 IAR Assembler 18 Reference Guide Assembler options -O -Oprefix Use this option to set the prefix to be used on the name of the object file. Notice that you cannot include a space before the prefix. By default the prefix is null, so the object filename corresponds to the source filename (unless -o is used). The -O option lets you specify a prefix, for example to direct the object file to a subdirectory. Notice that -O may not be used at the same time as -o. Example To send the object code to the file obj\prog.r43 rather than to the default location for prog.r43: a430 prog -Oobj\ This option is related to the Output directories page in the General category in the IAR Embedded Workbench. -o -o filename This option sets the filename to be used for the object file. Notice that you must include a space before the filename. If no extension is specified, r43 is used. The option -o may not be used at the same time as the option -O. Example For example, the following command puts the object code to the file obj.r43 instead of the default prog.r43: a430 prog -o obj Notice that you must include a space between the option itself and the filename. This option is related to the filename and directory that you specify when creating a new source file or project in the IAR Embedded Workbench. -p -plines The -p option sets the number of lines per page to lines, which must be in the range 10 to 150. This option is used in conjunction with the list options -L or -l; see page 17 for additional information. 19 Descriptions of assembler options This option is identical to the Lines/page option on the List page of the A430 category in the IAR Embedded Workbench. -r -r[e|n] The -r option makes the assembler generate debug information that allows a symbolic debugger such as C-SPY to be used on the program. By default, the assembler does not generate debug information, to reduce the size and link time of the object file. You must use the -r option if you want to use a debugger with the program. The following table shows the available parameters: Command line option Description -re -rn Includes the full source file into the object file Generates an object file without source information; symbol information will be available. Table 13: Generating debug information (-r) This option is identical to the Generate debug information option on the Debug page of the A430 category in the IAR Embedded Workbench. -S -S The -S option causes the assembler to operate without sending any messages to the standard output stream. By default, the assembler sends various insignificant messages via the standard output stream. Use the -S option to prevent this. The assembler sends error and warning messages to the error output stream, so they are displayed regardless of this setting. -s -s{+|-} Use the -s option to control whether the assembler is sensitive to the case of user symbols: Command line option Description -s+ -s- Case sensitive user symbols Case insensitive user symbols Table 14: Controlling case sensitivity in user symbols (-s) MSP430 IAR Assembler 20 Reference Guide Assembler options By default, case sensitivity is on. This means that, for example, LABEL and label refer to different symbols. Use -s- to turn case sensitivity off, in which case LABEL and label will refer to the same symbol. This option is identical to the Case sensitive user symbols option on the Code generation page of the A430 category in the IAR Embedded Workbench. -t -tn By default the assembler sets 8 character positions per tab stop. The -t option allows you to specify a tab spacing to n, which must be in the range 2 to 9. This option is used in conjunction with the list options -L or -l; see page 17 for additional information. This option is identical to the Tab spacing option on the List page in the A430 category in the IAR Embedded Workbench. -U -Usymbol Use the -U option to undefine the predefined symbol symbol. By default, the assembler provides certain predefined symbols; see Predefined symbols, page 7. The -U option allows you to undefine such a predefined symbol to make its name available for your own use through a subsequent -D option or source definition. Example To use the name of the predefined symbol __TIME__ for your own purposes, you could undefine it with: a430 prog -U __TIME_ _ This option is identical to the #undef options in the A430 category in the IAR Embedded Workbench. -w -w[string][s] By default, the assembler displays a warning message when it detects an element of the source which is legal in a syntactical sense, but may contain a programming error; see Diagnostics, page 93, for details. 21 Descriptions of assembler options Use this option to disable warnings. The -w option without a range disables all warnings. The -w option with a range performs the following: Command line option Description -w+ -w-w+n -w-n -w+m-n -w-m-n Table 15: Disabling assembler warnings (-w) Enables all warnings. Disables all warnings. Enables just warning n. Disables just warning n. Enables warnings m to n. Disables warnings m to n. Only one -w option may be used on the command line. By default, the assembler generates exit code 0 for warnings. Use the -ws option to generate exit code 1 if a warning message is produced. Example To disable just warning 0 (unreferenced label), use the following command: a430 prog -w-0 To disable warnings 0 to 8, use the following command: a430 prog -w-0-8 This option is identical to the Warnings option on the Code generation page of the A430 category in the IAR Embedded Workbench. -x -x{DI2} Use this option to make the assembler include a cross-reference table at the end of the list file. This option is used in conjunction with the list options -L or -l; see page 17 for additional information. The following parameters are available: Command line option Description -xD -xI -x2 #defines Internal symbols Dual line spacing Table 16: Including cross-references in assembler list file (-x) MSP430 IAR Assembler 22 Reference Guide Assembler options This option is identical to the Include cross-reference option on the List page of the A430 category in the IAR Embedded Workbench. 23 Descriptions of assembler options MSP430 IAR Assembler 24 Reference Guide Assembler operators This chapter first describes the precedence of the assembler operators, and then summarizes the operators, classified according to their precedence. Finally, this chapter provides reference information about each operator, presented in alphabetical order. Precedence of operators Each operator has a precedence number assigned to it that determines the order in which the operator and its operands are evaluated. The precedence numbers range from 1 (the highest precedence, i.e. first evaluated) to 7 (the lowest precedence, i.e. last evaluated). The following rules determine how expressions are evaluated: G G G The highest precedence operators are evaluated first, then the second highest precedence operators, and so on until the lowest precedence operators are evaluated. Operators of equal precedence are evaluated from left to right in the expression. Parentheses ( and ) can be used for grouping operators and operands and for controlling the order in which the expressions are evaluated. For example, the following expression evaluates to 1: 7/(1+(2*3)) Summary of assembler operators The following tables give a summary of the operators, in order of priority. Synonyms, where available, are shown after the operator name. UNARY OPERATORS 1 + !, NOT ~, BITNOT LOW HIGH LWRD Unary plus. Unary minus. Logical NOT. Bitwise NOT. Low byte. High byte. Low word. 25 Summary of assembler operators HWRD DATE SFB SFE SIZEOF High word. Current time/date. Segment begin. Segment end. Segment size. MULTIPLICATIVE ARITHMETIC OPERATORS 2 * / %, MOD Multiplication. Division. Modulo. ADDITIVE ARITHMETIC OPERATORS 3 + Addition. Subtraction. SHIFT OPERATORS 4 >>, SHR <<, SHL Logical shift right. Logical shift left. AND OPERATORS 5 &&, AND &, BITAND Logical AND. Bitwise AND. OR OPERATORS 6 ||, OR XOR |, BITOR ^, BITXOR Logical OR. Logical exclusive OR. Bitwise OR. Bitwise exclusive OR. MSP430 IAR Assembler 26 Reference Guide Assembler operators COMPARISON OPERATORS 7 =, ==, EQ <>, !=, NE >, GT <, LT UGT ULT >=, GE <=, LE Equal. Not equal. Greater than. Less than. Unsigned greater than. Unsigned less than. Greater than or equal. Less than or equal. Description of operators The following sections give detailed descriptions of each assembler operator. The number within parentheses specify the priority of the operator. See Assembler expressions, page 4, for related information. * Multiplication (2). * produces the product of its two operands. The operands are taken as signed 32-bit integers and the result is also a signed 32-bit integer. Example 2*2 4 -2*2 -4 + Unary plus (1). Unary plus operator. Example +3 3 3*+2 6 + Addition (3). The + addition operator produces the sum of the two operands which surround it. The operands are taken as signed 32-bit integers and the result is also a signed 32-bit integer. 27 Description of operators Example 92+19 111 -2+2 0 -2+-2 -4 Unary minus (1). The unary minus operator performs arithmetic negation on its operand. The operand is interpreted as a 32-bit signed integer and the result of the operator is the two's complement negation of that integer. Example -3 -3 3*-2 -6 4--5 9 Subtraction (3). The subtraction operator produces the difference when the right operand is taken away from the left operand. The operands are taken as signed 32-bit integers and the result is also signed 32-bit integer. Example 92-19 73 -2-2 -4 -2--2 0 / Division (2). / produces the integer quotient of the left operand divided by the right operator. The operands are taken as signed 32-bit integers and the result is also a signed 32-bit integer. Example 9/2 4 -12/3 -4 9/2*6 24 MSP430 IAR Assembler 28 Reference Guide Assembler operators < Less than (7). If the left operand has a lower numeric value than the right operand, then the result will be 1 (true), otherwise 0 (false). Example -1 < 2 1 2 < 1 0 2 < 2 0 <= Less than or equal (7) <= evaluates to 1 (true) if the left operand has a lower or equal numeric value to the right operand, otherwise 0 (false). Example 1 <= 2 2 <= 1 1 <= 1 1 0 1 <>, != Not equal (7). <> evaluates to 0 (false) if its two operands are identical in value or to 1 (true) if its two operands are not identical in value. Example 1 <> 2 1 2 <> 2 0 'A' <> 'B' 1 =, == Equal (7). = evaluates to 1 (true) if its two operands are identical in value, or to 0 (false) if its two operands are not identical in value. Example 1 = 2 0 2 == 2 1 'ABC' = 'ABCD' 0 29 Description of operators > Greater than (7). > evaluates to 1 (true) if the left operand has a higher numeric value than the right operand, otherwise 0 (false). Example -1 > 1 0 2 > 1 1 1 > 1 0 >= Greater than or equal (7). >= evaluates to 1 (true) if the left operand is equal to or has a higher numeric value than the right operand, otherwise 0 (false). Example 1 >= 2 2 >= 1 1 >= 1 0 1 1 && Logical AND (5). Use && to perform logical AND between its two integer operands. If both operands are non-zero the result is 1 (true); otherwise it is 0 (zero). Example B'1010 && B'0011 B'1010 && B'0101 B'1010 && B'0000 1 1 0 & Bitwise AND (5). Use & to perform bitwise AND between the integer operands. Example B'1010 & B'0011 B'1010 & B'0101 B'1010 & B'0000 B'0010 B'0000 B'0OOO MSP430 IAR Assembler 30 Reference Guide Assembler operators ~ Bitwise NOT (1). Use ~ to perform bitwise NOT on its operand. The operands are taken as signed 32-bit integers and the result is also a signed 32-bit integer. Example ~ B'1010 B'11111111111111111111111111110101 | Bitwise OR (6). Use | to perform bitwise OR on its operands. Example B'1010 | B'0101 B'1010 | B'0000 B'1111 B'1010 ^ Bitwise exclusive OR (6). Use ^ to perform bitwise XOR on its operands. Example B'1010 ^ B'0101 B'1010 ^ B'0011 B'1111 B'1001 % Modulo (2). % produces the remainder from the integer division of the left operand by the right operand. The operands are taken as signed 32-bit integers and the result is also a signed 32-bit integer. X % Y is equivalent to X-Y*(X/Y) using integer division. Example 2 % 2 0 12 % 7 5 3 % 2 1 31 Description of operators ! Logical NOT (1). Use ! to negate a logical argument. Example ! B'0101 ! B'0000 0 1 || Logical OR (6). Use || to perform a logical OR between two integer operands. Example B'1010 || B'0000 B'0000 || B'0000 1 0 DATE Current time/date (1). Use the DATE operator to specify when the current assembly began. The DATE operator takes an absolute argument (expression) and returns: DATE 1 DATE 2 DATE 3 DATE 4 DATE 5 DATE 6 Current second (059). Current minute (059). Current hour (023). Current day (131). Current month (112). Current year MOD 100 (1998 98, 2000 00, 2002 02). Example To assemble the date of assembly: today: DC8 DATE 5, DATE 4, DATE 3 MSP430 IAR Assembler 32 Reference Guide Assembler operators HIGH High byte (1). HIGH takes a single operand to its right which is interpreted as an unsigned, 16-bit integer value. The result is the unsigned 8-bit integer value of the higher order byte of the operand. Example HIGH 0xABCD 0xAB HWRD High word (1). HWRD takes a single operand, which is interpreted as an unsigned, 32-bit integer value. The result is the high word (bits 31 to 16) of the operand. Example HWRD 0x12345678 0x1234 LOW Low byte (1). LOW takes a single operand, which is interpreted as an unsigned, 32-bit integer value. The result is the unsigned, 8-bit integer value of the lower order byte of the operand. Example LOW 0xABCD 0xCD LWRD Low word (1). LWRD takes a single operand, which is interpreted as an unsigned, 32-bit integer value. The result is the low word (bits 15 to 0) of the operand. Example LWRD 0x12345678 0x5678 SFB Segment begin (1). Syntax SFB(segment [{+|-}offset]) 33 Description of operators Parameters segment The name of a relocatable segment, which must be defined before SFB is used. An optional offset from the start address. The parentheses are optional if offset is omitted. offset Description SFB accepts a single operand to its right. The operand must be the name of a relocatable segment. The operator evaluates to the absolute address of the first byte of that segment. This evaluation takes place at linking time. Example NAME RSEG start: DC16 demo CODE SFB(CODE) Even if the above code is linked with many other modules, start will still be set to the address of the first byte of the segment. SFE Segment end (1). Syntax SFE (segment [{+ | -} offset]) Parameters segment The name of a relocatable segment, which must be defined before SFE is used. An optional offset from the start address. The parentheses are optional if offset is omitted. offset Description SFE accepts a single operand to its right. The operand must be the name of a relocatable segment. The operator evaluates to the segment start address plus the segment size. This evaluation takes place at linking time. MSP430 IAR Assembler 34 Reference Guide Assembler operators Example NAME RSEG DC16 demo CODE SFE(CODE) end: Even if the above code is linked with many other modules, end will still be set to the address of the last byte of the segment. The size of the segment MY_SEGMENT can be calculated as: SFE(MY_SEGMENT)-SFB(MY_SEGMENT) << Logical shift left (4). Use << to shift the left operand, which is always treated as unsigned, to the left. The number of bits to shift is specified by the right operand, interpreted as an integer value between 0 and 32. Example B'00011100 << 3 B'11100000 B'00000111111111111 << 5 B'11111111111100000 14 << 1 28 >> Logical shift right (4). Use >> to shift the left operand, which is always treated as unsigned, to the right. The number of bits to shift is specified by the right operand, interpreted as an integer value between 0 and 32. Example B'01110000 >> 3 B'00001110 B'1111111111111111 >> 20 0 14 >> 1 7 SIZEOF Segment size (1). Syntax SIZEOF segment 35 Description of operators Parameters segment The name of a relocatable segment, which must be defined before SIZEOF is used. Description SIZEOF generates SFE-SFB for its argument, which should be the name of a relocatable segment; i.e. it calculates the size in bytes of a segment. This is done when modules are linked together. Example NAME RSEG size: DC16 demo CODE SIZEOF CODE sets size to the size of segment CODE. UGT Unsigned greater than (7). UGT evaluates to 1 (true) if the left operand has a larger value than the right operand, otherwise 0 (false). The operation treats its operands as unsigned values. Example 2 UGT 1 1 -1 UGT 1 1 ULT Unsigned less than (7). ULT evaluates to 1 (true) if the left operand has a smaller value than the right operand, otherwise 0 (false). The operation treats its operands as unsigned values. Example 1 ULT 2 1 -1 ULT 2 0 MSP430 IAR Assembler 36 Reference Guide Assembler operators XOR Logical exclusive OR (6). Use XOR to perform logical XOR on its two operands. Example B'0101 XOR B'1010 B'0101 XOR B'0000 0 1 37 Description of operators MSP430 IAR Assembler 38 Reference Guide Assembler directives This chapter gives an alphabetical summary of the assembler directives. It then describes the syntax conventions and provides detailed reference information for each category of directives. Summary of assembler directives The following table gives a summary of all the assembler directives. Directive Description Section $ #define #elif #else #endif #error #if #ifdef #ifndef #include #message #undef /*comment*/ // = ALIAS ALIGN ALIGNRAM ASEG ASEGN ASSIGN Includes a file. Assigns a value to a label. Introduces a new condition in a #if...#endif block. Assembles instructions if a condition is false. Ends a #if, #ifdef, or #ifndef block. Generates an error. Assembles instructions if a condition is true. Assembles instructions if a symbol is defined. Assembles instructions if a symbol is undefined. Includes a file. Generates a message on standard output. Undefines a label. C-style comment delimiter. C++ style comment delimiter. Assigns a permanent value local to a module. Assigns a permanent value local to a module. Aligns the location counter by inserting zero-filled bytes. Aligns the program location counter. Begins an absolute segment. Begins a named absolute segment. Assigns a temporary value. Assembler control C-style preprocessor C-style preprocessor C-style preprocessor C-style preprocessor C-style preprocessor C-style preprocessor C-style preprocessor C-style preprocessor C-style preprocessor C-style preprocessor C-style preprocessor Assembler control Assembler control Value assignment Value assignment Segment control Segment control Segment control Segment control Value assignment Table 17: Assembler directives summary 39 Summary of assembler directives Directive Description Section CASEOFF CASEON CFI COL COMMON DB DC16 DC32 DC8 DEFINE DF DL .double DS DS16 DS32 DS8 DW ELSE ELSEIF Disables case sensitivity. Enables case sensitivity. Specifies call frame information. Sets the number of columns per page. Begins a common segment. Assembler control Assembler control Call frame information Listing control Segment control Generates 8-bit byte constants, including strings. Data definition or allocation Generates 16-bit word constants, including strings. Generates 32-bit long word constants. Data definition or allocation Data definition or allocation Generates 8-bit byte constants, including strings. Data definition or allocation Defines a file-wide value. Generates a 32-bit floating point constant. Generates a 32-bit constant. Generates 32-bit values in Texas Instrument's floating point format. Allocates space for 8-bit bytes. Allocates space for 16-bit words. Allocates space for 32-bit words. Allocates space for 8-bit bytes. Generates 16-bit word constants, including strings. Assembles instructions if a condition is false. Specifies a new condition in an IF...ENDIF block. Value assignment Data definition or allocation Data definition or allocation Data definition or allocation Data definition or allocation Data definition or allocation Data definition or allocation Data definition or allocation Data definition or allocation Conditional assembly Conditional assembly Table 17: Assembler directives summary (Continued) MSP430 IAR Assembler 40 Reference Guide Assembler directives Directive Description Section END ENDIF ENDM ENDMOD ENDR EQU EVEN EXITM EXPORT EXTERN .float IF IMPORT LIBRARY LIMIT LOCAL LSTCND LSTCOD LSTEXP LSTMAC LSTOUT LSTPAG LSTREP LSTXRF MACRO MODULE NAME ODD ORG Terminates the assembly of the last module in a file. Ends an IF block. Ends a macro definition. Terminates the assembly of the current module. Ends a repeat structure Assigns a permanent value local to a module. Aligns the program counter to an even address. Exits prematurely from a macro. Exports symbols to other modules. Imports an external symbol. Generates 48-bit values in Texas Instrument's floating point format. Assembles instructions if a condition is true. Imports an external symbol. Begins a library module. Checks a value against limits. Creates symbols local to a macro. Controls conditional assembler listing. Controls multi-line code listing. Controls the listing of macro generated lines. Controls the listing of macro definitions. Controls assembler-listing output. Controls the formatting of output into pages. Controls the listing of lines generated by repeat directives. Generates a cross-reference table. Defines a macro. Begins a library module. Begins a program module. Aligns the program location counter to an odd address. Sets the location counter. Module control Conditional assembly Macro processing Module control Macro processing Value assignment Segment control Macro processing Symbol control Symbol control Data definition or allocation Conditional assembly Symbol control Module control Value assignment Macro processing Listing control Listing control Listing control Listing control Listing control Listing control Listing control Listing control Macro processing Module control Module control Segment control Segment control Table 17: Assembler directives summary (Continued) 41 Module control directives Directive Description Section PAGE PAGSIZ PROGRAM PUBLIC PUBWEAK RADIX REPT REPTC REPTI REQUIRE RSEG RTMODEL SET SFRB SFRTYPE SFRW STACK VAR Generates a new page. Sets the number of lines per page. Begins a program module. Exports symbols to other modules. Exports symbols to other modules, multiple definitions allowed. Sets the default base. Assembles instructions a specified number of times. Repeats and substitutes characters. Repeats and substitutes strings. Forces a symbol to be referenced. Begins a relocatable segment. Declares runtime model attributes. Assigns a temporary value. Creates byte-access SFR labels. Specifies SFR attributes. Creates word-access SFR labels. Begins a stack segment. Assigns a temporary value. Listing control Listing control Module control Symbol control Symbol control Assembler control Macro processing Macro processing Macro processing Symbol control Segment control Module control Value assignment Value assignment Value assignment Value assignment Segment control Value assignment Table 17: Assembler directives summary (Continued) Note: The IAR Systems toolkit for the MSP430 microcontroller also supports the static overlay directives FUNCALL, FUNCTION, LOCFRAME, and ARGFRAME that are designed to ease coexistence of routines written in C and assembler language.(Static overlay is not, however, relevant for this product.) Module control directives Module control directives are used for marking the beginning and end of source program modules, and for assigning names and types to them. Directive Description END ENDMOD Terminates the assembly of the last module in a file. Terminates the assembly of the current module. Table 18: Module control directives MSP430 IAR Assembler 42 Reference Guide Assembler directives Directive Description LIBRARY MODULE NAME PROGRAM RTMODEL Begins a library module. Begins a library module. Begins a program module. Begins a program module Declares runtime model attributes. Table 18: Module control directives (Continued) SYNTAX END [label] ENDMOD [label] LIBRARY symbol [(expr)] MODULE symbol [(expr)] NAME symbol [(expr)] PROGRAM symbol [(expr)] RTMODEL key, value PARAMETERS expr Optional expression (0255) used by the IAR compiler to encode programming language, memory model, and processor configuration. A text string specifying the key. An expression or label that can be resolved at assembly time. It is output in the object code as a program entry address. Name assigned to module, used by XLINK, XAR, and XLIB when processing object files. A text string specifying the value. key label symbol value DESCRIPTION Beginning a program module Use NAME, alternatively PROGRAM, to begin a program module, and to assign a name for future reference by the IAR XLINK LinkerTM, the IAR XAR Library BuilderTM, and the IAR XLIB LibrarianTM. Program modules are unconditionally linked by XLINK, even if other modules do not reference them. 43 Module control directives Beginning a library module Use MODULE, alternatively LIBRARY, to create libraries containing a number of small modules--like runtime systems for high-level languages--where each module often represents a single routine. With the multi-module facility, you can significantly reduce the number of source and object files needed. Library modules are only copied into the linked code if other modules reference a public symbol in the module. Terminating a module Use ENDMOD to define the end of a module. Terminating the last module Use END to indicate the end of the source file. Any lines after the END directive are ignored. Assembling multi-module files Program entries must be either relocatable or absolute, and will show up in the XLINK list file, as well as in some of the hexadecimal absolute output formats. Program entries must not be defined externally. The following rules apply when assembling multi-module files: G G At the beginning of a new module all user symbols are deleted, except for those created by DEFINE, #define, or MACRO, the location counters are cleared, and the mode is set to absolute. Listing control directives remain in effect throughout the assembly. Note: END must always be used in the last module, and there must not be any source lines (except for comments and listing control directives) between an ENDMOD and a MODULE directive. If the NAME or MODULE directive is missing, the module will be assigned the name of the source file and the attribute program. Declaring runtime model attributes Use RTMODEL to enforce consistency between modules. All modules that are linked together and define the same runtime attribute key must have the same value for the corresponding key value, or the special value *. Using the special value * is equivalent to not defining the attribute at all. It can however be useful to explicitly state that the module can handle any runtime model. A module can have several runtime model definitions. MSP430 IAR Assembler 44 Reference Guide Assembler directives Note: The compiler runtime model attributes start with double underscore. In order to avoid confusion, this style must not be used in the user-defined assembler attributes. If you are writing assembler routines for use with C code, and you want to control the module consistency, refer to the MSP430 IAR C/EC++ Compiler Reference Guide. Examples The following example defines three modules where: G G G MOD_1 and MOD_2 cannot be linked together since they have different values for runtime model "foo". MOD_1 and MOD_3 can be linked together since they have the same definition of runtime model "bar" and no conflict in the definition of "foo". MOD_2 and MOD_3 can be linked together since they have no runtime model conflicts. The value "*" matches any runtime model value. MODULE MOD_1 RTMODEL "foo", "1" RTMODEL "bar", "XXX" ... ENDMOD MODULE MOD_2 RTMODEL "foo", "2" RTMODEL "bar", "*" ... ENDMOD MODULE MOD_3 RTMODEL "bar", "XXX" ... END Symbol control directives These directives control how symbols are shared between modules. Directive Description EXTERN (IMPORT) PUBLIC (EXPORT) PUBWEAK REQUIRE Table 19: Symbol control directives Imports an external symbol. Exports symbols to other modules. Exports symbols to other modules, multiple definitions allowed. Forces a symbol to be referenced. 45 Symbol control directives SYNTAX EXTERN symbol [,symbol] ... PUBLIC symbol [,symbol] ... PUBWEAK symbol [,symbol] ... REQUIRE symbol PARAMETERS symbol Symbol to be imported or exported. DESCRIPTION Exporting symbols to other modules Use PUBLIC to make one or more symbols available to other modules. Symbols declared PUBLIC can be relocatable or absolute, and can also be used in expressions (with the same rules as for other symbols). The PUBLIC directive always exports full 32-bit values, which makes it feasible to use global 32-bit constants also in assemblers for 8-bit and 16-bit processors. With the LOW, HIGH, >>, and << operators, any part of such a constant can be loaded in an 8-bit or 16-bit register or word. There are no restrictions on the number of PUBLIC-declared symbols in a module. Exporting symbols with multiple definitions to other modules PUBWEAK is similar to PUBLIC except that it allows the same symbol to be defined several times. Only one of those definitions will be used by XLINK. If a module containing a PUBLIC definition of a symbol is linked with one or more modules containing PUBWEAK definitions of the same symbol, XLINK will use the PUBLIC definition. If there are more than one PUBWEAK definitions, XLINK will use the first definition. A symbol defined as PUBWEAK must be a label in a segment part, and it must be the only symbol defined as PUBLIC or PUBWEAK in that segment part. Note: Library modules are only linked if a reference to a symbol in that module is made, and that symbol has not already been linked. During the module selection phase, no distinction is made between PUBLIC and PUBWEAK definitions. This means that to ensure that the module containing the PUBLIC definition is selected, you should link it before the other modules, or make sure that a reference is made to some other PUBLIC symbol in that module. MSP430 IAR Assembler 46 Reference Guide Assembler directives Importing symbols Use EXTERN to import an untyped external symbol. The REQUIRE directive marks a symbol as referenced. This is useful if the segment part containing the symbol must be loaded even if the code is not referenced. EXAMPLES The following example defines a subroutine to print an error message, and exports the entry address err so that it can be called from other modules. It defines print as an external routine; the address will be resolved at link time. NAME error EXTERN print PUBLIC err err CALL DB EVEN RET print "** Error **" END Segment control directives The segment directives control how code and data are located. Directive Description ALIGN ALIGNRAM ASEG ASEGN COMMON EVEN ODD ORG RSEG STACK Aligns the location counter by inserting zero-filled bytes. Aligns the program location counter. Begins an absolute segment. Begins a named absolute segment. Begins a common segment. Aligns the program counter to an even address. Aligns the program counter to an odd address. Sets the location counter. Begins a relocatable segment. Begins a stack segment. Table 20: Segment control directives 47 Segment control directives SYNTAX ALIGN align [,value] ALIGNRAM align ASEG [start [(align)]] ASEGN segment [:type], address COMMON segment [:type] [(align)] EVEN [value] ORG expr RSEG segment [:type] [flag] [(align)] RSEG segment [:type], address STACK segment [:type] [(align)] PARAMETERS address align Address where this segment part will be placed. Exponent of the value to which the address should be aligned, in the range 0 to 30. Address to set the location counter to. NOROOT This segment part is discarded by the linker if no symbols in this segment part are referred to. Normally all segment parts except startup code and interrupt vectors should set this flag. The default mode is ROOT which indicates that the segment part must not be discarded. REORDER Allows the linker to reorder segment parts. For a given segment, all segment parts must specify the same state for this flag. The default mode is NOREORDER which indicates that the segment parts must remain in order. SORT The linker will sort the segment parts in decreasing alignment order. For a given segment, all segment parts must specify the same state for this flag. The default mode is NOSORT which indicates that the segment parts will not be sorted. segment start The name of the segment. A start address that has the same effect as using an ORG directive at the beginning of the absolute segment. The memory type, typically CODE, or DATA. In addition, any of the types supported by the IAR XLINK Linker. Value used for padding byte(s), default is zero. expr flag type value MSP430 IAR Assembler 48 Reference Guide Assembler directives DESCRIPTION Use the align parameter in any of these directives to align the segment start address. Beginning an absolute segment Use ASEG to set the absolute mode of assembly, which is the default at the beginning of a module. If the parameter is omitted, the start address of the first segment is 0, and subsequent segments continue after the last address of the previous segment. Note: If a move of an immediate value to an absolute address, for example MOV #0x1234, 0x300 is made in a relocatable or absolute segment, the offset is calculated as if the code begun at address 0x0000. The assembler does not take into account the placement of the segment. Beginning a named absolute segment Use ASEGN to start a named absolute segment located at the address address. This directive has the advantage of allowing you to specify the memory type of the segment. Beginning a relocatable segment Use RSEG to set the current mode of the assembly to relocatable assembly mode. The assembler maintains separate location counters (initially set to zero) for all segments, which makes it possible to switch segments and mode anytime without the need to save the current segment location counter. Up to 65536 unique, relocatable segments may be defined in a single module. Beginning a stack segment Use STACK to allocate code or data allocated from high to low addresses (in contrast with the RSEG directive that causes low-to-high allocation). Note: The contents of the segment are not generated in reverse order. Beginning a common segment Use COMMON to place data in memory at the same location as COMMON segments from other modules that have the same name. In other words, all COMMON segments of the same name will start at the same location in memory and overlay each other. 49 Segment control directives Obviously, the COMMON segment type should not be used for overlaid executable code. A typical application would be when you want a number of different routines to share a reusable, common area of memory for data. It can be practical to have the interrupt vector table in a COMMON segment, thereby allowing access from several routines. The final size of the COMMON segment is determined by the size of largest occurrence of this segment. The location in memory is determined by the XLINK -Z command; see the IAR Linker and Library Tools Reference Guide. Setting the program location counter (PLC) Use ORG to set the program location counter of the current segment to the value of an expression. The optional label will assume the value and type of the new location counter. The result of the expression must be of the same type as the current segment, i.e. it is not valid to use ORG 10 during RSEG, since the expression is absolute; use ORG $+10 instead. The expression must not contain any forward or external references. All program location counters are set to zero at the beginning of an assembly module. Aligning a segment Use the directive ALIGN to align the program location counter to a specified address boundary. The parameter align is used in any expression which gives the power of two to which the program counter should be aligned and the permitted range is 0 to 8. The alignment is made relative to the segment start; normally this means that the segment alignment must be at least as large as that of the alignment directive to give the desired result. ALIGN aligns by inserting zero/filled bytes, up to a maximum of 255. The EVEN directive aligns the program counter to an even address (which is equivalent to ALIGN 1) and the ODD directive aligns the program location counter to an odd address. The value used for padding bytes must be within the range 0 to 255. Use ALIGNRAM to align the program location counter by incrementing it; no data is generated. The parameter align can be within the range 0 to 31. EXAMPLES Beginning an absolute segment The following example assembles the jump to the function main in address 0. On RESET, the chip sets PC to address 0. MSP430 IAR Assembler 50 Reference Guide Assembler directives NAME EXTERN ASEG ORG reset: DC16 end reset main 0xFFFE main ; RESET vector address ; Instruction that ; executes on startup Beginning a relocatable segment The following directive aligns the start address of segment MYSEG (upwards) to the nearest 8 byte (2**3) page boundary: RSEG MYSEG:CODE(3) Note that only the first segment directive for a particular segment can contain an alignment operand. Beginning a stack segment The following example defines two 100-byte stacks in a relocatable segment called rpnstack: parms opers STACK DS8 DS8 END rpnstack 100 100 The data is allocated from high to low addresses. Beginning a common segment The following example defines two common segments containing variables: NAME COMMON DS8 ENDMOD NAME COMMON DS8 ORG DS8 common1 data 4 count up down common2 data 1 $+2 1 END 51 Value assignment directives Because the common segments have the same name, data, the variables up and down refer to the same locations in memory as the first and last bytes of the 4-byte variable count. Setting the location counter The following example uses ORG to leave a gap of 256 bytes: NAME ORG MOV SUB RET END org $+256 #12,R4 R5,R4 begin begin Aligning a segment This example starts a relocatable segment, moves to an even address, and adds some data. It then aligns to a 64-byte boundary before creating a 64-byte table. RSEG EVEN DC16 DC16 ALIGN DS8 data 1 1 6 64 ; ; ; ; Start a relocatable data segment Ensure it's on an even boundary target and best will be on an even boundary target best results ; Now align to a 64 byte boundary ; And create a 64 byte table END Value assignment directives These directives are used for assigning values to symbols. Directive Description = ALIAS ASSIGN DEFINE EQU LIMIT SET SFRB Table 21: Value assignment directives Assigns a permanent value local to a module. Assigns a permanent value local to a module. Assigns a temporary value. Defines a file-wide value. Assigns a permanent value local to a module. Checks a value against limits. Assigned a temporary value. Creates byte-access SFR labels. MSP430 IAR Assembler 52 Reference Guide Assembler directives Directive Description SFRTYPE SFRW VAR Specifies SFR attributes. Creates word-access SFR labels. Assigns a temporary value. Table 21: Value assignment directives (Continued) SYNTAX label = expr label ALIAS expr label ASSIGN expr label DEFINE expr label EQU expr LIMIT expr, min, max, message [const] SFRB register = value [const] SFRTYPE register attribute [,attribute] = value [const] SFRW register = value label VAR expr PARAMETERS attribute One or more of the following: BYTE READ WORD WRITE expr label message min, max register value The SFR must be accessed as a byte. You can read from this SFR. The SFR must be accessed as a word. You can write to this SFR. Value assigned to symbol or value to be tested. Symbol to be defined. A text message that will be printed when expr is out of range. The minimum and maximum values allowed for expr. The special function register. The SFR port address. DESCRIPTION Defining a temporary value Use either of ASSIGN and VAR to define a symbol that may be redefined, such as for use with macro variables. Symbols defined with VAR cannot be declared PUBLIC. 53 Value assignment directives Defining a permanent local value Use EQU or = to assign a value to a symbol. Use EQU to create a local symbol that denotes a number or offset. The symbol is only valid in the module in which it was defined, but can be made available to other modules with a PUBLIC directive. Use EXTERN to import symbols from other modules. Defining a permanent global value Use DEFINE to define symbols that should be known to all modules in the source file. A symbol which has been given a value with DEFINE can be made available to modules in other files with the PUBLIC directive. Symbols defined with DEFINE cannot be redefined within the same file. Defining special function registers Use SFRB to create special function register labels with attributes READ, WRITE, and BYTE turned on. Use SFRW to create special function register labels with attributes READ, WRITE, or WORD turned on. Use SFRTYPE to create special function register labels with specified attributes. Prefix the directive with const to disable the WRITE attribute assigned to the SFR. You will then get an error or warning message when trying to write to the SFR. The const keyword must be placed on the same line as the directive. Checking symbol values Use LIMIT to check that expressions lie within a specified range. If the expression is assigned a value outside the range, an error message will appear. The check will occur as soon as the expression is resolved, which will be during linking if the expression contains external references. The min and max expressions cannot involve references to forward or external labels, i.e. they must be resolved when encountered. MSP430 IAR Assembler 54 Reference Guide Assembler directives EXAMPLES Redefining a symbol The following example uses SET to redefine the symbol cons in a REPT loop to generate a table of the first 8 powers of 3: main cons NAME ; Generate SET REPT DC16 SET ENDR END table a table of powers of 3 1 cons cons*3 main cons Using local and global symbols In the following example the symbol value defined in module add1 is local to that module; a distinct symbol of the same name is defined in module add2. The DEFINE directive is used for declaring locn for use anywhere in the file: locn value NAME DEFINE EQU MOV ADD ENDMOD NAME EQU MOV ADD END add1 100h 77 locn,R4 #value,R4 value add2 88 locn,R5 #value,R5 The symbol locn defined in module add1 is also available to module add2. Using special function registers In this example a number of SFR variables are declared with a variety of access capabilities: SFRB portd SFRW ocr1 const SFRB pind SFRTYPE portb write, byte = = = = 0x212 0x22A 0x210 0x218 /* /* /* /* byte word byte byte read/write access */ read/write access */ read only access */ write only access */ 55 Conditional assembly directives Using the LIMIT directive The following example sets the value of a variable called speed and then checks it, at assembly time, to see if it is in the range 10 to 30. This might be useful if speed is often changed at compile time, but values outside a defined range would cause undesirable behavior. speed LIMIT VAR 23 speed,10,30,"speed out of range" Conditional assembly directives These directives provide logical control over the selective assembly of source code. Directive Description IF ELSE ELSEIF ENDIF Assembles instructions if a condition is true. Assembles instructions if a condition is false. Specifies a new condition in an IF...ENDIF block. Ends an IF block. Table 22: Conditional assembly directives SYNTAX IF condition ELSE ELSEIF condition ENDIF PARAMETERS condition One of the following: An absolute expression The expression must not contain forward or external references, and any non-zero value is considered as true. The condition is true if string1 and string2 have the same length and contents. The condition is true if string1 and string2 have different length or contents. string1=string2 string1<>string2 MSP430 IAR Assembler 56 Reference Guide Assembler directives DESCRIPTION Use the IF, ELSE, and ENDIF directives to control the assembly process at assembly time. If the condition following the IF directive is not true, the subsequent instructions will not generate any code (i.e. it will not be assembled or syntax checked) until an ELSE or ENDIF directive is found. Use ELSEIF to introduce a new condition after an IF directive. Conditional assembler directives may be used anywhere in an assembly, but have their greatest use in conjunction with macro processing. All assembler directives (except END) as well as the inclusion of files may be disabled by the conditional directives. Each IF directive must be terminated by an ENDIF directive. The ELSE directive is optional, and if used, it must be inside an IF...ENDIF block. IF...ENDIF and IF...ELSE...ENDIF blocks may be nested to any level. EXAMPLES The following macro assembles instructions to increment R4 by a constant, but omits them if the argument is 0: NAME addi MACRO IF ADD ENDIF ENDM addi k k <> 0 #k,R4 It could be tested with the following program: main MOV addi END #23,R4 7 main Macro processing directives These directives allow user macros to be defined. Directive Description ENDM ENDR EXITM LOCAL MACRO Ends a macro definition. Ends a repeat structure. Exits prematurely from a macro. Creates symbols local to a macro. Defines a macro. Table 23: Macro processing directives 57 Macro processing directives Directive Description REPT REPTC REPTI Assembles instructions a specified number of times. Repeats and substitutes characters. Repeats and substitutes strings. Table 23: Macro processing directives (Continued) SYNTAX ENDM ENDR EXITM LOCAL symbol [,symbol] ... name MACRO [,argument] ... REPT expr REPTC formal,actual REPTI formal,actual [,actual] ... PARAMETERS actual argument expr formal String to be substituted. A symbolic argument name. An expression. Argument into which each character of actual (REPTC) or each actual (REPTI) is substituted. The name of the macro. Symbol to be local to the macro. name symbol DESCRIPTION A macro is a user-defined symbol that represents a block of one or more assembler source lines. Once you have defined a macro you can use it in your program like an assembler directive or assembler mnemonic. When the assembler encounters a macro, it looks up the macro's definition, and inserts the lines that the macro represents as if they were included in the source file at that position. Macros perform simple text substitution effectively, and you can control what they substitute by supplying parameters to them. MSP430 IAR Assembler 58 Reference Guide Assembler directives Defining a macro You define a macro with the statement: macroname MACRO [,arg] [,arg] ... Here macroname is the name you are going to use for the macro, and arg is an argument for values that you want to pass to the macro when it is expanded. For example, you could define a macro ERROR as follows: errmac MACRO CALL DC8 EVEN ENDM text abort text,0 This macro uses a parameter text to set up an error message for a routine abort. You would call the macro with a statement such as: errmac 'Disk not ready' The assembler will expand this to: CALL DC8 EVEN abort 'Disk not ready',0 If you omit a list of one or more arguments, the arguments you supply when calling the macro are called \1 to \9 and \A to \Z. The previous example could therefore be written as follows: errmac MACRO CALL DC8 EVEN ENDM abort \1,0 Use the EXITM directive to generate a premature exit from a macro. EXITM is not allowed inside REPT...ENDR, REPTC...ENDR, or REPTI...ENDR blocks. Use LOCAL to create symbols local to a macro. The LOCAL directive must be used before the symbol is used. Each time that a macro is expanded, new instances of local symbols are created by the LOCAL directive. Therefore, it is legal to use local symbols in recursive macros. Note: It is illegal to redefine a macro. 59 Macro processing directives Passing special characters Macro arguments that include commas or white space can be forced to be interpreted as one argument by using the matching quote characters < and > in the macro call. For example: macld MACRO ADD ENDM regs regs The macro can be called using the macro quote characters: macld END <R4,R5> You can redefine the macro quote characters with the -M command line option; see -M, page 18. How macros are processed There are three distinct phases in the macro process: 1 The assembler performs scanning and saving of macro definitions. The text between MACRO and ENDM is saved but not syntax checked. Include-file references $file are recorded and will be included during macro expansion. 2 A macro call forces the assembler to invoke the macro processor (expander). The macro expander switches (if not already in a macro) the assembler input stream from a source file to the output from the macro expander. The macro expander takes its input from the requested macro definition. The macro expander has no knowledge of assembler symbols since it only deals with text substitutions at source level. Before a line from the called macro definition is handed over to the assembler, the expander scans the line for all occurrences of symbolic macro arguments, and replaces them with their expansion arguments. 3 The expanded line is then processed as any other assembler source line. The input stream to the assembler will continue to be the output from the macro processor, until all lines of the current macro definition have been read. Repeating statements Use the REPT...ENDR structure to assemble the same block of instructions a number of times. If expr evaluates to 0 nothing will be generated. Use REPTC to assemble a block of instructions once for each character in a string. If the string contains a comma it should be enclosed in quotation marks. MSP430 IAR Assembler 60 Reference Guide Assembler directives Only double quotes have a special meaning and their only use is to enclose the characters to iterate over. Single quotes have no special meaning and are treated as any ordinary character. Use REPTI to assemble a block of instructions once for each string in a series of strings. Strings containing commas should be enclosed in quotation marks. EXAMPLES This section gives examples of the different ways in which macros can make assembler programming easier. Coding in-line for efficiency In time-critical code it is often desirable to code routines in-line to avoid the overhead of a subroutine call and return. Macros provide a convenient way of doing this. For example, the following subroutine outputs a 256-byte buffer to a port: EXTERN port RSEG RAM buffer DB 25 RSEG PROM ;Plays 256 bytes from buffer to port play MOV #buffer,R4 MOV #256,R5 loop MOV @R4+,&port INC R4 DEC R5 JNE loop RET END The main program calls this routine as follows: doplay CALL play 61 Macro processing directives For efficiency we can recode this as the following macro: ;Plays 256 bytes from buffer to port play LOCAL MOV MOV MOV MOV MOV MOV DEC JNE ENDM MACRO loop #buffer,R4 #64,R5 @R4+,&port @R4+,&port @R4+,&port @R4+,&port R5 loop loop Note the use of LOCAL to make the label loop local to the macro; otherwise an error will be generated if the macro is used twice, as the loop label will already exist. To use in-line code the main program is then simply altered to: doplay play Using REPT and ENDR The following example uses REPT to assemble a table of powers of 3: main calc NAME table ;Generate table of powers of 3 SET 1 REPT 8 DW calc SET calc *3 ENDR END main calc It generates the following code: 1 00000000 2 00000000 3 00000000 4 00000001 5 00000000 6 00000000 7 00000000 8 00000000 8.1 00000000 0001 8.2 00000003 8.3 00000002 0003 8.4 00000009 8.5 00000004 0009 NAME main calc REPT DW SET ENDR DW SET DW SET DW table ;Generate table of powers of 3 SET 1 8 calc calc *3 calc calc *3 calc calc *3 calc calc calc calc MSP430 IAR Assembler 62 Reference Guide Assembler directives 8.6 0000001B 8.7 00000006 001B 8.8 00000051 8.9 00000008 0051 8.10 000000F3 8.11 0000000A 00F3 8.12 000002D9 8.13 0000000C 02D9 8.14 0000088B 8.15 0000000E 088B 8.16 000019A1 9 00000010 calc calc calc calc calc calc SET DW SET DW SET DW SET DW SET DW SET END calc calc calc calc calc calc calc calc calc calc calc main *3 *3 *3 *3 *3 *3 Using REPTC and REPTI The following example assembles a series of calls to a subroutine putc for each character in a string: EXTERN prompt REPTC MOV CALL ENDR putc char,"Login:" 'char',r4 putc It generates the following code: MOV CALL MOV CALL MOV CALL MOV CALL MOV CALL MOV CALL 'L',r4 putc 'o',r4 putc 'g',r4 putc 'i',r4 putc 'n',r4 putc ':',r4 putc The following example uses REPTI to clear a number of memory locations: REPTI zero,"R4","R5",R6" MOV #0,zero ENDR It generates the following code: MOV MOV MOV #0,R4 #0,R5 #0,R6 63 Listing control directives Listing control directives These directives provide control over the assembler list file. Directive Description COL LSTCND LSTCOD LSTEXP LSTMAC LSTOUT LSTPAG LSTREP LSTXRF PAGE PAGSIZ Sets the number of columns per page. Controls conditional assembly listing. Controls multi-line code listing. Controls the listing of macro-generated lines. Controls the listing of macro definitions. Controls assembler-listing output. Controls the formatting of output into pages. Controls the listing of lines generated by repeat directives. Generates a cross-reference table. Generates a new page. Sets the number of lines per page. Table 24: Listing control directives SYNTAX COL columns LSTCND{+|-} LSTCOD{+|-} LSTEXP{+|-} LSTMAC{+|-} LSTOUT{+|-} LSTPAG{+|-} LSTREP{+|-} LSTXRF{+|-} PAGE PAGSIZ lines PARAMETERS columns lines An absolute expression in the range 80 to 132, default is 80 An absolute expression in the range 10 to 150, default is 44 MSP430 IAR Assembler 64 Reference Guide Assembler directives DESCRIPTION Turning the listing on or off Use LSTOUT- to disable all list output except error messages. This directive overrides all other listing control directives. The default is LSTOUT+, which lists the output (if a list file was specified). Listing conditional code and strings Use LSTCND+ to force the assembler to list source code only for the parts of the assembly that are not disabled by conditional IF statements. The default setting is LSTCND-, which lists all source lines. Use LSTCOD- to restrict the listing of output code to just the first line of code for a source line. The default setting is LSTCOD+, which lists more than one line of code for a source line, if needed; i.e. long ASCII strings will produce several lines of output. Code generation is not affected. Controlling the listing of macros Use LSTEXP- to disable the listing of macro-generated lines. The default is LSTEXP+, which lists all macro-generated lines. Use LSTMAC+ to list macro definitions. The default is LSTMAC-, which disables the listing of macro definitions. Controlling the listing of generated lines Use LSTREP- to turn off the listing of lines generated by the directives REPT, REPTC, and REPTI. The default is LSTREP+, which lists the generated lines. Generating a cross-reference table Use LSTXRF+ to generate a cross-reference table at the end of the assembler list for the current module. The table shows values and line numbers, and the type of the symbol. The default is LSTXRF-, which does not give a cross-reference table. Specifying the list file format Use COL to set the number of columns per page of the assembler list. The default number of columns is 80. Use PAGSIZ to set the number of printed lines per page of the assembler list. The default number of lines per page is 44. Use LSTPAG+ to format the assembler output list into pages. The default is LSTPAG-, which gives a continuous listing. 65 Listing control directives Use PAGE to generate a new page in the assembler list file if paging is active. EXAMPLES Turning the listing on or off To disable the listing of a debugged section of program: LSTOUT; Debugged section LSTOUT+ ; Not yet debugged Listing conditional code and strings The following example shows how LSTCND+ hides a call to a subroutine that is disabled by an IF directive: NAME EXTERN RSEG debug begin VAR IF CALL ENDIF lstcndtst print prom 0 debug print begin2 LSTCND+ IF debug CALL print ENDIF END This will generate the following listing: 1 2 3 4 5 6 7 8 9 10 11 12 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 NAME EXTERN RSEG debug begin VAR IF CALL ENDIF lstcndtst print CODE 0 debug print begin2 LSTCND+ IF debug MSP430 IAR Assembler 66 Reference Guide Assembler directives 14 15 16 00000000 00000000 00000000 ENDIF END The following example shows the effect of LSTCOD+ NAME EXTERN RSEG DC32 lstcodtst print CONST 1,10,100,1000,10000 LSTCOD+ DC32 1,10,100,1000,10000 END This will generate the following listing: 1 2 3 4 5 6 7 8 000000 000000 000000 000000 000000 010000000A00* 000014 000014 000014 010000000A00 000064000000 E80300001027 0000 000028 000028 NAME EXTERN RSEG DC32 lstcodtst print CONST 1,10,100,1000,10000 LSTCOD+ DC32 1,10,100,1000,10000 9 10 END Controlling the listing of macros The following example shows the effect of LSTMAC and LSTEXP: dec2 MACRO DEC DEC ENDM arg arg arg inc2 LSTMAC+ MACRO arg INC arg INC arg ENDM 67 Listing control directives begin: dec2 R6 LSTEXPinc2 R7 RET END begin This will produce the following output: 5 6 7 8 9 10 11 12 13 13.1 13.2 13.3 14 15 16 17 18 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 1683 000002 1683 000004 000004 000004 000004 000008 3041 00000A LSTMAC+ MACRO arg INC arg INC arg ENDM inc2 begin: dec2 DEC DEC ENDM R6 R6 R6 LSTEXPinc2 R7 RET END begin Formatting listed output The following example formats the output into pages of 66 lines each with 132 columns. The LSTPAG directive organizes the listing into pages, starting each module on a new page. The PAGE directive inserts additional page breaks. PAGSIZ 66 COL 132 LSTPAG+ ... ENDMOD MODULE ... PAGE ... ; Page size MSP430 IAR Assembler 68 Reference Guide Assembler directives C-style preprocessor directives The following C-language preprocessor directives are available: Directive Description #define #elif #else #endif #error #if #ifdef #ifndef #include #message #undef Assigns a value to a label. Introduces a new condition in a #if...#endif block. Assembles instructions if a condition is false. Ends a #if, #ifdef, or #ifndef block. Generates an error. Assembles instructions if a condition is true. Assembles instructions if a symbol is defined. Assembles instructions if a symbol is undefined. Includes a file. Generates a message on standard output. Undefines a label. Table 25: C-style preprocessor directives SYNTAX #define label text #elif condition #else #endif #error "message" #if condition #ifdef label #ifndef label #include {"filename" | <filename>} #message "message" #undef label PARAMETERS condition One of the following: An absolute expression The expression must not contain forward or external references, and any non-zero value is considered as true. 69 C-style preprocessor directives string1=string The condition is true if string1 and string2 have the same length and contents. The condition is true if string1 and string2 have different length or contents. string1<>string2 filename label message text Name of file to be included. Symbol to be defined, undefined, or tested. Text to be displayed. Value to be assigned. DESCRIPTION Defining and undefining labels Use #define to define a temporary label. #define label value is similar to: label VAR value Use #undef to undefine a label; the effect is as if it had not been defined. Conditional directives Use the #if...#else...#elif...#endif directives to control the assembly process at assembly time. If the condition following the #if directive is not true, the subsequent instructions will not generate any code (i.e. it will not be assembled or syntax checked) until a #endif or #else directive is found. All assembler directives (except for END) and file inclusion may be disabled by the conditional directives. Each #if directive must be terminated by a #endif directive. The #else directive is optional and, if used, it must be inside a #if...#endif block. #if...#endif and #if...#else...#elif...#endif blocks may be nested to any level. Use #ifdef to assemble instructions up to the next #else or #endif directive only if a symbol is defined. Use #ifndef to assemble instructions up to the next #else or #endif directive only if a symbol is undefined. MSP430 IAR Assembler 70 Reference Guide Assembler directives Including source files Use #include to insert the contents of a file into the source file at a specified point. #include "filename" searches the following directories in the specified order: 1 The source file directory. 2 The directories specified by the -I option, or options. 3 The current directory. #include <filename> searches the following directories in the specified order: 1 The directories specified by the -I option, or options. 2 The current directory. Displaying errors Use #error to force the assembler to generate an error, such as in a user-defined test. Comments in define statements If you make a comment within a define statement, use the C/EC++ comment delimeters /* ... */, alternatively //. The following example illustrates some problems that may occur when assembler comments are used in the C-style preprocessor: #define five 5 #define six 6 #define seven 7 ; this comment is not ok // this comment is ok /* this comment is ok */ MOV five,R5 ;syntax error! ; expands to "MOV 5 ; this comment is not ok,R5" MOV six+seven,R5 ; expands to "MOV ;ok 6+7,R5" 71 C-style preprocessor directives EXAMPLES Using conditional directives The following example defines the variables tweek and adjust. It then tests to see if tweek is defined. If it is defined, R4 is set to 7, 12, or 30 depending on the value of adjust. EXTERN #define tweek #define adjust input 1 3 #ifdef tweek #if adjust=1 ADD #7,R4 #elif adjust=2 ADD #12,R4 #elif adjust=3 ADD #30,R4 #endif #endif /*ifdef tweek*/ MOV R4,input RET END This will generate the following listing: 1 2 3 4 5 6 7 9 11 12 13 14 15 16 17 18 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 34501E00 000004 000004 000004 8044.... 000008 3041 00000A 00000A EXTERN #define tweek #define adjust input 1 3 #ifdef tweek #if adjust=1 #elif adjust=2 #elif adjust=3 ADD #30,R4 #endif #endif /*ifdef tweek*/ MOV R4,input RET END MSP430 IAR Assembler 72 Reference Guide Assembler directives Including a source file The following example uses #include to include a file defining a macro into the source file, for instance, macros.s43: xch MACRO PUSH MOV POP ENDM a,b a a,b b The macro definitions can then be included, using #include, as in the following example: NAME include ; standard macro definitions #include "macros.s43" ; program main: xch R6,R7 RET END main Data definition or allocation directives These directives define values or reserve memory. The column Alias in the following table shows the Texas Instruments directive that corresponds to the IAR Systems directive: Directive Alias Description Expression restrictions DC8 DC16 DC32 DC64 DF32 DF64 .double DB DW DL Generates 8-bit constants, including strings. Generates 16-bit constants. Generates 32-bit constants. Generates 64-bit constants. DF Generates 32-bit floating-point constants. Generates 64-bit floating-point constants. Generates 32-bit values in Texas Instrument's floating point format. Table 26: Data definition or allocation directives 73 Data definition or allocation directives Directive Alias Description Expression restrictions DS8 DS16 DS32 DS64 .float DS DS 2 DS 4 DS 8 Allocates space for 8-bit integers. Allocates space for 16-bit integers. Allocates space for 32-bit integers. Allocates space for 64-bit integers. Generates 48-bit values in Texas Instrument's floating point format. No external references Absolute No external references Absolute No external references Absolute No external references Absolute Table 26: Data definition or allocation directives (Continued) SYNTAX DC8 expr [,expr] ... DC16 expr [,expr] ... DC32 expr [,expr] ... DC64 expr [,expr] ... DF32 value [,value] ... DF64 value [,value] ... .double value [,value] ... DS8 size_expr DS16 size_expr DS32 size_expr DS64 size_expr .float value [,value] ... PARAMETERS expr A valid absolute, relocatable, or external expression, or an ASCII string. ASCII strings will be zero filled to a multiple of the data size implied by the directive. Double-quoted strings will be zero-terminated. size_expr The size in bytes; an expression that can be evaluated at assembly time. value A valid absolute expression or a floating-point constant. MSP430 IAR Assembler 74 Reference Guide Assembler directives DESCRIPTIONS Use the data definition and allocation directives according to the following table; it shows which directives reserve and initialize memory space or reserve uninitialized memory space, and their size. Size Reserve and initialize memory Reserve uninitialized memory 8-bit integers 16-bit integers 32-bit integers 64-bit integers 32-bit floats 64-bit floats DC8, DB DC16, DW DC32, DL DC64 DF32, DF DF64 DS8, DS DS16, DS 2 DS32, DS 4 DS64, DS 8 DS32 DS64 Table 27: Using data definition or allocation directives EXAMPLES Generating lookup table The following example generates a lookup table of addresses to routines: NAME RSEG DW RSEG ADD RET SUB RET CLR RET END table CONST addsubr, subsubr, clrsubr CODE R4,R5 R4,R5 R4 table addsubr subsubr clrsubr Defining strings To define a string: mymsg DC8 'Please enter your name' To define a string which includes a trailing zero: myCstr DC8 "This is a string." To include a single quote in a string, enter it twice; for example: errmsg DC8 'Don''t understand!' 75 Assembler control directives Reserving space To reserve space for 0xA bytes: table DS8 0xA Assembler control directives These directives provide control over the operation of the assembler. Directive Description $ /*comment*/ // CASEOFF CASEON RADIX Includes a file. C-style comment delimiter. C+ style comment delimiter. + Disables case sensitivity. Enables case sensitivity. Sets the default base on all numeric values. Default base is 10. Table 28: Assembler control directives SYNTAX $filename /*comment*/ //comment CASEOFF CASEON RADIX expr PARAMETERS comment expr filename Comment ignored by the assembler. Default base; default 10 (decimal). Name of file to be included. The $ character must be the first character on the line. DESCRIPTION Use $ to insert the contents of a file into the source file at a specified point. Use /*...*/ to comment sections of the assembler listing. Use // to mark the rest of the line as comment. Use RADIX to set the default base for constants. MSP430 IAR Assembler 76 Reference Guide Assembler directives Controlling case sensitivity Use CASEON or CASEOFF to turn on or off case sensitivity for user-defined symbols. By default case sensitivity is off. When CASEOFF is active all symbols are stored in upper case, and all symbols used by XLINK should be written in upper case in the XLINK definition file. EXAMPLES Including a source file The following example uses $ (program location counter) to include a file defining macros into the source file. For instance, in mymacros.s43: times2 MACRO RLA ENDM reg reg div2 LSTMAC+ MACRO reg RRA reg ENDM The macro definitions can be included with the $ directive, as in: NAME include ; standard macro definitions $mymacros.s43 ; program main MOV mySubMacro RET END #123,R4 #2,R4 main Defining comments The following example shows how /*...*/ can be used for a multi-line comment: /* Program to read serial input. Version 3: 19.12.01 Author: mjp */ 77 Call frame information directives Changing the base To set the default base to 16: RADIX LDI 16 #12,R3 The immediate argument will then be interpreted as H'12. To change the base from 16 to 10, expr must be written in hexadecimal format, for example: RADIX 0x0A Controlling case sensitivity When CASEOFF is set, label and LABEL are identical in the following example: label NOP JMP ; Stored as "LABEL" LABEL The following will generate a duplicate label error: CASEOFF label LABEL NOP NOP END ; Error, "LABEL" already defined Call frame information directives These directives allow backtrace information to be defined in the assembler source code. The benefit is that you will be able to use the call frame stack when debugging assembler code. Directive Description CFI BASEADDRESS CFI BLOCK CFI CODEALIGN CFI COMMON CFI CONDITIONAL CFI DATAALIGN CFI ENDBLOCK CFI ENDCOMMON Declares a base address CFA (Canonical Frame Address). Starts a data block. Declares code alignment. Starts or extends a common block. Declares data block to be a conditional thread. Declares data alignment. Ends a data block. Ends a common block. Table 29: Call frame information directives MSP430 IAR Assembler 78 Reference Guide Assembler directives Directive Description CFI ENDNAMES CFI FRAMECELL CFI FUNCTION CFI INVALID CFI NAMES CFI NOFUNCTION CFI PICKER CFI REMEMBERSTATE CFI RESOURCE CFI RESOURCEPARTS CFI RESTORESTATE CFI RETURNADDRESS CFI STACKFRAME CFI STATICOVERLAYFRAME CFI VALID CFI VIRTUALRESOURCE CFI cfa CFI resource Ends a names block. Creates a reference into the caller's frame. Declares a function associated with data block. Starts range of invalid backtrace information. Starts a names block. Declares data block to not be associated with a function. Declares data block to be a picker thread. Remembers the backtrace information state. Declares a resource. Declares a composite resource. Restores the saved backtrace information state. Declares a return address column. Declares a stack frame CFA. Declares a static overlay frame CFA. Ends range of invalid backtrace information. Declares a virtual resource. Declares the value of a CFA. Declares the value of a resource. Table 29: Call frame information directives (Continued) SYNTAX The syntax definitions below show the syntax of each directive. The directives are grouped according to usage. Names block directives CFI CFI CFI CFI CFI CFI CFI CFI NAMES name ENDNAMES name RESOURCE resource : bits [, resource : bits] ... VIRTUALRESOURCE resource : bits [, resource : bits] ... RESOURCEPARTS resource part, part [, part] ... STACKFRAME cfa resource type [, cfa resource type] ... STATICOVERLAYFRAME cfa segment [, cfa segment] ... BASEADDRESS cfa type [, cfa type] ... 79 Call frame information directives Extended names block directives CFI NAMES name EXTENDS namesblock CFI ENDNAMES name CFI FRAMECELL cell cfa (offset): size [, cell cfa (offset): size] ... Common block directives CFI CFI CFI CFI CFI CFI CFI CFI CFI CFI CFI COMMON name USING namesblock ENDCOMMON name CODEALIGN codealignfactor DATAALIGN dataalignfactor RETURNADDRESS resource type cfa { NOTUSED | USED } cfa { resource | resource + constant | resource - constant } cfa cfiexpr resource { UNDEFINED | SAMEVALUE | CONCAT } resource { resource | FRAME(cfa, offset) } resource cfiexpr Extended common block directives CFI COMMON name EXTENDS commonblock USING namesblock CFI ENDCOMMON name Data block directives CFI CFI CFI CFI CFI CFI CFI CFI CFI CFI CFI CFI BLOCK name USING commonblock ENDBLOCK name { NOFUNCTION | FUNCTION label } { INVALID | VALID } { REMEMBERSTATE | RESTORESTATE } PICKER CONDITIONAL label [, label] ... cfa { resource | resource + constant | resource - constant } cfa cfiexpr resource { UNDEFINED | SAMEVALUE | CONCAT } resource { resource | FRAME(cfa, offset) } resource cfiexpr PARAMETERS bits cell cfa The size of the resource in bits. The name of a frame cell. The name of a CFA (canonical frame address). MSP430 IAR Assembler 80 Reference Guide Assembler directives cfiexpr codealignfactor A CFI expression (see CFI expressions, page 87). The smallest factor of all instruction sizes. Each CFI directive for a data block must be placed according to this alignment. 1 is the default and can always be used, but a larger value will shrink the produced backtrace information in size. The possible range is 1256. The name of a previously defined common block. A constant value or an assembler expression that can be evaluated to a constant value. The smallest factor of all frame sizes. If the stack grows towards higher addresses, the factor is negative; if it grows towards lower addresses, the factor is positive. 1 is the default, but a larger value will shrink the produced backtrace information in size. The possible ranges are -256 -1 and 1 256. A function label. The name of the block. The name of a previously defined names block. The offset relative the CFA. An integer with an optional sign. A part of a composite resource. The name of a previously declared resource. The name of a resource. The name of a segment. The size of the frame cell in bytes. The memory type, such as CODE, CONST or DATA. In addition, any of the memory types supported by the IAR XLINK Linker. It is used solely for the purpose of denoting an address space. commonblock constant dataalignfactor label name namesblock offset part resource segment size type DESCRIPTIONS The Call Frame Information directives (CFI directives) are an extension to the debugging format of the IAR C-SPY Debugger. The CFI directives are used for defining the backtrace information for the instructions in a program. The compiler normally generates this information, but for library functions and other code written purely in assembler language, backtrace information has to be added if you want to use the call frame stack in the debugger. 81 Call frame information directives The backtrace information is used to keep track of the contents of resources, such as registers or memory cells, in the assembler code. This information is used by the IAR C-SPY Debugger to go "back" in the call stack and show the correct values of registers or other resources before entering the function. In contrast with traditional approaches, this permits the debugger to run at full speed until it reaches a breakpoint, stop at the breakpoint, and retrieve backtrace information at that point in the program. The information can then be used to compute the contents of the resources in any of the calling functions--assuming they have call frame information as well. Backtrace rows and columns At each location in the program where it is possible for the debugger to break execution, there is a backtrace row. Each backtrace row consists of a set of columns, where each column represents an item that should be tracked. There are three kinds of columns: G G G The resource columns keep track of where the original value of a resource can be found. The canonical frame address columns (CFA columns) keep track of the top of the function frames. The return address column keeps track of the location of the return address. There is always exactly one return address column and usually only one CFA column, although there may be more than one. Defining a names block A names block is used to declare the resources available for a processor. Inside the names block, all resources that can be tracked are defined. Start and end a names block with the directives: CFI NAMES name CFI ENDNAMES name where name is the name of the block. Only one names block can be open at a time. Inside a names block, four different kinds of declarations may appear: a resource declaration, a stack frame declaration, a static overlay frame declaration, or a base address declaration: G To declare a resource, use one of the directives: CFI RESOURCE resource : bits CFI VIRTUALRESOURCE resource : bits MSP430 IAR Assembler 82 Reference Guide Assembler directives The parameters are the name of the resource and the size of the resource in bits. A virtual resource is a logical concept, in contrast to a "physical" resource such as a processor register. Virtual resources are usually used for the return address. More than one resource can be declared by separating them with commas. A resource may also be a composite resource, made up of at least two parts. To declare the composition of a composite resource, use the directive: CFI RESOURCEPARTS resource part, part, ... The parts are separated with commas. The resource and its parts must have been previously declared as resources, as described above. G To declare a stack frame CFA, use the directive: CFI STACKFRAME cfa resource type The parameters are the name of the stack frame CFA, the name of the associated resource (the stack pointer), and the segment type (to get the address space). More than one stack frame CFA can be declared by separating them with commas. When going "back" in the call stack, the value of the stack frame CFA is copied into the associated stack pointer resource to get a correct value for the previous function frame. G To declare a static overlay frame CFA, use the directive: CFI STATICOVERLAYFRAME cfa segment The parameters are the name of the CFA and the name of the segment where the static overlay for the function is located. More than one static overlay frame CFA can be declared by separating them with commas. G To declare a base address CFA, use the directive: CFI BASEADDRESS cfa type The parameters are the name of the CFA and the segment type. More than one base address CFA can be declared by separating them with commas. A base address CFA is used to conveniently handle a CFA. In contrast to the stack frame CFA, there is no associated stack pointer resource to restore. Extending a names block In some special cases you have to extend an existing names block with new resources. This occurs whenever there are routines that manipulate call frames other than their own, such as routines for handling, entering, and leaving C or Embedded C++ functions; these routines manipulate the caller's frame. Extended names blocks are normally used only by compiler developers. 83 Call frame information directives Extend an existing names block with the directive: CFI NAMES name EXTENDS namesblock where namesblock is the name of the existing names block and name is the name of the new extended block. The extended block must end with the directive: CFI ENDNAMES name Defining a common block The common block is used for declaring the initial contents of all tracked resources. Normally, there is one common block for each calling convention used. Start a common block with the directive: CFI COMMON name USING namesblock where name is the name of the new block and namesblock is the name of a previously defined names block. Declare the return address column with the directive: CFI RETURNADDRESS resource type where resource is a resource defined in namesblock and type is the segment type. You have to declare the return address column for the common block. End a common block with the directive: CFI ENDCOMMON name where name is the name used to start the common block. Inside a common block you can declare the initial value of a CFA or a resource by using the directives listed last in Common block directives, page 80. For more information on these directives, see Simple rules, page 85, and CFI expressions, page 87. Extending a common block Since you can extend a names block with new resources, it is necessary to have a mechanism for describing the initial values of these new resources. For this reason, it is also possible to extend common blocks, effectively declaring the initial values of the extra resources while including the declarations of another common block. Just as in the case of extended names blocks, extended common blocks are normally only used by compiler developers. Extend an existing common block with the directive: CFI COMMON name EXTENDS commonblock USING namesblock MSP430 IAR Assembler 84 Reference Guide Assembler directives where name is the name of the new extended block, commonblock is the name of the existing common block, and namesblock is the name of a previously defined names block. The extended block must end with the directive: CFI ENDCOMMON name Defining a data block The data block contains the actual tracking information for one continuous piece of code. No segment control directive may appear inside a data block. Start a data block with the directive: CFI BLOCK name USING commonblock where name is the name of the new block and commonblock is the name of a previously defined common block. If the piece of code is part of a defined function, specify the name of the function with the directive: CFI FUNCTION label where label is the code label starting the function. If the piece of code is not part of a function, specify this with the directive: CFI NOFUNCTION End a data block with the directive: CFI ENDBLOCK name where name is the name used to start the data block. Inside a data block you may manipulate the values of the columns by using the directives listed last in Data block directives, page 80. For more information on these directives, see Simple rules, page 85, and CFI expressions, page 87. SIMPLE RULES To describe the tracking information for individual columns, there is a set of simple rules with specialized syntax: CFI CFI CFI CFI cfa { NOTUSED | USED } cfa { resource | resource + constant | resource - constant } resource { UNDEFINED | SAMEVALUE | CONCAT } resource { resource | FRAME(cfa, offset) } These simple rules can be used both in common blocks to describe the initial information for resources and CFAs, and inside data blocks to describe changes to the information for resources or CFAs. 85 Call frame information directives In those rare cases where the descriptive power of the simple rules are not enough, a full CFI expression can be used to describe the information (see CFI expressions, page 87). However, whenever possible, you should always use a simple rule instead of a CFI expression. There are two different sets of simple rules: one for resources and one for CFAs. Simple rules for resources The rules for resources conceptually describe where to find a resource when going back one call frame. For this reason, the item following the resource name in a CFI directive is referred to as the location of the resource. To declare that a tracked resource is restored, that is, already correctly located, use SAMEVALUE as the location. Conceptually, this declares that the resource does not have to be restored since it already contains the correct value. For example, to declare that a register REG is restored to the same value, use the directive: CFI REG SAMEVALUE To declare that a resource is not tracked, use UNDEFINED as location. Conceptually, this declares that the resource does not have to be restored (when going back one call frame) since it is not tracked. Usually it is only meaningful to use it to declare the initial location of a resource. For example, to declare that REG is a scratch register and does not have to be restored, use the directive: CFI REG UNDEFINED To declare that a resource is temporarily stored in another resource, use the resource name as its location. For example, to declare that a register REG1 is temporarily located in a register REG2 (and should be restored from that register), use the directive: CFI REG1 REG2 To declare that a resource is currently located somewhere on the stack, use FRAME(cfa, offset) as location for the resource, where cfa is the CFA identifier to use as "frame pointer" and offset is an offset relative the CFA. For example, to declare that a register REG is located at offset -4 counting from the frame pointer CFA_SP, use the directive: CFI REG FRAME(CFA_SP,-4) For a composite resource there is one additional location, CONCAT, which declares that the location of the resource can be found by concatenating the resource parts for the composite resource. For example, consider a composite resource RET with resource parts RETLO and RETHI. To declare that the value of RET can be found by investigating and concatenating the resource parts, use the directive: CFI RET CONCAT MSP430 IAR Assembler 86 Reference Guide Assembler directives This requires that at least one of the resource parts has a definition, using the rules described above. Simple rules for CFAs In contrast with the rules for resources, the rules for CFAs describe the address of the beginning of the call frame. The call frame often includes the return address pushed by the subroutine calling instruction. The CFA rules describe how to compute the address to the beginning of the current call frame. There are two different forms of CFAs, stack frames and static overlay frames, each declared in the associated names block. See Names block directives, page 79. Each stack frame CFA is associated with a resource, such as the stack pointer. When going back one call frame the associated resource is restored to the current CFA. For stack frame CFAs there are two possible simple rules: an offset from a resource (not necessarily the resource associated with the stack frame CFA) or NOTUSED. To declare that a CFA is not used, and that the associated resource should be tracked as a normal resource, use NOTUSED as the address of the CFA. For example, to declare that the CFA with the name CFA_SP is not used in this code block, use the directive: CFI CFA_SP NOTUSED To declare that a CFA has an address that is offset relative the value of a resource, specify the resource and the offset. For example, to declare that the CFA with the name CFA_SP can be obtained by adding 4 to the value of the SP resource, use the directive: CFI CFA_SP SP + 4 For static overlay frame CFAs, there are only two possible declarations inside common and data blocks: USED and NOTUSED. CFI EXPRESSIONS Call Frame Information expressions (CFI expressions) can be used when the descriptive power of the simple rules for resources and CFAs is not enough. However, you should always use a simple rule when one is available. CFI expressions consist of operands and operators. Only the operators described below are allowed in a CFI expression. In most cases, they have an equivalent operator in the regular assembler expressions. In the operand descriptions, cfiexpr denotes one of the following: G G G G A CFI operator with operands A numeric constant A CFA name A resource name. 87 Call frame information directives Unary operators Overall syntax: OPERATOR(operand) Operator Operand Description UMINUS NOT COMPLEMENT LITERAL cfiexpr cfiexpr cfiexpr expr Performs arithmetic negation on a CFI expression. Negates a logical CFI expression. Performs a bitwise NOT on a CFI expression. Get the value of the assembler expression. This can insert the value of a regular assembler expression into a CFI expression. Table 30: Unary operators in CFI expressions Binary operators Overall syntax: OPERATOR(operand1,operand2) Operator Operands Description ADD SUB MUL DIV MOD AND OR XOR EQ NE LT LE GT GE LSHIFT cfiexpr,cfiexpr cfiexpr,cfiexpr cfiexpr,cfiexpr cfiexpr,cfiexpr cfiexpr,cfiexpr cfiexpr,cfiexpr cfiexpr,cfiexpr cfiexpr,cfiexpr cfiexpr,cfiexpr cfiexpr,cfiexpr cfiexpr,cfiexpr cfiexpr,cfiexpr cfiexpr,cfiexpr cfiexpr,cfiexpr cfiexpr,cfiexpr Addition Subtraction Multiplication Division Modulo Bitwise AND Bitwise OR Bitwise XOR Equal Not equal Less than Less than or equal Greater than Greater than or equal Logical shift left of the left operand. The number of bits to shift is specified by the right operand. The sign bit will not be preserved when shifting. Logical shift right of the left operand. The number of bits to shift is specified by the right operand. The sign bit will not be preserved when shifting. RSHIFTL cfiexpr,cfiexpr Table 31: Binary operators in CFI expressions MSP430 IAR Assembler 88 Reference Guide Assembler directives Operator Operands Description RSHIFTA cfiexpr,cfiexpr Arithmetic shift right of the left operand. The number of bits to shift is specified by the right operand. In contrast with RSHIFTL the sign bit will be preserved when shifting. Table 31: Binary operators in CFI expressions (Continued) Ternary operators Overall syntax: OPERATOR(operand1,operand2,operand3) Operator Operands Description FRAME cfa,size,offset Get value from stack frame. The operands are: cfa An identifier denoting a previously declared CFA. sizeA constant expression denoting a size in bytes. offsetA constant expression denoting an offset in bytes. Gets the value at address cfa+offset of size size. Conditional operator. The operands are: condA CFA expression denoting a condition. trueAny CFA expression. falseAny CFA expression. If the conditional expression is non-zero, the result is the value of the true expression; otherwise the result is the value of the false expression. Get value from memory. The operands are: sizeA constant expression denoting a size in bytes. typeA memory type. addrA CFA expression denoting a memory address. Gets the value at address addr in segment type type of size size. IF cond,true,false LOAD size,type,addr Table 32: Ternary operators in CFI expressions EXAMPLE The following is a generic example and not an example specific to the MSP430 microcontroller. This will simplify the example and clarify the usage of the CFI directives. A target-specific example can be obtained by generating assembler output when compiling a C source file. Consider a generic processor with a stack pointer SP, and two registers R4 and R5. Register R4 will be used as a scratch register (the register is destroyed by the function call), whereas register R5 has to be restored after the function call. For reasons of simplicity, all instructions, registers, and addresses will have a width of 16 bits. 89 Call frame information directives Consider the following short code sample with the corresponding backtrace rows and columns. At entry, assume that the stack contains a 16-bit return address. The stack grows from high addresses towards zero. The CFA denotes the top of the call frame, that is, the value of the stack pointer after returning from the function. Address CFA SP R4 R5 RET Assembler code 0000 0002 0004 0006 0008 000A SP + 2 SP + 4 -- SAME CFA - 4 CFA - 2 func1: PUSH R5 MOV #4,R5 CALL func2 POP SP + 2 R4 SAME MOV RET R4 R4,R5 Table 33: Code sample with backtrace rows and columns Each backtrace row describes the state of the tracked resources before the execution of the instruction. As an example, for the MOV R4,R5 instruction the original value of the R5 register is located in the R4 register and the top of the function frame (the CFA column) is SP + 2. The backtrace row at address 0000 is the initial row and the result of the calling convention used for the function. The SP column is empty since the CFA is defined in terms of the stack pointer. The RET column is the return address column--that is, the location of the return address. The R4 column has a `--' in the first line to indicate that the value of R4 is undefined and does not need to be restored on exit from the function. The R5 column has SAME in the initial row to indicate that the value of the R5 register will be restored to the same value it already has. Defining the names block The names block for the small example above would be: CFI NAMES trivialNames CFI RESOURCE SP:16, R4:16, R5:16 CFI STACKFRAME CFA SP DATA ;; The virtual resource for the return address column CFI VIRTUALRESOURCE RET:16 CFI ENDNAMES trivialNames MSP430 IAR Assembler 90 Reference Guide Assembler directives Defining the common block The common block for the simple example above would be: CFI CFI CFI CFI CFI CFI CFI COMMON trivialCommon USING trivialNames RETURNADDRESS RET DATA CFA SP + 2 R4 UNDEFINED R5 SAMEVALUE RET FRAME(CFA,-2) ; Offset -2 from top of frame ENDCOMMON trivialCommon Note: SP may not be changed using a CFI directive since it is the resource associated with CFA. Defining the data block Continuing the simple example, the data block would be: RSEG CODE:CODE CFI BLOCK func1block USING trivialCommon CFI FUNCTION func1 func1: PUSH R5 CFI CFA SP + 4 CFI R5 FRAME(CFA,-4) MOV #4,R5 CALL func2 POP R4 CFI R5 R4 CFI CFA SP + 2 MOV R4,R5 CFI R5 SAMEVALUE RET CFI ENDBLOCK func1block Note that the CFI directives are placed after the instruction that affects the backtrace information. 91 Call frame information directives MSP430 IAR Assembler 92 Reference Guide Diagnostics This chapter describes the format of the diagnostic messages and explains how diagnostic messages are divided into different levels of severity. Message format All diagnostic messages are issued as complete, self-explanatory messages. A typical diagnostic message from the assembler is produced in the form: filename,linenumber level[tag]: message where filename is the name of the source file in which the error was encountered; linenumber is the line number at which the assembler detected the error; level is the level of severity of the diagnostic; tag is a unique tag that identifies the diagnostic message; message is a self-explanatory message, possibly several lines long. Diagnostic messages are displayed on the screen, as well as printed in the optional list file. In addition, you can find all messages specific to the MSP430 Assembler in the readme file a430_msg.htm. Severity levels The diagnostics are divided into different levels of severity: Warning A diagnostic message that is produced when the assembler finds a programming error or omission which is of concern but not so severe as to prevent the completion of compilation. Warnings can be disabled by use of the command-line option -w, see page 21. Error A diagnostic message that is produced when the assembler has found a construct which clearly violates the language rules, such that code cannot be produced. 93 Severity levels Fatal error A diagnostic message that is produced when the assembler has found a condition that not only prevents code generation, but which makes further processing of the source code pointless. After the diagnostic has been issued, compilation terminates. INTERNAL ERROR An internal error is a diagnostic message that signals that there has been a serious and unexpected failure due to a fault in the assembler. It is produced using the following form: Internal error: message where message is an explanatory message. If internal errors occur, they should be reported to your software distributor or IAR Technical Support. Please include information enough to reproduce the problem. This would typically include: G G G G G G The product name The version number of the assembler, which can be seen in the header of the list files generated by the assembler Your license number The exact internal error message text The source file of the program that generated the internal error A list of the options that were used when the internal error occurred. MSP430 IAR Assembler 94 Reference Guide Index A absolute segments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 ADD (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 addition (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . 27 address field, in assembler list file . . . . . . . . . . . . . . . . . . . . 3 ALIAS (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . 52 ALIGN (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . 47 alignment, of segments . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 ALIGNRAM (assembler directive) . . . . . . . . . . . . . . . . . . . 47 AND (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 architecture, MSP430 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix ARGFRAME (assembler directive) . . . . . . . . . . . . . . . . . . 42 ASCII character constants . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 ASEG (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 47 ASEGN (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . 47 asm (filename extension) . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 ASM430 (environment variable) . . . . . . . . . . . . . . . . . . . . . 12 assembler control directives . . . . . . . . . . . . . . . . . . . . . . . . 76 assembler diagnostics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 assembler directives ALIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 ALIGN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 ALIGNRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 ARGFRAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 ASEG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 ASEGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 assembler control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 ASSIGN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 BYTE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 call frame information . . . . . . . . . . . . . . . . . . . . . . . . . . 78 CASEOFF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 CASEON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 CFI directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 COL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 comments, using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 COMMON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 conditional assembly . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 See also C-style preprocessor directives C-style preprocessor . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 data definition or allocation . . . . . . . . . . . . . . . . . . . . . . 73 DC8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 DC16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 DC32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 DC64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 DEFINE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 DF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 DF32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 DF64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 DL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 DS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 DS 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 DS 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 DS 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 DS8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 DS16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 DS32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 DS64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 DW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 ELSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 ELSEIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 END . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 ENDIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 ENDM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 ENDMOD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 ENDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 EQU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 EVEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 EXITM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 EXPORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 EXTERN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 FUNCALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 FUNCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 IMPORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 labels, using . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 LIBRARY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 LIMIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Index 95 list file control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 LOCAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 LOCFRAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 LSTCND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 LSTCOD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 LSTEXP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 LSTMAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 LSTOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 LSTPAG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 LSTREP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 LSTXRF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 MACRO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 macro processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 MODULE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 module control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 NAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 ODD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 ORG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 PAGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 PAGSIZ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 PROGRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 PUBLIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 PUBWEAK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 RADIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 REPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 REPTC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 REPTI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 REQUIRE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 RSEG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 RTMODEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 segment control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 SFRB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 SFRTYPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 SFRW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 STACK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 static overlay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 symbol control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 value assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 VAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 #define . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 #elif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 #else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 #endif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 #error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 #if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 #ifdef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 #ifndef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 #include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 #message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 #undef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 .double . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 .float. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 /*...*/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 //. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 =. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 assembler environment variables . . . . . . . . . . . . . . . . . . . . 12 assembler expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 assembler labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 assembler directives, using with . . . . . . . . . . . . . . . . . . . . 1 defining and undefining . . . . . . . . . . . . . . . . . . . . . . . . . 70 format of . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 assembler list files address field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 conditional code and strings . . . . . . . . . . . . . . . . . . . . . . 65 conditions, specifying . . . . . . . . . . . . . . . . . . . . . . . . . . 14 cross-references generating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 table, generating . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 data field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 disabling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 enabling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 filename, specifying . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 format specifying . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 generated lines, controlling . . . . . . . . . . . . . . . . . . . . . . 65 MSP430 IAR Assembler 96 Reference Guide Index generating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 header section, omitting . . . . . . . . . . . . . . . . . . . . . . . . . 18 #include files, specifying . . . . . . . . . . . . . . . . . . . . . . . . 17 lines per page, specifying . . . . . . . . . . . . . . . . . . . . . . . . 19 macro execution information, including . . . . . . . . . . . . . 14 macro-generated lines, controlling . . . . . . . . . . . . . . . . . 65 symbol and cross-reference table . . . . . . . . . . . . . . . . . . . 3 tab spacing, specifying . . . . . . . . . . . . . . . . . . . . . . . . . . 21 using directives to format . . . . . . . . . . . . . . . . . . . . . . . . 65 assembler macros defining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 generated lines, controlling in list file . . . . . . . . . . . . . . 65 in-line routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 quote characters, specifying . . . . . . . . . . . . . . . . . . . . . . 18 special characters, using . . . . . . . . . . . . . . . . . . . . . . . . . 60 assembler object file, specifying filename. . . . . . . . . . . . . . 19 assembler operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 DATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 HIGH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 HWRD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 in expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 LOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 LWRD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 precedence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 SFB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 SFE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 SIZEOF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 UGT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 ULT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 XOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 != . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 && . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 +. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 / . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 <. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 << . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 <= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 <> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 =. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 == . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 >. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 >= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 >> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 || . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 ~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 assembler options command line, setting . . . . . . . . . . . . . . . . . . . . . . . . . . 11 extended command file, setting . . . . . . . . . . . . . . . . . . . 11 summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 typographic convention . . . . . . . . . . . . . . . . . . . . . . . . . xi -B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 -b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 -c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 -D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 -E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 -f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 16 -G. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 -I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 -i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 -L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 -l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 -M . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 -N. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 -O. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 -o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 -p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 -r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 -S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 -s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 -t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 -U. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 97 -w. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 -x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 assembler output, including debug information . . . . . . . . . 20 assembler source files, including . . . . . . . . . . . . . . . . . 71, 77 assembler source format . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 assembler symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 exporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 importing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 in relocatable expressions . . . . . . . . . . . . . . . . . . . . . . . . 4 local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 predefined . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 undefining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 redefining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 assembly warning messages disabling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 ASSIGN (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 52 assumptions (programming experience) . . . . . . . . . . . . . . . ix A430_INC (environment variable) . . . . . . . . . . . . . . . . . . . 12 B -B (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 -b (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 backtrace information, defining . . . . . . . . . . . . . . . . . . . . . 78 bitwise AND (assembler operator) . . . . . . . . . . . . . . . . . . . 30 bitwise exclusive OR (assembler operator) . . . . . . . . . . . . . 31 bitwise NOT (assembler operator) . . . . . . . . . . . . . . . . . . . 31 bitwise OR (assembler operator) . . . . . . . . . . . . . . . . . . . . . 31 BYTE (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 73 CFI directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 CFI expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 CFI operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 character constants, ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . 6 COL (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 64 command line options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 command line, extending . . . . . . . . . . . . . . . . . . . . . . . . . . 16 comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 assembler directives, using with . . . . . . . . . . . . . . . . . . . . 1 in assembler source code . . . . . . . . . . . . . . . . . . . . . . . . . 2 multi-line, using with assembler directives . . . . . . . . . . 77 common segments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 COMMON (assembler directive) . . . . . . . . . . . . . . . . . . . . 47 COMPLEMENT (CFI operator) . . . . . . . . . . . . . . . . . . . . . 88 computer style, typographic convention . . . . . . . . . . . . . . . xi conditional assembly directives . . . . . . . . . . . . . . . . . . . . . 56 See also C-style preprocessor directives. . . . . . . . . . . . . 70 conditional code and strings, listing . . . . . . . . . . . . . . . . . . 65 conditional list file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 constants, integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 conventions, typographic . . . . . . . . . . . . . . . . . . . . . . . . . . xi CRC, in assembler list file . . . . . . . . . . . . . . . . . . . . . . . . . . 3 cross-references, in assembler list file generating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 table, generating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 current time/date (assembler operator) . . . . . . . . . . . . . . . . 32 C-style preprocessor directives . . . . . . . . . . . . . . . . . . . . . . 69 D -D (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 data allocation directives . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 data definition directives . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 data field, in assembler list file . . . . . . . . . . . . . . . . . . . . . . . 3 _ _DATE_ _ (predefined symbol) . . . . . . . . . . . . . . . . . . . . . 8 DATE (assembler operator). . . . . . . . . . . . . . . . . . . . . . . . . 32 DC8 (assembler directive). . . . . . . . . . . . . . . . . . . . . . . . . . 73 DC16 (assembler directive). . . . . . . . . . . . . . . . . . . . . . . . . 73 DC32 (assembler directive). . . . . . . . . . . . . . . . . . . . . . . . . 73 C -c (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 call frame information directives . . . . . . . . . . . . . . . . . . . . 78 case sensitive user symbols . . . . . . . . . . . . . . . . . . . . . . . . . 20 case sensitivity, controlling . . . . . . . . . . . . . . . . . . . . . . . . . 77 CASEOFF (assembler directive) . . . . . . . . . . . . . . . . . . . . . 76 CASEON (assembler directive) . . . . . . . . . . . . . . . . . . . . . 76 CFA columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 MSP430 IAR Assembler 98 Reference Guide Index DC64 (assembler directive). . . . . . . . . . . . . . . . . . . . . . . . . 73 debug information, including in assembler output . . . . . . . 20 #define (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . 69 DEFINE (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 52 DF (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 DF32 (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 73 DF64 (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 73 diagnostic messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 directives. See assembler directives DIV (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 division (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . 28 DL (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 document conventions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi DS (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 DS 2 (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 74 DS 4 (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 74 DS 8 (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 74 DS8 (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . . 74 DS16 (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 74 DS32 (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 74 DS64 (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 74 DW (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . . 73 ASM430 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 assembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 A430_INC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 EQ (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 EQU (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 52 equal (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . 29 #error (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 69 error messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 maximum number, specifying . . . . . . . . . . . . . . . . . . . . 16 using #error to display . . . . . . . . . . . . . . . . . . . . . . . . . . 71 EVEN (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 47 EXITM (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . 57 experience, programming . . . . . . . . . . . . . . . . . . . . . . . . . . ix EXPORT (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 45 expressions. See assembler expressions extended command line file (extend.xcl). . . . . . . . . . . . 11, 16 EXTERN (assembler directive) . . . . . . . . . . . . . . . . . . . . . 45 F -f (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 16 false value, in assembler expressions . . . . . . . . . . . . . . . . . . 4 fatal error messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 _ _FILE_ _ (predefined symbol) . . . . . . . . . . . . . . . . . . . . . . 8 file extensions. See filename extensions file types assembler source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 extended command line . . . . . . . . . . . . . . . . . . . . . . 11, 16 #include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 filename extensions asm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 msa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 r43 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 set prefix to object file . . . . . . . . . . . . . . . . . . . . . . . . . . 19 s43 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 xcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 16 filenames, specifying for assembler object file . . . . . . . . . . 19 floating-point constants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 E -E (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 edition notice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 efficient coding techniques . . . . . . . . . . . . . . . . . . . . . . . . . . 9 #elif (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . . 69 #else (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 69 ELSE (assembler directive). . . . . . . . . . . . . . . . . . . . . . . . . 56 ELSEIF (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . 56 END (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 42 #endif (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 69 ENDIF (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . 56 ENDM (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . 57 ENDMOD (assembler directive) . . . . . . . . . . . . . . . . . . . . . 42 ENDR (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 57 environment variables 99 formats assembler source code . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 FRAME (CFI operator). . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 FUNCALL (assembler directive) . . . . . . . . . . . . . . . . . . . . 42 FUNCTION (assembler directive) . . . . . . . . . . . . . . . . . . . 42 instruction set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix integer constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 internal error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 in-line coding, using macros . . . . . . . . . . . . . . . . . . . . . . . . 61 G -G (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 GE (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 global value, defining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 greater than or equal (assembler operator) . . . . . . . . . . . . . 30 greater than (assembler operator) . . . . . . . . . . . . . . . . . . . . 30 GT (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 L -L (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 -l (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 labels. See assembler labels LE (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 less than or equal (assembler operator) . . . . . . . . . . . . . . . . 29 less than (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . 29 library modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 creating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 LIBRARY (assembler directive) . . . . . . . . . . . . . . . . . . . . . 43 LIMIT (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 52 _ _LINE_ _ (predefined symbol) . . . . . . . . . . . . . . . . . . . . . 8 lines per page, in assembler list file . . . . . . . . . . . . . . . . . . 19 list file format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 body . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 CRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 symbol and cross reference listing control directives . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 LITERAL (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . 88 LOAD (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 local value, defining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 LOCAL (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . 57 LOCFRAME (assembler directive). . . . . . . . . . . . . . . . . . . 42 logical AND (assembler operator) . . . . . . . . . . . . . . . . . . . 30 logical exclusive OR (assembler operator) . . . . . . . . . . . . . 37 logical NOT (assembler operator) . . . . . . . . . . . . . . . . . . . . 32 logical OR (assembler operator) . . . . . . . . . . . . . . . . . . . . . 32 logical shift left (assembler operator) . . . . . . . . . . . . . . . . . 35 logical shift right (assembler operator) . . . . . . . . . . . . . . . . 35 low byte (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . 33 low word (assembler operator) . . . . . . . . . . . . . . . . . . . . . . 33 LOW (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . 33 H header files, SFR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 header section, omitting from assembler list file . . . . . . . . . 18 high byte (assembler operator) . . . . . . . . . . . . . . . . . . . . . . 33 high word (assembler operator) . . . . . . . . . . . . . . . . . . . . . 33 HIGH (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . 33 HWRD (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . 33 I -I (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 -i (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 IAR Technical Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 _ _IAR_SYSTEMS_ASM_ _ (predefined symbol) . . . . . . . 8 #if (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 IF (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 IF (CFI operator). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 #ifdef (assembler directive). . . . . . . . . . . . . . . . . . . . . . . . . 69 #ifndef (assembler directive). . . . . . . . . . . . . . . . . . . . . . . . 69 IMPORT (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 45 #include files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1617 #include (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 69 include paths, specifying . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 MSP430 IAR Assembler 100 Reference Guide Index LSHIFT (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 LSTCND (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 64 LSTCOD (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 64 LSTEXP (assembler directives) . . . . . . . . . . . . . . . . . . . . . 64 LSTMAC (assembler directive) . . . . . . . . . . . . . . . . . . . . . 64 LSTOUT (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 64 LSTPAG (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 64 LSTREP (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 64 LSTXRF (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 64 LT (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 LWRD (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . 33 N -N (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 NAME (assembler directive). . . . . . . . . . . . . . . . . . . . . . . . 43 NE (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 not equal (assembler operator) . . . . . . . . . . . . . . . . . . . . . . 29 NOT (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 O -O (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 -o (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 ODD (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 47 operands format of . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 in assembler expressions . . . . . . . . . . . . . . . . . . . . . . . . . 4 operations, format of . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 operation, silent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 operators. See assembler operators option summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 OR (CFI operator). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 ORG (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 47 M -M (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 macro execution information, including in list file . . . . . . . 14 macro processing directives . . . . . . . . . . . . . . . . . . . . . . . . 57 macro quote characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 specifying . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 MACRO (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 57 macros. See assembler macros memory reserving space and initializing . . . . . . . . . . . . . . . . . . . 75 reserving uninitialized space in . . . . . . . . . . . . . . . . . . . 73 #message (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 69 messages, excluding from standard output stream . . . . . . . 20 MOD (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 module consistency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 module control directives . . . . . . . . . . . . . . . . . . . . . . . . . . 42 MODULE (assembler directive) . . . . . . . . . . . . . . . . . . . . . 43 modules, terminating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 msa (filename extension) . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 MSP430 instruction set . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix MUL (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 multiplication (assembler operator) . . . . . . . . . . . . . . . . . . 27 multi-module files, assembling . . . . . . . . . . . . . . . . . . . . . . 44 P -p (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 PAGE (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 64 PAGSIZ (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . 64 parameters in assembler directives . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 typographic convention . . . . . . . . . . . . . . . . . . . . . . . . . xi precedence, of assembler operators . . . . . . . . . . . . . . . . . . . 25 predefined register symbols . . . . . . . . . . . . . . . . . . . . . . . . . 9 predefined symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 undefining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 _ _DATE_ _ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 _ _FILE_ _ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 _ _IAR_SYSTEMS_ASM_ _ . . . . . . . . . . . . . . . . . . . . . 8 _ _LINE_ _ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 101 _ _TID_ _ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 _ _TIME_ _ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 _ _VER_ _ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 preprocessor symbol, defining . . . . . . . . . . . . . . . . . . . . . . 15 prerequisites (programming experience) . . . . . . . . . . . . . . . ix program location counter (PLC) . . . . . . . . . . . . . . . . . . . . 2, 5 setting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 program modules, beginning . . . . . . . . . . . . . . . . . . . . . . . . 43 PROGRAM (assembler directive) . . . . . . . . . . . . . . . . . . . . 43 programming experience, required . . . . . . . . . . . . . . . . . . . ix programming hints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 PUBLIC (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 45 PUBWEAK (assembler directive). . . . . . . . . . . . . . . . . . . . 45 S -S (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 -s (assembler option). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 segment begin (assembler operator) . . . . . . . . . . . . . . . . . . 33 segment control directives. . . . . . . . . . . . . . . . . . . . . . . . . . 47 segment end (assembler operator) . . . . . . . . . . . . . . . . . . . . 34 segment size (assembler operator) . . . . . . . . . . . . . . . . . . . 35 segments absolute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 aligning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 common, beginning . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 relocatable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 stack, beginning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 severity level, of diagnostic messages . . . . . . . . . . . . . . . . . 93 SFB (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . 33 SFE (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . 34 SFRB (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 52 SFRTYPE (assembler directive) . . . . . . . . . . . . . . . . . . . . . 53 SFRW (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 53 SFR. See special function registers silent operation, specifying in assembler. . . . . . . . . . . . . . . 20 simple rules, in CFI directives. . . . . . . . . . . . . . . . . . . . . . . 85 SIZEOF (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . 35 source files, including . . . . . . . . . . . . . . . . . . . . . . . . . . 71, 77 source format, assembler . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 special function registers. . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 defining labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 stack segments, beginning. . . . . . . . . . . . . . . . . . . . . . . . . . 49 STACK (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . 47 standard input stream (stdin), reading from. . . . . . . . . . . . . 16 standard output stream, disabling messages to . . . . . . . . . . 20 statements, repeating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 static overlay directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 SUB (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 subtraction (assembler operator) . . . . . . . . . . . . . . . . . . . . . 28 Support, Technical . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 symbol and cross-reference table, in assembler list file. . . . . 3 See also Include cross-reference R -r (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 RADIX (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . 76 reference information, typographic convention . . . . . . . . . . xi registered trademarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 relocatable expressions, using symbols in . . . . . . . . . . . . . . . 4 relocatable segments, beginning . . . . . . . . . . . . . . . . . . . . . 49 repeating statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 REPT (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 58 REPTC (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . 58 REPTI (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 58 REQUIRE (assembler directive) . . . . . . . . . . . . . . . . . . . . . 45 RSEG (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 47 RSHIFTA (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . 89 RSHIFTL (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . 88 RTMODEL (assembler directive) . . . . . . . . . . . . . . . . . . . . 43 rules, in CFI directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 runtime model attributes, declaring . . . . . . . . . . . . . . . . . . . 44 r43 (filename extension) set prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 MSP430 IAR Assembler 102 Reference Guide Index symbol control directives . . . . . . . . . . . . . . . . . . . . . . . . . . 45 symbol values, checking . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 symbols See also assembler symbols predefined, in assembler . . . . . . . . . . . . . . . . . . . . . . . . . 7 user-defined, case sensitive . . . . . . . . . . . . . . . . . . . . . . 20 syntax See also assembler source format conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 s43(filename extension) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 V value assignment directives . . . . . . . . . . . . . . . . . . . . . . . . . 52 values, defining temporary . . . . . . . . . . . . . . . . . . . . . . . . . 73 VAR (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 53 _ _VER_ _ (predefined symbol) . . . . . . . . . . . . . . . . . . . . . . 8 W -w (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 disabling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 T -t (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 tab spacing, specifying in assembler list file . . . . . . . . . . . . 21 Technical Support, IAR . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 temporary values, defining . . . . . . . . . . . . . . . . . . . . . . 53, 73 _ _TID_ _ (predefined symbol) . . . . . . . . . . . . . . . . . . . . . 89 _ _TIME_ _ (predefined symbol) . . . . . . . . . . . . . . . . . . . . . 8 time-critical code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 trademarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 true value, in assembler expressions . . . . . . . . . . . . . . . . . . . 4 typographic conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . xi X -x (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 xcl (filename extension) . . . . . . . . . . . . . . . . . . . . . . . . 11, 16 XOR (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . 37 XOR (CFI operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Symbols ! (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 != (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 #define (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . 69 #elif (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . . 69 #else (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 69 #endif (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 69 #error (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 69 #if (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 #ifdef (assembler directive). . . . . . . . . . . . . . . . . . . . . . . . . 69 #ifndef (assembler directive). . . . . . . . . . . . . . . . . . . . . . . . 69 #include files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1617 #include (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 69 #message (assembler directive) . . . . . . . . . . . . . . . . . . . . . . 69 #undef (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 69 $ (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 $ (program location counter). . . . . . . . . . . . . . . . . . . . . . . . . 5 & (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 U -U (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 UGT (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . 36 ULT (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . 36 UMINUS (CFI operator). . . . . . . . . . . . . . . . . . . . . . . . . . . 88 unary minus (assembler operator) . . . . . . . . . . . . . . . . . . . . 28 unary plus (assembler operator) . . . . . . . . . . . . . . . . . . . . . 27 #undef (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . 69 unsigned greater than (assembler operator) . . . . . . . . . . . . . 36 unsigned less than (assembler operator) . . . . . . . . . . . . . . . 36 user symbols, case sensitive . . . . . . . . . . . . . . . . . . . . . . . . 20 103 && (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . 30 * (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 + (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 - (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 -B (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 -b (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 -c (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 -D (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 -E (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 -f (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . 11, 16 -G (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 -I (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 -i (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 -L (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 -l (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 -M (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 -N (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 -O (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 -o (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 -p (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 -r (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 -S (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 -s (assembler option). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 -t (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 -U (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 -w (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 -x (assembler option) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 .double (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . 73 .float (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 74 / (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 /*...*/ (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . 76 // (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 < (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 << (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 <= (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 <> (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 = (assembler directive) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 = (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 == (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 > (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 >= (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 >> (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 ^ (assembler operator). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 _ _DATE_ _ (predefined symbol) . . . . . . . . . . . . . . . . . . . . . 8 _ _FILE_ _ (predefined symbol) . . . . . . . . . . . . . . . . . . . . . . 8 _ _IAR_SYSTEMS_ASM_ _ (predefined symbol) . . . . . . . 8 _ _LINE_ _ (predefined symbol) . . . . . . . . . . . . . . . . . . . . . 8 _ _TID_ _ (predefined symbol) . . . . . . . . . . . . . . . . . . . . . 89 _ _TIME_ _ (predefined symbol) . . . . . . . . . . . . . . . . . . . . . 8 _ _VER_ _ (predefined symbol) . . . . . . . . . . . . . . . . . . . . . . 8 | (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 || (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 ~ (assembler operator) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 MSP430 IAR Assembler 104 Reference Guide ...
View Full Document

Ask a homework question - tutors are online