 |
|
 |
MESC TOOL NEWS:
MESCT-AS79-990901D
Please take note of the following problems in using assembler AS79 for the 7900 series of microcomputers.
- Versions Concerned
All the versions of AS79 are concerned with these problems, as well as those included with C compiler NC79WA (with assembler and integrated development environment) for the 7900 series of microcomputers.
- Problem on Assembler Directive Command ".ALIGN 2"
- 2.1 Description
- If the directive ".ALIGN 2" is executed, an incorrect value of address correction(*) may be supplied.
- *Address Correction
- Two NOP instructions are inserted when the section type is CODE or ROMDATA.
- The address value is incremented by 2 when the section type is DATA.
- When an address value is even, it is not corrected.
- 2.2 Conditions
- This problem occurs if the following conditions are satisfied:
- The directive ".ALIGN 2" is executed.
- The address of executing the directive ".ALIGN 2" is at an even address.
[Example of Descriptions Causing Problem]
-----------------------------------------------------------------
| .section ram,data
| .org 100h
| label1: .blkb 2
| .align 2
| label2: .blkb 1 ; Value 102h would be indicated normally,
| ; but the next even value 104h is used
| ; as the correction value.
-----------------------------------------------------------------
- 2.3 Workaround
- When correcting address, specify it by directive command ".SECTION".
[ Modified Example]
-----------------------------------------------------------------
| .section ram,data
| .org 100h
| label1: .blkb 2
| .section ram,data,align=2 ;Correction by defining the section
| label2: .blkb 1
|
-----------------------------------------------------------------
- Problem on Addressing Mode Specifier "DT+:", "DP+:", and "DP[0|1|2|3]+:"
- 3.1 Description
- If either of the following conditions is satisfied, the offset value of an operand is calculated at linking operation even when any of the above specifiers is described:
- (1) Any of the above specifiers is described using the declared value of DT or DP that is within a range not determined at assembling.[Example of Descriptions Causing Problem(1)].
- (2) A value that will not be determined at assembling is set into an operand in which any of the above specifiers is described.[Example of Descriptions Causing Problem(2)].
Example of Descriptions Causing Problem(1)
-----------------------------------------------------------------
| .glb ext,symbol
| .dt ext
| lda a, dt+:1234h ; The operand value is handled
| ; as "symbol - (3<<16)" at linking.
-----------------------------------------------------------------
Example of Descriptions Causing Problem(2)
-----------------------------------------------------------------
| .dt 3 ;
| lda a, dt+:symbol ; The operand value is handled
| ; as "1234 - (ext<<16)" at linking.
-----------------------------------------------------------------
- 3.2 Workaround
- Add the value of DT to an operand of addressing mode specifier "DT+" and the value of DP to an operand of "DP+".
-
[Modifie Example]
-----------------------------------------------------------------
| .glb ext,symbol
| .dt ext
| lda a, dt+:1234h+(ext<<16) ; DT value added
| .dt 3
| lda a, dt+:symbol+(3<<16) ; DT value added
|
-----------------------------------------------------------------
- Problem on "JMPL" and "JSRL" Instructions
- 4.1 Description
- Even if the addressing mode not involved in these instructions (i.e., the absolute indirect addressing mode in "JSRL") is described, errors will not occur. As a result, codes in the absolute indirect addressing mode will be created if this mode is designated.
- 4.2 Workaround
- Ensure that "JMPL (mmll)" and "JSRL (mmll)" instructions are not described in the source files, by using an editor, for example.
- Schedule of Fixing Problems
We plan to fixing these problems in our next release.
|
 |