ARX-1-J

Similar documents
JavaプログラミングⅠ

JavaプログラミングⅠ

1.1 ラベル ラベルはカラム 1 から始まらなければならない ラベルの後にはコロン スペース タブ 改行が続いてよい ラベルはアルファベットかアンダーバーで始まり 英数字 アンダーバー クエスチョンマークを含んでよい ラベルは 32 文字までである デフォルトではこれらは大文字と小文字を区別するが

JavaプログラミングⅠ

Section1_入力用テンプレートの作成

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

RL78開発環境移行ガイド RL78ファミリ間の移行 (コンパイラ編:コンパイラオプション・アセンブラオプション)(CA78K0R→CC-RL)

プログラミング実習I

PowerPoint プレゼンテーション

JavaプログラミングⅠ

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

Microsoft Word - no02.doc

kantan_C_1_iro3.indd

レポートでのデータのフィルタ

インテル(R) Visual Fortran コンパイラ 10.0

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

プレポスト【解説】

Oracle DatabaseとIPv6 Statement of Direction

sinfI2005_VBA.doc

Oracle DatabaseとIPv6 Statement of Direction

説明書

Microsoft Word - Training10_プリプロセッサ.docx

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

パスワード管理

操作方法 XXXTOEMF は コマンドライン形式のアプリケーションです 通常のコマンドと同じように コマンドラインからの実行やバッチファイルに組み込むことが可能です インストールについては, 別紙の KDxxxx コンバートソフトの特記事項について を参照してください ここでは 直接コマンドライン

概要 ABAP 開発者が SAP システム内の SAP ソースまたは SAP ディクショナリーオブジェクトを変更しようとすると 2 つのアクセスキーを入力するよう求められます 1 特定のユーザーを開発者として登録する開発者キー このキーは一度だけ入力します 2 SAP ソースまたは SAP ディクシ

ポインタ変数

UIOUSBCOM.DLLコマンドリファレンス

使用する前に

管理番号 内容仮想テーブル設定画面およびマッチング条件設定画面においてコメントを設定した場合 変換エラーが発生する マッピング情報設定画面の出力情報に固定値を選択し区分に 動的バイナリ値 を指定した場合 関数を設定す

JavaScriptプログラミング入門 2.JavaScriptの概要

Microsoft Word - ModelAnalys操作マニュアル_

Windows Graphic Loader for Label Printers

スライド 1

Java講座

ことばを覚える

関数とは 関数とは 結果を得るために 処理を行う仕組み です Excel2010 には あらかじめ関数が数式として組み込まれています たとえば SUM 関数 は 指定した値をすべて合計する 仕組みです 長い計算式や複雑な計算式を作成せずに 簡単に結果を求めることができます 例合計 =A1+A2+A3

作業環境カスタマイズ 機能ガイド(応用編)

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

24th Embarcadero Developer Camp

レポートのデータへのフィルタの適用

Mindjet MindManager Version 9 for Windows サービスパック 2 リリースノート : 2011 年 4 月 20 日

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

生成された C コードの理解 コメント元になった MATLAB コードを C コード内にコメントとして追加しておくと その C コードの由来をより簡単に理解できることがよくありま [ 詳細設定 ] [ コード外観 ] を選択 C コードのカスタマイズ より効率的な C コードを生成するベストプラクテ

モデム コマンドに関するガイドライン

9 WEB監視

Microsoft PowerPoint - CproNt02.ppt [互換モード]

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

Prog1_2nd

HDC-EDI Manager Ver レベルアップ詳細情報 < 製品一覧 > 製品名バージョン HDC-EDI Manager < 対応 JavaVM> Java 2 Software Development Kit, Standard Edition 1.4 Java 2

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

<< 目次 >> 1 PDF コンバータのインストール ライセンスコードの入力 PDF にフォントを埋め込みたい場合の設定 PDF オートコンバータ EX で使用しない場合 PDF コンバータ単体で使用する場合の説明 PDF コンバータのアン

