- Important information
- New features
- Known problems
- Program corrections
- User guide corrections
- Miscellaneous
- Release history
Important information
- Information about calling assembler routines from C/C++ can be found in the chapter Assembler language interface in the compiler reference guide.
New features
- None
Known Problems
- EW18574
The assembler does not issue any error message when using the illegal instructions STE.W xx,dsp:20[A1] and LDE.W dsp:20[A1],xx. - EW17630
When using indexed addressing modes where the displacement is not known at assembly time and size specifiers are not used, the assembler incorrectly assumes that the displacement is 8 bits. - EW17633
Whenever you use a JMP instruction without a size specifier (.B, .W or .S) and the destination of the jump is the next instruction, the assembler will incorrectly generate a JMP.S instruction. This is illegal since JMP.S cannot jump to the next instruction, and thus the linker will generate an error. If you want to jump to the next instruction, use the size specifier .B. - EW16429
The assembler operator precedence order does not work for the operators + and - in combination with * and /. The workaround is to use parentheses. - EW15364
A label cannot have the same name as a segment defined in the same file. - EW16116
A construct where you redefine a temporary value with a permanent global value, gives an internal error. Example:
TEST SET 0
TEST DEFINE 1 - EW13308
Using a macro to define a function interface might cause the linker to generate Error[e46]: Undefined external. - M16CA0064
The SFR addresses cannot exceed 0x400 even though the compiler allows higher addresses to be used. - M16CA0018
Some lower-case labels (like c, d, g, i, o, q, u and z) are not treated correctly and can sometimes generate errors when used. This is easily handled with the option for making the code interpretation case-insensitive (-s). - M16CC0116, AFE
The assembler sometimes generates incorrect code when symbols with the same name but a different case are used in the code. Example:
int DATA = 55;
int Data = 44;
DATA = Data; // This is ok
Data = DATA; // This is not ok.
Program Corrections
- None
User guide corrections
- Assembler options, page 11,12
The option -b (Makes a library module) has been removed as there is no longer a need for it.
Miscellaneous
- Nothing
Release history
3.70.1, October 2014
Program corrections
3.60.1, June 2010
3.50.1, November 2010
Program corrections
- Conditional jumps with destinations out of reach generated a warning message. Now, this will generate an error message instead. [EW21570]
3.40.1 - 2009-07-19
3.30A, June 2008
3.21A, December 2006
3.20A, March 2006
3.10A, December 2004
2.12A, November 2003
2.11A, July 2003
- EW14127
Bits with the same name but in different registers worked fine in the C part of the header files thanks to unions, but in the assembly part you got multiple definitions. This is now solved so that each bit name starts with the SFR name followed by an underline. Example: ADIC_ILVL DEFINE 0
2.10A, February 2003
- EW13344
The assembler did not generate errors for instructions like SBJNZ and ADJNZ without a size specifier.
- EW13181
When assembling the instruction MOVLL R0L, R0L (or MOVHL, MOVLH or MOVHH with the same parameters), the assembler would emit wrong opcodes. Instead of 7C00 you would get 7C80, which is illegal.
1.36A, April 2002
1.35D, October 2001
1.35A, June 2001
1.34A, January 2001
1.33A, October 2000
1.32A, June 2000
- The assembler is adapted to the IAR Embedded Workbench GUI version 2.31C.
1.31C, October 1999
- This is a time-limited version.
This product is only working for 30 days after installation. The last date for installation and execution of this product is 28 June 2000.
1.31B, September 1999
1.31A, September 1999 [Not Released]
- M16CA0097, AFE0092
A problem with the__TID__
symbol was corrected.
1.30B, May 1999
- Only demo release.
1.30A, March 1999
- M16CA0088
FSET
andFCLR
did not recognize 's' and 'b' as valid arguments when case-sensitivity was turned on.
- AFE0087
Passing constants with a single quote (H'9001) to a macro failed if followed by an assembler comment.
- The option -ws can now be combined with other warning options, e.g. -w-2,s is valid.
- The version number is now more synchronized with the IAR Embedded Workbench and the compiler ICCM16C.
1.02C, November 1998
- M16CA0068
The assembler incorrectly rejected 'ADD.B:G #1,A0
', complaining about incompatible operands.
- M16CA0073
The assembler accepted negative displacements toA0
,A1
, andSB
without complaining. The generated code was sometimes incorrect.
- M16CA0074
The assembler incorrectly rejectedMOVA
,MOVdir
,STNZ
, andSTZ
, complaining about missing size specifier.
1.02B, August 1998
- The previous version was only available in a time-limited version.
1.02A, August 1998
- M16CA0037
CMP
,OR
and some other instructions gave errors when used without size specifier even though the size could be derived from the size of theRn
registers. The smallest size was always assumed. According to the software manual, size specifier is compulsory.
- M16CA0038
CMP and some other instructions gave errors when used without size specifier even though the size could be derived from the size of the immediate values. The smallest size was always assumed. According to the software manual, size specifier is compulsory.
- M16CA0039
MOV
instructions without size specifier could generate incorrect code (or errors) when immediate values where transferred to 16-bit registers. The smallest size (byte) was always assumed. According to the software manual, size specifier is compulsory.
- M16CA0040, AFE0066
When using list option -N (no header in listing), warnings and errors were written without line-breaks.
1.01A, February 1998
- M16CA0030, AFE0035
C++ comments (//) could cause an internal error.
- M16CA0031, AFE0053
'@' was not allowed in labels. If they were in the first position an internal error was raised.
- Some combinations of size and addressing mode were not allowed and reported as syntax errors.
- Assembler and compiler now generates output for UBROF6 as default. See description above.
1.00G, November 1997
- M16CA0022
Erroneous code was generated for someMOVdir
instructions.MOVLH R0H,R0L
generated the same code asMOVLH R0L,R0H
- New command-line switch to disable optimizations (-z). See description above.
1.00F, September 1997
- M16CA0002
MOV.B:S
used 3 bytes (instead of 2) of space while generating 2 bytes, leading to inconsistencies in labels and addressing.
- M16CA0005
PUSH
with immediate values did not handle negative numbers correctly.
- M16CA0006
MOV.B
between R registers and A registers always used the minimal form even though some combinations are illegal.