Assembler changes between RVCT v4.0 for µVision and ARM Compiler v4.1 for µVision

The following changes to the assembler have been made:

Change to the way the assembler reads and processes files

Older assemblers sometimes permitted the source file being assembled to vary between the two passes of the assembler. In the following example, the symbol num is defined in the second pass because the symbol foo is not defined in the first pass.

         AREA x,CODE
        [ :DEF: foo
num     EQU 42
        ]
foo     DCD num
        END

The way the assembler reads and processes the file has now changed, and is stricter. You must rewrite code such as this to ensure that the path through the file is the same in both passes.

The following code shows another example where the assembler faults:

         AREA FOO, CODE
       IF :DEF: VAR
       ELSE
VAR    EQU 0
       EDNIF
         END

The resulting error is:

Error: A1903E : Line not seen in first pass; cannot be assembled.

To avoid this error, you must rewrite this code as:

         AREA FOO, CODE
       IF :LNOT: :DEF: VARVAR    EQU 0
       EDNIF
         END
Change to messages output by the assembler

Generally, any messages referring to a position on the source line now has a caret character pointing to the offending part of the source line, for example:

"foo.s", line 3 (column 19): Warning: A1865W: '#' not seen before constant expression
    3 00000000         ADD r0,r1,1
                                 ^
Changes to diagnostic messages

Various instructions in ARM (using SP) were deprecated when 32-bit Thumb instructions were introduced. These instructions are no longer diagnosed as deprecated unless assembling for a CPU that has 32-bit Thumb instructions. To enable the warnings on earlier CPUs, you can use the option --diag_warning=1745,1786,1788,1789,1892.

Obsolete command-line option

The -O command-line option is obsolete. Use -o instead.

Show/hideSee also

Copyright © 2011-2012 ARM. All rights reserved.ARM DUI 0593B
Non-ConfidentialID062912