図 1 アドインに登録する メニューバーに [BAYONET] が追加されます 登録 : Excel 2007, 2010, 2013 の場合 1 Excel ブックを開きます Excel2007 の場合 左上の Office マークをクリックします 図 2 Office マーク (Excel 20

Chromeleon 6 for Chromeleon 6.8 SR15 Build: --- 新しいシーケンスの作成に使用できるワークリストファイル (.wle) Doc. Nr: CM6_68150_0020 Doc. Ver.: Doc. Type: Guide

プログラミング入門1

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

スクールCOBOL2002

Microsoft PowerPoint - 4.ppt [互換モード]

HP Primeバーチャル電卓

目次 1. 概要 動作環境

Polycom RealConnect for Microsoft Office 365

ポインタ変数

Excel データ出力ガイドブック 第 1.0 版平成 30 年 9 月 1 日制定 株式会社中電シーティーアイ

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

eYACHO 管理者ガイド

本書は INpMac v2.20(intime 5.2 INplc 3 Windows7/8/8.1に対応 ) の内容を元に記載しています Microsoft Windows Visual Studio は 米国 Microsoft Corporation の米国及びその他の国における登録商標です

CONTENTS マニュアルの表記... S01-02_01 1.DataNature Smart 全体概要図... S01-02_11 2. 基本操作... S01-02_ ジョブの作成... S01-02_21 加工条件設定... S01-02_21 Step1: 処理対象データの指

Calpont InfiniDBマルチUM同期ガイド

Total View Debugger 利用の手引 東京工業大学学術国際情報センター version 1.0

プログラミング基礎

_unix_text_command.pptx

Android Layout SDK プログラミング マニュアル

目次 1. 変換の対象 砂防指定地 XML 作成メニュー シェープファイルからXMLへ変換 砂防指定地 XMLとシェープファイルの対応.csv 変換処理 CSVファイルによる属性指定... 5

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

ファイル メニューのコマンド

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

スライド 1

PowerPoint Presentation

Microsoft PowerPoint - 3.ppt [互換モード]

PowerPoint プレゼンテーション

ユーティリティ 管理番号 内容 対象バージョン 157 管理情報バッチ登録コマンド (utliupdt) のメッセージ出力に対し リダイレクトまたはパイプを使用すると メッセージが途中までしか出 力されないことがある 267 転送集計コマンド (utllogcnt) でファイル ID とホスト名の組

ブート領域、フラッシュ領域の分割方法 RL78ファミリ用Cコンパイラ CC-RL

インストール後のアプリケーション実行

Rhino Importer for ARCHICAD ユーザーガイド

intra-mart Accel Platform

Moodleアンケートの質問一括変換ツール

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

スケジューリングおよび通知フォーム のカスタマイズ

ex04_2012.ppt

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

Fujitsu Standard Tool

セットアップカード

Microsoft PowerPoint - 計算機言語 第7回.ppt

ワイヤレスセンサモジュール取扱説明書

VelilogHDL 回路を「言語」で記述する

5.1. ホームページ登録 ホームページ URL を登録します ホームページ URL は基本契約で 1 個 (100MB) まで無料 2 個目以降は有料オプションサービス ( 月額 300 円 / 個 ) で追加登録が可能です (1) 左メニューの HP アカウント登録 リンクをクリックします (1

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

ガイダンス

OpenLAB Data Store Release Notes

Transcription:

IAR アセンブラリファレンスガイド ルネサス製 RX マイクロコンピュータファミリ対象

版権事項 Copyright 2009 IAR Systems AB. IAR Systems AB が事前に書面で同意した場合を除き このドキュメントを複製することはできません このドキュメントに記載するソフトウェアは 正当な権限の範囲内でインストール 使用 およびコピーすることができます 免責事項このドキュメントの内容は 予告なく変更されることがあります また IAR Systems 社では このドキュメントの内容に関して一切責任を負いません 記載内容には万全を期していますが 万一 誤りや不備がある場合でも IAR Systems 社はその責任を負いません IAR Systems 社 その従業員 その下請企業 またはこのドキュメントの作成者は 特殊な状況で 直接的 間接的 または結果的に発生した損害 損失 費用 課金 権利 請求 逸失利益 料金 またはその他の経費に対して一切責任を負いません 商標 IAR Systems IAR Embedded Workbench C-SPY visualstate From Idea to Target IAR KickStart Kit IAR PowerPac IAR YellowSuite IAR Advanced Development Kit IAR および IAR Systems のロゴタイプは IAR Systems AB が所有権を有する商標または登録商標です J-Link は IAR Systems AB にライセンス供与されている商標です Microsoft および Windows は Microsoft Corporation の登録商標です ルネサスは ルネサス Technology Corporation の登録商標です RX と RX は ルネサス Technology Corporation の商標です その他の製品名はすべて 各製品名の所有者の商標または登録商標です 改版情報初版 : 2009 年 5 月部品番号 : ARX-1-J 本ガイドは RX 用 IAR Embedded Workbench のバージョン 1.x に適用する 内部参照 : AFE2 R8 IJOA

目次 表... ix はじめに... xi 本ガイドの対象者...xi 本ガイドの使用方法...xi このガイドの概要...xii その他のドキュメント...xii 表記規則...xiii 表記規則...xiii 命名規約...xiv RX 用 IAR アセンブラの概要... 1 アセンブラプログラミングの概要... 1 イントロダクション... 1 モジュール方式のプログラミング... 2 外部インタフェースの詳細... 3 アセンブラ呼出し構文... 3 オプションの受渡し... 3 環境変数... 4 エラーリターンコード... 4 ソースフォーマット... 5 RX アーキテクチャについて... 5 アセンブラ命令... 5 ビッグエンディアンアプリケーションでのコードおよびデータ... 6 式 オペランド 演算子... 6 整数定数... 6 ASCII 文字定数... 7 浮動小数点定数... 7 TRUE および FALSE... 8 シンボル... 8 ラベル... 9 iii

レジスタシンボル... 9 定義済シンボル... 10 絶対式および再配置可能式... 12 式の制限... 12 リストファイルのフォーマット... 13 ヘッダ... 13 ボディ... 13 概要... 13 シンボルとクロスリファレンスの表... 13 プログラミングのヒント... 14 特殊機能レジスタへのアクセス... 14 C 形式のプリプロセッサディレクティブを使用する... 14 アセンブラオプション... 15 コマンドラインアセンブラオプションの設定... 15 パラメータの指定... 16 アセンブラオプションの概要... 17 アセンブラオプションの概要... 18 アセンブラ演算子... 33 演算子の優先順位... 33 アセンブラ演算子の概要... 34 括弧演算子 1... 34 関数演算子 2... 34 単項演算子 3... 34 乗算型算術演算子 4... 34 加算型算術演算子 5... 35 シフト演算子 6... 35 比較演算子 7... 35 等価演算子 8... 35 論理演算子 9-14... 35 条件演算子 15... 36 iv IAR アセンブラリファレンスガイド

目次 アセンブラ演算子の説明... 36 アセンブラディレクティブ... 49 アセンブラディレクティブの概要... 49 モジュール制御ディレクティブ... 53 構文... 54 パラメータ... 54 説明... 55 シンボル制御ディレクティブ... 57 構文... 57 パラメータ... 57 説明... 58 例... 59 セグメント制御ディレクティブ... 59 構文... 60 パラメータ... 61 説明... 61 例... 64 値割当てディレクティブ... 67 構文... 67 パラメータ... 67 説明... 67 例... 68 条件付きアセンブリディレクティブ... 70 構文... 71 パラメータ... 71 説明... 71 例... 72 マクロ処理ディレクティブ... 73 構文... 73 パラメータ... 73 説明... 74 例... 77 v

リスト制御ディレクティブ... 80 構文... 80 説明... 81 例... 82 C 形式のプリプロセッサディレクティブ... 84 構文... 85 パラメータ... 85 説明... 85 例... 88 データ定義ディレクティブまたは割当てディレクティブ... 89 構文... 90 パラメータ... 90 説明... 91 例... 91 アセンブラ制御ディレクティブ... 92 構文... 92 パラメータ... 93 説明... 93 例... 93 関数ディレクティブ... 94 構文... 95 パラメータ... 95 説明... 95 呼出しフレーム情報ディレクティブ... 96 構文... 97 パラメータ... 98 説明... 99 簡易規則... 103 CFI 式... 105 例... 107 vi IAR アセンブラリファレンスガイド

目次 プラグマディレクティブ... 111 プラグマディレクティブの一覧... 111 プラグマディレクティブの詳細... 111 診断... 113 メッセージフォーマット... 113 重要度... 113 重要度の設定... 114 インターナルエラー... 114 索引... 115 vii

viii IAR アセンブラリファレンスガイド

表 1: このガイドの表記規則... xiii 2: このガイドで使用されている命名規約... xiv 3: アセンブラの環境変数... 4 4: アセンブラのエラーリターンコード... 4 5: 整数定数のフォーマット... 7 6: ASCII 文字定数のフォーマット... 7 7: 浮動小数点定数... 8 8: 定義済レジスタシンボル... 9 9: 定義済シンボル... 10 10: シンボルとクロスリファレンスの表... 14 11: アセンブラオプションの概要... 17 12: 依存関係のリストの生成 (--dependencies)... 20 13: 条件付きリストオプション (-l)... 26 14: ファイルへのプリプロセッサ出力の転送 (--preprocess)... 29 15: アセンブラディレクティブの概要... 49 16: モジュール制御ディレクティブ... 53 17: シンボル制御ディレクティブ... 57 18: セグメント制御ディレクティブ... 59 19: 値割当てディレクティブ... 67 20: 条件付きアセンブリディレクティブ... 70 21: マクロ処理ディレクティブ... 73 22: リスト制御ディレクティブ... 80 23: C 形式のプリプロセッサディレクティブ... 84 24: データ定義ディレクティブまたは割当てディレクティブ... 89 25: アセンブラ制御ディレクティブ... 92 26: 呼出しフレーム情報ディレクティブ... 96 27: CFI 式の単項演算子... 105 28: CFI 式の 2 項演算子... 106 29: CFI 式の 3 項演算子... 107 30: バックトレース行と列付きのサンプルコード... 108 31: プラグマディレクティブの一覧... 111 ix

x IAR アセンブラリファレンスガイド

はじめに RX 用 IAR アセンブラリファレンスガイドへようこそ このガイドは お客様の要件に応じてアプリケーションを開発するために RX 用 IAR アセンブラをご利用頂くのに役立つ 詳細なリファレンス情報を提供します 本ガイドの対象者 本ガイドは アセンブラ言語を使用して RX マイクロコントローラ用アプリケーションの一部または全部を開発する予定があり アセンブラの使用方法に関する詳細情報を必要とするユーザを対象としています また 以下について十分な知識があるユーザを対象としています RX マイクロコントローラのアーキテクチャおよび命令セット RX マイクロコントローラの情報については ルネサスの提供するマニュアルを参照してください アセンブラ言語でのプログラミングに関する基礎知識 組込みシステム用アプリケーションの開発 ホストコンピュータのオペレーティングシステム 本ガイドの使用方法 アセンブラを初めて使用する場合 本書の RX 用 IAR アセンブラの概要 をお読みください 中級者や上級者の場合 概要の後に続くリファレンス情報を中心にお読みいただけます IAR システムズのツールキットを初めて使用する場合は まず IAR Embedded Workbench IDE ユーザガイド の前半を確認することをお勧めします これらの章には 製品についての概要や 初心者向けのチュートリアルが用意されています xi

このガイドの概要 このガイドの概要 本ガイドの構成および各章の概要を以下に示します RX 用 IAR アセンブラの概要 では プログラミング情報を提供します また ソースコードのフォーマットや アセンブラリストのフォーマットについても説明しています アセンブラオプション では まずコマンドラインでアセンブラオプションを設定する方法と 環境変数の使用方法について説明します 続いて アセンブラオプションについてアルファベット順に簡単に説明し 各オプションの詳細なリファレンス情報を提供します アセンブラ演算子 では アセンブラ演算子の概要を優先順に説明し 各演算子の詳細なリファレンス情報を提供します アセンブラディレクティブ では アセンブラディレクティブについてアルファベット順に簡単に説明し 各ディレクティブの詳細なリファレンス情報を 機能別にグループ分けして提供します プラグマディレクティブ では アセンブラで使用できるプラグマディレクティブについて説明します 診断 では 診断メッセージのフォーマットと重要度について説明します その他のドキュメント IAR システムズの RX マイクロコントローラ用開発ツールについては それぞれのガイドとオンラインヘルプファイルで詳しく説明しています 知りたい情報に対応するドキュメントを以下に示します IAR C-SPY デバッガでの IAR Embedded Workbench IDE の使用については IAR Embedded Workbench IDE ユーザガイド を参照してください RXIARC/C++ アセンブラを使用したプログラミングについては RX IAR C/C++ コンパイラリファレンスガイド を参照してください IAR XLINK リンカ IAR XAR ライブラリビルダ IAR XLIB ライブラリアンの使用方法については IAR リンカおよびライブラリツールリファレンスガイド を参照してください IAR DLIB ライブラリの使用方法については オンラインヘルプシステムを参照してください これらのガイドはすべて ハイパーテキスト PDF または HTML フォーマットでインストール用メディアに収録されています 印刷物として提供されるガイドもあります xii IAR アセンブラリファレンスガイド

はじめに 表記規則 本ガイドでプログラミング言語 C と記述されている場合 特に記述がない限り C++ も含まれます 製品インストール先のディレクトリ ( 例 : rx\doc) の記述がある場合 その場所までのフルパス ( 例 : c:\program Files\IAR Systems\Embedded Workbench 5.n\rx\doc) を意味します 表記規則 このガイドでは 次の表記規則を使用します スタイル コンピュータ 用途 ソースコードの例 ファイルパス コマンドライン上のテキスト 2 進数 16 進数 8 進数 パラメータ パラメータとして使用される実際の値を表すプレースホルダ た とえば filename.h の場合 filename はファイルの名前を表 します [ オプション ] コマンドのオプション部分 a b c コマンド内の選択可能な部分 {a b c} コマンドの必須部分に選択肢があることを示します 太字 斜体 画面に表示されるメニュー名 メニューコマンド ボタン およびダイアログボックス 本ガイドや他のガイドへのクロスリファレンスを示します 強調 3 点リーダは その前の項目を任意の回数繰り返せることを示します IAR Embedded Workbench IDE 固有の内容を示します コマンドラインインタフェース固有の内容を示します 開発やプログラミングについてのヒントを示します 警告を示します 表 1: このガイドの表記規則 xiii

表記規則 命名規約 以下の命名規約は このガイドに記述されている IAR システムズの製品およびツールで使用されています ブランド名 RX 用 IAR Embedded Workbench RX 用 IAR Embedded Workbench IDE RX 用 IAR C-SPY デバッガ IAR C-SPY シミュレータ RX 用 IAR C/C++ コンパイラ RX 用 IAR アセンブラ IAR XLINK リンカ IAR XAR ライブラリビルダ IAR XLIB ライブラリアン IAR DLIB ライブラリ表 2: このガイドで使用されている命名規約 一般名称 IAR Embedded Workbench IDE C-SPY デバッガシミュレータコンパイラアセンブラ XLINK リンカライブラリビルダライブラリアン DLIB ライブラリ xiv IAR アセンブラリファレンスガイド

RX 用 IAR アセンブラの概要 この章には 以下のセクションがあります アセンブラプログラミングの概要 モジュール方式のプログラミング 外部インタフェースの詳細 ソースフォーマット アセンブラ命令 式 オペランド 演算子 リストファイルのフォーマット プログラミングのヒント アセンブラプログラミングの概要アプリケーション全体をアセンブラ言語で記述するのではない場合でも 正確なタイミングや特殊な命令シーケンスを要求する RX マイクロコントローラのメカニズムを使用する場合など コードの一部をアセンブラで記述する必要が生じることがあります 効率的なアセンブラアプリケーションを記述するためには RX マイクロコントローラのアーキテクチャと命令セットを理解しておく必要があります 命令ニーモニックの構文については ルネサスハードウェアのマニュアルを参照してください イントロダクション アセンブラアプリケーションの開発を始めるにあたって 以下の情報が参考になります チュートリアルを一通り行う 特に IAR Embedded Workbench IDE ユーザガイド に付属している C 言語とアセンブラモジュールの結合についてのチュートリアルは役に立ちます RX IAR C/C++ コンパイラリファレンスガイド で アセンブラ言語インタフェースについての説明を参照する C 言語とアセンブラモジュールを結合する場合に役に立ちます IAR Embedded Workbench IDE では アセンブラプロジェクトのテンプレートをベースに新しいプロジェクトを作成できます 1

モジュール方式のプログラミング モジュール方式のプログラミング優れたソフトウェア設計においてモジュール方式プログラミングが大きな役割を果たすということは広く知られています 単体構造にするのではなく 複数の小型モジュールを集めてコードを構成すると アプリケーションコードを論理的な構造に体系化できます これによりコードがわかりやすくなるうえ 次のような効果があります プログラム開発の効率化 モジュールの再利用 保守の容易さ IAR の開発ツールでは ソフトウェアをモジュール構造にするためのさまざまな機能をご用意しています 一般的に アセンブラコードはアセンブラソースファイルに記述します それぞれのソースファイルには モジュール制御ディレクティブを使用して 1 つ以上のアセンブラモジュールを定義します それぞれのモジュールは名称と型を持ちます 型は PROGRAM または LIBRARY となります リンカには常に PROGRAM モジュールが含まれています 一方 LIBRARY モジュールは 他のモジュールが当該モジュール内のパブリックシンボルを参照する場合 リンク先のコードのみに含まれています 各モジュールを複数のサブルーチンに分割できます セグメントとは メモリ内の物理位置にマッピングされるデータやコードを含む論理エンティティです セグメントにコードとデータを配置するには セグメント制御ディレクティブを使用します セグメントは 絶対セグメントと再配置可能セグメントのどちらにもできます 絶対セグメントはメモリ内で常に固定アドレスを持ちますが 再配置可能セグメントのアドレスはリンク時に解決されます セグメントにより コードやデータをメモリ内でどのように配置するか制御できます 各セグメントは 複数のセグメントパートから構成されます セグメントパートとはリンク可能な最小単位であり リンカではこれを使用して 参照するユニットのみをインクルードすることができます 大規模なプロジェクトに取り組んでいると さまざまなアプリケーションで使用される複数の便利なルーチンがすぐに蓄積されます 小さなオブジェクトファイルが大量に蓄積されるのを回避するためには このようなルーチンが含まれるモジュールをライブラリオブジェクトに集めます IAR Embedded Workbench IDE では 1 つのライブラリに多くのオブジェクトファイルを集めるためにライブラリプロジェクトを設定できます 例については IAR Embedded Workbench IDE ユーザガイド のチュートリアルを参照してください まとめると ソフトウェアの設計にはモジュール方式のプログラミングが役に立ちます また モジュール構造は以下の方法で作成できます モジュールディレクティブを使用して 多くの小型モジュールを ( ソースファイルごとに 1 つ またはファイルごとに複数個 ) 作成する 各モジュールで アセンブラソースコードを小さなサブルーチンに分割する (C レベルでの関数に相当 ) 2 IAR アセンブラリファレンスガイド

RX 用 IAR アセンブラの概要 アセンブラソースコードを segment に分割し 最終的にメモリ内でコードやデータをどのように配置するか正確に制御できるようにする ルーチンをライブラリに集める つまり オブジェクトファイルの数を減らし モジュールが条件付きでリンクされるようにする 外部インタフェースの詳細このセクションでは アセンブラが環境とどのようにやりとりするかについて説明します アセンブラは IAR Embedded Workbench IDE またはコマンドラインから使用できます IAR Embedded Workbench IDE からのアセンブラの使用については IAR Embedded Workbench IDE ユーザガイド を参照してください アセンブラ呼出し構文 アセンブラの呼出し構文は次のとおりです arx [options][sourcefile][options] たとえば prog.s54 というソースファイルをアセンブルする場合は 以下のコマンドを使用して デバッグ情報を含むオブジェクトファイルを生成します arx prog --debug デフォルトで RX 用 IAR アセンブラは ソースファイルのファイル名拡張子 s54 asm msa を認識します アセンブラ出力のファイル名拡張子はデフォルトで r54 です 通常 コマンドラインでのオプションの順序とソースファイル名の前後のどちらに入力するかは 重要ではありません ただし 例外が 1 つあります -I オプションを使用する場合には ディレクトリの検索はコマンドラインに指定した順序で行われます コマンドラインから引数なしでアセンブラを実行する場合 アセンブラのバージョン番号と利用可能なすべてのオプション ( 簡単な説明を含む ) が stdout に転送され 画面に表示されます オプションの受渡し オプションをアセンブラに受け渡すには 次の 3 つの方法があります コマンドラインから直接渡す方法コマンドラインでは arx コマンドの後にオプションを指定します アセンブラ呼出し構文 (3 ページ ) を参照してください 環境変数経由で渡す方法アセンブラは 自動的に環境変数の値を各コマンドラインの後に付加します 環境変数 (4 ページ ) を参照してください 3

外部インタフェースの詳細 -f オプションを使用してテキストファイル経由で渡す方法 ( -f (25 ページ ) を参照 ) オプションの構文 オプションの概要 各オプションの詳細な説明に関する一般的なガイドラインについては アセンブラオプションを参照してください 環境変数 アセンブラオプションは ASMRX 環境変数でも指定できます アセンブラはこの変数の値を各コマンドラインに自動的に付加することにより 各アセンブリで必要なオプションを指定するための便利な方法を提供します RX 用 IAR アセンブラでは 以下の環境変数を使用できます 環境変数 ASMRX ARX_INC 表 3: アセンブラの環境変数 たとえば 次の環境変数を設定すると 常に temp.lst という名称のリストファイルが生成されます set ASMRX=-l temp.lst IAR XLINK リンカおよび IAR XLIB ライブラリアンで使用される環境変数については IAR リンカおよびライブラリツールリファレンスガイド を参照してください エラーリターンコード 説明 コマンドラインのオプションを指定します set ASMRX=-L -ws インフルードファイルを検索するディレクトリを指定します 例 :set ARX_INC=c:\myinc\ RX 用 IAR アセンブラをバッチファイル内から使用する場合 次に行うステップを決定するために アセンブリが成功したかどうかを判断しなければならない場合があります このため アセンブラはこれらのエラーリターンコードを返します リターンコード 説明 0 アセンブリは成功しましたが 警告が発生している場合があります 1 オプション --warnings_affect_exit_code が使用された場合 警告が発生しています 2 致命的ではないエラーまたは致命的なアセンブリエラーが発生しており アセンブラが異常終了しました 3 クラッシュの原因となるエラーが発生しました 表 4: アセンブラのエラーリターンコード 4 IAR アセンブラリファレンスガイド

RX 用 IAR アセンブラの概要 ソースフォーマット アセンブラソース行のフォーマットは次のとおりです [label [:]] [operation] [operands] [; comment] ここで コンポーネントは次のとおりです label operation operands comment ラベルの定義 アドレスを表現するシンボルです ラベルの開始位置を最初の列にする場合 ( つまり 行の左端から開始する場合 ) :( コロン ) はオプションです アセンブラ命令またはディレクティブ 開始位置は 最初の列にしないでください 左側に空白を含める必要があります アセンブラ命令またはディレクティブには オペランドを含めないか 1 つまたは複数のオペランドを使用することができます オペランドはコンマで区切ります オペランドは次の可能性があります 数値またはアドレスを示す定数 数値またはアドレスを示すシンボル名 ( この場合 文字もラベルと呼びます ) 浮動小数点定数 レジスタ 定義済シンボル プログラムロケーションカウンタ (PLC) 式 コメント 前に ;( セミコロン ) を付けます C または C++ のコメントも許可されます コンポーネントは空白またはタブで区切ります ソース行は 1 行あたり 2047 文字以内にします タブ文字 ASCII 09H は 一般的な慣行に従って 列 8 16 24 などに拡張されています これにより リストファイルでのソースコード出力およびデバッグ情報に影響があります タブはエディタによって設定が異なる可能性があるため ソースファイルでタブを使用しないでください RX アーキテクチャについて アセンブラ命令 RX 用 IAR アセンブラでは チップメーカのハードウェアマニュアルに記述されているアセンブラ命令の構文がサポートされています これはアライメントに関する RX アーキテクチャの要件に適合しています 5

式 オペランド 演算子 ビッグエンディアンアプリケーションでのコードおよびデータ ビッグエンディアンアプリケーションをアセンブルしている場合 リンカがコードとデータを区別できる必要があります これには アセンブリ命令 CODE と DATA を使用します データとして読み取られるすべてのオブジェクトの前には DATA ディレクティブを付け その他の行の前には CODE ディレクティブを付ける必要があります アセンブラにデフォルトモードはありません また これらのディレクティブを省略してもアセンブリエラーメッセージは発生しませんが リンクが成功することはありません 式 オペランド 演算子 式は 式オペランドと演算子から構成されています アセンブラでは 算術演算や論理演算などさまざまな式を使用できます すべての演算子は 32 ビットの 2 の補数整数を使用します コードの生成のために値が使用される場合 範囲チェックが行われます 式は左から右へと評価されます ただし 演算子の優先度によってこの順番が上書きされた場合を除きます アセンブラ演算子 (33 ページ ) も参照してください 式で有効なオペランドは以下のとおりです データまたはアドレスの定数 浮動小数点定数を除きます シンボル名 データとアドレスのどちらを表すこともできます アドレスの場合 ラベルとも呼ばれます プログラムロケーションカウンタ (PLC) $( ドル ) オペランドについては 後ほど詳しく説明します 整数定数 IAR システムのすべてのアセンブラでは 32 ビットの 2 の補数内部演算を使用しているため 整数の ( 符号付き ) 範囲は -2147483648 ~ 2147483647 となります 定数は一連の数字で記述し オプションで先頭に -( マイナス ) 符号を付けて負の数を示します コンマと小数点は許可されません 6 IAR アセンブラリファレンスガイド

RX 用 IAR アセンブラの概要 以下のような数値表現がサポートされます 整数のタイプ 例 2 進数 1010b 8 進数 1234q 10 進数 1234, -1 16 進数 0FFFFh 0xFFFF 表 5: 整数定数のフォーマット 注記 : プレフィックスとサフィックスはいずれも 大文字または小文字で記述できます ASCII 文字定数 ASCII 定数は 任意の数の文字を半角または全角の引用符で囲みます ASCII 文字列には 出力可能な文字と空白のみを使用できます 引用符の文字自体にアクセスする場合 引用符を 2 つ並べて使用する必要があります フォーマット 浮動小数点定数 値 'ABCD' ABCD(4 文字 ) "ABCD" ABCD'\0'(5 文字 最後は ASCII の null) 'A''B' A'B 'A''' A' ''''(4 つの引用符 ) ' ''(2 つの引用符 ) 空白文字列 ( 値なし ) ""(2 つの二重引用符 ) 空白文字列 (1 つの ASCII null 文字 ) \' ' - 文字列内で引用符を使用する場合 ( I\'d love to など ) \\ \ - 文字列内で \ を使用する場合 \" " - 文字列内で二重引用符を使用する場合 表 6: ASCII 文字定数のフォーマット RX 用 IAR アセンブラは 浮動小数点値を定数として扱い IEEE の単精度 ( 符号付き 32 ビット ) 浮動小数点フォーマット 倍精度フォーマット ( 符号付き 64 ビット ) または小数フォーマットに変換します 浮動小数点値は次のフォーマットで記述できます [+ -][digits].[digits][{e e}[+ -]digits] 7

式 オペランド 演算子 次の表は 有効な例の一部を示します フォーマット 値 10.23 1.023 x 10 1 1.23456E-24 1.23456 x 10-24 1.0E3 1.0 x 10 3 表 7: 浮動小数点定数 空白とタブは 浮動小数点定数では使用できません 注記 : 浮動小数点定数を式で使用しても 有用な結果とはなりません DQ15 のように 小数フォーマットを使用すると 表示可能な範囲は -1.0 <= x < 1.0 となります その範囲外の値はすべて 表現できる最大値または最小値が設定されます 小数データの単語の長さが n である場合 小数値は x * 2^(n-1) という 2 の補数値として表現されます TRUE および FALSE 式では ゼロ値は FALSE と見なされ ゼロ以外の値は TRUE と見なされます 条件付きの式では FALSE の場合は値 0 TRUE の場合は 1 が返されます シンボル ユーザ定義シンボルの長さは最大 255 文字であり 全ての文字が有効です シンボルの後に続く演算の種類に応じて シンボルはデータシンボルまたはアドレスシンボルとなります ( アドレスシンボルはラベルと呼びます ) 命令の前のシンボルはラベルであり EQU ディレクティブなどの前のシンボルはデータシンボルです 次のシンボルがあります 絶対値 アセンブル時に既知となります 再配置可能 リンク時に解決されます シンボルの先頭は 文字 a ~ z または A ~ Z?( 疑問符 ) または _( 下線 ) にする必要があります シンボルには数字 0 ~ 9 と $( ドル ) を使用できます 命令 レジスタ 演算子 ディレクティブなどの組み込みシンボルでは 大文字 / 小文字は区別されません ユーザ定義のシンボルの場合 デフォルトでは大文字 / 小文字が区別されますが ユーザシンボルの大文字 / 小文字を区別する (--case_insensitive) アセンブラオプションを使用してオン / オフを切り替えることができます 詳細については --case_insensitive (18 ページ ) を参照してください モジュール間でシンボルをどのように共有するか制御するには シンボル制御ディレクティブを使用します たとえば 1 つ以上のシンボルを他のモジュールで使用できるようにするには PUBLIC ディレクティブを使用しま 8 IAR アセンブラリファレンスガイド

RX 用 IAR アセンブラの概要 す タイプが設定されていない外部シンボルをインポートするには EXTERN ディレクティブを使用します シンボルとラベルはバイトアドレスです その他の情報については ルックアップテーブルの生成 (91 ページ ) を参照してください ラベル メモリロケーションに使用されるシンボルをラベルと呼びます プログラムロケーションカウンタ (PLC) アセンブラは現在の命令の開始アドレスをトレースします これを プログラムロケーションカウンタと呼びます プログラムロケーションカウンタをアセンブラのソースコードで参照する必要がある場合 $( ドル ) 符号を使用します 次に例を示します BRA $ レジスタシンボル ; Loop forever 以下の表に 既存の定義済レジスタシンボルを示します 名称サイズ説明 R1 ~ R15 32 ビット 汎用レジスタ SP/R0 32 ビット レジスタ R0 現在有効な SP PSW 32 ビット ステータスレジスタ PC 32 ビット プログラムカウンタ USP 32 ビット ユーザモードのスタックポインタ ISP 32 ビット スーパーバイザモードのスタックポインタ FPSW 32 ビット 浮動小数点ステータスレジスタ BPSW 32 ビット バックアップステータスレジスタ ( 高速割込み ) BPC 32 ビット バックアッププログラムカウンタ ( 高速割込み ) FINTV 32 ビット 高速割込みベクタレジスタ INTB 32 ビット INTVEC マスカブル割込みベクタベースレジスタ 表 8: 定義済レジスタシンボル レジスタペアを指定するには 次の例のようにレジスタを連結します R4R3 レジスタペアに指定できるのは 連続したレジスタのみです 上位の偶数レジスタを先頭に 下位の奇数レジスタを最後にします 9

式 オペランド 演算子 定義済シンボル RX 用 IAR アセンブラには アセンブラソースファイルで使用するシンボルのセットが定義されています シンボルは現在のアセンブリについての情報を提供するため プリプロセッサディレクティブでテストしたり アセンブルされたコードに含めることができます アセンブラから返された文字列は二重引用符に囲まれています 以下の定義済シンボルがあります シンボル ARX BIG_ENDIAN BUILD_NUMBER CODE_MODEL 値 コードが RX 用 IAR アセンブラでアセンブルされている場合は 1 に設定される整数です --endian オプションの設定を示す整数です --endian=b と指定されている場合 このシンボルの値は 1(TRUE) に定義されています --endian=l と指定されている場合 このシンボルの値は 0(FALSE) に定義されています 現在使用中のアセンブラのビルド番号を示す一意の整数です ビルド番号は 必ずしも後でリリースされたアセンブラの方が遅い番号になるとは限りません 使用中のコードモデルを示す整数です シンボルには --code_model オプションが反映され FAR または HUGE に定義されます これらのシンボル名は CODE_MODEL シンボルの評価に使用できます DATA_MODEL 使用中のデータモデルを示す整数です シンボルには --data_model オプションが反映され NEAR FAR または HUGE に定義できます DATE dd/mmm/yyyy フォーマットで示す現在の日付 ( 文字列 ) DOUBLE オプション --double の設定に応じて 32 または 64 です FILE 現在のソースファイルの名前 ( 文字列 ) IAR_SYSTEMS_ASM IAR アセンブラの識別子 ( 数字 ) 現行値は 7 です 将来のバージョンでは 番号が大きくなる可能性があります このシンボルを #ifdef で評価し コードが IAR システムズのアセンブラでアセンブルされたものかどうかを検出できます LINE 現在のソースの行番号 ( 数字 ) LITTLE_ENDIAN 表 9: 定義済シンボル --endian オプションの設定を示す整数です --endian=l と指定されている場合 このシンボルの値は 1(TRUE) に定義されています --endian=b と指定されている場合 このシンボルの値は 0(FALSE) に定義されています 10 IAR アセンブラリファレンスガイド

RX 用 IAR アセンブラの概要 シンボル SUBVERSION バージョン番号のバージョン文字を ASCII 文字として示す整数です (4.21C の C など ) TIME hh:mm:ss フォーマットで示す現在の時刻 ( 文字列 ) VER 表 9: 定義済シンボル ( 続き ) シンボル値をコードに含める 整数フォーマットのバージョン番号です たとえば バージョン 4.17 は 417 として返されます ( 数字 ) 複数のデータ定義ディレクティブで コードにシンボル値を含めることができます これらのディレクティブは 値を定義するか メモリを予約します コードにシンボル値を含めるには 適切なデータ定義ディレクティブでシンボルを使用します たとえば プログラムに表示されるようにアセンブリ時間を文字列として含めるには 次のように指定します name timeofassembly extern printstr rseg CODE:CODE data ; select data mode ; (required for big-endian) time dc8 TIME ; String representing the ; time of assembly. code ; select code mode ; (required for big-endian) mov.l #time,r1 ; Load address of time ; string in R1. bsr printstr ; Call string output routine. end 条件付きアセンブリ用のシンボルをテストする 値 アセンブリ時にシンボルをテストするには いずれかの条件付きアセンブリディレクティブを使用します これらのディレクティブを使用すると アセンブリ時にアセンブリプロセスを制御できます たとえば 古いアセンブラバージョンと新しいアセンブラバージョンのどちらを使用しているかに応じて別々のコードをアセンブルするには 次のようにします #if ( VER > 300) ; New assembler version ; ; #else ; Old assembler version ; 11

式 オペランド 演算子 ; #endif 詳細については 条件付きアセンブリディレクティブ (70 ページ ) を参照してください 絶対式および再配置可能式 式を構成しているオペランドに応じて 式は絶対または再配置可能のいずれかになります 絶対式とは 絶対シンボルまたは相殺し合う再配置可能シンボルのみを含む式のことです 再配置可能 segment にシンボルが含まれている式は segment のロケーションに依存しているため アセンブリ時に解決することはできません これらは再配置可能式と呼ばれます このような式は リンク時に IAR XLINK リンカによって評価され 解決されます 式には制限はありません 任意のセグメントのシンボルや任意のシンボルの組み合わせに対して 任意の演算子を使用できます たとえば プログラムで DATA および CODEsegment を以下のように定義できます name simpleexpressions rseg DATA:DATA extern size data ; select data mode ; (required for big-endian) first dc8 5 ; An absolute expression. dc8 first ; Examples of some legal dc8 first + 1 ; relocatable expressions. dc8 first + 8 * size end 注記 : アセンブリ時に 範囲チェックは行われません 範囲チェックはリンク時に行われ 値が長すぎる場合にはリンカエラーが発生します 式の制限 式は 一部のアセンブラディレクティブに適用される制限に従って分類できます 一例としては IF などの条件文で使用される式です このような条件文では アセンブリ時に式を評価する必要があるため 外部シンボルを含めることはできません 次の式制限は 適用される各ディレクトリの説明で参照されています 前方参照禁止 式で参照されるすべてのシンボルは既知である必要があり 前方参照は許可されません 12 IAR アセンブラリファレンスガイド

RX 用 IAR アセンブラの概要 外部参照禁止 式では外部参照は許可されません 絶対 式は絶対値に対して評価する必要があります 再配置可能値 (segment オフセット ) は許可されません 固定 式は固定である必要があります つまり 可変サイズの命令に依存させることはできません 可変サイズの命令とは オペランドの数値に応じてサイズが変動する可能性がある命令のことです リストファイルのフォーマットアセンブラリストファイルのフォーマットは次のとおりです ヘッダ ヘッダセクションには 製品のバージョン情報 ファイルの作成日時 使用されたオプションが含まれています ボディ リストのボディは 以下の情報フィールドで構成されています ソースファイル内の行番号 マクロで生成された行がリストされている場合 ソース行番号フィールドには.( ピリオド ) が含まれています アドレスフィールドは メモリ内のロケーションを示します これは segment の種類に応じて絶対にも相対にもできます 表記法は 16 進法です データフィールドは ソース行によって生成されたデータを示します 表記法は 16 進法です 解決されなかった値は...( ピリオド ) として表現されます ここで 2 つのピリオドが 1 バイトを示します これらの未解決値はリンクプロセス中に解決されます アセンブラソース行 概要 ファイルのフッタには 生成されたエラーと警告の概要が記述されています シンボルとクロスリファレンスの表 [ クロスリファレンスを含む ] オプションを指定する場合 または LSTXRF+ ディレクティブがソースファイルに含まれている場合 シンボルとクロスリファレンスの表が生成されます 13

プログラミングのヒント 表の各シンボルに対して 次の情報が記述されています 情報 説明 シンボル シンボルのユーザ定義名 モード ABS( 絶対 ) または REL( 相対 ) セグメント このシンボルが相対的に定義されている segment の名前 値 / オフセット 現在のモジュール内のシンボルの値 ( アドレス ) 現在のセグメン トパートの先頭に対して相対的です 表 10: シンボルとクロスリファレンスの表 プログラミングのヒント ここでは RX 用 IAR アセンブラのために効率的なコードを記述する方法についてのヒントを示します アセンブラおよび C/C++ ソースファイルの両方が含まれるプロジェクトについての情報は RX IAR C/C++ コンパイラリファレンスガイド を参照してください 特殊機能レジスタへのアクセス IAR システムの製品パッケージには RX デバイス用の専用ヘッダファイルがいくつか付属しています (\rx\inc ディクレトリ ) これらのヘッダファイルには プロセッサ固有の特殊機能レジスタ (SFR) と割込みベクタ番号が定義されています ヘッダファイルは RX 用 IAR C/C++ コンパイラでも 他の RX デバイスの新規ヘッダファイルを作成するためのテンプレートとして使用します ヘッダファイルにアセンブラ固有の追加が必要である場合 ファイルのアセンブラ固有の部分にこれらを簡単に追加できます #ifdef IAR_SYSTEMS_ASM ; Add your assembler-specific defines here. #endif C 形式のプリプロセッサディレクティブを使用する C 形式のプリプロセッサディレクティブは 他のアセンブラディレクティブの前に処理されます そのため マクロでプロプロセッサディレクティブを使用しないでください また これらをアセンブラ形式のコメントと混在させないでください コメントの詳細については アセンブラ制御ディレクティブ (92 ページ ) を参照してください 14 IAR アセンブラリファレンスガイド

アセンブラオプション この章では まずコマンドラインでオプションを設定する方法と アセンブラオプションの概要についてアルファベット順に説明します 続いて 各アセンブラオプションに関する詳細なリファレンス情報を提供します IAR Embedded Workbench IDE ユーザガイド では IAR Embedded Workbench IDE でのアセンブラオプションの設定方法を説明し 使用可能なオプションについてのリファレンス情報を提供しています コマンドラインアセンブラオプションの設定コマンドラインでアセンブラオプションを設定するには コマンドラインを使用して arx コマンドの後で ソースファイル名の前または後にこれらのオプションを指定します たとえば prog.s54 というソースファイルをアセンブルする場合は 以下のコマンドを使用して デバッグ情報を含むオブジェクトファイルを生成します arx prog --debug 一部のオプションではファイル名を指定できます オプション文字の後に スペースで区切って指定してください たとえば prog.lst というファイルのリストを生成するには 以下のように入力します arx prog -l prog.lst ほかに ファイル名以外の文字列を指定できるオプションもあります 文字列はオプション文字の後に指定しますが スペースは不要です たとえば 以下のようにシンボルを定義します arx prog -DDEBUG=1 通常 コマンドラインでのオプションの順序とソースファイル名の前後のどちらに入力するかは 重要ではありません ただし 例外が 1 つあります -I オプションを使用する場合には ディレクトリの検索はコマンドラインに指定した順序で行われます コマンドラインオプションの名前は 省略形または完全形 ( あるいはその両方 ) にできます オプション名の省略形は 1 文字で構成され パラメータは付けても付けなくても構いません 指定するには -r のようにダッシュを付けて入力します 15

コマンドラインアセンブラオプションの設定 オプション名の完全形は 複数の語をアンダースコアで連結した形で構成され パラメータが付くこともあります このフォーマットで指定する場合は --debug のようにダッシュを 2 個付けて入力します パラメータの指定 名前が省略形であるオプションにパラメータが必要である場合 オプションの直後に指定することも 次のコマンドライン引数として指定することもできます たとえば インクルードファイルのパス \usr\include を 次の 2 種類の方法で指定できます -I\usr\include または -I \usr\include 注 : ディレクトリの区切り文字として \ ではなく / を使用できます 最後のディレクトリ名の後にバックスラッシュを追加できますが 必須ではありません さらに 出力ファイルオプションにディレクトリ名をパラメータとして指定できます 出力ファイルにはデフォルト名と拡張子が付きます 名前が完全形であるオプションにパラメータが必要である場合 次のように 等号 (=) の直後に指定することも 次のコマンドライン引数として指定することもできます --diag_suppress=pe0001 または --diag_suppress Pe0001 複数の値が許容されるオプションは 繰り返し使用することも 値をコンマで区切って ( スペースなしで ) 指定することもできます 例えば 次のように指定します --diag_warning=be0001,be0002 現在のディレクトリは 以下のように ピリオド (.) で指定します arx prog -l. -( ダッシュ 1 つ ) で指定されたファイルは 標準入力または出力のどちらか適切な方です 注 : オプションでパラメータを指定できる場合 パラメータの先頭をダッシュ (-) にしてその後に別の文字を続けることはできません 代わりに プレフィックスとしてダッシュを 2 つ並べる (--) ことができます 以下の例では 標準出力にリストが生成されます arx prog -l --- 16 IAR アセンブラリファレンスガイド

アセンブラオプション アセンブラオプションの概要以下の表に コマンドラインで使用できるアセンブラオプションを示します コマンドラインオプション 説明 --case_insensitive 大文字 / 小文字が区別されないユーザシンボル です --code_model シンボル CODE_MODEL を定義します -D プリプロセッサシンボルを定義します --data_model シンボル DATA_MODEL を定義します --debug デバッグ情報を生成します --dependencies ファイル依存関係をリスト化します --diag_error これらの診断をエラーとして処理します --diag_remark これらの診断をリマークとして処理します --diag_suppress 診断を無効化します --diag_warning 診断を警告として処理します --diagnostics_tables すべての診断メッセージをリスト化します --dir_first 最初の列でディレクティブを許可します --double シンボル DOUBLE を定義します --enable_multibytes マルチバイト文字サポートを有効化します --endian シンボル BIG_ENDIAN および LITTLE_ENDIAN を定義します --error_limit アセンブラを停止させるエラー数を指定します -f コマンドラインを拡張します --header_context 参照されるすべてのソースファイルをリストし ます -I ヘッダファイルの検索パスを追加します -l リストファイルを生成します -M マクロの引用符 --mnem_first 最初の列でニーモニックを許可します --no_path_in_file_macros シンボル FILE および BASE_FILE のリターン値からパスを削除します --no_warnings すべての警告を無効化します --no_wrap_diagnostics 診断メッセージのラッピングを無効化します -o オブジェクトファイル名を設定します 表 11: アセンブラオプションの概要 17

アセンブラオプションの概要 コマンドラインオプション --only_stdout --output --preinclude 標準出力のみを使用します オブジェクトファイル名を設定します ソースファイルを読み込む前にインクルードファイルをインクルードします --preprocess ファイルへのプリプロセッサ出力 -r デバッガ情報を生成します --remarks リマークを有効化します --silent サイレント処理を設定します --warnings_affect_exit_code 警告が終了コードに影響します --warnings_are_errors すべての警告をエラーとして処理します 表 11: アセンブラオプションの概要 ( 続き ) 説明 アセンブラオプションの概要以下のセクションでは 各アセンブラオプションに関する詳細なリファレンス情報を提供します [ 追加オプション ] ページを使用して特定のコマンドラインオプションを指定する場合 オプションの競合 オプションの重複 不適切なオプションの使用といった整合性問題のインスタントチェックは実行されません --case_insensitive --case_insensitive このオプションは ユーザシンボルで大文字 / 小文字を区別する場合に使用します デフォルトでは 大文字と小文字が区別されます つまり LABEL と label は異なるシンボルを示します --case_insensitive を使用して 大文字と小文字の区別を無効にすることができます この場合 LABEL と label は同一のシンボルを示します また アセンブラディレクティブ CASEON と CASEOFF を使用してユーザ定義シンボルの大文字と小文字の区別を制御することもできます 詳細については アセンブラ制御ディレクティブ (92 ページ ) を参照してください 注 : --case_insensitive オプションは プリプロセッサシンボルに影響を与えません プリプロセッサシンボルでは IAR Embedded Workbench IDE とコマンドラインのどちらで定義されたのかを問わず 常に大文字と小文字が区別されます プリプロセッサシンボルの定義と定義取消し (86 ページ ) を参照してください [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ 言語 ]>[ ユーザシンボルの大文字 / 小文字を区別する ] 18 IAR アセンブラリファレンスガイド

アセンブラオプション --code_model --code_model={far f huge h} このオプションは シンボル CODE_MODEL の定義に使用します 定義済シンボル (10 ページ ) を参照してください パラメータ far( デフォルト ) huge 定義済シンボル CODE_MODEL を FAR に設定します 定義済シンボル CODE_MODEL を HUGE に設定します [ プロジェクト ]>[ オプション ]>[ 一般オプション ]>[ ターゲット ]>[ コードモデル ] -D -Dsymbol[=value] プリプロセッサで使用されるシンボルを 名前 symbol 値 value で定義します 値を指定しない場合 1 が使用されます -D オプションを使用すると ソースファイルではなくコマンドラインで値または選択を指定できます 例 たとえば シンボル TESTVER が定義されているかどうかに応じてプログラムのテストバージョンと製品バージョンのいずれかを生成するように ソースコードを記述するとします この場合 以下のようなセクションを記述します #ifdef TESTVER... ; additional code lines for test version only #endif 次に コマンドラインで必要となるバージョンを次のように選択します 製品バージョン : arx prog テストバージョン : arx prog -DTESTVER また 頻繁に変更する必要のある変数をソースで使用するとします この場合 ソースではこの変数を定義せず 以下のように -D を使用してコマンドラインで値を指定することができます arx prog -DFRAMERATE=3 [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ プリプロセッサ ]>[ シンボル定義 ] --data_model --data_model={near n far f huge h} このオプションは シンボル DATA_MODEL の定義に使用します 定義済シンボル (10 ページ ) を参照してください 19

アセンブラオプションの概要 パラメータ near far( デフォルト ) huge 定義済シンボル DATA_MODEL を NEAR に設定します定義済シンボル DATA_MODEL を FAR に設定します定義済シンボル DATA_MODEL を HUGE に設定します [ プロジェクト ]>[ オプション ]>[ 一般オプション ]>[ ターゲット ]>[ データモデル ] --debug, -r --debug -r --debug オプションを使用して IAR C-SPY デバッガなどのシンボリックデバッガをプログラムで使用するためのデバッグ情報をアセンブラに生成させることができます オブジェクトファイルのサイズとリンク時間を削減するために アセンブラはデフォルトではデバッグ情報を生成しません [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ 出力 ]>[ デバッグ情報の生成 ] --dependencies --dependencies=[i][m] {filename directory} このオプションを使用すると アセンブラで開かれる各ソースファイルがファイルに記述されます 以下の修飾子があります オプション修飾子説明 i ファイルの名前のみを含める ( デフォルト ) m makefile スタイル 表 12: 依存関係のリストの生成 (--dependencies) filename を指定すると アセンブラは出力をそのファイルに保存します directory を指定した場合 アセンブラは出力をそのディレクトリ内のファイル ( 拡張子 i) に保存します ファイル名は アセンブルしたソースファイルの名前と同じになります ただし -o オプションで別の名前を指定した場合は その名前が使用されます 作業ディレクトリを指定するには directory をピリオド (.) に置換します 20 IAR アセンブラリファレンスガイド

アセンブラオプション --dependencies や --dependencies=i を使用すると 開かれている各ソースファイルの名前とフルパス ( ある場合 ) が独立した行に出力されます 次に例を示します c:\iar\product\include\stdio.h d:\myproject\include\foo.h --dependencies=m を使用した場合は makefile スタイルで出力されます 各ソースファイルについて makefile の依存関係規則を含む行が出力されます 各行は オブジェクトファイル名 コロン 空白文字 ソースファイル名で構成されます 次に例を示します foo.r54: c:\iar\product\include\stdio.h foo.r54: d:\myproject\include\foo.h 例 1 ファイル listing.i にファイルの依存関係のリストを生成するには 以下のように記述します arx prog --dependencies=i listing 例 2 mypath というディレクトリ内の listing.i というファイルにファイルの依存関係のリストを生成するには 以下のように記述します arx prog --dependencies \mypath\listing 注 : ディレクトリの区切り文字として \ と / の両方を使用できます 例 3 gmake での --dependencies の使用例 : 1 以下のように ファイルのアセンブル規則を設定します %.r54 : %.c $(ASM) $(ASMFLAGS) $< --dependencies=m $*.d すなわち このコマンドを使用すると オブジェクトファイルの生成に加えて makefile スタイルで依存関係ファイルが生成されます ( この例では 拡張子に.d を使用 ) 2 以下のようにして すべての依存関係ファイルを makefile に含めます -include $(sources:.c=.d) - があるため.d ファイルがまだ存在しない最初の時点でも機能します このオプションは IAR Embedded Workbench IDE では使用できません 21

アセンブラオプションの概要 --diag_error --diag_error=tag,tag,... このオプションは 診断メッセージをエラーとして分類する場合に使用します エラーは アセンブラ言語の規則違反のうち オブジェクトコードが生成されず 終了コードが 0 にならないものを示します 以下の例では As001 の警告がエラーとして分類されます --diag_error=as001 [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ 診断 ]>[ エラーとして処理 ] --diag_remark --diag_remark=tag,tag,... このオプションは 診断メッセージをリマークとして分類する場合に使用します リマークは 最も軽微な診断メッセージです 生成されたコードに異常動作の原因となる可能性があるソースコード構造が存在することを示します 以下の例では As001 の警告がリマークとして分類されます --diag_remark=as001 [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ 診断 ]>[ リマークとして処理 ] --diag_suppress --diag_suppress=tag,tag,... このオプションは 診断メッセージを無効にする場合に使用します 以下の例では As001 と As002 の警告が無効にされます --diag_suppress=as001,as002 [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ 診断 ]>[ 診断を無効化 ] --diag_warning --diag_warning=tag,tag,... このオプションは 診断メッセージを警告として分類する場合に使用します 警告は 問題はあるが アセンブリの途中終了の原因にはならないエラーや脱落を示します 以下の例では As001 の警告がリマークとして分類されます --diag_warning=as028 [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ 診断 ]>[ ワーニングとして処理 ] 22 IAR アセンブラリファレンスガイド

アセンブラオプション --diagnostics_tables --diagnostics_tables {filename directory} このオプションは すべての診断メッセージを指定ファイルに保存する場合に使用します これは #pragma ディレクティブを使用して診断メッセージの重要度を無効化または変更したが その理由を記述し忘れた場合などに非常に便利です このオプションは 他のオプションと併用できません filename を指定すると アセンブラはそのファイルに出力を保存します directory を指定した場合 アセンブラは出力をそのディレクトリ内のファイル (diagnostics_tables.txt という名前 ) に保存します 作業ディレクトリを指定するには directory をピリオド (.) に置換します 例 1 すべての診断メッセージを diag.txt というファイルに保存する場合 以下のように指定します --diagnostics_tables diag 例 2 作業ディレクトリ内の diagnostics_tables.txt というファイルにテーブルを生成する場合 以下のように指定します --diagnostics_tables. ディレクトリの区切り文字として \ と / の両方を使用できます このオプションは IAR Embedded Workbench IDE では使用できません --dir_first --dir_first アセンブラのデフォルト動作では 最初の列で始まるすべての識別子はラベルとして処理されます このオプションは 最初の列で開始するディレクティブ名 ( 最後のコロンを除く ) をディレクティブとして認識させる場合に使用します [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ 言語 ]>[ 最初の列でディレクティブを許可 ] --double --double={32 64} このオプションは シンボル DOUBLE の定義に使用します 定義済シンボル (10 ページ ) を参照してください 23

アセンブラオプションの概要 パラメータ 32( デフォルト ) 定義済シンボル DOUBLE を 32 に設定します 64 定義済シンボル DOUBLE を 64 に設定します [ プロジェクト ]>[ オプション ]>[ 一般オプション ]>[ ターゲット ]>[double 型のサイズ ] --enable_multibytes --enable_multibytes デフォルトでは マルチバイト文字をアセンブラのソースコードで使用することはできません このオプションを有効にすると ソースコード内のマルチバイト文字は ホストコンピュータのデフォルトのマルチバイト文字サポート設定に従って解釈されます マルチバイト文字は コメント 文字列定数 文字定数で使用できます これらはそのまま生成コードに移動します [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ 言語 ]>[ マルチバイト文字サポートを有効にする ] --endian --endian={b big l little} シンボル BIG_ENDIAN および LITTLE_ENDIAN を定義します 定義済シンボル (10 ページ ) を参照してください パラメータ b big l little ( デフォルト ) 定義済シンボル BIG_ENDIAN を 1 に LITTLE_ENDIAN を 0 に設定します定義済シンボル BIG_ENDIAN を 0 に LITTLE_ENDIAN を 1 に設定します [ プロジェクト ]>[ オプション ]>[ 一般オプション ]>[ ターゲット ]>[ バイトオーダ ] --error_limit --error_limit=n --error_limit オプションは アセンブラを停止させるエラー数を指定するために使用しますデフォルトでは エラー数の上限は 100 です n は正の数にする必要があります 0 は無制限を示します このオプションは IAR Embedded Workbench IDE では使用できません 24 IAR アセンブラリファレンスガイド

アセンブラオプション -f -f filename 指定されたファイルから読み込まれたテキストでコマンドラインを拡張します オプション自体とファイル名の間にはスペースが必要です -f オプションは オプションの数が多く コマンドラインに指定するよりファイルに配置する方が簡単である場合に特に便利です 例 ファイル extend.xcl からオプションを取得してアセンブラを実行するには 以下のように指定します arx prog -f extend.xcl このオプションを設定するには 以下のように指定します [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ 追加オプション ] --header_context --header_context 問題の原因を特定するために どのソースファイルからどのヘッダファイルがインクルードされたかの確認が必要になる場合があります このオプションは 診断メッセージごとに ソースでの問題の位置に加えて その時点でのインクルードスタック全体を表示する場合に使用します このオプションは IAR Embedded Workbench IDE では使用できません -I -Ipath このオプションは #include ファイル検索プレフィックス path を追加することにより プリプロセッサで使用するパスを指定するために使用します デフォルトでは アセンブラは現在の作業ディレクトリか ARX_INC 環境変数で指定されたパスで #include ファイルを検索します -I オプションは 現在の作業ディレクトリでファイルが見つからない場合に検索するディレクトリの名前をアセンブラに指定します 例 以下に例を示します -Ic:\global\ -Ic:\thisproj\headers\ というオプションを使用し #include "asmlib.hdr" とソースに記述すると アセンブラはまず現在のディレクトリ内を検索してから ディレクトリ c:\global\ を検索し 続いてディレクトリ C:\thisproj\headers\ を検索します 最後に アセンブラは ARX_INC 環境変 25

アセンブラオプションの概要 数に指定されたディレクトリを検索します ( ただし この変数が設定されている場合 ) [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ プリプロセッサ ]>[ 追加インクルードディレクトリ ] -l -l[a][d][e][m][o][x][n] {filename directory} デフォルトでは アセンブラはリストを生成しません このオプションは リストをファイルに生成する場合に使用します 以下のタイプの情報を 1 つまたは複数インクルードすることができます コマンドラインオプション -la -ld -le -lm -lo -lx -ln filename を指定すると アセンブラはそのファイルに出力を保存します directory を指定した場合 アセンブラは出力をそのディレクトリ内のファイル ( 拡張子 lst) に保存します ファイル名は アセンブルしたソースファイルの名前と同じになります ただし -o オプションで別の名前を指定した場合は その名前が使用されます 作業ディレクトリを指定するには directory をピリオド (.) に置換します 例 1 ファイル list.lst にリストを生成するには 以下のように記述します arx sourcefile -l list 例 2 説明 アセンブルされた行のみ LSTOUT ディレクティブは リストファイルに行を記述するかどうかを制御します -ld を使用して この開始値をオフに切り替えることができます マクロ拡張なし マクロ定義 複数行コード 表 13: 条件付きリストオプション (-l) クロスリファレンスをインクルードする 診断をインクルードしない mysource.s54 というファイルをアセンブルし 作業ディレクトリ内のファイル mysource.lst にリストを生成するには 以下のように指定します arx mysource -l. 26 IAR アセンブラリファレンスガイド

アセンブラオプション 注 : ディレクトリの区切り文字として \ と / の両方を使用できます 関連オプションを設定するには 以下のように選択します [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ リスト ] -M -Mab このオプションは 各マクロ引数の左側と右側の引用符として使用する文字 ( それぞれ a と b) を設定します デフォルトでは これらの引用符は < と > です -M オプションを使用して 他の表記法に合せて引用符を変更したり マクロ引数に < や > 自体を使用したりできます 例 以下のオプションを使用するとします -M[] ソースには以下のように記述します print [>] これにより > を引数として使用してマクロ print を呼び出すことができます 注記 : ホスト環境によっては 以下のようにマクロの引用符付きで引用符を使用する必要がある場合もあります arx filename -M<> [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ 言語 ]>[ マクロの引用符 ] --mnem_first --mnem_first アセンブラのデフォルト動作では 最初の列で始まるすべての識別子はラベルとして処理されます このオプションは 最初の列で開始するニーモニック名 ( 最後のコロンを除く ) をニーモニックとして認識させる場合に使用します [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ 言語 ]>[ 最初の列でニーモニックを許可 ] --no_path_in_file_macros --no_path_in_file_macros このオプションは 定義済プリプロセッサシンボル FILE および BASE_FILE のリターン値からパスを除外する場合に使用します このオプションは IAR Embedded Workbench IDE では使用できません 27

アセンブラオプションの概要 --no_warnings --no_warnings デフォルトでは アセンブラ標準の警告メッセージを出力します このオプションは すべての警告を無効にする場合に使用します このオプションは IAR Embedded Workbench IDE では使用できません --no_wrap_diagnostics --no_wrap_diagnostics デフォルトでは アセンブラ診断メッセージ中の長い行は 読みやすくするため複数行に分割されます このオプションは 診断メッセージのラインラッピングを無効にする場合に使用します このオプションは IAR Embedded Workbench IDE では使用できません -o, --output -o {filename path} --output {filename path} デフォルトでは アセンブラで生成されたオブジェクトコード出力は ソースファイルと同じ名前で 拡張子が o のファイルに配置されます このオプションは オブジェクトコード出力用に別の出力ファイル名を明示的に指定する場合に使用します このオプションにより オブジェクトファイルに使用するファイル名が設定されます 構文について詳しくは コマンドラインアセンブラオプションの設定 (15 ページ ) を参照してください [ プロジェクト ]>[ オプション ]>[ 一般オプション ]>[ 出力 ]>[ 出力ディレクトリ ]> [ オブジェクトファイル ] --only_stdout --only_stdout アセンブラは 通常は stderr に転送されるメッセージに対して stdout も使用します このオプションは IAR Embedded Workbench IDE では使用できません --output, -o --output {filename path} -o {filename path} デフォルトでは アセンブラで生成されたオブジェクトコード出力は ソースファイルと同じ名前で 拡張子が o のファイルに配置されます このオプションは オブジェクトコード出力用に別の出力ファイル名を明示的に指定する場合に使用します このオプションにより オブジェクトファイルに使用するファイル名が設定されます 28 IAR アセンブラリファレンスガイド

アセンブラオプション 構文について詳しくは コマンドラインアセンブラオプションの設定 (15 ページ ) を参照してください [ プロジェクト ]>[ オプション ]>[ 一般オプション ]>[ 出力 ]>[ 出力ディレクトリ ]> [ オブジェクトファイル ] --preinclude --preinclude includefile このオプションは アセンブラでソースファイルのリードを開始する前に 指定のインクルードファイルをインクルードする場合に使用します これは アプリケーション全体のソースコードで変更を行う場合 ( 新しいシンボルを定義する場合など ) に便利です このオプションを設定するには 以下のように指定します [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ 追加オプション ] --preprocess --preprocess=[c][n][l] {filename directory} このオプションは プリプロセッサ出力を指定ファイルに転送する場合に使用します 以下の表に 使用可能なプリプロセッサ識別子のマッピングを示します コマンドラインオプション --preprocess=c --preprocess=n --preprocess=l 説明 プリプロセッサによって削除される C および C++ 形式のコメントを保持します アセンブラ形式のコメントは常に保持されます プリプロセスのみ #line ディレクティブを生成 表 14: ファイルへのプリプロセッサ出力の転送 (--preprocess) filename を指定すると アセンブラはそのファイルに出力を保存します directory を指定した場合 アセンブラは出力をそのディレクトリ内のファイル ( 拡張子 i) に保存します ファイル名は アセンブルしたソースファイルの名前と同じになります ただし -o オプションで別の名前を指定した場合は その名前が使用されます 作業ディレクトリを指定するには directory をピリオド (.) に置換します 例 1 保持されたコメント付きでアセンブラ出力をファイル output.i に保存するには 以下のように指定します arx sourcefile --preprocess=c output 29

アセンブラオプションの概要 例 2 mysource.s54 というファイルをアセンブルし 作業ディレクトリ内のファイル mysource.i に #line ディレクティブでアセンブラ出力を保存するには 以下のように指定します arx mysource --preprocess=l. 注 : ディレクトリの区切り文字として \ と / の両方を使用できます [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ プリプロセッサ ]>[ ファイルへのプリプロセッサ出力 ] -r, --debug --debug -r --debug オプションを使用して IAR C-SPY デバッガなどのシンボリックデバッガをプログラムで使用するためのデバッグ情報をアセンブラに生成させることができます オブジェクトファイルのサイズとリンク時間を削減するために アセンブラはデフォルトではデバッグ情報を生成しません [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ 出力 ]>[ デバッグ情報の生成 ] --remarks --remarks このオプションは アセンブラにリマークを生成させる場合に使用します リマークとは 最も軽微な診断メッセージであり 生成されたコードに異常動作の原因となる可能性があるソースコード構造が存在することを示します デフォルトでは リマークは生成されません 診断メッセージの詳細については 重要度 (113 ページ ) を参照してください [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ 診断 ]>[ リマークの有効化 ] -silent --silent --silent オプションを指定すると アセンブラは標準出力ストリームにメッセージを送信せずに処理を実行します デフォルトでは さまざまな重要ではないメッセージが標準出力ストリームから送信されます --silent オプションを使用して これらのメッセージ送信を抑止できます エラーおよび警告メッセージはエラー出力ストリームに送信されるため この設定にかかわらず表示されます このオプションは IAR Embedded Workbench IDE では使用できません 30 IAR アセンブラリファレンスガイド

アセンブラオプション --warnings_affect_exit_code --warnings_affect_exit_code デフォルトでは ゼロ以外の終了コードが生成されるのはエラーが発生した場合のみで 警告は終了コードには影響しません このオプションを使用すると 警告が発生した場合にゼロ以外の終了コードが生成されます このオプションは IAR Embedded Workbench IDE では使用できません --warnings_are_errors --warnings_are_errors このオプションは アセンブラで警告をエラーとして処理する場合に使用します アセンブラがエラーを検出した場合 オブジェクトコードは生成されません 一部の警告を保持するには このオプションをオプション --diag_warning と組み合わせて使用します まず すべての警告がエラーとして処理されるようにしてから 以下のようにして警告として処理すべきものを再設定します --diag_warning=as001 その他の情報については --diag_warning (22 ページ ) を参照してください [ プロジェクト ]>[ オプション ]>[ アセンブラ ]>[ 診断 ]>[ すべてのワーニングをエラーとして処理 ] 31

アセンブラオプションの概要 32 IAR アセンブラリファレンスガイド

アセンブラ演算子 この章では 最初にアセンブラ演算子の優先順位について説明してから 各演算子について優先順に簡単に説明します 最後に 各演算子のリファレンス情報をアルファベット順に提供します 演算子の優先順位 それぞれの演算子には優先順位が設定され 演算子とオペランドが評価される順番はそれによって決定されます 優先順位の範囲は 1( 最高の優先順位であり 最初に評価される ) から 15( 最低の優先順位であり 最後に評価される ) までです 以下の規則により 式がどのように評価されるかが決まります 優先順位が一番高い演算子が最初に評価されます 続いて優先順位が 2 番目の演算子から順に評価され 最後に優先順位が一番低い演算子が評価されます 優先順位が同じ演算子は 式の中で左から順番に評価されます 括弧 ( と ) を 演算子およびオペランドのグループ化と 式の評価順序の変更のために使用できます たとえば 以下の式の評価結果は 1 です 7/(1+(2*3)) 注 : RX 用 IAR アセンブラでの優先順位は 該当する場合 ANSI C++ 規格での演算子の優先順位に従っています 33

アセンブラ演算子の概要 アセンブラ演算子の概要 以下の表は 演算子を優先順にまとめたものです 同義語がある場合は 演算子名の後ろに括弧で囲んで示しています 括弧演算子 1 () 括弧 関数演算子 2 BYTE1 BYTE2 BYTE3 BYTE4 DATE HIGH HWRD LOW LWRD SFB SFE SIZEOF UPPER 1 バイト目 2 バイト目 3 バイト目 4 バイト目現在の日時上位バイト上位ワード下位バイト下位ワードセグメント開始セグメント終了セグメントのサイズ 3 バイト目 単項演算子 3 + 単項プラス BINNOT [~] ビット単位の NOT NOT [!] 論理 NOT - 単項マイナス 乗算型算術演算子 4 * 乗算 34 IAR アセンブラリファレンスガイド

アセンブラ演算子 / 除算 MOD [%] 剰余 加算型算術演算子 5 + 加算 減算 シフト演算子 6 SHL [<<] SHR [>>] 論理左シフト 論理右シフト 比較演算子 7 GE [>=] GT [>] LE [<=] LT [<] UGT ULT 以上より大きい以下より小さい符号なしの より大きい 符号なしの より小さい 等価演算子 8 EQ [=] [==] NE [<>] [!=] 等しい 等しくない 論理演算子 9-14 BINAND [&] BINXOR [^] BINOR [ ] AND [&&] XOR ビット単位の AND(9) ビット単位の排他 OR(10) ビット単位の OR(11) 論理 AND(12) 論理排他 OR(13) 35

アセンブラ演算子の説明 OR [ ] 論理 OR(14) 条件演算子 15?: 条件演算子 アセンブラ演算子の説明 以下のセクションでは 各アセンブラ演算子について詳細に説明します 括弧内の数字は 演算子の優先順位を示します () 括弧 (1) ( と ) は 独立して評価する式をグループ化し デフォルトの優先順位より優先されます 例 1+2*3 7 (1+2)*3 9 * 乗算 (4) * は 2 つのオペランドの積を計算します オペランドは符号付きの 32 ビット整数として処理され 結果も符号付きの 32 ビット整数となります 例 2*2 4-2*2-4 + 単項プラス (3) 単項プラス演算子 例 +3 3 3*+2 6 36 IAR アセンブラリファレンスガイド

アセンブラ演算子 + 加算 (5) 加算演算子 + は 左右にある 2 つのオペランドの合計を計算します オペランドは符号付きの 32 ビット整数として処理され 結果も符号付きの 32 ビット整数となります 例 92+19 111-2+2 0-2+-2-4 - 単項マイナス (3) 単項マイナス演算子は オペランドを算術的に論理否定します オペランドは符号付きの 32 ビット整数として解釈され 演算子の結果はその整数の 2 の補数の論理否定となります 例 -3-3 3*-2-6 4--5 9 - 減算 (5) 減算演算子は 左のオペランドから右のオペランドを引いた差異を計算します オペランドは符号付きの 32 ビット整数として処理され 結果も符号付きの 32 ビット整数となります 例 92-19 73-2-2-4 -2--2 0 / 除算 (4) / は 左のオペランドを右のオペランドで割って整数化した商を計算します オペランドは符号付きの 32 ビット整数として処理され 結果も符号付きの 32 ビット整数となります 例 9/2 4-12/3-4 9/2*6 24 37

アセンブラ演算子の説明?: 条件演算子 (15) この演算子の結果は condition の評価結果が真である場合は最初の expr に condition の評価結果が偽の場合は 2 つ目の expr になります 注 : 疑問符とその後のラベルは スペースまたはタブで区切ります 区切らないと? はラベルの 1 文字目と見なされます 構文 condition? expr : expr 例 5? 6 : 7 6 0? 6 : 7 7 AND [&&] 論理 AND(12) AND は 2 つの整数オペランドの論理 AND を計算するために使用します 両方のオペランドがゼロ以外である場合 計算結果は 1( 真 ) となり それ以外の場合は 0( 偽 ) となります 例 1010B AND 0011B 1 1010B AND 0101B 1 1010B AND 0000B 0 BINAND [&] ビット単位の AND(9) BINAND は 整数オペランドのビット単位の AND を計算するために使用します 32 ビットの結果の各ビットは オペランドの該当するビットの論理 AND です 例 1010B BINAND 0011B 0010B 1010B BINAND 0101B 0000B 1010B BINAND 0000B 0000B BINNOT [~] ビット単位の NOT(3) BINNOT は オペランドのビット単位の NOT を計算するために使用します 32 ビットの結果の各ビットは オペランドの該当するビットの補数です 38 IAR アセンブラリファレンスガイド

アセンブラ演算子 例 BINNOT 1010B 11111111111111111111111111110101B BINOR [ ] ビット単位の OR(11) BINOR は オペランドのビット単位の OR を計算するために使用します 32 ビットの結果の各ビットは オペランドの該当するビットの包含的 OR です 例 1010B BINOR 0101B 1111B 1010B BINOR 0000B 1010B BINXOR [^] ビット単位の排他 OR(10) BINXOR は オペランドのビット単位の XOR を計算するために使用します 32 ビットの結果の各ビットは オペランドの該当するビットの排他的 OR です 例 1010B BINXOR 0101B 1111B 1010B BINXOR 0011B 1001B BYTE1 1 バイト目 (2) BYTE1 は 符号なし 32 ビット整数値として解釈される単一のオペランドを取得します この結果は オペランドの下位バイト ( ビット 7 ~ 0) です 例 BYTE1 0x12345678 0x78 BYTE2 2 バイト目 (2) BYTE2 は 符号なし 32 ビット整数値として解釈される単一のオペランドを取得します この結果は オペランドの中下位バイト ( ビット 15 ~ 8) です 例 BYTE2 0x12345678 0x56 39

アセンブラ演算子の説明 BYTE3 3 バイト目 (2) BYTE3 は 符号なし 32 ビット整数値として解釈される単一のオペランドを取得します この結果は オペランドの中上位バイト ( ビット 23 ~ 16) です 例 BYTE3 0x12345678 0x34 BYTE4 4 バイト目 (2) BYTE4 は 符号なし 32 ビット整数値として解釈される単一のオペランドを取得します この結果は オペランドの上位バイト ( ビット 31 ~ 24) です 例 BYTE4 0x12345678 0x12 DATE 現在の日時 (2) DATE は 現在のアセンブリが開始した日時を指定するために使用します DATE 演算子は絶対引数 ( 式 ) をとり 以下を返します DATE 1 現在の秒 (0 ~ 59) DATE 2 現在の分 (0 ~ 59) DATE 3 現在の時間 (0 ~ 23) DATE 4 現在の日付 (1 ~ 31) DATE 5 現在の月 (1 ~ 12) DATE 6 現在の年 MOD 100(1998 98 2000 00 2002 02) 例 アセンブリ日時は以下のようにアセンブルします today: DC8 DATE 5, DATE 4, DATE 3 EQ [=] [==] 等しい (8) = は 2 つの演算子の値が等しい場合に 1( 真 ) となり 等しくない場合は 0( 偽 ) となります 40 IAR アセンブラリファレンスガイド

アセンブラ演算子 例 1 = 2 0 2 == 2 1 'ABC' = 'ABCD' 0 GE [>=] 以上 (7) >= は 左のオペランドの数値が右のオペランドと等しいか それより大きい場合に 1( 真 ) となり それ以外の場合は 0( 偽 ) となります 例 1 >= 2 0 2 >= 1 1 1 >= 1 1 GT [>] より大きい (7) > は 左のオペランドの数値が右のオペランドより大きい場合に 1( 真 ) となり それ以外の場合は 0( 偽 ) となります 例 -1 > 1 0 2 > 1 1 1 > 1 0 HIGH 上位バイト (2) HIGH は 符号なし 16 ビット整数値として解釈される 右側にある単一のオペランドを取得します 結果は そのオペランドの上位オーダバイトの符号なし 8 ビット整数値です 例 HIGH 0xABCD 0xAB HWRD 上位ワード (2) HWRD は 符号なし 32 ビット整数値として解釈される単一のオペランドを取得します この結果は オペランドの上位ワード ( ビット 31 ~ 16) です 41

アセンブラ演算子の説明 例 HWRD 0x12345678 0x1234 LE [<=] 以下 (7) <= は 左のオペランドの数値が右のオペランドより大きいか等しい場合に 1( 真 ) となり それ以外の場合は 0( 偽 ) となります 例 1 <= 2 1 2 <= 1 0 1 <= 1 1 LOW 下位バイト (2) LOW は 符号なし 32 ビット整数値として解釈される単一のオペランドを取得します 結果は そのオペランドの下位オーダバイトの符号なし 8 ビット整数値です 例 LOW 0xABCD 0xCD LT [<] より小さい (7) < は 左のオペランドの数値が右のオペランドより小さい場合に 1( 真 ) となり それ以外の場合は 0( 偽 ) となります 例 -1 < 2 1 2 < 1 0 2 < 2 0 LWRD 下位ワード (2) LWRD は 符号なし 32 ビット整数値として解釈される単一のオペランドを取得します この結果は オペランドの下位ワード ( ビット 15 ~ 0) です 例 LWRD 0x12345678 0x5678 42 IAR アセンブラリファレンスガイド

アセンブラ演算子 MOD [%] 剰余 (4) MOD は 左のオペランドを右のオペランドで整数除算した余りを計算します オペランドは符号付きの 32 ビット整数として処理され 結果も符号付きの 32 ビット整数となります X MOD Y は 整数除算を使用した X-Y*(X/Y) に等しくなります 例 2 MOD 2 0 12 MOD 7 5 3 MOD 2 1 NE [<>] [!=] 等しくない (8) <> は 2 つの演算子の値が等しい場合に 1( 偽 ) となり 等しくない場合は 0( 真 ) となります 例 1 <> 2 1 2 <> 2 0 'A' <> 'B' 1 NOT [!] 論理 NOT(3) NOT は引数の否定に使用します 例 NOT 0101B 0 NOT 0000B 1 OR [ ] 論理 OR(14) OR は 2 つの整数オペランドの論理 OR を計算するために使用します 例 1010B OR 0000B 1 0000B OR 0000B 0 43

アセンブラ演算子の説明 SFB セグメント開始 (2) SFB は 右側にある単一のオペランドを受け入れます オペランドは再配置可能な segment である必要があります この演算子の評価結果は segment の最初のバイトのアドレスです この評価はリンク時に行われます 構文 SFB(segment [{+ -}offset]) パラメータ segment offset 再配置可能 segment の名前 SFB の使用前に定義する必要があります 開始アドレスからの任意指定オフセット offset が省略されている場合 括弧は任意です 例 name segmentbegin rseg MYCODE:CODE ; Forward declaration of MYCODE. rseg SEGTAB:CONST data start dc32 sfb(mycode) end このコードがその他多くのモジュールとリンクされている場合でも start は segment の最初のバイトのアドレスに設定されます SFE セグメント終了 (2) SFE は 右側にある単一のオペランドを受け入れます オペランドは再配置可能な segment である必要があります このオペレータの評価結果は segment の開始アドレスと segment のサイズです この評価はリンク時に行われます 構文 SFE (segment [{+ -} offset]) パラメータ segment offset 再配置可能 segment の名前 SFE の使用前に定義する必要があります 開始アドレスからの任意指定オフセット offset が省略されている場合 括弧は任意です 44 IAR アセンブラリファレンスガイド

アセンブラ演算子 例 NAME demo RSEG segtab:const DATA end: DC16 SFE(mycode) このコードがその他多くのモジュールとリンクされている場合でも end は segment の後の最初のバイトのアドレスに設定されます (mycode) segment MY_SEGMENT のサイズは 次のようにして計算できます SFE(MY_SEGMENT)-SFB(MY_SEGMENT) SHL [<<] 論理左シフト (6) SHL は 常に符号なしとして取り扱われる左オペランドを右へシフトするために使用します シフト対象のビット数は 右オペランドで指定し 0 ~ 32 の整数値として解釈されます 例 00011100B SHL 3 11100000B 00000111111111111B SHL 5 11111111111100000B 14 SHL 1 28 SHR [>>] 論理右シフト (6) SHR は 常に符号なしとして取り扱われる左オペランドを右へシフトするために使用します シフト対象のビット数は 右オペランドで指定し 0 ~ 32 の整数値として解釈されます 例 01110000B SHR 3 00001110B 1111111111111111B SHR 20 0 14 SHR 1 7 SIZEOF セグメントサイズ (2) SIZEOF は引数で指定された再配置可能 segment の SFE-SFB 値を生成します すなわち segment のバイト数が計算されます この計算は モジュール同士がリンクされると行われます 構文 SIZEOF (segment) 45

アセンブラ演算子の説明 パラメータ segment 再配置可能 segment の名前 SIZEOF の使用前に定義する必要があります 例 このコードは size の値を segment MYCODE のサイズに設定します module table rseg MYCODE:CODE ; Forward declaration of MYCODE. rseg SEGTAB:CONST data size dc32 sizeof(mycode) endmod module application rseg MYCODE:CODE code nop end ; Placeholder for application. UGT 符号なしの より大きい (7) UGT は 左のオペランドの数値が右のオペランドより大きい場合に 1( 真 ) となり それ以外の場合は 0( 偽 ) となります この演算では オペランドを符号なしの値として取り扱います 例 2 UGT 1 1-1 UGT 1 1 ULT 符号なしの より小さい (7) ULT は 左のオペランドの数値が右のオペランドより小さい場合に 1( 真 ) となり それ以外の場合は 0( 偽 ) となります この演算では オペランドを符号なしの値として取り扱います 例 1 ULT 2 1-1 ULT 2 0 46 IAR アセンブラリファレンスガイド

アセンブラ演算子 UPPER 3 バイト目 (2) UPPER は 符号なし 32 ビット整数値として解釈される単一のオペランドを取得します この結果は オペランドの中上位バイト ( ビット 23 ~ 16) です 例 UPPER 0x12345678 0x34 XOR 論理排他 OR(13) XOR は 左右いずれかのオペランドがゼロ以外である場合に 1( 真 ) となり 両方のオペランドがゼロまたはゼロ以外である場合に 0( 偽 ) となります XOR は 2 つのオペランドの論理 XOR を計算するために使用します 例 0101B XOR 1010B 0 0101B XOR 0000B 1 47

アセンブラ演算子の説明 48 IAR アセンブラリファレンスガイド

アセンブラディレクティブ この章では アセンブラディレクティブについてアルファベット順に簡単に説明し ディレクティブの各カテゴリの詳細なリファレンス情報を提供します アセンブラディレクティブの概要アセンブラディレクティブは 機能に応じて以下のようにグループ分けされます モジュール制御ディレクティブ (53 ページ ) シンボル制御ディレクティブ (57 ページ ) セグメント制御ディレクティブ (59 ページ ) 値割当てディレクティブ (67 ページ ) 条件付きアセンブリディレクティブ (70 ページ ) マクロ処理ディレクティブ (73 ページ ) リスト制御ディレクティブ (80 ページ ) C 形式のプリプロセッサディレクティブ (84 ページ ) データ定義ディレクティブまたは割当てディレクティブ (89 ページ ) アセンブラ制御ディレクティブ (92 ページ ) 関数ディレクティブ (94 ページ ) 呼出しフレーム情報ディレクティブ (96 ページ ) 以下の表に すべてのアセンブラディレクティブの概要を示します ディレクティブ説明セクション _args マクロに受け渡される引数の数に設定されます マクロ処理 #define ラベルに値を割り当てます C 形式のプリプロ セッサ #elif #else #endif #if#endif ブロックに新しい条件を実装します 条件が偽であった場合に命令をアセンブルします #if #ifdef または #ifndef ブロックを終了させます C 形式のプリプロセッサ C 形式のプリプロセッサ C 形式のプリプロセッサ 表 15: アセンブラディレクティブの概要 49

アセンブラディレクティブの概要 ディレクティブ説明セクション #error エラーを生成します C 形式のプリプロ セッサ #if #ifdef #ifndef 条件が真であった場合に命令をアセンブルします シンボルが定義されている場合に命令をアセンブルします シンボルが定義されていない場合に命令をアセンブルします C 形式のプリプロセッサ C 形式のプリプロセッサ C 形式のプリプロセッサ #include ファイルをインクルードします C 形式のプリプロセッサ #line 行番号を変更します C 形式のプリプロセッサ #pragma 拡張機能を制御します C 形式のプリプロセッサ #undef ラベルの定義を取り消します C 形式のプリプロセッサ /*comment*/ C スタイルのコメント区切り文字 アセンブラ制御 // C++ スタイルのコメント区切り文字 アセンブラ制御 = モジュールに対してローカルな永久値を割り当てます 値の割り当て ALIGN ALIGNRAM ゼロが埋め込まれたバイトを挿入して プログラムロケーションカウンタをアラインメントします プログラムロケーションカウンタをアラインメントします セグメント制御 セグメント制御 ARGFRAME 関数の引数に対して使用される空間を宣言し 関数 ます ASEG 絶対セグメントを開始します セグメント制御 ASEGN 指定された絶対セグメントを開始します セグメント制御 ASSIGN 一時値を割り当てます 値の割り当て BLOCK SYMBOL ディレクティブによって作成されたエ シンボル制御 イリアスにブロック番号を指定します CASEOFF 大文字 / 小文字の区別を無効にします アセンブラ制御 CASEON 大文字 / 小文字の区別を有効にします アセンブラ制御 CFI 呼出しフレーム情報を指定します 呼出しフレーム情報 表 15: アセンブラディレクティブの概要 ( 続き ) 50 IAR アセンブラリファレンスガイド

アセンブラディレクティブ ディレクティブ説明セクション CODE コードセグメントを開始します セグメント制御 COMMON 共通セグメントを開始します セグメント制御 DATA データセグメントを開始します セグメント制御 DC8 文字列を含め 8 ビットの定数を生成します データ定義または割当て DC16 16 ビットの定数を生成します データ定義または割当て DC24 24 ビットの定数を生成します データ定義または割当て DC32 32 ビットの定数を生成します データ定義または割当て DC64 64 ビットの定数を生成します データ定義または割当て DEFINE ファイル全体で有効な値を定義します 値の割り当て DF32 32 ビットの浮動小数点定数を生成します データ定義または割当て DF64 64 ビットの浮動小数点定数を生成します データ定義または割当て DQ15 16 ビットの小数定数を生成します データ定義または割当て DQ31 32 ビットの小数定数を生成します データ定義または割当て DS8 8 ビット整数に空間を割り当てます データ定義または割当て DS16 16 ビット整数に空間を割り当てます データ定義または割当て DS24 24 ビット整数に空間を割り当てます データ定義または割当て DS32 32 ビット整数に空間を割り当てます データ定義または割当て DS64 64 ビット整数に空間を割り当てます データ定義または割当て ELSE 条件が偽であった場合に命令をアセンブルし 条件付きアセンブリ ます ELSEIF IFENDIF ブロックに新しい条件を指定します 条件付きアセンブリ 表 15: アセンブラディレクティブの概要 ( 続き ) 51

アセンブラディレクティブの概要 ディレクティブ説明セクション END ファイル内の最後のモジュールのアセンブリを モジュール制御 終了します ENDIF IF ブロックを終了します 条件付きアセンブリ ENDM マクロ定義を終了します マクロ処理 ENDMOD 現在のモジュールのアセンブリを終了します モジュール制御 ENDR 繰返し構造を終了します マクロ処理 EQU モジュールに対してローカルな永久値を割り当てます 値の割り当て EVEN 偶数アドレスにプログラムカウンタをアライン セグメント制御 メントします EXITM マクロが終了する前に抜け出します マクロ処理 EXTERN 外部シンボルをインポートします シンボル制御 FUNCALL 関数 caller が関数 callee を呼び出すことを 関数 宣言します FUNCTION ラベル名を関数として宣言します 関数 IF 条件が真であった場合に命令をアセンブルし 条件付きアセンブリ ます IMPORT 外部シンボルをインポートします シンボル制御 LIBRARY ライブラリモジュールを開始します モジュール制御 LIMIT 制限に対して値をチェックします 値の割当て LOCAL マクロに対してローカルなシンボルを作成します マクロ処理 LOCFRAME 関数内でローカル用に使用される空間を宣言し 関数 ます LSTCND 条件付きアセンブラリストを制御します リスト制御 LSTCOD 複数行から成るコードのリストを制御します リスト制御 LSTEXP マクロで生成された行のリストを制御します リスト制御 LSTMAC マクロ定義のリストを制御します リスト制御 LSTOUT アセンブラリスト出力を制御します リスト制御 LSTPAG 下位互換性のために保持されています 認識はされますが 無視されます リスト制御 LSTREP 繰返しディレクティブで生成された行のリスト リスト制御 を制御します LSTXRF クロスリファレンステーブルを生成します リスト制御 表 15: アセンブラディレクティブの概要 ( 続き ) 52 IAR アセンブラリファレンスガイド

アセンブラディレクティブ ディレクティブ説明セクション MACRO マクロを定義します マクロ処理 MODULE ライブラリモジュールを開始します モジュール制御 NAME プログラムモジュールを開始します モジュール制御 ODD 奇数アドレスにプログラムロケーションカウン セグメント制御 タをアラインメントします ORG プログラムロケーションカウンタを設定し セグメント制御 ます OVERLAY 認識されますが 無視されます シンボル制御 PROGRAM プログラムモジュールを開始します モジュール制御 PUBLIC 他のモジュールにシンボルをエクスポートし シンボル制御 ます PUBWEAK 他のモジュールにシンボルをエクスポートしま シンボル制御 す 複数の定義が許可されます RADIX デフォルトベースを設定します アセンブラ制御 REPT 命令を 指定回数だけ繰り返します マクロ処理 REPTC 文字を繰り返し 置換します マクロ処理 REPTI 文字列を繰り返し 置換します マクロ処理 REQUIRE シンボルを強制参照させます シンボル制御 RSEG 再配置可能 segment を開始します セグメント制御 RTMODEL ランタイムモデル属性を宣言します モジュール制御 SET 一時値を割り当てます 値の割り当て SYMBOL C/C++ シンボルへの参照のために使用可能なエ シンボル制御 イリアスを作成します VAR 一時値を割り当てます 値の割り当て 表 15: アセンブラディレクティブの概要 ( 続き ) モジュール制御ディレクティブモジュール制御ディレクティブは ソースプログラムモジュールの開始と終了をマーキングし それらのモジュールに名前と型を割り当てるために使用されます 式でディレクティブを使用するときに適用される制限については 式の制限 (12 ページ ) を参照してください ディレクティブ説明式の制限 END ファイル内の最後のモジュールのアセンブリを終了します 表 16: モジュール制御ディレクティブ ローカル定義されたラベルまたは整数定数のみ 53

モジュール制御ディレクティブ ディレクティブ説明式の制限 ENDMOD 現在のモジュールのアセンブリを終了します ローカル定義されたラベ ルまたは整数定数のみ LIBRARY ライブラリモジュールを開始します 外部参照禁止絶対 MODULE ライブラリモジュールを開始します 外部参照禁止絶対 NAME プログラムモジュールを開始します 外部参照禁止絶対 PROGRAM プログラムモジュールを開始します 外部参照禁止絶対 RTMODEL ランタイムモデル属性を宣言します なし 表 16: モジュール制御ディレクティブ ( 続き ) 構文 END [address] ENDMOD [address] LIBRARY symbol [(expr)] MODULE symbol [(expr)] NAME symbol [(expr)] PROGRAM symbol [(expr)] RTMODEL key, value パラメータ address expr key symbol value プログラムの開始アドレスを決定する任意指定の式 任意の正の整数値を受け入れます ランタイムオプションをエンコードするためにアセンブラが使用する任意指定の式 0 ~ 255 の範囲内にする必要があり 評価結果は定数値となります この式は コンパイラからのアセンブラ出力として開始されるソースコードをアセンブルしている場合にのみ役に立ちます キーを指定するテキスト文字列 モジュールに対して割り当てられ オブジェクトファイルを処理するときに XLINK XAR XLIB に使用される名前 値を指定するテキスト文字列 54 IAR アセンブラリファレンスガイド

アセンブラディレクティブ 説明 プログラムモジュールの開始プログラムモジュールを開始したり IAR XLINK リンカ IAR XAR ライブラリビルダ IAR XLIB ライブラリアンによって参照するために名前を割り当てるには NAME または PROGRAM を使用します プログラムモジュールは その他のモジュールがこれらを参照しない場合にも XLINK によって無条件にリンクされます ライブラリモジュールの開始 各モジュールが 1 つのルーチンを表現する複数の小型モジュール ( 高級言語用のランタイムシステムなど ) を含むライブラリを作成するには MODULE または LIBRARY を使用します 複数モジュールに対応できるため 必要なソースファイルとオブジェクトファイルの数を大幅に削減できます ライブラリモジュールは 他のモジュールがモジュール内の共通シンボルを参照する場合 リンクされたコードのみにコピーされます モジュールの終了 モジュールの最後を定義するには ENDMOD を使用します ソースファイルの終了 ソースファイルの最後を指定するには END を使用します END ディレクティブの後の行はすべて無視されます ENDMOD ディレクティブによって明示的に行われない場合 END ディレクティブはファイル内の最後のモジュールも終了させます 複数モジュールファイルのアセンブル プログラムエントリは 再配置可能と絶対のいずれかにする必要があります また XLINK ロードマップや 一部の 16 進絶対出力フォーマットに表示されます プログラムエントリを外部に定義することはできません 複数モジュールファイルをアセンブルする場合 以下の規則が適用されます 新しいモジュールの冒頭では DEFINE #define MACRO によって作成されたものを除くすべてのユーザシンボルが削除され ロケーションカウンタがクリアされ モデルが絶対に設定されます リスト制御ディレクティブはアセンブリ全体を通して有効のままです 注記 : END は常に last モジュールの後に配置する必要があります また ENDMOD と次のモジュール (MODULE LIBRARY NAME または PROGRAM で開始されるモジュール ) の間には コメントとリスト制御ディレクティブを除き ソース行を含めることはできません 55

モジュール制御ディレクティブ ディレクティブ NAME MODULE LIBRARY または PROGRAM のいずれかが存在しない場合 モジュールにはソースファイルの名前と属性 program が割り当てられます ランタイムモデル属性の宣言 モジュール間で整合性を保つためには RTMODEL 使用します 一緒にリンクされ 同一のランタイムモジュール属性のキーを定義するすべてのモジュールは そのキー値に対応する値が同一であるか 特殊な * という値を持つ必要があります 特殊値 * を使用すると 属性が未定義である場合と等価になります ただし この値を使用することで モジュールがランタイムモデルに対応していることを明示できます 1 つのモジュールで複数のランタイムモデルを定義できます 注 : コンパイラランタイムモデル属性は 最初がダブルアンダースコアになります 混乱を避けるため ユーザ定義アセンブラ属性ではこのスタイルを使用しないでください C/C++ コードで使用するアセンブラルーチンを記述しており モジュールの整合性を制御したい場合は RX IAR C/C++ コンパイラリファレンスガイド を参照してください 例次の例では 以下のような条件で 3 つのモジュールが定義されます MOD_1 と MOD_2 は ランタイムモデル CAN の値が異なるため 一緒にリンクできません MOD_1 と MOD_3 は ランタイムモデル RTOS の定義が同じであり CAN の定義に矛盾がないため 一緒にリンクできます MOD_2 と MOD_3 は ランタイムモデルの矛盾がないため 一緒にリンクできます 値 * は 任意のランタイムモデル値に一致します module mod_1 rtmodel "CAN", "ISO11519" rtmodel "RTOS", "PowerPac" ;... endmod module mod_2 rtmodel "CAN", "ISO11898" rtmodel "RTOS", "*" ;... endmod module mod_3 rtmodel "RTOS", "PowerPac" ;... end 56 IAR アセンブラリファレンスガイド

アセンブラディレクティブ シンボル制御ディレクティブこれらのディレクティブは モジュール間でシンボルがどのように共有されるかを制御します ディレクティブ BLOCK EXTERN IMPORT OVERLAY PUBLIC PUBWEAK REQUIRE SYMBOL 表 17: シンボル制御ディレクティブ 構文 label BLOCK old_label, block_number EXTERN symbol [,symbol] IMPORT symbol [,symbol] PUBLIC symbol [,symbol] PUBWEAK symbol [,symbol] REQUIRE symbol label SYMBOL "C/C++_symbol" [,old_label] パラメータ 説明 SYMBOL ディレクティブによって作成されたエイリアスにブロック番号を指定します 外部シンボルをインポートします 認識されますが 無視されます 他のモジュールにシンボルをエクスポートします 他のモジュールにシンボルをエクスポートします 複数の定義が許可されます シンボルを強制参照させます C/C++ シンボルのエイリアスを作成します block_number C/C++_symbol label old_label symbol SYMBOL ディレクティブによって作成されるエイリアスのブロック番号 エイリアスを作成する C/C++ シンボル C/C++ シンボルのエイリアスとして使用するラベル SYMBOL ディレクティブによって以前に作成されたエイリアス インポートまたはエクスポートされるシンボル 57