F2MC®-8L/8FX ファミリ 8 ビット・マイクロコントローラ SOFTUNE® アセンブラマニュアル V3 対応 Support Soft Manual Publication Number CM81-00208 MB90880ÉVÉäÅ[ÉY Cover Sheet Revision 5.0 Issue Date September 1, 2014 F2MC®-8L/8FX ファミリ 8 ビット・マイクロコントローラ SOFTUNE® アセンブラマニュアル V3 対応 Support Soft Manual MB90880ÉVÉäÅ[ÉY Cover Sheet Support Soft Ma nual はじめに ■ 本書の目的と対象読者 本書は , Spansion SOFTUNE アセンブラの機能および使用方法を説明したものです。 本書は , F2MC-8L/8FX ファミリ マイクロコントローラを使用した応用プログラムを開 発する技術者を対象にしています。本書をご一読ください。 ■ 商標 F2MC は , Spansion LLC の登録商標です。 SOFTUNE は , Spansion LLC の登録商標です。 Microsoft,Windows,Windows Media は , 米国 Microsoft Corporation の米国およびその他の 国における登録商標または商標です。 その他の社名および製品名などの固有名詞は , 各社の商標または登録商標です。 ■ 本書の全体構成 本書は , 以下に示す 2 部構成となっています。 第 I 部 使用手引き編 この部では , SOFTUNE アセンブラの使用方法について説明します。 第 II 部 文法編 この部では , アセンブラのソースプログラムを記述する際の文法や記述形式につい て説明します。 付録 付録では , エラーメッセージの一覧 , 制限事項を掲載します。 September 1, 2014, CM81-00208-5 i Su pp or t ii So ft Manu al CM81-00208-5, September 1, 2014 Support Soft Ma nual 目次 第I部 使用手引き編............................................................................................. 1 第1章 概要 ............................................................................................................ 3 1.1 1.2 第2章 SOFTUNE アセンブラ............................................................................................................ 4 アセンブラ文法 ...................................................................................................................... 6 環境変数 , 開発環境のディレクトリ構造 ................................................... 9 2.1 2.2 2.3 2.4 2.5 FETOOL ............................................................................................................................... 10 FELANG ............................................................................................................................... 11 TMP ...................................................................................................................................... 12 INC896 ................................................................................................................................. 13 OPT896 ................................................................................................................................ 14 2.6 開発環境のディレクトリ構造 ............................................................................................... 15 第3章 起動方法................................................................................................... 17 3.1 fasm896s コマンド............................................................................................................... 18 3.2 ファイル指定 ........................................................................................................................ 19 3.3 ファイル名の扱い ................................................................................................................. 20 3.3.1 ファイル名の指定形式 ............................................................................................... 21 3.3.2 ファイル名の省略指定 ............................................................................................... 22 3.4 オプションファイル ............................................................................................................. 23 3.5 オプションファイルに記述できるコメント ......................................................................... 24 3.6 デフォルトオプションファイル ........................................................................................... 25 3.7 終了コード............................................................................................................................ 26 第4章 起動時オプション .................................................................................... 27 4.1 起動時オプションの規則 ...................................................................................................... 28 4.2 起動時オプション一覧.......................................................................................................... 29 4.3 起動時オプションの詳細 ...................................................................................................... 31 4.4 オブジェクトおよびデバッグに関するオプション............................................................... 32 4.4.1 -o, -Xo......................................................................................................................... 33 4.4.2 -g, -Xg......................................................................................................................... 34 4.5 リスティングに関するオプション........................................................................................ 35 4.5.1 -l, -lf, -Xl ...................................................................................................................... 36 4.5.2 -pl, -pw........................................................................................................................ 37 4.5.3 -linf, -lsrc, -lsec, -lcros................................................................................................. 38 4.5.4 -linc, -lexp ................................................................................................................... 40 4.5.5 -tab ............................................................................................................................. 41 4.6 プリプロセッサに関するオプション .................................................................................... 42 4.6.1 -p ................................................................................................................................ 43 4.6.2 -P, -Pf ......................................................................................................................... 44 4.6.3 -D, -U .......................................................................................................................... 45 4.6.4 -I ................................................................................................................................. 46 4.6.5 -H................................................................................................................................ 47 September 1, 2014, CM81-00208-5 iii Su pp or t 4.6.6 So ft Manu al -C................................................................................................................................ 48 4.7 ターゲット依存オプション................................................................................................... 49 4.7.1 -sa, -Xsa ..................................................................................................................... 50 4.7.2 -div_check, -Xdiv_check............................................................................................. 51 4.8 その他のオプション ............................................................................................................. 53 4.8.1 -Xdof ........................................................................................................................... 54 4.8.2 -f ................................................................................................................................. 55 4.8.3 -w................................................................................................................................ 56 4.8.4 -name ......................................................................................................................... 57 4.8.5 -V, -XV ........................................................................................................................ 58 4.8.6 -cmsg, -Xcmsg............................................................................................................ 59 4.8.7 -cwno, -Xcwno ............................................................................................................ 60 4.8.8 -help ........................................................................................................................... 61 4.8.9 -cpu ............................................................................................................................ 62 4.8.10 -kanji ........................................................................................................................... 63 4.8.11 -LBA, -XLBA ............................................................................................................... 64 4.8.12 -OVFW, -XOVFW ....................................................................................................... 66 4.8.13 -cif............................................................................................................................... 68 第5章 5.1 第6章 最適コードチェック機能について ........................................................... 69 fasm896s の最適コードチェック機能 .................................................................................. 70 アセンブルリスト .................................................................................... 73 6.1 全体形式 ............................................................................................................................... 74 6.2 ページの形式 ........................................................................................................................ 76 6.3 インフォメーションリスト................................................................................................... 78 6.4 ソースリスト ........................................................................................................................ 80 6.4.1 プリプロセッサ処理 ................................................................................................... 81 6.4.2 エラー表示 ................................................................................................................. 82 6.4.3 インクルードファイル ............................................................................................... 83 6.4.4 .END, .PROGRAM, .SECTION .................................................................................. 84 6.4.5 .ALIGN, .ORG, .SKIP ................................................................................................. 86 6.4.6 .EXPORT, .GLOBAL, .IMPORT ................................................................................. 87 6.4.7 .EQU........................................................................................................................... 88 6.4.8 .DATA, .BIT, .BYTE, .HALF, .LONG, .WORD, .DATAB ............................................. 89 6.4.9 .FDATA, .FLOAT, .DOUBLE, .FDATAB ..................................................................... 91 6.4.10 .RES, .FRES .............................................................................................................. 92 6.4.11 .SDATA, .ASCII, .SDATAB......................................................................................... 93 6.4.12 .DEBUG...................................................................................................................... 94 6.4.13 .LIBRARY ................................................................................................................... 95 6.4.14 .FORM, .TITLE, .HEADING, .LIST, .PAGE, .SPACE ................................................. 96 6.5 6.6 第 II 部 第7章 7.1 7.2 iv セクションリスト ................................................................................................................. 99 クロスリファレンスリスト................................................................................................. 100 文法編 ................................................................................................... 101 言語の基本規則 ...................................................................................... 103 文の形式 ............................................................................................................................. 104 文字セット.......................................................................................................................... 106 CM81-00208-5, September 1, 2014 Support Soft Ma nual 7.3 名前 .................................................................................................................................... 107 7.4 前方参照シンボルと後方参照シンボル............................................................................... 109 7.5 整数定数 ............................................................................................................................. 110 7.6 ロケーションカウンタシンボル ......................................................................................... 111 7.7 文字定数 ............................................................................................................................. 112 7.8 文字列 ................................................................................................................................. 114 7.9 浮動小数点定数 .................................................................................................................. 115 7.10 浮動小数点定数のデータ形式 ............................................................................................. 117 7.11 式 ........................................................................................................................................ 119 7.11.1 項 .............................................................................................................................. 121 7.11.2 オペランド値の範囲 ................................................................................................. 125 7.11.3 演算子....................................................................................................................... 126 7.11.4 名前から算出される値 ............................................................................................. 128 7.11.5 演算子の優先順位..................................................................................................... 131 7.12 コメント ............................................................................................................................. 132 第8章 8.1 8.2 8.3 8.4 8.5 8.6 8.7 セクション ............................................................................................. 133 セクションの記述形式........................................................................................................ 134 セクションのタイプについて ............................................................................................. 136 セクションタイプと属性 .................................................................................................... 139 セクションの配置形式について ......................................................................................... 140 セクションの結合方法........................................................................................................ 142 セクションの分割記述........................................................................................................ 144 ROM 化セクションの書き方 .............................................................................................. 145 第9章 9.1 9.2 機械命令................................................................................................. 147 機械命令の記述形式 ........................................................................................................... 148 オペランドフィールドの記述形式...................................................................................... 149 第 10 章 アセンブラ擬似命令............................................................................... 151 10.1 擬似命令で扱う整数定数の範囲 ......................................................................................... 152 10.2 プログラム構造定義命令 .................................................................................................... 153 10.2.1 .PROGRAM 命令...................................................................................................... 154 10.2.2 .END 命令................................................................................................................. 155 10.2.3 .SECTION 命令 ........................................................................................................ 156 10.3 アドレス制御命令 ............................................................................................................... 158 10.3.1 .ALIGN 命令.............................................................................................................. 159 10.3.2 .ORG 命令 ................................................................................................................ 160 10.3.3 .SKIP 命令 ................................................................................................................ 161 10.4 プログラム結合命令 ........................................................................................................... 162 10.4.1 .EXPORT 命令.......................................................................................................... 163 10.4.2 .GLOBAL 命令 .......................................................................................................... 164 10.4.3 .IMPORT 命令 .......................................................................................................... 165 10.5 シンボル定義命令 ............................................................................................................... 166 10.5.1 .EQU 命令................................................................................................................. 167 10.6 領域定義命令 ...................................................................................................................... 168 10.6.1 .DATA 命令 , .BIT 命令 , .BYTE 命令 , .HALF 命令 , .LONG 命令 , .WORD 命令 ..... 169 10.6.2 .DATAB 命令 ............................................................................................................ 171 10.6.3 .FDATA 命令 , .FLOAT 命令 , .DOUBLE 命令 .......................................................... 172 September 1, 2014, CM81-00208-5 v Su pp or t So ft Manu al 10.6.4 .FDATAB 命令 .......................................................................................................... 174 10.6.5 .RES 命令 ................................................................................................................. 175 10.6.6 .FRES 命令............................................................................................................... 176 10.6.7 .SDATA 命令 , .ASCII 命令 ....................................................................................... 177 10.6.8 .SDATAB 命令 .......................................................................................................... 178 10.6.9 .STRUCT 命令 , .ENDS 命令.................................................................................... 179 10.7 デバッグ情報出力制御命令................................................................................................. 181 10.8 ライブラリファイル指定命令 ............................................................................................. 183 10.9 リスト出力制御命令 ........................................................................................................... 184 10.9.1 .FORM 命令.............................................................................................................. 185 10.9.2 .TITLE 命令............................................................................................................... 186 10.9.3 .HEADING 命令 ........................................................................................................ 187 10.9.4 .LIST 命令................................................................................................................. 188 10.9.5 .PAGE 命令 .............................................................................................................. 190 10.9.6 .SPACE 命令 ............................................................................................................ 191 第 11 章 プリプロセッサ処理............................................................................... 193 11.1 プリプロセッサ .................................................................................................................. 194 11.2 プリプロセッサの基本規則................................................................................................. 197 11.2.1 プリプロセッサ命令の記述形式 ............................................................................... 199 11.2.2 コメント ................................................................................................................... 200 11.2.3 行の継続 ................................................................................................................... 201 11.2.4 整数定数 ................................................................................................................... 202 11.2.5 文字定数 ................................................................................................................... 203 11.2.6 マクロ名 ................................................................................................................... 205 11.2.7 仮引数....................................................................................................................... 206 11.2.8 ローカルシンボル..................................................................................................... 207 11.3 プリプロセッサの式 ........................................................................................................... 208 11.4 マクロ定義.......................................................................................................................... 211 11.4.1 #macro 命令 ............................................................................................................. 212 11.4.2 #local 命令 ................................................................................................................ 213 11.4.3 #exitm 命令............................................................................................................... 215 11.4.4 #endm 命令 .............................................................................................................. 216 11.5 マクロコール命令 ............................................................................................................... 217 11.6 リピート展開 ...................................................................................................................... 218 11.7 条件付きアセンブル命令 .................................................................................................... 220 11.7.1 #if 命令...................................................................................................................... 221 11.7.2 #ifdef 命令................................................................................................................. 222 11.7.3 #ifndef 命令............................................................................................................... 223 11.7.4 #else 命令................................................................................................................. 224 11.7.5 #elif 命令................................................................................................................... 225 11.7.6 #endif 命令................................................................................................................ 227 11.8 マクロ名の置換処理 ........................................................................................................... 228 11.8.1 #define 命令.............................................................................................................. 230 11.8.2 マクロ仮引数の文字列化 (# 演算子 ) ........................................................................ 232 11.8.3 マクロ置換の文字の連結 (## 演算子 ) ...................................................................... 233 11.8.4 #set 命令................................................................................................................... 234 11.8.5 #undef 命令 .............................................................................................................. 235 11.8.6 #purge 命令 .............................................................................................................. 236 vi CM81-00208-5, September 1, 2014 Support 11.9 11.10 11.11 11.12 11.13 11.14 11.15 Soft Ma nual #include 命令 ...................................................................................................................... 237 #line 命令 ............................................................................................................................ 239 #error 命令 .......................................................................................................................... 240 #pragma 命令 ..................................................................................................................... 241 空命令 ................................................................................................................................. 242 既定義マクロ名 .................................................................................................................. 243 C 言語プリプロセッサとの違い ......................................................................................... 245 第 12 章 アセンブラ擬似機械命令........................................................................ 247 12.1 F2MC-8L/8FX ファミリ用アセンブラ擬似機械命令 ........................................................... 248 12.1.1 分岐系擬似機械命令 ................................................................................................. 249 12.1.2 演算系擬似機械命令 ................................................................................................. 250 12.1.3 その他の擬似機械命令 ............................................................................................. 251 12.1.4 最適配置分岐擬似機械命令 ...................................................................................... 253 第 13 章 構造化命令 ............................................................................................. 257 13.1 構造化命令の概要 ............................................................................................................... 258 13.2 構造化プログラム命令........................................................................................................ 259 13.2.1 構造化プログラム命令の条件式 ............................................................................... 260 13.2.2 構造化プログラム命令での生成規則 ........................................................................ 263 13.2.3 構造化プログラム命令の記述形式............................................................................ 264 13.2.4 2 処理選択構文 ......................................................................................................... 265 13.2.5 多処理選択構文 ........................................................................................................ 266 13.2.6 計算型繰返し構文..................................................................................................... 268 13.2.7 終了条件型繰返し構文 ............................................................................................. 270 13.2.8 実行条件型繰返し構文 ............................................................................................. 271 13.2.9 制御移行命令 ............................................................................................................ 272 13.3 式 ( 代入式 , 代入演算式 , インクリメント / デクリメント式 ) ........................................... 274 13.3.1 式の記述形式 ............................................................................................................ 275 13.3.2 代入式....................................................................................................................... 276 13.3.3 代入演算式 ............................................................................................................... 278 13.3.4 インクリメント / デクリメント式 ............................................................................ 282 付録 付録 A 付録 B 付録 C 付録 D D.1 D.2 D.3 D.4 D.5 D.6 D.7 D.8 D.9 D.10 付録 E ............................................................................................................... 285 エラーメッセージ一覧................................................................................................... 286 制限事項 ........................................................................................................................ 322 拡張ダイレクトアクセス領域バンク番号の取得方法.................................................... 323 SOFTUNE アセンブラと旧版アセンブラの仕様の差異 ................................................ 324 アセンブラ言語の基本規則 ......................................................................................... 325 式処理 ......................................................................................................................... 329 擬似命令...................................................................................................................... 332 マクロ処理 .................................................................................................................. 335 構造化制御命令 ........................................................................................................... 336 機械命令...................................................................................................................... 337 コマンド行の差異 ....................................................................................................... 338 環境変数...................................................................................................................... 339 オプション .................................................................................................................. 340 制限事項の緩和 ........................................................................................................... 342 主な変更内容 ................................................................................................................. 343 September 1, 2014, CM81-00208-5 vii Su pp or t 索引 viii So ft Manu al ............................................................................................................... 345 CM81-00208-5, September 1, 2014 Support 第I部 Soft Ma nual 使用手引き編 この部では , SOFTUNE アセンブラの使用方法について説明します。 第 1 章 概要 第 2 章 環境変数 , 開発環境の ディレクトリ構造 第 3 章 起動方法 第 4 章 起動時オプション 第 5 章 最適コードチェック機能 について 第 6 章 アセンブルリスト September 1, 2014, CM81-00208-5 1 Su pp or t 2 So ft Manu al CM81-00208-5, September 1, 2014 Support Soft Ma nual 第1章 概要 この章では , SOFTUNE アセンブラの概要について 説明します。 1.1 SOFTUNE アセンブラ 1.2 アセンブラ文法 September 1, 2014, CM81-00208-5 3 Su pp or t 1.1 So ft Manu al SOFTUNE アセンブラ 本アセンブラは , F2MC-8L/8FX ファミリアセンブリ言語で記述されたソースプログ ラムをアセンブルします。 本アセンブラの処理は大きく分けて , プリプロセッサフェーズとアセンブルフェー ズの 2 つのフェーズがあります。 ■ 概要 本アセンブラは , F2MC-8L/8FX ファミリアセンブリ言語で記述されたソースプログラ ムをアセンブルします。そして , リロケータブルなオブジェクトとアセンブルリストを 出力します。 本アセンブラの処理は , 大きく分けて , プリプロセッサフェーズとアセンブルフェーズ の 2 つのフェーズがあります。 本アセンブラの構成を , 図 1.1-1 に示します。 ■ プリプロセッサフェーズ 前処理を行います。 前処理とは, マクロ定義, マクロ展開など, テキストを加工する処理のことをいいます。 機能仕様に , C 言語のプリプロセッサ仕様をサポートしました。これにより , プリプロ セッサ処理に関しては C 言語とのヘッダファイルの共有化が可能です。 C 言語と共有可能な命令は , C 言語のプリプロセッサ命令と , 範囲指定型のコメント記 述 (/* ~ */) のみです。 また , このほかにも , マクロ定義・マクロ展開などのアセンブラ特有の機能もサポート しています。 前処理を行った結果をファイルに残すことも可能です。 ■ アセンブルフェーズ 機械命令 , 擬似命令を翻訳してオブジェクトコードを生成します。 アセンブルフェーズは , 次に示す機能を備えています。 • C 言語に対応したコメント記述 • デバッグ情報出力 • 機械命令の最適化チェック機能 4 CM81-00208-5, September 1, 2014 Support Soft Ma nual 図 1.1-1 アセンブラの構成 ソースプログラムファイル fasm896s プリプロセッサフェーズ アセンブルフェーズ 前処理結果ファイル オブジェクトファイル アセンブルリストファイル September 1, 2014, CM81-00208-5 5 Su pp or t So ft Manu al アセンブラ文法 1.2 本アセンブラは , IEEE-649 仕様に準拠した言語仕様に加え , ユーザがプログラミン グしやすいように , さらに機能を拡張してあります。 ■ 概要 本アセンブラは , IEEE-649 仕様に準拠した言語仕様に加え , 次の機能を備えています。 • C 言語に対応したコメント記述 • アセンブラ擬似命令 • プリプロセッサ処理 • デバッグ情報出力 ● C 言語に対応したコメント記述 アセンブラにおいても , C 言語と同じコメントが記述できます。 【例】 /* ------------------------------Main processing ---------------------------------- */ .SECTION CODE,CODE,ALIGN=2 CALL _init /* Initialization processing */ ● アセンブラ擬似命令 IEEE-649仕様のアセンブラ擬似命令に加え, リスト制御命令, 領域定義命令などの命令 を追加し , 機能を充実しました。 ● プリプロセッサ処理 C 言語のプリプロセッサ仕様をサポートしました。 これにより , プリプロセッサ処理に関しては C 言語とのヘッダファイルの共有化が可 能です。 C 言語と共有化可能な命令は C 言語のプリプロセッサ命令と , 範囲指定型のコメント 記述 (/* ~ */) のみです。 また , このほかにマクロ定義・マクロ展開などのアセンブラ特有の機能もサポートして います。 【例】 #ifdef SPC_MODE #include "spc.h" : #endif #define 6 SIZE_MAX 256 /* サイズの最大値 */ CM81-00208-5, September 1, 2014 Support Soft Ma nual ● デバッグ情報出力 オブジェクトにデバッグ情報を含めることができます。 プログラムのデバッグには必要不可欠な機能です。 September 1, 2014, CM81-00208-5 7 Su pp or t 8 So ft Manu al CM81-00208-5, September 1, 2014 Support Soft Ma nual 第2章 環境変数 , 開発環境の ディレクトリ構造 アセンブラで使用する環境変数と開発環境ディレ クトリ構造について説明します。 2.1 FETOOL 2.2 FELANG 2.3 TMP 2.4 INC896 2.5 OPT896 2.6 開発環境のディレクトリ構造 September 1, 2014, CM81-00208-5 9 Su pp or t 2.1 So ft Manu al FETOOL 開発環境をインストールするディレクトリを指定します。 この環境変数が設定されていない場合は , 起動したアセンブラがあるディレクトリ の親のディレクトリをインストールディレクトリとみなします。 ■ FETOOL 【記述形式】 SET FETOOL= ディレクトリ 【説明】 開発環境をインストールするディレクトリを指定します。 インストールするディレクトリからメッセージファイル , インクルードファイル , ライブラリファイルなどの開発環境に必要なファイルがアクセスされます。 開発環境のディレクトリ構造の詳細は , 「2.6 開発環境のディレクトリ構造」を参 照してください。 FETOOL が設定されていない場合は , 起動したアセンブラのあるディレクトリの親 ディレクトリ ( アセンブラがあるディレクトリの位置 \..) をインストールディレク トリとみなします。 【例】 SET FETOOL=D:\SOFTUNE 10 CM81-00208-5, September 1, 2014 Support 2.2 Soft Ma nual FELANG メッセージの出力形式を指定します。 この環境変数は省略できます。 ■ FELANG 【記述形式】 SET FELANG={ASCII|EUC|SJIS} 【説明】 メッセージの出力形式を指定します。 ● ASCII を指定した場合 メッセージを ASCII コードで出力します。 メッセージの言語は英語となります。 日本語環境のないシステムの場合は , この形式にしてください。 ● EUC を指定した場合 メッセージを EUC コードで出力します。 メッセージの言語は日本語となります。 端末が EUC コードの場合は , この形式にしてください。 ● SJIS を指定した場合 メッセージを SJIS コードで出力します。 メッセージの言語は日本語となります。 端末が SJIS コードの場合は , この形式にしてください。 Windows 環境では , 普通この指定で日本語が表示されます。 参考: この指定で影響を受けるメッセージは , ヘルプメッセージとエラーメッセージです。 この環境変数は省略できます。 省略したときの出力形式は , ASCII になります。 【例】 SET FELANG=ASCII September 1, 2014, CM81-00208-5 11 Su pp or t 2.3 So ft Manu al TMP アセンブラが使用する作業用のディレクトリを指定します。 この環境変数は省略できます。 ■ TMP 【記述形式】 SET TMP= ディレクトリ 【説明】 アセンブラが使用する作業用のディレクトリを指定します。 アクセスできないディレクトリを指定した場合 , 本アセンブラは異常終了します。 この環境変数は省略できます。 省略した場合の作業ディレクトリは , カレントディレクトリです。 【例】 SET TMP=D:\TMP 12 CM81-00208-5, September 1, 2014 Support 2.4 Soft Ma nual INC896 インクルードパスを指定します。 #include 命令で指定されたインクルードファイルを検索するパスを指定します。 この環境変数は省略できます。 ■ INC896 【記述形式】 SET INC896= パス 【説明】 インクルードパスを指定します。 #include 命令で指定されたインクルードファイルを検索するパスを指定します。 起動時オプションのインクルードパス指定 (-I) で指定されたパスの方を先に検索し ます。それで見つからなければ , INC896 に設定されているパスを検索します。 この環境変数は省略できます。 【例】 SET INC896=E:\INCLUDE September 1, 2014, CM81-00208-5 13 Su pp or t 2.5 So ft Manu al OPT896 デフォルトオプションファイルのディレクトリを指定します。 この環境変数は省略できます。 ■ OPT896 【記述形式】 SET OPT896= ディレクトリ 【説明】 デフォルトオプションファイルのディレクトリを指定します。 デフォルトオプションファイルについての詳細は ,「3.6 デフォルトオプションファ イル」を参照してください。 この環境変数は省略できます。 省略した場合は , 開発環境ディレクトリ内のデフォルトオプションファイルを参照 します。 開発環境ディレクトリ内のデフォルトオプションファイルは , 次のとおりです。 %FETOOL%\LIB\896\FASM896.OPT 【例】 SET OPT896=D:\USR 14 CM81-00208-5, September 1, 2014 Support 2.6 Soft Ma nual 開発環境のディレクトリ構造 開発環境のディレクトリ構造について説明します。 ■ 開発環境のディレクトリ構造 開発環境は , 次に示すような構造になっています。また , 各ディレクトリには , 次のよ うなファイルが入っています。 ● %FETOOL%\BIN ロードモジュールのディレクトリです。 C コンパイラ , アセンブラ , リンカ , および Workbench などが入っています。 ● %FETOOL%\LIB ライブラリのディレクトリです。 ライブラリなど付属されるファイルが入っています。 ● %FETOOL%\LIB\896 F2MC-8L/8FX 用ライブラリのディレクトリです。 メッセージファイル , ライブラリファイル , およびインクルードファイルなどが入って います。 ● %FETOOL%\LIB\896\INCLUDE F2MC-8L/8FX 用インクルードファイルのディレクトリです。 C コンパイラの標準インクルードファイルが入っています。 このディレクトリは , #include 命令の検索において最後に検索されます。 開発環境のディレクトリ構造を次に示します。 図 2.6-1 開発環境のディレクトリ構造 %FETOOL%\ ←環境変数"FETOOL"に設定されているディレクトリ BIN\ ←ロードモジュールを置くディレクトリ FASM896S.EXE LIB\ ←ライブラリを置くディレクトリ 896\ ←F2MC-8L/8FXファミリ用のライブラリを置くディレクトリ ASM896_A.MSG (エラーメッセージファイル: ASCIIコード) ASM896_E.MSG (エラーメッセージファイル: EUCコード) ASM896_S.MSG (エラーメッセージファイル: SJISコード) FASM896.OPT (デフォルトオプションファイル) INCLUDE\ ←インクルードファイルディレクトリ インクルードファイル September 1, 2014, CM81-00208-5 15 Su pp or t 16 So ft Manu al CM81-00208-5, September 1, 2014 Support Soft Ma nual 第3章 起動方法 この章では , アセンブラの起動方法について説明し ます。 本アセンブラの起動コマンドは , 次のとおりです。 • "fasm896s":F2MC-8L/8FX ファミリ用アセンブ ラ 3.1 fasm896s コマンド 3.2 ファイル指定 3.3 ファイル名の扱い 3.4 オプションファイル 3.5 オプションファイルに記述できるコメント 3.6 デフォルトオプションファイル 3.7 終了コード September 1, 2014, CM81-00208-5 17 Su pp or t 3.1 So ft Manu al fasm896s コマンド fasm896s のコマンド形式は , 次のとおりです。 • fasm896s [ 起動時オプション ]… [ ファイル名 ] ■ fasm896s コマンド行 【記述形式】 fasm896s [ 起動時オプション ]… [ ファイル名 ] 【説明】 fasm896s コマンド行には , 起動時オプションとファイル名を指定できます。 起動時オプションとファイル名は , コマンド行のどの位置からでも指定できます。 起動時オプションは複数指定できます。 起動時オプションとファイル名は , それぞれ空白で区切られます。 fasm896s コマンドは , 次の順序で起動時オプションとファイル名を区別します。 1. オプション識別記号で始まるものを起動時オプションと識別します。オプション 識別記号は , ハイフン (-) です。 2. 起動時オプションに引数がある場合は , 次に続く文字を引数とみなします。 3. 起動時オプション以外をファイル名とみなします。 起動時オプションについては , 「第 4 章 起動時オプション」を参照してください。 起動時オプションに "-f オプションファイル名 " と指定すると , -f で指定したファイ ルを読み込み , そのファイルに記述されている fasm896s オプションを実行します。 この機能により , fasm896s オプションをファイルにしておくことができます。 詳細は , 「3.4 オプションファイル」を参照してください。 起動時オプションとファイル名を省略し , fasm896s コマンド以降に何も指定しな かった場合は , 起動時オプションの一覧 ( ヘルプメッセージ ) が出力されます。 fasm896s コマンドには , デフォルトオプションファイルという機能があります。 デフォルトオプションファイルに記述してある fasm896s オプションは , 最初に実行 されます。 詳細は , 「3.6 デフォルトオプションファイル」を参照してください。 【例】 fasm896s -f def.opt -l -pw 80 prog.asm 18 CM81-00208-5, September 1, 2014 Support 3.2 Soft Ma nual ファイル指定 アセンブルソースファイルを指定します。 アセンブルソースファイルは 1 つのみ指定できます。 拡張子を省略した場合 , ".asm" をファイル名に付加します。 ■ ファイル指定 【例】 ファイル指定 fasm896s fasm896s fasm896s fasm896s test test. D:\WORK\test ..\FMC8L\abc.src アセンブルされるファイル test.asm test. D:\WORK\test.asm ..\FMC8L\abc.src <注意事項> ファイルの記述方法については , それぞれの OS のマニュアルをご覧ください。 September 1, 2014, CM81-00208-5 19 Su pp or t 3.3 So ft Manu al ファイル名の扱い 本アセンブラにおける , ファイル名の扱いについて説明します。 次の 2 つの項目について説明します。 • ファイル名の指定形式 • ファイル名の省略指定 ■ ファイル名の指定形式 本アセンブラは , ファイル名を < パス名 >, < 主ファイル名 > と < 拡張子 > の 3 つで構 成されているものとして扱います。 < 拡張子 > は , ピリオド (.) 以降の文字を示します。 < パス名 >, < 拡張子 > は省略できます。 ■ ファイル名の省略指定 ファイル名の各要素が省略された場合のファイル名の扱いについて説明します。 20 CM81-00208-5, September 1, 2014 Support 3.3.1 Soft Ma nual ファイル名の指定形式 ファイル名の指定形式について説明します。 本アセンブラでは , ファイル名を < パス名 >, < 主ファイル名 > と < 拡張子 > の 3 つ で構成されているものとして扱います。 < 拡張子 > は , ピリオド (.) 以降の文字を示します。 < パス名 >, < 拡張子 > は省略できます。 ■ ファイル名の指定形式 【記述形式】 [ < パス名 >] < 主ファイル名 > [ < 拡張子 >] 【説明】 ファイル名の詳細は , 各 OS のマニュアルを参照してください。 本アセンブラでは , ファイル名を < パス >, < 主ファイル名 > と < 拡張子 > の 3 つで 構成されているものとして扱います。 < 拡張子 > は , ピリオド (.) 以降の文字を示します。 < パス名 >, < 拡張子 > は省略できます。 省略した場合の扱いについては , 「3.3.2 ファイル名の省略指定」を参照してくださ い。 Windows 版の場合 , < ドライブ名 > は < パス名 > に含まれます。 【例】 D:\WORK\SRC\TEST.ASM 拡張子 パス名 主ファイル名 September 1, 2014, CM81-00208-5 21 Su pp or t 3.3.2 So ft Manu al ファイル名の省略指定 ファイル名の各要素が省略された場合のファイル名の扱いについて説明します。 ■ ファイル名の省略指定 ファイル名の各要素が省略された場合のファイル名の扱いについて説明します。 オブジェクトファイルまたはリストファイルの指定にパス名のみを指定した場合は , ソースファイル名の主ファイル名を使用します。 ● パス名のみを指定した場合 < 指定したパス名 > < ソースファイルの主ファイル名 > < 省略時の拡張子 > ファイル名省略時の扱いを , 表 3.3-1 に示します。 表 3.3-1 ファイル名省略時の扱い ファイル名の省略部 パス名 拡張子 扱い カレント ソースファイルの拡張子 .asm オブジェクトファイルの拡張子 .obj リストファイルの拡張子 .lst オプションファイルの拡張子 .opt 前処理結果ファイルの拡張子 .as 【例】 fasm896s TEST -o D:\WORK\SRC -lf abc 22 ソースファイル名 : TEST.asm オブジェクトファイル名 : D:\WORK\SRC\TEST.obj リストファイル名 : abc.lst CM81-00208-5, September 1, 2014 Support 3.4 Soft Ma nual オプションファイル オプションファイル機能は , fasm896s オプションをファイルに記述しておき , 一括 指定できます。この機能により , たくさん指定する起動時オプションなどをファイ ルにすることができます。 オプションファイルの指定は , 起動時オプションの "-f" です。 ■ オプションファイル 【記述形式】 -f オプションファイル名 【説明】 オプションファイル機能は , fasm896s オプションをファイルに記述しておき , 一括 指定できます。この機能により , たくさん指定する起動時オプションをファイル化 できます。 オプションファイルの指定は , 起動時オプションの "-f" です。 オプションファイル名に拡張子を省略した場合は , ".opt" を補います。 オプションファイルには , fasm896s オプションが記述できます。 オプションファイルには , コメントが記述できます。 詳細は「3.5 オプションファイルに記述できるコメント」を参照してください。 オプションファイルのネストは , 最大 8 レベルまで可能です。 【例】 オプションフィル:def.opt -I D:\usr\include -D SMAP -l fasm896s -V -f def.opt test 上の例は,次のように解釈されます。 fasm896s -V -I D:\usr\include -D SMAP -1 test September 1, 2014, CM81-00208-5 23 Su pp or t 3.5 So ft Manu al オプションファイルに記述できるコメント コメントは , 任意のカラムから始めることができます。 コメントは , シャープ (#) で始まります。行終端までコメントになります。 ■ オプションファイルに記述できるコメント 【記述形式】 # コメント そのほかに次のコメントも使用できます。 /* コメント */ // コメント ; コメント 【説明】 コメントは , 任意のカラムから始めることができます。 コメントは , シャープ (#) で始まります。行終端までコメントになります。 【例】 # # F2MC8L カスタマイズオプション # # インクルードパス # -I D:\usr\test\include # テストインクルード # # デファイン # -D SMAP -D VER=2 24 CM81-00208-5, September 1, 2014 Support 3.6 Soft Ma nual デフォルトオプションファイル オプションファイル機能の 1 つですが , 起動時オプション "-f" を指定しなくてもあ らかじめ指定されているオプションファイルを読み込み実行します。 この機能をデフォルトオプションファイルといいます。 ■ デフォルトオプションファイル デフォルトオプションファイルは , 常にアセンブラ起動時に読み込まれますので , 使用 者の環境にあった起動時オプションをあらかじめ指定しておくことができます。 デフォルトオプションファイル機能を抑止するには , コマンドライン上で起動時オプ ション "-Xdof" を指定します。 このオプションが指定されると, デフォルトオプションファイルは読み込まれません。 デフォルトオプションファイル名は , 次のように決まっています。 コマンド名 デフォルトオプションファイル名 fasm896s FASM896.OPT デフォルトオプションファイルの参照手順を次に示します。 ● 環境変数 "OPT896" が設定されている場合 環境変数 "OPT896" で設定されているディレクトリを参照します。 %OPT896%\FASM896.OPT ● 環境変数 "OPT896" が設定されていない場合 開発環境ディレクトリ内のデフォルトオプションファイルを参照します。 %FETOOL%\LIB\896\FASM896.OPT デフォルトオプションファイルは , なくてもかまいません。 September 1, 2014, CM81-00208-5 25 Su pp or t 3.7 So ft Manu al 終了コード 本アセンブラが処理を終了して OS へ制御を戻すときの終了コードです。 ■ 終了コード アセンブラが処理を終了して OS へ制御を戻すときの終了コードです。 このコード値により , アセンブラのおおよその処理状態を知ることができます。 表 3.7-1 に終了コードを示します。 表 3.7-1 終了コード 処理状態 正常終了 ウォーニング発生 終了コード 0 0 または 1 エラー発生 2 異常終了 3 <注意事項> • ウォーニング発生時の終了コードは , -cwno/-Xcwno オプションの指定によります。詳 しくは「4.8.7 -cwno, -Xcwno」を参照してください。 • ウォーニングとエラーが同じに発生した場合は , エラーの終了コードを返します。 • エラーが発生した場合は , オブジェクトファイルは作成されません。 26 CM81-00208-5, September 1, 2014 Support Soft Ma nual 第4章 起動時オプション この章では , アセンブラの起動時オプションについ て説明します。 起動時オプションは , アセンブル処理を制御できま す。 起動時オプションは , オプション識別記号で識別さ れます。 オプション識別記号は , ハイフン (-) です。 4.1 起動時オプションの規則 4.2 起動時オプション一覧 4.3 起動時オプションの詳細 4.4 オブジェクトおよびデバッグに関するオプション 4.5 リスティングに関するオプション 4.6 プリプロセッサに関するオプション 4.7 ターゲット依存オプション 4.8 その他のオプション September 1, 2014, CM81-00208-5 27 Su pp or t 4.1 So ft Manu al 起動時オプションの規則 起動時オプションの規則について説明します。 ■ 起動時オプションの規則 起動時オプション全体に関する仕様について説明します。 説明では , 起動時オプションを単にオプションといいます。 ● 同一オプションの複数指定 同じオプションが複数指定されたときは , 最後に指定されたオプションが有効になり ます。 【例】 fasm896s -o abc test.asm -o def -o def が有効となり , def.obj というオブジェクトファイルを作ります。 ● 複数指定可能オプション • -D name[=def] : マクロ名の指定 • -U name : マクロ名の取り消し • -I path : インクルードパスの指定 • -f filename : オプションファイルの指定 これらのオプションは複数指定可能であり , 指定されたオプションすべてが有効にな ります。 ● オプション指定の位置 オプション指定の位置は , 特別な意味はありません。すなわち , コマンド行のどの位置 で指定しても同じ意味です。 【例】 1.fasm896s -C -name prog test.asm -l 2.fasm896s test.asm -l -name prog -C 1., 2. とも同じ処理が行われます。 ● 排他関係と依存関係 オプションの中には , オプション間で排他関係を持つもの , または依存関係を持つもの があります。これらのオプションが同時に指定されたときは , 最後に指定されたオプ ションが有効になります。 【例】 fasm896s -lf t1 test.asm -Xl -Xl が有効になりリストファイルは作成されません。 28 CM81-00208-5, September 1, 2014 Support Soft Ma nual 起動時オプション一覧 4.2 起動時オプションの一覧を , 表 4.2-1 に示します。 ■ 起動時オプション一覧 表 4.2-1 起動時オプション一覧 (1 / 2) 指定形式 機能概要 初期値 オブジェクトおよびデバッグに関するオプション -o [filename] オブジェクトファイル名の指定 -Xo オブジェクトファイルを作らない -g デバッグ情報出力 -Xg デバッグ情報出力の取り消し 出力する 出力しない リスティングに関するオプション -l リストファイル出力 出力しない -lf filename リストファイル出力 ( ファイル名指定 ) -Xl リストファイル出力の取り消し -pl {0|20-255} リストの 1 頁の行数 60 -pw {80-1023} リストの 1 行の桁数 100 -linf {ON|OFF} インフォメーションリスト出力 ON -lsrc {ON|OFF} ソースリスト出力 ON -lsec {ON|OFF} セクションリスト出力 ON -lcros {ON|OFF} クロスリファレンスリスト出力 OFF -linc {ON|OFF} インクルードファイルリスト出力 ON -lexp {ON|OFF|OBJ} マクロ展開部リスト出力 OBJ -tab {0-32} タブの展開文字数指定 8 プリプロセッサに関するオプション -p プリプロセッサを起動させない -P プリプロセッサのみの起動 -Pf filename プリプロセッサのみの起動 ( ファイル名指定 ) -D name[=def] マクロ名の指定 -U name マクロ名の取り消し -I path インクルードパスの指定 -H インクルードパスを出力 出力しない -C プリプロセッサ出力にコメントを残す 残さない September 1, 2014, CM81-00208-5 起動する 29 Su pp or t So ft Manu al 表 4.2-1 起動時オプション一覧 (2 / 2) 指定形式 機能概要 初期値 ターゲット依存オプション -sa アキュムレータ保護コードの出力 出力しない -Xsa アキュムレータ保護コードの出力抑止 -div_check DIVU 命令に対して警告メッセージを出力する F2MC8L : 出力しない -Xdiv_check DIVU 命令に対して警告メッセージを出力しない F2MC8FX : 出力する その他のオプション 30 -Xdof デフォルトオプションファイルの取り消し -f filename オプションファイルの指定 -w [0-3] 警告メッセージ出力のレベル指定 -name module-name モジュール名の指定 -V 起動メッセージ出力 -XV 起動メッセージ出力の取り消し -cmsg 終了メッセージの出力 -Xcmsg 終了メッセージの出力抑止 -cwno 警告メッセージ出力時終了コード 1 指定 -Xcwno 警告メッセージ出力時終了コード 0 指定 -help ヘルプメッセージの出力 -cpu MB 番号 ターゲットチップ指定 -kanji[EUC|SJIS] 日本語コード系指定 SJIS -LBA .bit 擬似命令の次のラベルをバイトアドレッシン グとして扱う指定 ビットアドレッシング -XLBA .bit 擬似命令の次のラベルをビットアドレッシン グとして扱う指定 -OVFW オーバフローを WARNING レベルとしてコードを 生成する指定 -XOVFW オーバフローをエラーレベルとしてコード生成を 行わなくする指定 -cif CPU 情報ファイ ル名 参照する CPU 情報ファイルの指定 2 表示しない 出力しない 0 指定 表示しない エラーとする CM81-00208-5, September 1, 2014 Support 4.3 Soft Ma nual 起動時オプションの詳細 起動時オプションはその機能により , 次のように分類します。 • オブジェクトおよびデバッグに関するオプション • リスティングに関するオプション • プリプロセッサに関するオプション • ターゲット依存オプション • その他のオプション ここでは , それぞれの起動時オプションの詳細について説明します。 ■ オブジェクトおよびデバッグに関するオプション オブジェクトファイル名の指定やデバッグ情報の出力制御をするオプションです。 ■ リスティングに関するオプション リストファイル名の指定やリスト形式の指定をするオプションです。 ■ プリプロセッサに関するオプション プリプロセッサ処理の動作を指定するオプションです。 ■ ターゲット依存オプション ターゲットチップに依存するオプションです。 ■ その他のオプション その他のオプションとして , オプションファイルの指定 , 警告メッセージ出力のレベル 指定 , モジュール名の指定などがあります。 September 1, 2014, CM81-00208-5 31 Su pp or t 4.4 So ft Manu al オブジェクトおよびデバッグに関するオプション オブジェクトファイル名の指定やデバッグ情報の出力制御をするオプションです。 ■ オブジェクトおよびデバッグに関するオプション オブジェクトおよびデバッグに関するオプションは , 次の 4 種類があります。 32 • -o : オブジェクトファイル名の指定 • -Xo : オブジェクトファイルを作らない • -g : デバッグ情報出力 • -Xg : デバッグ情報出力の取り消し CM81-00208-5, September 1, 2014 Support 4.4.1 Soft Ma nual -o, -Xo -o は , 指定したオブジェクトファイル名でオブジェクトファイルを作成します。 -Xo は , オブジェクトファイルを作成しません。 -o -Xo 両方とも指定がない場合は , ソースファイル名の主ファイル名に拡張子 ".obj" を付けたファイルにオブジェクトを出力します。 ■ -o 【記述形式】 -o [ オブジェクトファイル名 ] 【説明】 指定したオブジェクトファイル名でオブジェクトファイルを作成します。 オブジェクトファイル名を省略した場合 , またはパス名だけを指定した場合は , ソースファイル名の主ファイル名に拡張子 ".obj" を付けたファイルにオブジェクト を出力します。 詳細は , 「3.3.2 ファイル名の省略指定」を参照してください。 【例】 fasm896s ex1 -o ex1_a ■ -Xo 【記述形式】 -Xo 【説明】 オブジェクトファイルを作成しません。 【例】 fasm896s ex1 -Xo September 1, 2014, CM81-00208-5 33 Su pp or t 4.4.2 So ft Manu al -g, -Xg -g は , デバッグ情報を出力します。 -Xg は , デバッグ情報を出力しません。 -g オプション指定がない場合は , デバッグ情報を出力しません。 ■ -g 【記述形式】 -g 【説明】 オブジェクトファイルにデバッグ情報を出力します。 デバッグ情報を出力することにより , シミュレータデバッガまたはエミュレータデ バッガによるシンボリックデバッグが可能になります。 高級言語デバッグなどを行う場合は , このオプションを指定してください。 【例】 fasm896s c_test -g ■ -Xg 【記述形式】 -Xg 【説明】 オブジェクトファイルにデバッグ情報を出力しません。 【例】 fasm896s c_test -Xg 34 CM81-00208-5, September 1, 2014 Support 4.5 Soft Ma nual リスティングに関するオプション アセンブルリストファイル名の指定やリスト形式の指定をするオプションです。 ■ リスティングに関するオプション リスティングに関するオプションは次の 12 種類があります。 • -l : アセンブルリストファイル出力 • -lf : アセンブルリストファイル出力 ( ファイル名指定 ) • -X : アセンブルリストファイル出力の取り消し • -pl : アセンブルリストの 1 頁の行数 • -pw : アセンブルリストの 1 行の桁数 • -linf : インフォメーションリスト出力 • -lsrc : ソースリスト出力 • -lsec : セクションリスト出力 • -lcros : クロスリファレンスリスト出力 • -linc : インクルードファイルリスト出力 • -lexp : マクロ展開部リスト出力 • -tab September 1, 2014, CM81-00208-5 : タブの展開文字数指定 35 Su pp or t 4.5.1 So ft Manu al -l, -lf, -Xl -l は , アセンブルリストファイルを作成します。 -lf は , 指定したファイル名でアセンブルリストファイルを作成します。 -Xl は , アセンブルリストファイルを作成しません。 -l -lf -Xl の 3 つとも指定がない場合は , アセンブルリストファイルを作りません。 ■ -l 【記述形式】 -l 【説明】 アセンブルリストファイルを作成します。 ソースファイル名の主ファイル名に拡張子 ".lst" を付けたファイルにアセンブルリ ストを出力します。 【例】 fasm896s test -l ■ -lf 【記述形式】 -lf アセンブルリストファイル名 【説明】 指定したアセンブルリストファイル名でアセンブルリストファイルを作成します。 パス名だけを指定した場合は , ソースファイル名の主ファイル名に拡張子 ".lst" を付 けたファイルに出力します。 詳細は , 「3.3.2 ファイル名の省略指定」を参照してください。 【例】 fasm896s test -lf \fasm\src ■ -Xl 【記述形式】 -Xl 【説明】 アセンブルリストファイルを作りません。 【例】 fasm896s test -Xl 36 CM81-00208-5, September 1, 2014 Support 4.5.2 Soft Ma nual -pl, -pw -pl は , アセンブルリストの 1 ページの行数を指定します。 -pw は , アセンブルリストの 1 行の桁数を指定します。 ■ -pl 【記述形式】 -pl {0|20 ~ 255} 【説明】 アセンブルリストの 1 ページの行数を指定します。 指定された行数内で 1 ページ分のアセンブルリストが作成されます。 行数は , 20 ~ 255 の範囲で指定できます。 行数に 0 を指定した場合は , 改ページされません。 本オプションの指定がないときの値は , 60 です。 【例】 fasm896s test -pl 0 ■ -pw 【記述形式】 -pw {80 ~ 1023} 【説明】 アセンブルリストの 1 行の桁数を指定します。 桁数は , 80 ~ 1023 の範囲で指定できます。 本オプションの指定がないときの値は , 100 です。 【例】 fasm896s test -pw 80 September 1, 2014, CM81-00208-5 37 Su pp or t 4.5.3 So ft Manu al -linf, -lsrc, -lsec, -lcros アセンブルリストは , 大きく次の 4 つに別れています。 • インフォメーションリスト • ソースリスト • セクションリスト • クロスリファレンスリスト これらのリストをそれぞれ出力するかしないかを指定します。 -linf は , インフォメーションリストを出力するかしないかを指定します。 -lsrc は , ソースリストを出力するかしないかを指定します。 -lsec は , セクションリストを出力するかしないかを指定します。 -lcros は , クロスリファレンスリストを出力するかしないかを指定します。 ■ -linf 【記述形式】 -linf {ON|OFF} ON : インフォメーションリストを出力します。< デフォルト > OFF: インフォメーションリストを出力しません。 【説明】 インフォメーションリストを出力するかしないかを指定します。 ON/OFF の文字は大文字 / 小文字を区別しません。 本オプションの指定がないときは , ON となります。 【例】 fasm896s test -linf off ■ -lsrc 【記述形式】 -lsrc {ON|OFF} ON : ソースリストを出力します。< デフォルト > OFF: ソースリストを出力しません。 【説明】 ソースリストを出力するかしないかを指定します。 ON/OFF の文字は大文字 / 小文字を区別しません。 本オプションの指定がないときは , ON となります。 38 CM81-00208-5, September 1, 2014 Support Soft Ma nual 【例】 fasm896s test -lsrc on ■ -lsec 【記述形式】 -lsec {ON|OFF} ON : セクションリストを出力します。< デフォルト > OFF: セクションリストを出力しません。 【説明】 セクションリストを出力するかしないかを指定します。 ON/OFF の文字は大文字 / 小文字を区別しません。 本オプションの指定がないときは , ON となります。 【例】 fasm896s test -lsec on ■ -lcros 【記述形式】 -lcros {ON|OFF} ON : クロスリファレンスリストを出力します。 OFF: クロスリファレンスリストを出力しません。< デフォルト > 【説明】 クロスリファレンスリストを出力するかしないかを指定します。 ON/OFF の文字は大文字 / 小文字を区別しません。 本オプションの指定がないときは , OFF となります。 【例】 fasm896s test -lcros on September 1, 2014, CM81-00208-5 39 Su pp or t 4.5.4 So ft Manu al -linc, -lexp ソースリスト中には , インクルードファイル , マクロ展開部が含まれますが , これら のリスト出力を制御します。 -linc は , インクルードファイルについてリスト出力を制御します。 -lexp は , マクロ展開部についてリスト出力を制御します。 ■ -linc 【記述形式】 -linc {ON|OFF} ON : インクルードファイルをリストに出力します。< デフォルト > OFF : インクルードファイルをリストに出力しません。 【説明】 インクルードファイルについてリスト出力を制御します。 ON/OFF の文字は大文字 / 小文字を区別しません。 本オプションの指定がないときは , ON となります。 【例】 fasm896s test -linc off ■ -lexp 【記述形式】 -lexp {ON|OFF|OBJ} ON : マクロ展開部をリストに出力します。 OFF : マクロ展開部をリストに出力しません。 OBJ : オブジェクトコードのみリストに出力します。< デフォルト > ( マクロ展開部のテキスト部はリストには出力しません ) 【説明】 マクロ展開部についてリスト出力を制御します。 ON/OFF の文字は大文字 / 小文字を区別しません。 本オプションの指定がないときは , OBJ となります。 【例】 fasm896s test -lexp obj 40 CM81-00208-5, September 1, 2014 Support 4.5.5 Soft Ma nual -tab -tab は , リスト出力時に , タブをスペースで展開するときの文字数を指定します。 ■ -tab 【記述形式】 -tab {0 ~ 32} 【説明】 リスト出力時にタブをスペースで展開するときの文字数を指定します。 本オプションの指定がないときは , 8 となります。 【例】 fasm896s test -tab 4 September 1, 2014, CM81-00208-5 41 Su pp or t 4.6 So ft Manu al プリプロセッサに関するオプション プリプロセッサ処理の動作を指定するオプションです。 ■ プリプロセッサに関するオプション プリプロセッサに関するオプションは次の 8 種類があります。 • -p : プリプロセッサを起動させない • -P : プリプロセッサのみの起動 • -Pf : プリプロセッサのみの起動 ( ファイル名指定 ) • -D : マクロ名の指定 • -U : マクロ名の取り消し • -I : インクルードパスの指定 • -H : インクルードパスを出力 • -C : プリプロセッサ出力にコメントを残す 42 CM81-00208-5, September 1, 2014 Support 4.6.1 Soft Ma nual -p プリプロセッサを起動させないことを指定します。 -p は , 小文字です。 ■ -p 【記述形式】 -p 【説明】 プリプロセッサを起動させないことを指定します。 すなわち , プリプロセッサフェーズを飛ばして直接アセンブルフェーズを行いま す。 プリプロセッサ処理が行われないので処理時間が少なくなります。 高級言語コンパイラが出力するようなプリプロセッサ命令を含まないアセンブル ソースをアセンブルする場合に有効です。 【例】 fasm896s test -p September 1, 2014, CM81-00208-5 43 Su pp or t 4.6.2 So ft Manu al -P, -Pf -P は , プリプロセッサフェーズの前処理結果を出力します。 -Pf は , 指定したファイル名にプリプロセッサフェーズの前処理結果を出力します。 ■ -P 【記述形式】 -P 【説明】 プリプロセッサフェーズの前処理結果をファイルに出力します。 ソースファイル名の主ファイル名に拡張子 ".as" を付けたファイルに出力します。 プリプロセッサ処理のみ行い , アセンブルフェーズの処理は行いません。 【例】 fasm896s test -P ■ -Pf 【記述形式】 -Pf 前処理結果ファイル名 【説明】 指定したファイル名にプリプロセッサフェーズの前処理結果を出力します。 パス名だけを指定した場合は , ソースファイル名の主ファイル名に拡張子 ".as" を付 けたファイルに出力します。 詳細は , 「3.3.2 ファイル名の省略指定」を参照してください。 プリプロセッサ処理のみ行い , アセンブルフェーズの処理は行いません。 【例】 fasm896s test -Pf \fasm\src 44 CM81-00208-5, September 1, 2014 Support 4.6.3 Soft Ma nual -D, -U -D は , マクロ名に定義文字の列を定義します。 -U は , -D で指定されたマクロ名を取り消します。 ■ -D 【記述形式】 -D マクロ名 [= 定義文字の列 ] 【説明】 マクロ名に定義文字の列を定義します。 "-D マクロ名 " と記述し , "= 定義文字の列 " を省略した場合は , 1 が定義されます。 "-D マクロ名 =" と記述し , 定義文字の列だけ記述がない場合は , 空文字が定義され ます。 本オプションは , 複数指定が可能です。 本オプションは , #define 命令と等しい機能を持ちます。 【例】 fasm896s test -D OS_TYPE=3 -D WINDOWS ■ -U 【記述形式】 -U マクロ名 【説明】 -D で指定されたマクロ名を取り消します。 -D と -U オプションの両方で , 同じマクロ名が指定されたときは , オプションの順 番に関係なく , マクロ名を取り消します。 本オプションは , 複数指定が可能です。 本オプションは , #undef 命令と等しい機能を持ちます。 【例】 fasm896s test -D ABC=10 -U ABC September 1, 2014, CM81-00208-5 45 Su pp or t 4.6.4 So ft Manu al -I インクルードパスを指定します。 #include 命令で指定されたインクルードファイルを検索するパスを指定します。 ■ -I 【記述形式】 -I インクルードパス 【説明】 インクルードパスを指定します。 #include 命令で指定されたインクルードファイルを検索するパスを指定します。 本オプションは , 複数指定が可能です。指定順に検索されます。 #include 命令については , 「第 II 部 文法編」の「11.9 #include 命令」を参照してく ださい。 【例】 fasm896s test -I \INCLUDE -I \FFMC8L 46 CM81-00208-5, September 1, 2014 Support 4.6.5 Soft Ma nual -H #include 命令で読み込まれるインクルードファイルのパス名を標準出力に出力しま す。 パス名は読み込まれる順に 1 行に 1 つずつ出力します。 ■ -H 【記述形式】 -H 【説明】 #include 命令で読み込まれるインクルードファイルのパス名を , 標準出力に出力し ます。 パス名は読み込まれる順に 1 行に 1 つずつ出力します。 インクルードファイルの検索でファイルが見付からなかったパス名は出力しませ ん。 【例】 fasm896s test -I \INCLUDE -I \FFMC8L -H September 1, 2014, CM81-00208-5 47 Su pp or t 4.6.6 So ft Manu al -C プリプロセッサ処理で , コメントおよび空白をすべて残します。 本オプションの指定がないときは , コメントおよび空白は 1 つの空白文字に置き換 えられます。 ■ -C 【記述形式】 -C 【説明】 プリプロセッサ処理で , コメントおよび空白をすべて残します。 本オプションの指定がないときは , コメントおよび空白は 1 つの空白文字に置き換 えられます。このオプション指定により , アセンブルフェーズの処理の負担を少な くしています。 【例】 fasm896s test -C 48 CM81-00208-5, September 1, 2014 Support 4.7 Soft Ma nual ターゲット依存オプション ターゲットチップに依存するオプションです。 ■ ターゲット依存オプション ターゲット依存オプションには次の 4 種類があります。 ● F2MC-8L/8FX ファミリのみ • -sa : アキュムレータ保護コード出力の指定 • -Xsa : アキュムレータ保護コード出力抑止の指定 • -div_check :DIVU 命令に対して警告メッセージを出力する指定 • -Xdiv_check :DIVU 命令に対して警告メッセージを出力しない指定 September 1, 2014, CM81-00208-5 49 Su pp or t 4.7.1 So ft Manu al -sa, -Xsa アキュムレータ保護コードの出力に関してのオプションです。 -sa は , アキュムレータ保護コードを出力します。 -Xsa は , アキュムレータ保護コードを出力しません。 ■ -sa 【記述形式】 -sa 【説明】 アキュムレータ保護コードの出力を行います。 構造化命令の式の前後でアキュムレータが変更されないように保護コードを出力 します。 【例】 fasm896s test -sa ■ -Xsa 【記述形式】 -Xsa 【説明】 アキュムレータ保護コードの出力を抑止します。 【例】 fasm896s test -sa -Xsa 50 CM81-00208-5, September 1, 2014 Support 4.7.2 Soft Ma nual -div_check, -Xdiv_check -div_check は , DIVU 命令に対して警告メッセージを出力します。 -Xdiv_check は , DIVU 命令に対して警告メッセージを出力しません。 ■ -div_check 【記述形式】 -div_check 【説明】 DIVU 命令に対して以下の警告メッセージを出力します。 エラー番号 日 メッセージ DIVU 命令が検出されました W1806A 英 DIVU is detected 【例】 fasm896s test -div_check ■ -Xdiv_check 【記述形式】 -Xdiv_check 【説明】 DIVU 命令に対して警告メッセージを出力しません。 【例】 fasm896s test -div_check -Xdiv_check ■ デフォルト動作について ファミリ種別 デフォルト動作 F2MC-8L ファミリ -Xdiv_check 指定時と同じ F2MC-8FX ファミリ -div_check 指定時と同じ September 1, 2014, CM81-00208-5 51 Su pp or t So ft Manu al ■ DIVU 命令チェック機能について F2MC-8FXファミリはDIVU命令の動作が従来のF2MC-8Lファミリと異なるためF2MC8L ファミリ用アセンブラソースを F2MC-8FX ファミリ用に流用する場合 , DIVU 命令 が使用されている箇所について問題がないか確認する必要があります。 アセンブラソース内のDIVU命令の使用について調べるには, エディタなどで検索する ことで可能ですが , -div_check オプションを指定することでアセンブル時に検出できま す。 52 CM81-00208-5, September 1, 2014 Support 4.8 Soft Ma nual その他のオプション その他のオプションとして , オプションファイルの指定 , 警告メッセージ出力のレベ ル指定 , およびモジュール名の指定などがあります。 ■ その他のオプション その他のオプションは次の 18 種類があります。 • -Xdof : デフォルトオプションファイルの取り消し • -f : オプションファイルの指定 • -w : 警告メッセージ出力のレベル指定 • -name : モジュール名の指定 • -V : 起動メッセージの表示 • -XV : 起動メッセージ表示の取り消し • -cmsg : 終了メッセージの出力 • -Xcmsg : 終了メッセージ出力の抑止 • -cwno : ウォーニング時終了コード 1 指定 • -Xcwno : ウォーニング時終了コード 0 指定 • -help : ヘルプメッセージの表示 • -cpu : ターゲットチップの指定 • -kanji : 日本語コード系の指定 • -LBA :.bit 擬似命令の次のレベルをバイトアドレスとして扱う • -XLBA :.bit 擬似命令の次のレベルをビットアドレスとして扱う • -OVFW : オーバフローを WARNING にする • -XOVFW : オーバフローを ERROR にする • -cif September 1, 2014, CM81-00208-5 : 参照する CPU 情報ファイルの指定 53 Su pp or t 4.8.1 So ft Manu al -Xdof デフォルトオプションファイルの読み込みを取り消します。 本オプションの指定がないときは , デフォルトオプションファイルは常に読み込ま れます。 ■ -Xdof 【記述形式】 -Xdof 【説明】 デフォルトオプションファイルの読み込みを取り消します。 本オプションの指定がないときは , デフォルトオプションファイルは常に読み込ま れます。 デフォルトオプションファイルに関しては , 「3.6 デフォルトオプションファイル」 を参照してください。 【例】 fasm896s test -Xdof 54 CM81-00208-5, September 1, 2014 Support 4.8.2 Soft Ma nual -f 指定したオプションファイルを読み込みます。 オプションファイルには , fasm896s オプションが記述できます。 ■ -f 【記述形式】 -f オプションファイル名 【説明】 指定したオプションファイルを読み込みます。 オプションファイル名に拡張子を省略した場合は , 拡張子 ".opt" を補います。 オプションファイルには , fasm896s オプションが記述できます。 本オプションファイルは , 複数指定が可能です。 オプションファイルに関しては , 「3.4 オプションファイル」を参照してください。 【例】 fasm896s test -f test.opt September 1, 2014, CM81-00208-5 55 Su pp or t 4.8.3 So ft Manu al -w 警告メッセージの出力レベルを設定します。 警告レベルに 0 を指定した場合は , 警告メッセージは 1 つも出力されません。 ■ -w 【記述形式】 -w [ 警告レベル ] 【説明】 警告メッセージの出力レベルを設定します。 警告レベルに 0 を指定した場合は , 警告メッセージは 1 つも出力されません。 警告レベルを省略した場合は , 2 となります。 本オプションの指定がないときは , 2 となります。 警告レベルと出力される警告メッセージに関しては ,「付録 A エラーメッセージ一 覧」を参照してください。 警告レベルと出力される警告メッセージを次に示します。 表 4.8-1 警告レベルと出力される警告メッセージ 警告レベル 0 1, 2 3 警告メッセージ すべての警告メッセージを出力しません エラー番号 W1551A, W1711A 以外の警告メッセージを出力 すべての警告メッセージを出力 【例】 fasm896s test -w 0 ■ エラー番号 W1551A ソースファイルの最後に .END 命令がなかったときに , 警告を出力します。 ■ エラー番号 W1711A .ORG 命令でアドレスが戻ったときに , 警告を出力します。 56 CM81-00208-5, September 1, 2014 Support 4.8.4 Soft Ma nual -name モジュール名を指定します。 モジュール名は , .PROGRAM 命令よりも本オプションで指定した名前が有効になり ます。 ■ -name 【記述形式】 -name モジュール名 【説明】 モジュール名を指定します。 モジュール名は , 名前の規則に従います。 モジュール名は, .PROGRAM命令よりも本オプションで指定した名前が有効になり ます。 【例】 fasm896s test -name prog September 1, 2014, CM81-00208-5 57 Su pp or t 4.8.5 So ft Manu al -V, -XV -V は , アセンブラ実行時に , 起動メッセージを表示します。 -XV は , 起動メッセージの表示を取り消します。 -V, -XV 両方とも指定がない場合は , 起動メッセージは表示されません。 ■ -V 【記述形式】 -V 【説明】 アセンブラ実行時に , 起動メッセージを表示します。 起動メッセージは , 実行されたアセンブラのバージョン情報とコピーライトを表示 します。 【例】 fasm896s test -V ■ -XV 【記述形式】 -XV 【説明】 起動メッセージの表示を取り消します。 【例】 fasm896s test -V -XV 58 CM81-00208-5, September 1, 2014 Support 4.8.6 Soft Ma nual -cmsg, -Xcmsg -cmsg は , アセンブラ実行時に , 終了メッセージを表示します。 -Xcmsg は , 終了メッセージの表示を取り消します。 -cmsg, -Xcmsg 両方とも指定がない場合は , 終了メッセージは表示されません。 ■ -cmsg 【記述形式】 -cmsg 【説明】 アセンブラ実行時に , 終了メッセージを表示します。 【例】 fasm896s test -cmsg ■ -Xcmsg 【記述形式】 -Xcmsg 【説明】 終了起動メッセージの表示を取り消します。 【例】 fasm896s test -cmsg -Xcmsg September 1, 2014, CM81-00208-5 59 Su pp or t 4.8.7 So ft Manu al -cwno, -Xcwno -cwno は , 警告メッセージ出力時のアセンブラの終了コードを 1 にします。 -Xcwno は , 警告メッセージ出力時のアセンブラの終了コードを 0 にします。 -cwno, -Xcwno 両方とも指定がない場合は , 警告メッセージ出力時のアセンブラの 終了コードは 0 です。 ■ -cwno 【記述形式】 -cwno 【説明】 警告メッセージ出力時のアセンブラの終了コードを 1 にします。 【例】 fasm896s test -cwno ■ -Xcwno 【記述形式】 -Xcwno 【説明】 警告メッセージ出力時のアセンブラの終了コードを 0 にします。 【例】 fasm896s test -cwno -Xcwno 60 CM81-00208-5, September 1, 2014 Support 4.8.8 Soft Ma nual -help 起動時オプションの一覧を表示します。 これをヘルプメッセージといいます。 ■ -help 【記述形式】 -help 【説明】 起動時オプションの一覧を表示します。 これをヘルプメッセージといいます。 本オプションを指定したときは , アセンブル処理を行いません。 【例】 fasm896s test -help September 1, 2014, CM81-00208-5 61 Su pp or t 4.8.9 So ft Manu al -cpu ターゲットチップの指定を行います。 ターゲットチップには , 使用する製品名を指定します。 ■ -cpu 【記述形式】 -cpu ターゲット ターゲット : 使用する製品名 【説明】 ターゲットチップの指定を行います。 ターゲットには , 使用する製品名を指定します。 【例】 fasm896s test -cpu MB89051 fasm896s test -cpu MB89F051 62 CM81-00208-5, September 1, 2014 Support 4.8.10 Soft Ma nual -kanji 日本語コード系の指定を行います。 ■ -kanji 【記述形式】 -kanji [EUC|SJIS] EUC:EUC コード系を指定する。 SJIS: シフト JIS コード系を指定する。 【説明】 ソースプログラム中のコメント , 文字数 , および文字列定数に記述された日本語 コード系を指定します。 本オプションの指定がない場合は , SJIS が指定されたものとみなします。 【例】 fasm896s test -kanji EUC September 1, 2014, CM81-00208-5 63 Su pp or t 4.8.11 So ft Manu al -LBA, -XLBA -LBA は , .bit などのビットアドレッシングをとる擬似命令の後にラベルの定義のみ の行が記述された場合に , そのラベルをバイトアドレッシングとして扱います。 -XLBA は , .bit などのビットアドレッシングをとる擬似命令の後にラベルの定義の みの行が記述された場合に , そのラベルをビットアドレッシングとして扱います。 -LBA, -XLBA 両方とも指定がない場合は , -XLBA が指定された場合と同様の動作に なります。 ■ -LBA 【記述形式】 -LBA 【説明】 .bit, .data.i, .res.i のいずれかの擬似命令が記述された行の直後の行にラベル定義のみ の行が記述された場合に , そのラベルをバイトアドレスとして処理します。この場 合 , ラベルのアドレスはバイト境界に調整されます。 【例】 fasm896s test -LBA 実行結果は以下のようになります。 000000:0 0 .bit 0 000000:1 0 LBL1: 000001 LBL2: 000001:0 1 .bit 0 .bit 1 ■ -XLBA 【記述形式】 -XLBA 【説明】 .bit, .data.i, .res.i のいずれかの擬似命令が記述された行の直後の行にラベル定義のみ の行が記述された場合に , そのラベルをビットアドレスとして処理します。この場 合 , ラベルのアドレスは直前のビットアドレスの次のビットアドレスになります。 64 CM81-00208-5, September 1, 2014 Support Soft Ma nual 【例】 fasm896s test -XLBA 実行結果は以下のようになります。 000000:0 0 .bit 0 000000:1 0 LBL1: 000000: LBL2: 000000:2 1 September 1, 2014, CM81-00208-5 .bit 0 .bit 1 65 Su pp or t 4.8.12 So ft Manu al -OVFW, -XOVFW -OVFW オプションは , 式を記述できるオペランドの演算結果が , そのオペランドサ イズを超える場合に WARNING メッセージを表示します。 -XOVFW オプションは , 式を記述できるオペランドの演算結果が , そのオペランド サイズを超える場合に ERROR メッセージを表示します。 ■ -OVFW 【記述形式】 -OVFW 【説明】 -OVFWオプションは, 式を記述できるオペランドの演算結果がそのオペランドサイ ズを超える場合 , 以下のような処理を行います。 式を記述できるオペランドには , 即値 , アドレス値があります。 - WARNING メッセージ (W1541A: 値が範囲外です ) を出力します。 - オブジェクトファイルを出力します。 - オペランドの演算結果をオペランドサイズに合わせてマスクして , 下位ビットの みを設定してコードを出力します。 - アセンブルリスト出力指定オプション (-l) を指定した場合 , アセンブルリストを 出力します。 以下に本オプションの指定例と , アセンブルリスト出力例を示します。 アセンブルリストを出力する場合は , アセンブルリスト出力指定オプション (-l) を 指定してください。 【例】 fasm896s test -OVFW -l ・出力リスト アセンブラは, 式の演算を32ビットで行っているため, ~(8008H)の演算結果は, FFFF7FF7Hとなります。 ~(8008H)=FFFF7FF7Hは16ビットでマスクされ, オブジェクトとリストに出力される値は7FF7Hになります。 SN LOC OBJ <test.asm> LLINE SOURCE ===== : CO 0000 E47FF7 2 T MOVW A,#~(8008H) *** test.asm(2) W1541A: Value out of range (in operand 2) : 66 -OVFW指定時は, WARNINGが出力されます。 CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ -XOVFW 【記述形式】 -XOVFW ( デフォルト ) 【説明】 -XOVFW オプションは , 式を記述できるオペランドの演算結果がそのオペランドサ イズを超える場合 , 以下のような処理を行います。 式を記述できるオペランドには , 即値 , アドレス値があります。 - ERROR メッセージ (E4541A: 値が範囲外です ) を出力します。 - オブジェクトファイルは出力しません。 - アセンブルリストには , オペランドの演算結果をオペランドサイズに合わせてマ スクして , 下位ビットのみを設定してアセンブルリストにコードを出力します。 - アセンブルリスト出力指定オプション (-l) を指定した場合 , アセンブルリストを 出力します。 以下に本オプションの指定例と , アセンブルリスト出力例を示します。 アセンブルリストを出力する場合は , アセンブルリスト出力指定オプション (-l) を 指定してください。 アセンブルリストは , エラー発生時にも出力されます。 【例】 fasm896s test -XOVFW -l ・出力リスト アセンブラは, 式の演算を32ビットで行っているため, ~(8008H)の演算結果は, FFFF7FF7Hとなります。 ~(8008H)=FFFF7FF7Hは16ビットでマスクされ, リストに出力される値は7FF7Hになります。 SN LOC OBJ <test.asm> LLINE SOURCE ===== : CO 0000 E47FF7 2 T MOVW A,#~(8008H) *** test.asm(2) E4541A: Value out of range (in operand 2) : September 1, 2014, CM81-00208-5 -XOVFW指定時は, ERRORが出力されます。 67 Su pp or t 4.8.13 So ft Manu al -cif -cif は , SOFTUNE Tools が参照する CPU 情報ファイルを指定します。 ■ -cif 【記述形式】 -cif CPU 情報ファイル名 CPU 情報ファイル名 : 参照する CPU 情報ファイル名 【説明】 SOFTUNE Tools が参照する CPU 情報ファイルを指定します。 【例】 fasm896s test -cpu MB89603 -cif "C:\SOFTUNE\lib\896\896.csv" <注意事項> SOFTUNE Tools は , CPU 情報ファイルを参照して , CPU に関する情報を取得します。 関連するツール間で異なる CPU 情報ファイルを参照した場合 , 作成するプログラムに問 題が発生する可能性があります。 SOFTUNE Tools に標準で添付されている CPU 情報ファイルは , 以下の場所にあります。 インストール先ディレクトリ \lib\896\896.csv コンパイラ・アセンブラパックを異なるディレクトリにインストールし , SOFTUNE Workbenchを使用せずにコンパイラ, アセンブラおよびリンケージエディタを使用する場 合, 各ツールに対して同一のCPU情報ファイルを参照するように-cifで指定してください。 68 CM81-00208-5, September 1, 2014 Support Soft Ma nual 第5章 最適コードチェック機能 について この章では , アセンブラの最適コードチェック機能 について説明します。 最適コードチェック機能とは , プログラムをさらに 高速に実行できる命令コードに書き換え可能な個 所を検出する機能です。 5.1 fasm896s の最適コードチェック機能 September 1, 2014, CM81-00208-5 69 Su pp or t 5.1 So ft Manu al fasm896s の最適コードチェック機能 fasm896s では , プログラムの動作に支障がない範囲で , 次の 1 つの最適化可能なプ ログラム個所の検出を行います。 • 分岐命令の最適化 ■ 分岐命令の最適化 分岐命令に対して分岐先ラベルまでの距離により, 生成する命令の最適化を行います。 最適化対象命令を次に示します (16 ビット分岐拡張命令 )。 ● 対象命令 :Bcc16 本最適化は常に行われます。 16 ビット分岐拡張命令に対して行われる最適化です。 16 ビット分岐拡張命令と生成される命令の関係を表 5.1-1 に示します。 表 5.1-1 16 ビット分岐拡張命令から生成される命令 (1 / 3) 分岐拡張命令 BZ16 label BNZ16 label BEQ16 label BNE16 label BC16 label BNC16 label BLO16 label 70 動作 (Z)=1 なら分岐 (Z)=0 なら分岐 (Z)=1 なら分岐 (Z)=0 なら分岐 (C)=1 なら分岐 (C)=0 なら分岐 (C)=1 なら分岐 距離 生成される命令 -128 ~ +127 BZ label その他 BNZ $+5 JMP label -128 ~ +127 BNZ label その他 BZ $+5 JMP label -128 ~ +127 BEQ label その他 BNE $+5 JMP label -128 ~ +127 BNE label その他 BEQ $+5 JMP label -128 ~ +127 BC label その他 BNC $+5 JMP label -128 ~ +127 BNC label その他 BC $+5 JMP label -128 ~ +127 BLO label その他 BHS $+5 JMP label CM81-00208-5, September 1, 2014 Support Soft Ma nual 表 5.1-1 16 ビット分岐拡張命令から生成される命令 (2 / 3) 分岐拡張命令 BHS16 label BN16 label 動作 (C)=0 なら分岐 (N)=1 なら分岐 距離 -128 ~ +127 BHS label その他 BLO $+5 JMP label -128 ~ +127 BN label その他 BP $+5 JMP label -128 ~ +127 BP16 label BLT16 label BGE16 label BBC16 bit, label BBS16 bit, label BV16 label BNV16 label September 1, 2014, CM81-00208-5 (N)=0 なら分岐 (V)xor(N)=1 なら分岐 (V)xor(N)=0 なら分岐 (bit)=0 なら分岐 (bit)=1 なら分岐 生成される命令 BP label その他 BN $+5 JMP label -128 ~ +127 BLT label その他 BGE $+5 JMP label -128 ~ +127 BGE label その他 BLT $+5 JMP label -128 ~ +127 BBC bit, label その他 BBS bit, $+6 JMP label -128 ~ +127 BBS bit, label その他 BBC bit, $+6 JMP label -128 ~ +122 BN $+7 BLT label JMP $+5 BGE label その他 BN $+7 BGE $+10 JMP label BLT $+5 JMP label -128 ~ +122 BN $+7 BGE label JMP $+5 BLT label その他 BN $+7 BLT $+10 JMP label BGE $+5 JMP label (V)=1 なら分岐 (V)=0 なら分岐 71 Su pp or t So ft Manu al 表 5.1-1 16 ビット分岐拡張命令から生成される命令 (3 / 3) 分岐拡張命令 BLE16 label BGT16 label BLS16 label BHI16 label 72 動作 距離 生成される命令 -128 ~ +125 BEQ label BLT label その他 BEQ $+4 BGE $+5 JMP label -128 ~ +127 BEQ $+4 BGE label その他 BEQ $+7 BLT $+5 JMP label -128 ~ +125 BEQ label BLO label その他 BEQ $+4 BHS $+5 JMP label -128 ~ +127 BEQ $+4 BHS label その他 BEQ $+7 BLO $+5 JMP label (Z)or((N)or(V))=1 なら分岐 (Z)or((N)or(V))=0 なら分岐 (Z)or(C)=1 なら分岐 (Z)or(C)=0 なら分岐 CM81-00208-5, September 1, 2014 Support Soft Ma nual 第6章 アセンブルリスト この章では , アセンブルリストの内容について説明 します。 6.1 全体形式 6.2 ページの形式 6.3 インフォメーションリスト 6.4 ソースリスト 6.5 セクションリスト 6.6 クロスリファレンスリスト September 1, 2014, CM81-00208-5 73 Su pp or t 6.1 So ft Manu al 全体形式 アセンブルリストは , 起動時オプションで "-l" または "-lf" が指定されたときに作成 されます。 アセンブルリストは次の 4 つの部分から構成されています。 • インフォメーションリスト • ソースリスト • セクションリスト • クロスリファレンスリスト ■ 全体形式 アセンブルリストは , 起動時オプションで "-l" または "-lf" が指定されたときに作成さ れます。 アセンブルリストは次の 4 つの部分から構成されています。 ● インフォメーションリスト 起動時の指定内容 , エラー数 , ウォーニング数 , ソースファイル名 , インクルードファ イル名 , およびオプションファイル名などが出力されます。 ● ソースリスト ソースリストは , ソースプログラムをアセンブルしたときの様々な情報を行単位に出 力します。 エラー情報 , ロケーション , およびオブジェクトデータなどが出力されます。 ● セクションリスト ソースプログラム内で定義されたセクションの名前 , 属性などが出力されます。 ● クロスリファレンスリスト ソースプログラム内で使用されているシンボル名の定義 , および参照されている行番 号を出力します。 ■ 起動時オプションとの関係 それぞれのリスト部は , 起動時オプションで出力制御できます。 起動時オプションの詳細は , 「4.5 リスティングに関するオプション」を参照してくだ さい。 表 6.1-1 にそれぞれのリスト部と起動時オプションとの関係を示します。 74 CM81-00208-5, September 1, 2014 Support Soft Ma nual 表 6.1-1 リスト部と起動時オプションとの関係 リスト部 起動時オプション 初期値 インフォメーションリスト -linf {ON|OFF} ON: 出力する ソースリスト -lsrc {ON|OFF} ON: 出力する セクションリスト -lsec {ON|OFF} ON: 出力する クロスリファレンスリスト September 1, 2014, CM81-00208-5 -lcros {ON|OFF} OFF: 出力しない 75 Su pp or t 6.2 So ft Manu al ページの形式 アセンブルリストを構成するページの形式は , 起動時オプションまたは擬似命令で その大きさを指定できます。 起動時オプションでは , 行数は "-pl", 桁数は "-pw" で指定します。 擬似命令では , 行数は ".FORM LIN", 桁数は ".FORM COL" で指定します。 ■ インフォメーションリスト アセンブルリストを構成するページの形式は , 起動時オプションまたは擬似命令でそ の大きさを指定できます。 起動時オプションでは , 行数は "-pl", 桁数は "-pw" で指定します。 擬似命令では , 行数は ".FORM LIN", 桁数は ".FORM COL" で指定します。 ヘッダは 4 行あります。 図 6.2-1 にこの関係を示します。 図 6.2-1 ページの形式 ヘッダ 行数 桁数 指定範囲 行数 0,20~255 桁数 60~1023 初期値 60 100 (注意事項)行数に0を指定した場合は改ページされません。 76 CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ ヘッダの形式 ヘッダは 4 行で構成されています。4 行目は空白行です。 図 6.2-2 ヘッダの形式 [ヘッダ1~2行目の形式] F2MC-8L/8FX Family SOFTUNE Assembler V30L08 アセンブラ名/バージョン 2003-06-26 15:44:08 Page: 1 アセンブル日時 先頭からの通し頁番号 [ヘッダ3行目の形式] ・インフォメーションリスト F2MC-8L/8FX Family SOFTUNE Assembler V30L08 2003-06-26 15:44:08 Page: 1 モジュール名 - ASSEMBLE INFORMATION - ( sample ) ・ソースリスト F2MC-8L/8FX Family SOFTUNE Assembler V30L08 * 2003-06-26 15:44:08 Page: 2 モジュール名 - SOURCE LISTING - ( sample ) *:この行は,.TITLE命令または,.HEADING命令で指定された文字列に変更できます。 ・セクションリスト F2MC-8L/8FX Family SOFTUNE Assembler V30L08 2003-06-26 15:44:08 Page: 10 モジュール名 - SECTION LISTING - ( sample ) ・クロスリファレンスリスト F2MC-8L/8FX Family SOFTUNE Assembler V30L08 2003-06-26 15:44:08 Page: 11 - CROSSREFERENCE LISTING - ( sample ) モジュール名 [ヘッダ4行目の形式] 必ず空白行が出力されます。 September 1, 2014, CM81-00208-5 77 Su pp or t 6.3 So ft Manu al インフォメーションリスト アセンブルリストを構成するページの形式は , 起動時オプションまたは擬似命令で その大きさを指定できます。 ■ インフォメーションリスト 【形式 1】 図 6.3-1 インフォメーションリスト ( 形式 1) ___ ______________________________________________________________________ F2MC-8L/8FX Family SOFTUNE Assembler V30L08 - ASSEMBLE INFORMATION - ( sample ) | 2003-06-26 15:44:08 Page: 1 モジュール名 Command line : fasm896s sample -C -W 2 Total errors Total warnings : 0 : 0 There were no errors. Object file List file : sample.obj : sample.lst アセンブル時の コマンド指定 | | | | | | | | | エラーがなかった場合 表示されます。 オブジェクトファイル名 リストファイル名 | | | | | CREATE DATE/TIME |NO NEST SOURCE-FILE-NAME |-- --------- ------------------------------------------------------- -------------------------2003-03-01 09:00:00 sample.asm | |0 |-- --------- ------------------------------------------------------- -------------------------- | | ソースファイル名 | | ファイル作成日時 | | | Current path : D:\ ファイル追番 | (0から) | Include path : INC896 = D: \INCLUDE\ Work file path : TMP = D: \TMP\ Default Option file : OPT896 = D: \(fasm896.opt) | アセンブル時の カレントディレクトリ ワークディレクトリ デフォルトオプション ファイルディレクトリ (およびファイル名) | | 環境変数名 |NO NEST OPTION-FILE-NAME |-------------- ------------------------ |0 D:\fasm896.opt | ------------------------ | オプション ファイル名 -l -P -lcros on | ________________________________________ 78 環境変数指定状況 CREATE DATE/TIME -------------2003-03-0109:00:00 | | | | ファイル内容 | CM81-00208-5, September 1, 2014 Support Soft Ma nual 【形式 2】 図 6.3-2 インフォメーションリスト ( 形式 2) _______________________________________________________________________ F2MC-8L/8FX Family SOFTUNE Assembler V30L08 - ASSEMBLE INFORMATION - ( sample ) 2003-06-26 15:44:08 Page: 1 モジュール名 Command line : fasm896s sample -C -W 2 | ** Total errors : 2 ( First Line: 22) | | ** Total warnings : 3 ( First Line: 7) | | | | | | エラーかウォーニングが Object file あったときは, *を表示 List file | : - None - エラーかウォーニングがあったときは,その数と 最初に見つかった行のリスト行番号を表示 | : sample.lst | | | |NO NEST SOURCE-FILE-NAME CREATE DATE/TIME | |-- ------------- ------------------------------------------------------- -------------------------------------- | sample.asm |0 2003-03-01 09:00:00 | |-- ------------- ------------------------------------------------------- -------------------------------------- | |1* sample.h 2003-03-01 09:02:00 | |-- ------------- ------------------------------------------------------- -------------------------------------- | | インクルードのネスト状況(*の数がネストの深さを示します) | | | | Current path : D:\WORK\ | | Include path : INC896 = -None- = D:\TOOL\LIB \896\INCLUDE\ | | Work file path : TMP = D:\TMP\ | | Default Option file : OPT896 = -None- = D:\TOOL\LIB \896\(fasm896.opt)\ | | | | | |______________________________________________________________________| オプションファイルエラーが存在しない場合は, ファイル内容は表示されません。 September 1, 2014, CM81-00208-5 79 Su pp or t 6.4 So ft Manu al ソースリスト ソースリストは , ソースプログラムをアセンブルしたときの様々な情報を行単位に 出力します。 エラー情報 , ロケーション , オブジェクトデータなどが出力されます。 ■ ソースリスト 図 6.4-1 ソースリスト ____________________________________________________________________________ F2MC-8L/8FX Family SOFTUNE Assembler V30L08 2003-06-26 15:44:08 Page: 2 - SOURCE LISTING - ( sample ) SN LOC OBJ LINE SOURCE ==== DA 000 ------------<DATA>------------ DA 000 ABCD 0123 DA 004 0020 0010 .SECTION DATA.DATA 1 2 CO 000 ------------<CODE>------------ rel: .DATA.W 0xABCD.0x123 3 .DATA.H 4 .SECTION CODE.CODE 32,16 CO 000 00 5 NOP CO 001 00 6 NOP CO 002 00 7 NOP 8 .IMPORT imp CO 003 0400 I 9 MOV A,#imp CO 005 600000 S 10 MOV A,DATA CO 008 0400 R 11 MOV A,#rel CO 00A 0500 12 MOV A,0x00 オプションコード値 ロケーション値 (16進数表示) セクション名の先頭2文字までを 表示します。 ソースプログラム表示 1行に表示できない場合は,複数行に 折り返して表示します。 リスト番号表示 オブジェクトファイル中のリスト行番号に 相当します。 オブジェクトコードに含まれる値の属性を次の優先順位で表示します。 I :外部参照値 S:セクション値 R:相対値 空:絶対値 80 CM81-00208-5, September 1, 2014 Support Soft Ma nual プリプロセッサ処理 6.4.1 プリプロセッサで処理された行に対して表示される記号です。 ■ プリプロセッサ処理 図 6.4-2 プリプロセッサ処理 SN LOC : OBJ : LLINE : SOURCE : : 2 DA 0000 0001 3 4 #ifdef DEF1 X .DATA 0 /* then */ #else 5 6 .DATA 1 /* else */ #endif プリプロセッサの処理状況表示 空:通常 プリプロセッサ X:アセンブル対象外となった行 &:マクロ展開行 September 1, 2014, CM81-00208-5 81 Su pp or t 6.4.2 So ft Manu al エラー表示 エラーが発生した行に対して出力されるリスト形式です。 ■ エラー表示 図 6.4-3 エラーのリスト形式 SN LOC OBJ LLINE : : : DA 0000 0000I : SOURCE : 2 *** sample.asm(2) W1527A: 未定義シンボルです(un_def) .DATA un_def エラー認識番号 ソースファイル中の行番号 (リスト行番号でない) ソースファイル名 W 1 5 2 7 A ツール識別子 A:アセンブラ エラー番号(3桁) エラーレベル W1: 警告レベル E4: 文法エラー F9: 致命的なエラー(アセンブル異常終了) 82 CM81-00208-5, September 1, 2014 Support Soft Ma nual インクルードファイル 6.4.3 #include 命令で読み込まれたファイルに対して出力されるリスト形式です。 ■ インクルードファイル 図 6.4-4 インクルードファイルのリスト形式 SN LOC : OBJ : LLINE : SOURCE : 2 : #include "sample.h" ===== <sample.h> CO0000 00 3=1 NOP CO0001 00 4=1 NOP CO0002 00 5=1 NOP <sample.asm> ===== インクルードファイル名 インクルードから 戻ったところの ファイル名 September 1, 2014, CM81-00208-5 インクルードネスト数 最大8まで -linc off / .LIST NOINCの場合には この部分は表示しません。 ただし,エラーメッセージは 表示します。 83 Su pp or t 6.4.4 So ft Manu al .END, .PROGRAM, .SECTION プログラム構造定義命令のリスト形式です。 • .END: ソースプログラムの終了 • .PROGRAM: モジュール名の宣言 • .SECTION: セクションの定義 ■ .END 図 6.4-5 .END のリスト形式 SN LOC OBJ : : LLINE SOURCE : : : == 25 .END => 00000300 25 .END 0x300 25 .END start または または => 00000010 R スタートアドレス指定が ある場合は16進数で表示する。 R:相対値 空:絶対値 なお , .END 命令以降にソースプログラムが書かれていてもアセンブルされません。 また , リストにも表示されません。 ■ .PROGRAM 図 6.4-6 .PROGRAM のリスト形式 SN LOC : : OBJ LLINE : MODULE NAME = test_module1 : 9 SOURCE : .PROGRAM test _ module1 モジュール名として設定された文字列を表示します。 長い場合は折り返して表示します。 84 CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ .SECTION 図 6.4-7 .SECTION のリスト形式 SN LOC : : OBJ LLINE : : SE 0000 ------------<SEC1>-----------: : : : .SECTION : SE 0010 ------------<SEC2>-----------ロケーション 4 SOURCE 19 SEC1,CO DE,ALIGN1 : .SECTION SEC2,CODE,LOCATE=0x10 セクション名 セクション名が表示枠より長すぎる場合は, 後部をカットして表示します。 セクション名の先頭2文字を表示します。 September 1, 2014, CM81-00208-5 85 Su pp or t 6.4.5 So ft Manu al .ALIGN, .ORG, .SKIP アドレス制御命令のリスト形式です。 • .ALIGN : 境界整列 • .ORG : ロケーションカウンタ値の変更 • .SKIP : ロケーションカウンタ値のインクリメント ■ .ALIGN 図 6.4-8 .ALIGN のリスト形式 SN LOC : OBJ : LLINE : SOURCE : CO 0004 - 0001 [3] < [4] 16 : .ALIGN 4 指定されたALIGN値(10進数) ALIGN境界までのオフセット値(10進数) ALIGN前のロケーション ALIGN後のロケーション ■ .ORG 図 6.4-9 .ORG のリスト形式 SN LOC : OBJ : LLINE : SOURCE : CO 0050 16 : .ORG 0x50 ORG後のロケーション ■ .SKIP 図 6.4-10 .SKIP のリスト形式 SN LOC : : OBJ LLINE : : CO 002A - 0020 [10] 16 SOURCE : .SKIP 10 SKIP値として指定された値(10進数) SKIP前のロケーション SKIP後のロケーション 86 CM81-00208-5, September 1, 2014 Support 6.4.6 Soft Ma nual .EXPORT, .GLOBAL, .IMPORT プログラム結合命令は特にリストは変化しません。 • .EXPORT : 外部定義シンボルの宣言 • .GLOBAL : 外部定義・外部参照シンボルの宣言 • .IMPORT : 外部参照シンボルの宣言 ■ .EXPORT 図 6.4-11 .EXPORT のリスト形式 SN LOC : : OBJ : LLINE : SOURCE : 16 .EXPORT exp1,exp2 ■ .GLOBAL 図 6.4-12 .GLOBAL のリスト形式 SN LOC : : OBJ : LLINE : SOURCE : 16 .GLOBAL exp1,exp2 ■ .IMPORT 図 6.4-13 .IMPORT のリスト形式 SN LOC : : OBJ LLINE : : 16 September 1, 2014, CM81-00208-5 SOURCE : .IMPORT imp1,imp2 87 Su pp or t 6.4.7 So ft Manu al .EQU シンボル定義命令のリスト形式です。 • .EQU: シンボルへの値の割り付け ■ .EQU 図 6.4-14 .EQU のリスト形式 SN LOC : : OBJ LLINE : =00000100 : 16 SOURCE : sym01: .EQU 0x100 シンボル値として設定された値(16進数) 88 CM81-00208-5, September 1, 2014 Support 6.4.8 Soft Ma nual .DATA, .BIT, .BYTE, .HALF, .LONG, .WORD, .DATAB 領域定義命令 ( 整数 ) のリスト形式です。 • .DATA : 定数定義 ( 整数 ) • .BIT : 定数定義 (1 ビット整数 ) • .BYTE : 定数定義 (8 ビット整数 ) • .HALF : 定数定義 (16 ビット整数 ) • .LONG : 定数定義 (32 ビット整数 ) • .WORD : 定数定義 (16 ビット・32 ビット整数 ) • .DATAB : 定数ブロック定義 ( 整数 ) ■ .DATA 図 6.4-15 .DATA のリスト形式 SN LOC : : OBJ LLINE : : SOURCE : SE 0000 10 10 .DATA.B 0x10 SE 0001 20 10 11 .DATA.B 0x20,16 SE 0003 00R 00S 12 .DATA.B REL01,SEC1 SE 0005 0010 13 .DATA.H 0x10 SE 0007 0020 0010 14 .DATA.H 0x20,16 SE 000B 0000R 0000S 15 .DATA.H REL01,SEC1 SE 000F 00000010 16 .DATA.L 0x10 SE 0013 00000020 00000010 17 .DATA.L 0x20,16 SE 001B 00000000R 00000000S 18 .DATA.L REL01,SEC1 ロケーション データの値 複数のデータがある場合 できるだけ多くのデータ値を 横にならべ表示します。 (16進数) データ値直後の記号 I:外部参照値 S:セクション値 R:相対値 空:絶対値 ■ .BIT .DATA.I と同じリスト形式です。 ■ .BYTE .DATA.B と同じリスト形式です。 ■ .HALF .DATA.H と同じリスト形式です。 September 1, 2014, CM81-00208-5 89 Su pp or t So ft Manu al ■ .LONG .DATA.L と同じリスト形式です。 ■ .WORD .DATA.W と同じリスト形式です。 F2MC-8L/8FX ファミリの場合は , .DATA.H と同じリスト形式です。 ■ .DATAB 図 6.4-16 .DATAB のリスト形式 SN LOC : : OBJ LLINE : : : SE 0023 [2] 10 10 .DATAB.B 2,0x10 SE 0025 [16] 0020 11 .DATAB.H 16,0x20 SE 0045 [2] 00000010 12 .DATAB.L 2,0x10 SE 004D [2] 00000000 R 13 .DATAB.L 2,REL01 SE 0055 [2] 00 S 14 .DATAB.B 2,SEC1 ロケーション データ値 (16進数) 折り返し数 (10進数) 90 SOURCE データ値に含まれる属性 I :外部参照値 S :セクション値 R :相対値 空:絶対値 CM81-00208-5, September 1, 2014 Support 6.4.9 Soft Ma nual .FDATA, .FLOAT, .DOUBLE, .FDATAB 領域定義命令 ( 浮動小数点データ ) のリスト形式です。 • .FDATA : 定数定義 ( 浮動小数点数 ) • .FLOAT : 定数定義 (32 ビット浮動小数点数 ) • .DOUBLE : 定数定義 (64 ビット浮動小数点数 ) • .FDATAB : 定数ブロック定義 ( 浮動小数点数 ) ■ .FDATA 図 6.4-17 .FDATA のリスト形式 SN LOC OBJ : : LLINE : SOURCE : : SE 0057 3F80000040133333 16 .FDATA.S 0r1.0,0r2.3 SE 005F 3FF0000000000000 17 .FDATA.D 0r1.0 SE 0067 11112222 18 .FDATA.S 0x11112222 SE 006B 1111222233334444 19 .FDATA.D 0x1111222233334444 ロケーション データの値 複数のデータがある場合できるだけ多くのデータ値を 横にならべ表示します。(16進数) ■ .FLOAT .FDATA.S と同じリスト形式です。 ■ .DOUBLE .FDATA.D と同じリスト形式です。 ■ .FDATAB 図 6.4-18 .FDATAB のリスト形式 SN LOC : : OBJ LLINE : : SOURCE : SE 0073 [2] 3F800000 16 .FDATAB.S2,0r1.0 SE 007B [2] 3FF0000000000000 17 .FDATAB.D2,0r1.0 ロケーション データ値(16進数) 折り返し数(10進数) September 1, 2014, CM81-00208-5 91 Su pp or t 6.4.10 So ft Manu al .RES, .FRES 領域定義命令 ( データ値なし ) のリスト形式です。 • .RES : 領域定義命令 ( データ値なし : 整数 ) • .FRES : 領域定義命令 ( データ値なし : 浮動小数点数 ) ■ .RES 図 6.4-19 .RES のリスト形式 SN LOC : : OBJ LLINE : SOURCE : : CO 0000 [2]B 16 .RES.B 2 CO 002 [5]H 17 .RES.H 5 CO 000C [3]L 18 .RES.L 3+1-1 ロケーション 折り返し数 (10進数) データサイズ B:1バイト長 H:2バイト長 L:4バイト長 W:2バイト長 ■ .FRES 図 6.4-20 .FRES のリスト形式 SN LOC : : OBJ : : SOURCE : CO 0018 [2]S 16 .FRES.S 2 CO 0020 [2]D 17 .FRES.D 2 ロケーション 折り返し数 (10進数) 92 LLINE データサイズ S:単精度浮動小数点数データ(領域長:4バイト長) D:倍精度浮動小数点数データ(領域長:8バイト長) CM81-00208-5, September 1, 2014 Support 6.4.11 Soft Ma nual .SDATA, .ASCII, .SDATAB 領域定義命令 ( 文字列 ) のリスト形式です。 • .SDATA : 文字列定義 • .ASCII : 文字列定義 • .SDATAB : 文字列ブロック定義 ■ .SDATA 図 6.4-21 .SDATA のリスト形式 SN LOC OBJ : : LLINE : SOURCE : : DA 0000 61 62 63 64 65 66 67 68 69 6A 16 .SDATA "abcdefghijklmnopqrstuv\ 6B 6C 6D 6E 6F 70 71 72 73 74 17 wxyz0123456789" /*継続行*/ 18 .SDATA "123\xff123","12345\t\n" DA 0032 31 32 33 09 31 32 33 19 .SDATA "123\t123","\"",\ DA 0039 22 20 "1234567890" 21 .SDATA "" /* 空文字列*/ 75 76 77 78 79 7A 30 31 32 33 34 35 36 37 38 39 DA 0024 31 32 33 FF 31 32 33 DA 002B 31 32 33 34 35 09 0A DA 003A 31 32 33 34 35 36 37 38 39 30 DA 0044 ロケーション データ値 1バイトずつ表示します。(16進数) ■ .ASCII .SDATA と同じリスト形式です。 ■ .SDATAB 図 6.4-22 .SDATAB のリスト形式 SN LOC : OBJ : LLINE : : DA 0044 [2] DA 0044 [5] 31 32 33 34 35 36 37 38 SOURCE : 16 .SDATAB 2,"" /* 空文字列*/ 17 .SDATAB 5,"12345678901234567890" 39 30 31 32 33 34 35 36 37 38 39 30 ロケーション データ値 1バイトずつ表示します。(16進数) September 1, 2014, CM81-00208-5 93 Su pp or t 6.4.12 So ft Manu al .DEBUG デバッグ情報出力制御命令のリスト形式です。 • .DEBUG: デバッグ情報出力の部分指定 ■ .DEBUG 図 6.4-23 .DEBUG のリスト形式 SN LOC : : ====== : : DEBUG INFORMATION Already ON : : 94 31 : DEBUG INFORMATION off -> ON 起動時オプションで, デバッグ情報出力(-g) の指定ができない場合は, "Ignore"と表示されます。 28 : DEBUG INFORMATION on -> OFF : ====== LLINE : : ====== : OBJ 40 SOURCE : .DEBUG ON : .DEBUG OFF : .DEBUG ON ON/OFF状態表示 off -> ON :本行以降からデバッグ情報出力を開始します。 on -> OFF :本行以降からデバッグ情報出力を抑止します。 Already ON :既にデバッグ情報出力を開始済です。 Already OFF :既にデバッグ情報出力を抑止済です。 CM81-00208-5, September 1, 2014 Support 6.4.13 Soft Ma nual .LIBRARY ライブラリファイル指定命令は特にリストは変化しません。 • .LIBRARY: ライブラリファイルの指定 ■ .LIBRARY 図 6.4-24 .LIBRARY のリスト形式 SN LOC : : OBJ : LLINE : 16 September 1, 2014, CM81-00208-5 SOURCE : .LIBRARY "sample.lib" 95 Su pp or t 6.4.14 So ft Manu al .FORM, .TITLE, .HEADING, .LIST, .PAGE, .SPACE リスト出力制御命令のリスト形式です。 • .FORM :1 ページの行数・桁数指定 • .TITLE : タイトル指定 • .HEADING: タイトルの変更 • .LIST : アセンブルソースリスト出力の詳細指定 • .PAGE : 改ページ指定 • .SPACE : 空白行の出力 ■ .FORM 図 6.4-25 .FORM のリスト形式 SN LOC : : OBJ LLINE : : 16 SOURCE : .FORM LIN=70,COL=80 本行よりリストファイル形式が 70行×80桁として出力されます。 70行 80桁 ■ .TITLE 図 6.4-26 .TITLE のリスト形式 SN LOC : : OBJ LLINE : : 16 SOURCE : .TITLE "SAMPLE PROGRAM" 先頭ページから _____________________________________________________________________________ F2MC-8L/8FX Family SOFTUNE Assembler V30L08 2003-06-26 15:44:08 Page: 2 SAMPLE PROGRAM .TITLEで指定した文字列 SN LOC : 96 : OBJ : LLINE : SOURCE : CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ .HEADING 図 6.4-27 .HEADING のリスト形式 _____________________________________________________________________________ F2MC-8L/8FX Family SOFTUNE Assembler V30L08 2003-06-26 15:44:08 SAMPLE PROGRAM SN LOC : : OBJ LLINE : : Page: 2 SOURCE : .HEADINGの行で改ページします。次のページからタイトルが変わります。 _____________________________________________________________________________ F2MC-8L/8FX Family SOFTUNE Assembler V30L08 2003-06-26 15:44:08 PROG-1 SN LOC OBJ LLINE Page: 3 SOURCE .HEADING "PROG-1" ■ .LIST 図 6.4-28 .LIST のリスト形式 SN LOC : : OBJ LLINE : : SOURCE : 6 .LIST OFFの行から.LIST ONの 直前の行までは表示されません。 (行番号は進む) 7 ; 次の行(8行目)に.LIST OFF 10 .LIST ON 11 ■ .PAGE 図 6.4-29 .PAGE のリスト形式 SN LOC : : OBJ : LLINE : SOURCE : 6 7 ; 次の行(8行目)に.PAGE .PAGEの行で改ページします(ただし,ページ先頭が.PAGEの場合は改ページしません)。 September 1, 2014, CM81-00208-5 97 Su pp or t So ft Manu al ■ .SPACE 図 6.4-30 .SPACE のリスト形式 SN LOC : : OBJ : LLINE : 5 SOURCE : ; 次の行(6行目)に.SPACE 2 指定された行数の空白を生成します。 7 98 CM81-00208-5, September 1, 2014 Support 6.5 Soft Ma nual セクションリスト ソースプログラム内で定義されたセクションの名前 , 属性などが出力されます。 ■ セクションリスト 図 6.5-1 セクションリスト ___________________________________________________________________________ F2MC-8L/8FX Family SOFTUNE Assembler V30L08 2003-06-26 15:44:08 Page: 10 - SECTION LISTING - ( sample ) モジュール名 NOSECTION-NAME SIZE ATTRIBUTES 0 SEC1 . . . . . . . . . . . . . . . . . . . . . . . . . 0008 CODE REL ALIGN=1 1 SEC02 . . . . . . . . . . . . . . . . . . . . . . . . 0008 CODE REL ALIGN=1 2 ON . . . . . . . . . . . . . . . . . . . . . . . . . . . 0004 CODE REL ALIGN=1 3 SEC05 . . . . . . . . . . . . . . . . . . . . . . . . 0008 CODE REL ALIGN=1 4 SEC06 . . . . . . . . . . . . . . . . . . . . . . . . 0008 DATA REL ALIGN=1 5 SEC07 . . . . . . . . . . . . . . . . . . . . . . . . 0008 CONST REL ALIGN=1 6 SEC08 . . . . . . . . . . . . . . . . . . . . . . . . 00008 COMMON REL ALIGN=1 7 SEC09 . . . . . . . . . . . . . . . . . . . . . . . . 0008 STACK REL ALIGN=1 SEC10 . . . . . . . . . . . . . . . . . . . . . . . . 0008 DUMMY 8 SEC11 . . . . . . . . . . . . . . . . . . . . . . . . 0008 CODE ABS LOCATE=0100 9 SEC12 . . . . . . . . . . . . . . . . . . . . . . . . 0008 CODE REL ALIGN=1 10 SEC13 . . . . . . . . . . . . . . . . . . . . . . . . 0008 CODE REL ALIGN=1 11 SEC14 . . . . . . . . . . . . . . . . . . . . . . . . 0008 DATA ABS LOCATE=0000 12 SEC15 . . . . . . . . . . . . . . . . . . . . . . . . 0008 CONST REL ALIGN=1 13 SEC16 . . . . . . . . . . . . . . . . . . . . . . . . 0008 COMMON ABS LOCAE=0010 14 SEC17 . . . . . . . . . . . . . . . . . . . . . . . . 0008 STACK セクション名(出現順) セクションサイズ (16進数) セクション出現番号 0から始まります。 ダミーセクションは番号はありません。 オブジェクトファイル中での セクション番号に相当します。 September 1, 2014, CM81-00208-5 REL ALIGN=1 セクションタイプ セクション配置形式 相対セクションならALIGN値を 表示します。 絶対セクションならLOCATE値を 表示します。 ダミーセクションは空白を表示 します。 99 Su pp or t 6.6 So ft Manu al クロスリファレンスリスト ソースプログラム内で使用されているシンボル名の定義 , および参照されている行 番号を出力します。 ■ クロスリファレンスリスト 図 6.6-1 クロスリファレンスリスト __________________________________________________________________________ F2MC-8L/8FX Family SOFTUNE Assembler V30L08 2003-06-26 15:44:08 - CROSSEWFERENCE LISTING - ( sample ) NAME ATTRIB. CODE . . . . . . . . . . . . . . . . . . . . . SECT/ABS 1000 6 # DATA . . . . . . . . . . . . . . . . . . . . . . SECT/REL 0000 2 # DUMMY . . . . . . . . . . . . . . . . . . . . SECT/DUM SYM_ABS . . . . . . . . . . . . . . . . . . ABS 00001000 7 # SYM_ABS/EXP . . . . . . . . . . . . . . ABS/EXP 00001000 9 # SYM_IMP . . . . . . . . . . . . . . . . . . IMP SYM_REL . . . . . . . . . . . . . . . . . . REL 00000000 3 # SYM_REL/EXP . . . . . . . . . . . . . . REL/EXP 00000000 5 # SYM_UNDEFINED . . . . . . . . . . . UNDEFINED シンボル値 (16進数) シンボル名(セクション名も含む) 大文字,小文字,アルファベット 順に表示します。 シンボル種別 ABS REL ABS/EXP REL/EXP IMP SECT/ABS SECT/REL SECT/DUM UNDEFINED STRU/TAG STRU/MEM STRU/ABS STRU/REL 100 Page: 11 VALUE DEFINITION/REFERENCES 11 # 8 1 4 10 参照行番号(リスト行番号) 定義行番号(リスト行番号) 絶対シンボル 相対シンボル 絶対シンボル(外部定義指定) 相対シンボル(外部定義指定) 外部参照シンボル 絶対セクション 相対セクション ダミーセクション 未定義シンボル 構造体タグ名 構造体要素名 絶対シンボル(構造体変数) 相対シンボル(構造体変数) CM81-00208-5, September 1, 2014 Support 第 II 部 Soft Ma nual 文法編 この部では , アセンブラのソースプログラムを記述する際の文法や記述形式につい て説明します。 第 7 章 言語の基本規則 第 8 章 セクション 第 9 章 機械命令 第 10 章 アセンブラ擬似命令 第 11 章 プリプロセッサ処理 第 12 章 アセンブラ擬似機械命令 第 13 章 構造化命令 September 1, 2014, CM81-00208-5 101 Su pp or t 102 So ft Manu al CM81-00208-5, September 1, 2014 Support Soft Ma nual 第7章 言語の基本規則 この章では , アセンブリ言語を使用してプログラム を作成する場合の書き方およびその規則について 説明します。 7.1 文の形式 7.2 文字セット 7.3 名前 7.4 前方参照シンボルと後方参照シンボル 7.5 整数定数 7.6 ロケーションカウンタシンボル 7.7 文字定数 7.8 文字列 7.9 浮動小数点定数 7.10 浮動小数点定数のデータ形式 7.11 式 7.12 コメント September 1, 2014, CM81-00208-5 103 Su pp or t 7.1 So ft Manu al 文の形式 アセンブラの 1 行は , 次の 5 つのフィールドから構成されます。 • シンボルフィールド • オペレーションフィールド • オペランドフィールド • コメントフィールド • 継続指示フィールド 1 行には最大 4095 文字まで記述できます。 ■ 文の形式 アセンブラの文の形式は , 次のとおりです。 シンボル フィールド オペレーション フィールド オペランド フィールド コメント フィールド 継続指示 フィールド 各フィールドは省略可能です。 シンボルフィールド , オペレーションフィールド , オペランドフィールドの区切りには , 1 つ以上の空白またはタブが必要です。 1 行には , 最大 4095 文字まで記述できます。 ■ シンボルフィールド シンボルを記述します。 シンボルは , 先頭カラムから始めるか , または , 任意のカラムから始め最後にコロン (:) を付けます。 【例】 SYMBOL SYMBOL: SYMBOL: ■ オペレーションフィールド 機械命令や擬似命令などのオペレーションニーモニックを記述します。 このフィールドは , 2 カラム目以降に記述します。 シンボルフィールドとの区切りには , 1 つ以上の空白またはタブが必要です。 【例】 .SECTION CODE NOP .DATA 100 104 CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ オペランドフィールド 機械命令や擬似命令などのオペランドを記述します。 オペランドが複数ある場合には , カンマ (, ) で区切って記述します。 オペレーションフィールドとの区切りには , 1 つ以上の空白またはタブが必要です。 【例】 .SECTION .DATA .SECTION MOV DATA, DATA, ALIGN=4 1, 2, 4 CODE, CODE, ALIGN=2 A, R1 ■ コメントフィールド 注釈を記述します。 このフィールドは , 任意のカラムから始めることができます。 セミコロン (;) または 2 個のスラッシュ (//) でコメントが始まり , 行終端までコメント となります。このコメントを行コメントといいます。 C 言語風に , /* ~ */ で囲ってコメントを記述することもできます。これを範囲コメン トといいます。範囲コメントは好きな位置にコメントを書くことができます。 【例】 /*---------コメント ------------*/ PUSHW MOVW IX ; コメント A, /* コメント */ SP // コメント ■ 継続指示フィールド 行の最後にバックスラッシュ (\) を置くことによって次の行に継続できます。 バックスラッシュ (\) の次の文字に改行以外の文字がある場合は , 継続しません。 行の継続は , コメント , 文字定数 , 文字列の途中にも指定できます。 【例】 .DATA 0x01, 0x02, 0x03, \ 0x04, 0x05, 0x06, ; コメント \ 0x07, 0x08, 0x09 .SDATA "abcdefghijklmnopqrstuvwxyz\ ABCDEFGHIJKLMNOPQRSTUVWXYZ" /* 文字列の継続 */ September 1, 2014, CM81-00208-5 105 Su pp or t 7.2 So ft Manu al 文字セット アセンブリ言語でプログラムを書く場合に使用できる文字を示します。 • 英字 : 大文字 (A ~ Z), 小文字 (a ~ z) • 数字 : 0 ~ 9 • 記号 : +-*/% < >| &~=()!^$@#_'":.\; 空白 タブ ■ 文字セット 本アセンブラで使用できる文字セットを表 7.2-1 に示します。 表 7.2-1 文字セット 種別 文字 英字 ( 大文字 ) ABCDEFGHIJKLMNOPQRSTUVWXYZ 英字 ( 小文字 ) abcdefghijklmnopqrstuvwxyz 数字 0123456789 記号 +-*/% < >| &~=()!^ $ @ # _ ' " : . \ ; 空白 タブ <注意事項> • バックスラッシュ (\) は端末によっては , 円記号 (¥) で表示される場合があります。 • コメントまたは文字列には, 文字セット以外の記号や日本語コード(SJISコードかEUC コードのみ ) が記述できます。 106 CM81-00208-5, September 1, 2014 Support 7.3 Soft Ma nual 名前 名前は , アセンブラにおいて種々のものを識別および参照するために使われます。 名前には , モジュール名 , シンボル , セクション名 , 構造体タグ名 , マクロ名などが あります。 予約語には , 次のものがあります。 • レジスタ名 : R0 ~ R7, A, T, IX, EP, SP, PC, PS • サイズ演算子 :SIZEOF, BITADR, BITPOS ■ 名前の規則 • 255 文字以内です。 • 先頭文字は , 英字 , アンダスコア (_) です。 • 2 文字目以降は , 英字 , 数字 , アンダスコア (_) で構成されます。 • 大文字 , 小文字は区別されます。 ■ 名前の分類 名前は使用される目的により次のように分類されます。 ● モジュール名 .PROGRAM 命令で定義されます。オブジェクトを識別するための名前です。 ● シンボル ある値を割り当てられた名前です。 普通は , シンボルフィールドで定義されます。 分岐先のラベルとして使用したり , データのアドレスに使用したりします。 また , .EQU 命令などで値を割り当てたりします。 ● セクション名 .SECTION 命令で定義されます。 セクションを識別するための名前です。 セクション名は , シンボルに割り当てられます。 式の項にセクション名を使用する場合は , リンク後のセクションの先頭アドレスを示 します。 ● 構造体タグ名 .STRUCT 命令で定義されます。 構造体を識別する名前です。 ● マクロ名 プリプロセッサで使用します。 プリプロセッサについては「第 11 章 プリプロセッサ処理」を参照してください。 September 1, 2014, CM81-00208-5 107 Su pp or t So ft Manu al ■ 予約語 予約語は , あらかじめアセンブラに予約されている名前で , ユーザは定義できない名前 です。 予約語の英字は , 大文字 , 小文字とも同じと解釈され区別しません。 予約語には , 次のものがあります。 ● レジスタ名 : R0 ~ R7, A, T, IX, EP, SP, PC, PS ● 演算子 SIZEOF, BITADR, BITPOS ● その他 以下の語は , リンカの予約名となっています。 アセンブラでは , 使用に際してエラーの検出は行いませんが , 使用できません。 • _ROM_ または _RAM_ で始まるセクション名およびシンボル名 108 CM81-00208-5, September 1, 2014 Support 7.4 Soft Ma nual 前方参照シンボルと後方参照シンボル アセンブラプログラムにおいて , 機械命令や擬似命令のオペランドに使用するシン ボルは , 前方参照シンボルか後方参照シンボルかのどちらかの扱いを受けます。 使用したシンボルが , 未定義の場合は , 前方参照シンボル扱いとなります。 使用したシンボルが , 定義済の場合は , 後方参照シンボル扱いとなります。 ■ 前方参照シンボルと後方参照シンボル アセンブラプログラムにおいて , 機械命令や擬似命令のオペランドに使用するシンボ ルは , 前方参照シンボルか後方参照シンボルかのどちらかの扱いを受けます。 使用したシンボルが , まだ未定義の場合は , 前方参照シンボル扱いとなります。 使用したシンボルが , すでに定義済の場合は , 後方参照シンボル扱いとなります。 【例】 BEQ aaa /* BEQ 命令にとって aaa は前方参照シンボル */ BLT aaa /* BLT 命令にとって aaa は後方参照シンボル */ aaa: 前方参照シンボルの扱いとなったシンボルは , アセンブラ処理において次のような制 約を受けます。 • 式中に書かれた前方参照シンボルは , その値が絶対値の場合でも式の種類は , 相対 式と同じ扱いになります。したがって , 絶対値のみしか記述できないオペランドに は記述できません。 ■ サイズ演算子について 通常のサイズ演算子は , リンカで算出されるので相対値扱いになりますが , ダミーセク ションのサイズを算出する場合のみは , アセンブラで算出を行います。 この場合 , 処理の都合上 , サイズ演算子は前方参照シンボル扱いで処理を行います。 サイズ演算子については , 「7.11.4 名前から算出される値」を参照してください。 September 1, 2014, CM81-00208-5 109 Su pp or t 7.5 So ft Manu al 整数定数 整数定数には , 2 進定数 , 8 進定数 , 10 進定数 , 16 進定数の 4 種類があります。 ■ 整数定数 整数定数には , 2 進定数 , 8 進定数 , 10 進定数 , 16 進定数の 4 種類があります。 C 言語の long 型指定 (123L など ), unsigned 型指定 (123U など ) もサポートしています。 ■ 2 進定数 2 進法で表された整数定数です。 プリフィックス (B' または 0b) を付けるか , サフィックス (B) を付けて記述します。 プリフィックス(B'または0b), サフィックス(B)は大文字でも小文字でもかまいません。 【例】 B'0101 0b0101 0101B ■ 8 進定数 8 進法で表された整数定数です。 プリフィックス (Q' または 0) を付けるか , サフィックス (Q) を付けて記述します。 プリフィックス (Q' または 0), サフィックス (Q) は大文字でも小文字でもかまいません。 【例】 Q'377 0377 377Q ■ 10 進定数 10 進法で表された整数定数です。 プリフィックス (D') を付けるか , サフィックス (D) を付けて記述します。 プリフィックス , サフィックスは 10 進定数のみ省略可能です。 プリフィックス (D'), サフィックス (D) は大文字でも小文字でもかまいません。 【例】 D'1234567 1234567 1234567D ■ 16 進定数 16 進法で表された整数定数です。 プリフィックス (H' または 0x) を付けるか , サフィックス (H) を付けて記述します。 プリフィックス(H'または0x), サフィックス(H)は大文字でも小文字でもかまいません。 【例】 H'ff 110 0xFF 0FFH CM81-00208-5, September 1, 2014 Support 7.6 Soft Ma nual ロケーションカウンタシンボル 現在のロケーションカウンタを表すシンボルです。 ロケーションカウンタシンボルは , '$' です。 ■ ロケーションカウンタシンボル アセンブラは , アセンブル時のアドレス付けを , ロケーションカウンタを用いて行いま す。 この現在のロケーションの値をロケーションカウンタシンボルで参照できます。 ロケーションカウンタシンボルは , '$' で表現します。 ロケーションカウンタの値は , 絶対セクションの場合は絶対値 , 相対セクションの場合 は相対値となります。 【例】 BNE September 1, 2014, CM81-00208-5 $+4 111 Su pp or t 7.7 So ft Manu al 文字定数 文字定数は文字の値を示します。 文字定数は文字定数要素をシングルクォート (') で囲って記述します。 文字定数要素は , 4 文字まで指定可能です。 ■ 文字定数 文字定数は文字定数要素をシングルクォート (') で囲って記述します。 文字定数要素には , 文字 , 拡張表記 , 8 進表記 , 16 進表記があります。 文字定数要素は , 4 文字まで指定可能です。 文字定数は , 256 進法の扱いとなります。 ● 文字 バックスラッシュ (\), シングルクォート (') を除くすべての文字と空白文字は単独で文 字定数要素となります。 【例】 'P' '@A' '0A”' ● 拡張表記 バックスラッシュ (\) の後に特定の文字を続けて文字定数要素とします。 これを拡張表記とよびます。 拡張表記を表 7.7-1 に示します。 表 7.7-1 拡張表記 文字 文字定数要素 値 \n \t \b \r \f \\ \' \” \a \v \? 0x0A 0x09 0x08 0x0D 0x0C 0x5C 0x27 0x22 0x07 0x0B 0x3F 改行文字 水平タブ文字 後退文字 復帰文字 改ページ文字 バックスラッシュ シングルクォート ダブルクォート 警報文字 垂直タブ文字 疑問符 ( 注意事項 ) 拡張表記として用いられる文字は , 小文字のみです。 【例】 '\n' 112 '\'' '\”\\' CM81-00208-5, September 1, 2014 Support Soft Ma nual ● 8 進表記 文字コードのビットパターンを直接表記して 1 バイトデータを表現します。 8 進表記は , バックスラッシュ (\) の後に 1 から 3 文字の 8 進数字を続けたものです。 【例】 文字定数要素 ビットパターン '\0' b'00000000 '\377' b'11111111 '\53' b'00101011 '\0123' b'00001010 → '\012' と '3' に分かれます ● 16 進表記 文字コードのビットパターンを直接表記して 1 バイトデータを表現します。 16 進表記は , バックスラッシュ (\) の後に文字 x ( 小文字 ) と 1 文字か 2 文字の 16 進文 字を続けたものです。 【例】 文字定数要素 ビットパターン '\x0' b'00000000 '\xff' b'11111111 '\x2B' b'00101011 '\x0A5' b'00001010 → '\x0A' と '5' に分かれます September 1, 2014, CM81-00208-5 113 Su pp or t 7.8 So ft Manu al 文字列 文字列は文字列要素の列をダブルクォート (") で囲って記述します。 ■ 文字列 文字列は文字列要素の列をダブルクォート (") で囲って記述します。 文字列要素には , 文字定数要素と同じ形式を使用できます。詳しくは ,「7.7 文字定数」 を参照してください。 文字列要素にダブルクォート (") を記述する場合は , 拡張表記 (\") を使用します。 シングルクォート (') は拡張表記を使用せずにそのまま記述できます。 【例】 "ABCD\n" "012345\n\0" "\xff\t\n\0377\0" <注意事項> 文字列に日本語を記述した場合は , 記述したコード系 (SJIS または EUC) で , そのままオ ブジェクトへ出力されます。アセンブラ内でコード系の変換は行いません。 114 CM81-00208-5, September 1, 2014 Support 7.9 Soft Ma nual 浮動小数点定数 浮動小数点定数の表記には , 次の形式があります。 • [0r][+|-]{.d|d[.[d]]} [e[[+|-]d]] d は 10 進数 • [F'][+|-]{.d|d[.[d]]} [e[[+|-]d]] d は 10 進数 • 0xh h は 16 進数 • H'h h は 16 進数 ■ 浮動小数点定数の表記 【記述形式 1】 [0r][+|-]{.d|d[.[d]]} [e[[+|-]d]] [F'][+|-]{.d|d[.[d]]} [e[[+|-]d]] d は 10 進数 【説明】 浮動小数点定数を値で指定します。 "e" は指数部を指定することを表し , "e" に続く値は指数部となります。 "e" は大文字でもかまいません。 プリフィックス (0r または F') は省略できます。 【例】 0r954 0r-12e+0 415. F'.5 F'2.0e2 -2.5E-4 【記述形式 2】 0xh H'h h は 16 進数 【説明】 浮動小数点定数をビットパターンで直接指定します。 データ長分のビットパターンを 16 進数で指定します。 【例 1】倍精度でマイナス無限大を表す場合 0xFFF0000000000000 【例 2】単精度でマイナス無限大を表す場合 0xFF800000 September 1, 2014, CM81-00208-5 115 Su pp or t So ft Manu al ■ 単精度と倍精度の指定 浮動小数点定数が単精度 (32 ビット ) になるか倍精度 (64 ビット ) になるかは , 擬似命 令またはサイズ指定によって決まります。 ● 単精度 (32 ビット ) になる場合 1. 浮動小数点定数の擬似命令でサイズ指定が省略されている場合 2. "S" のサイズ指定がある場合 3. .FLOAT 命令の場合 ● 倍精度 (64 ビット ) になる場合 1. "D" のサイズ指定がある場合 2. .DOUBLE 命令の場合 【例】 116 .FDATA.S 1.2 /* S のサイズ指定があるので単精度指定 */ .FDATA.D 1.2 /* D のサイズ指定があるので倍精度指定 */ .FDATA 1.2 /* サイズ指定が省略されているので単精度指定 */ .FLOAT 0.1 /* .FLOAT 命令なので単精度指定 */ .DOUBLE 0.1 /* .DOUBLE 命令なので倍精度指定 */ CM81-00208-5, September 1, 2014 Support Soft Ma nual 7.10 浮動小数点定数のデータ形式 浮動小数点定数のデータ形式は , ANSI/IEEE Std754-1985 の仕様に準拠しています。 浮動小数点定数のデータ形式は次の 2 つがあります。 • 単精度浮動小数点定数のデータ形式 • 倍精度浮動小数点定数のデータ形式 また , 浮動小数点定数で表現可能な範囲を示します。 ■ 単精度浮動小数点定数のデータ形式 単精度浮動小数点定数のデータ形式は , 符号 1 ビット , 指数部 8 ビット , 仮数部 23 ビッ トで構成されています。 31 30 23 22 指数部 0 仮数部 符号部 ■ 倍精度浮動小数点定数のデータ形式 倍精度浮動小数点定数のデータ形式は , 符号 1 ビット , 指数部 11 ビット , 仮数部 52 ビッ トで構成されています。 63 62 52 51 指数部 0 仮数部 符号部 September 1, 2014, CM81-00208-5 117 Su pp or t So ft Manu al ■ 浮動小数点定数の表現可能な範囲 表 7.10-1 に浮動小数点定数の表現可能な範囲を示します。 表 7.10-1 浮動小数点定数の表現可能な範囲 精度 118 表現可能範囲 単精度 -3.40282356779733661637e+38 ~ -1.17549431578982589985e-38 -0 0 1.17549431578982589985e-38 ~ 3.40282356779733661637e+38 倍精度 -1.79769313486231580793e+308 ~ -2.22507385850720125958e-308 -0 0 2.22507385850720125958e-308 ~ 1.79769313486231580793e+308 CM81-00208-5, September 1, 2014 Support Soft Ma nual 7.11 式 式は , アドレスやデータ値などを表すところに記述できます。 式には , C 言語風の演算子が用意されています。 ■ 式の構文 以下に , 式の構文を BNF 表記で示します。 【文法】 < 式 >::= < 式 >'||' < 式 > 論理 OR 式 ::= < 式 >' & &' < 式 > 論理 AND 式 ::= < 式 >'|' < 式 > ビット OR 式 ::= < 式 >'^' < 式 > ビット XOR 式 ::= < 式 >' &' < 式 > ビット AND 式 ::= < 式 >{'=='|'!='} < 式 > 等価式 ::= < 式 >{' <'|' <='|' >'|' >='} < 式 > 関係式 ::= < 式 >{' < <'|' > >'} < 式 > シフト式 ::= < 式 >{'+'|'-'} < 式 > 加法式 ::= < 式 >{'*'|'/'|'%'} < 式 > 乗法式 ::={'!'|'~'|'+'|'-'|'SIZEOF'} < 式 > 単項式 ::='(' < 式 >')' 括弧式 ::= < 項 > < 項 >::={ 数値定数 | 文字定数 | シンボル | ロケーションカウンタ } <注意事項> 式は整数式のことであり , 浮動小数点定数の式はサポートしていません。 September 1, 2014, CM81-00208-5 119 Su pp or t So ft Manu al ■ 式の種類 式はアセンブル時に計算されますが , 相対シンボル , 外部参照シンボル , セクションシ ンボルは項として残りリンカで処理されます。したがって , 相対シンボル , 外部参照シ ンボル , セクションシンボルを含む式については , リロケーション情報が生成され式処 理をリンカへ渡します。 式は次のように分類されます。 ● 絶対式 • 数値定数 , 文字定数 , 絶対値を持つシンボルのみで構成される式 • 前方参照シンボルを含まない式 • サイズ演算子を含まない式 ● 単純相対式 • 相対値を 1 つしか含まない式 • 前方参照シンボルを含まない式 • サイズ演算子を含まない式 ● 複合相対式 • 2 つ以上の相対値を含む式 • 外部参照値を含む式 • セクション値を含む式 • 前方参照シンボルを含む式 • サイズ演算子を含む式 単に相対式という場合は , 通常 , 複合相対式を指します。 ■ 式の演算精度について 式の演算は , 32 ビットで行っております。したがって , 32 ビットを超える演算は保証 しておりません。注意してください ( エラーにはなりません )。 120 CM81-00208-5, September 1, 2014 Support 7.11.1 Soft Ma nual 項 項は , 絶対値 , 相対値 , 外部参照値 , セクション値のいずれかを表し , 式で使用でき ます。 また , 項にはビットアドレス , アドレス規定子を付けることができます。 ■ 項の種類 項は次の種類があります。 • 数値定数 • 文字定数 • シンボル ( 絶対 , 相対 , 外部参照 , セクション ) • ロケーションカウンタ ($) これらの項は , さらに絶対値 , 相対値 , 外部参照値 , セクション値のいずれかの値を持 ちます。 また , これらの項には , ビットアドレス , アドレス規定子を付けることができます。 ■ 絶対値 絶対値となる項を次に示します。 • 数値定数 • 文字定数 • .EQU 命令で定義したシンボル • 絶対セクション内のアドレスを表すシンボル • 絶対セクション内のロケーションカウンタ • 絶対セクションのセクションシンボル • ダミーセクションのサイズを算出するサイズ演算子 ■ 相対値 相対値はリンカで解決されるためリロケーション情報を生成します。 相対値となる項を次に示します。 • 相対セクション内のアドレスを表すシンボル • 相対セクション内のロケーションカウンタ • ダミーセクション以外のセクションサイズを算出するサイズ演算子 ■ 外部参照値 外部参照値はリンカで解決されるためリロケーション情報を生成します。 外部参照となる項を次に示します。 • 外部参照シンボル September 1, 2014, CM81-00208-5 121 Su pp or t So ft Manu al ■ セクション値 セクション値はセクション先頭のアドレスを持ちます。 セクション値はリンカで解決されるためリロケーション情報を生成します。 セクション値は相対セクションのセクションシンボルのみです。 絶対セクションのセクションシンボルは絶対値になります。 ■ ビットアドレス ビットアドレスは , .BIT や .RES.I の命令で定義されるシンボルのほかに , 以下の特殊 な記述方法があります。 【記述形式 1】 : ビットアドレス ビットアドレスは , メモリ領域にビット単位のロケーションを割り付けたもので す。 【記述形式 2】 アドレス : ビットポジション ビットポジションは , 8 以上の数値を指定できます。この場合 , 8 で割った値をアド レスに加算し , その余りをビットポジションとします。 ■ アドレス規定子 オペランドにアドレス規定子を記述できます。 【記述形式】 アドレス規定子 : アドレス アドレス規定子:{D|E|X} D: ダイレクトアドレス指定 E: エクステンドアドレス指定 X: 拡張ダイレクトアドレス指定 アドレス : 式 アドレス規定子によりオペランドに指定するアドレスが変わります。 - ダイレクトアドレス指定 : アドレスの下位 8 ビットを指定します。 - エクステンドアドレス指定 : 16 ビットアドレスを指定します。 - 拡張ダイレクトアドレス指定 : 式 "( アドレス & 0x007F) + 0x0080" の演算結果の 下位 8 ビットを指定します。この指定は F2MC-8FX ファミリでのみ意味を持ちま す。 122 CM81-00208-5, September 1, 2014 Support Soft Ma nual 【制限事項 1】 機械命令オペランドが , ダイレクトアドレス指定 , エクステンドアドレス指定 , また は拡張ダイレクトアドレス指定のいずれかを指定可能な場合 , オペランドに指定さ れたシンボルが以下の条件の場合には , アドレス規定子の指定は無視され , 必ずエ クステンドアドレス指定となります。 - 前方参照シンボルの場合 ( ただし , 外部参照シンボルは除きます ) - セクション外で外部参照宣言されたシンボルの場合 セクション外で外部参照宣言されたシンボルとは , ソースプログラムの先頭から , 最初に .section 擬似命令が現れるまでの間に .import または .global 擬似命令で外部参 照宣言されたシンボルです。 【制限事項 2】 拡張ダイレクトアドレス指定は , F2MC-8FX ファミリでのみ意味を持つ機能ですが , F2MC-8L ファミリで指定してもアセンブラはエラーを検出しませんので , ご注意く ださい。 【補足 1】 fasm896s はアドレッシングモードを以下のように自動選択します。 表 7.11-1 アドレッシングモードの自動選択 記述形式 即値 シンボル 条件 アドレッシングモード 0x0000 ~ 0x00FF ダイレクトアドレッシング 0x0100 ~ 0xFFFF エクステンドアドレッシング DIR 属性セクションで定義・宣言 ダイレクトアドレッシング DIR 属性セクション以外で定義・宣言 エクステンドアドレッシング このため , F2MC-8FX ファミリ用アセンブラソースをアセンブルする際に , 拡張ダ イレクトアクセス領域バンクが 0 以外の場合 , 0x0080 番地~ 0x00FF 番地を正しく アクセスできません。このような場合 , アドレス規定子 "E" を用いてエクステンド アドレッシングを指定してください ( 例 1, 例 2 を参照してください )。 【例 1】 SETDB #1 /* ダイレクトバンクポインタ =1 */ MOV A, 0x80 /* ダイレクトアドレスで */ /* 0x0100 番地をアクセスします */ MOV A, E:0x80 /* エクステンドアドレス指定で */ /* 0x0080 番地をアクセスします */ September 1, 2014, CM81-00208-5 123 Su pp or t So ft Manu al 【例 2】シンボル SYM が DIR セクション属性かつ 0x80 番地の場合 SETDB #1 /* ダイレクトバンクポインタ =1 */ MOV A, SYM /* ダイレクトアドレスで */ /* 0x0100 番地をアクセスします */ MOV /* エクステンドアドレス指定で A, E:SYM */ /* 0x0080 番地をアクセスします */ 【補足 2】 拡張ダイレクトアドレスは , ダイレクトバンクポインタが指定されている場合のア ドレス指定です。ダイレクトバンクポインタと拡張ダイレクトアドレスとマッピン グ領域の関係は以下のとおりです。ダイレクトバンクポインタが 0 以外の領域に割 り付けられているシンボルを使って , 拡張ダイレクトアドレス指定でアクセスする 場合 , 例 3 のようにします。 表 7.11-2 ダイレクトバンクポインタと拡張ダイレクトアドレスとマッピング領域の 関係 ダイレクトバンク ポインタ 拡張ダイレクトアドレス マッピング領域 (16 ビットアドレス ) 0 0x0080 ~ 0x00FF 1 0x0100 ~ 0x017F 2 0x0180 ~ 0x01FF 3 0x0080 ~ 0x00FF 0x0200 ~ 0x027F 4 0x0280 ~ 0x02FF 5 0x0300 ~ 0x037F 6 0x0380 ~ 0x03FF 7 0x0400 ~ 0x047F 【例 3】シンボル SYM が 0x0100 番地のとき SETDB #1 /* ダイレクトバンクポインタ =1 */ MOV A, D:SYM /* ダイレクトアドレス指定で */ /* 0x0000 番地をアクセスします */ /* エクステンドアドレス指定で */ /* 0x0100 番地をアクセスします */ /* 拡張ダイレクトアドレス指定で */ MOV MOV A, E:SYM A, X:SYM /* 0x0100 番地をアクセスします */ /* ( コード上は 0x80 番地アクセス ) */ 124 CM81-00208-5, September 1, 2014 Support 7.11.2 Soft Ma nual オペランド値の範囲 式が記述できるオペランドは , その種類によって記述可能な値の範囲が決まってい ます。 アセンブラは , オペランドの演算結果が記述可能な値の範囲外であったとき , WARNING または ERROR を表示します。 出力されるメッセージが WARNING か ERROR かは , -OVFW, -XOVFW オプション の指定によって変わります (「4.8.12 -OVFW, -XOVFW」参照 )。 ここでは , オペランド値の範囲について説明します。 ■ オペランド値の範囲 オペランド値の範囲例を表 7.11-3 に示します。 オペランドの計算結果が , 表 7.11-3 の範囲外になるとアセンブラは WARNING または ERROR を表示します。 各オペランドの詳細に関しては , ハードウェアマニュアルを参照してください。 表 7.11-3 オペランド値の範囲例 オペランドの種類 値の範囲 ダイレクトアドレス (dir) 0 ~ 255 オフセット (off) -128 ~ 127 エクステンドアドレス (ext) 0 ~ 65535 ベクタテーブル番号 (#vct) 0~7 イミディエートデータ (#d8) -128 ~ 255 イミディエートデータ (#d16) -32768 ~ 65535 ビットダイレクトアドレス (dir: b) di: 0 ~ 255/b: 0 ~ 7 分岐相対アドレス (rel) -128 ~ 127 September 1, 2014, CM81-00208-5 125 Su pp or t 7.11.3 So ft Manu al 演算子 演算子は , 式の中で使用されます。 論理値は値が 0 以外の場合は真 , 0 の場合は偽として扱います。 演算子には , 次のものがあります。 • 論理演算子 : || & & ! • ビット演算子 : | & ^ ~ • 関係演算子 : == != < <= > >= • 算術演算子 : + - * / % > > < < +( 単項 ) -( 単項 ) • 名前から値を算出する演算子 : BITADR BITPOS SIZEOF ■ 論理値 論理値は値が 0 以外の場合は真 , 0 の場合は偽として扱います。 ■ 論理演算子 論理演算子には , 次のものがあります。 • 式 || 式 : 論理値の OR 演算 • 式&&式 : 論理値の AND 演算 • !式 : 論理値の反転 ■ ビット演算子 ビット演算子には , 次のものがあります。 • 式|式 : ビットの OR 演算 • 式&式 : ビットの AND 演算 • 式^式 : ビットの XOR 演算 ( 排他的論理和演算 ) • ~式 : ビットの反転 ■ 関係演算子 関係演算子は , 評価が真であれば 1, 偽であれば 0 となります。 関係演算子には , 次のものがあります。 126 • 式 == 式 : 等しい • 式 != 式 : 等しくない • 式<式 : 小さい • 式 <= 式 : 小さいか等しい • 式>式 : 大きい • 式 >= 式 : 大きいか等しい CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ 算術演算子 算術演算子には , 次のものがあります。 • 式+式 : 加算 • 式-式 : 減算 • 式*式 : 乗算 • 式/式 : 除算 • 式%式 : 剰余算 • 式<<式 : 左シフト • 式>>式 : 右シフト • +式 :正 • -式 :負 ■ 名前から値を算出する演算子 名前から値を算出する演算子には , 次のものがあります。 詳細は , 「7.11.4 名前から算出される値」を参照してください。 • BITADR シンボル : ビットシンボルアドレス演算子 • BITPOS シンボル : ビットポジション番号演算子 • SIZEOF セクション : サイズ演算子 September 1, 2014, CM81-00208-5 127 Su pp or t 7.11.4 So ft Manu al 名前から算出される値 アドレッシングやプログラミングで必要となる値を参照するために , 次の特殊な演 算子を用意しています。 • BITADR : ビットシンボルアドレス演算子 • BITPOS : ビットポジション番号演算子 • SIZEOF : サイズ演算子 ■ ビットシンボルアドレス演算子 (BITADR 演算子 ) 【記述形式】 BITADR ビットシンボル BITADR ( ビットシンボル ) ビットシンボルは括弧で囲むことができます。 【説明】 ビットシンボルアドレス演算子は , ビットシンボルのアドレスを算出します。 ■ ビットポジション番号演算子 (BITPOS 演算子 ) 【記述形式】 BITPOS ビットシンボル BITPOS ( ビットシンボル ) ビットシンボルは括弧で囲むことができます。 【説明】 ビットポジション番号演算子は , ビットシンボルのビットポジション番号を算出し ます。 128 CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ セクションサイズ抽出 (SIZEOF 演算子 ) 【記述形式】 SIZEOF セクションシンボル SIZEOF ( セクションシンボル ) セクションシンボルは括弧で囲むことができます。 【説明】 サイズ演算子は , セクションのサイズを算出する演算子です。 したがって , SIZEOF の演算対象となる項は , セクションシンボルのみです。 セクションのサイズは , リンカで算出されるのでサイズ演算子を含む式は相対式と なります。 ただし , ダミーセクションの場合は , オブジェクトファイルにコードが出力されな いため , アセンブラでサイズを算出することになります。 この場合 , アセンブラはサイズ演算子を前方参照シンボルが記述された場合と同じ 扱いにして処理を行います。 理由は , セクションが分割記述可能なため , アセンブラ内部の処理 PASS1 が終了す るまでサイズが分からないためです。 すなわち , サイズ演算子が記述された式は , 値が結果的に絶対値となっても式の種 類は , 相対式と同じ扱いとなります。 【例】 .SECTION ABC, DATA, ALIGN=1 : .SECTION PROGRAM, CODE, ALIGN=1 MOVW A, #SIZEOF(ABC) MOVW A, #SIZEOF(DMY) : .SECTION DATA, DATA, ALIGN=1 .DATA SIZEOF(PROGRAM), SIZEOF(DMY) : .SECTION DMY, DATA, ALIGN=1 : September 1, 2014, CM81-00208-5 129 Su pp or t So ft Manu al ■ サイズ演算子を含む式が記述できない擬似命令 サイズ演算子を含む式は , 次の擬似命令には記述できません。 機械命令に対しては , すべての式で有効です ( 記述できます )。 • .END 命令の開始アドレス • .SECTION 命令の境界値と開始アドレス • .ALIGN 命令の境界値 • .ORG 命令の式 • .SKIP 命令の式 • .EQU 命令の式 • .DATAB 命令の式 1 • .FDATAB 命令の式 1 • .RES 命令の式 • .FRES 命令の式 • .SDATAB 命令の式 • .FORM 命令の行数と桁数 • .SPACE 命令の空白行数 ■ ほかのモジュールにあるセクションサイズを得るには ほかのモジュールにあるセクションのサイズを得るには , 目的のセクションを空セク ションとして作ります。そして , サイズ演算子を用いることでセクションサイズを算出 できます。 【例】 ほかのモジュールにあるセクション 'S' のサイズを得る場合 130 .SECTION S, STACK, ALIGN=1 /* セクション 'S' の空セクションを作る */ .SECTION P, CODE, ALIGN=1 MOVW A, #SIZEOF(S) /* セクション 'S' のサイズを得る */ CM81-00208-5, September 1, 2014 Support 7.11.5 Soft Ma nual 演算子の優先順位 演算子の優先順位は , C 言語に合わせてあります。 ■ 演算子の優先順位 表 7.11-4 に演算子の優先順位を示します。 表 7.11-4 演算子の優先順位 優先順位 演算子 結合性 適用される式 1 () 左 括弧 2 !~ + BITADR BITPOS SIZEOF 右 単項式 3 */ % 左 乗法式 4 +- 左 加法式 5 << >> 左 シフト式 6 < <= > >= 左 関係式 7 ==!= 左 等価式 8 & 左 ビット AND 式 9 ^ 左 ビット XOR 式 10 | 左 ビット OR 式 11 && 左 論理 AND 式 12 || 左 論理 OR 式 【例】 .IMPORT imp .DATA 10 + 2 * 3 data_h: .DATA imp > > 8 data_1: .DATA imp & 0xff September 1, 2014, CM81-00208-5 & 0xff 131 Su pp or t So ft Manu al 7.12 コメント コメントには , 行コメントと範囲コメントがあります。 行コメントは , セミコロン (;) または 2 個のスラッシュ (//) で始まります。 C 言語風に , /* ~ */ で囲ってコメントを記述することもできます。 ■ コメント 【記述形式】 /* 範囲コメント */ // 行コメント ; 行コメント 【説明】 コメントは , 任意のカラムから始めることができます。 コメントには , 行コメントと範囲コメントがあります。 行コメントは , セミコロン (;) または 2 個のスラッシュ (//) で始まります。 C 言語風に , /* ~ */ で囲ってコメントを記述することもできます。 これを範囲コメントといいます。 範囲コメントは , 好きな位置にコメントを記述できます。 【例】 /*---------範囲コメント ------------*/ ; 行コメント // 行コメント .SECTION D1, DATA, ALIGN=2 /* 範囲コメント */ .DATA // 行コメント 1 .DATA /* 範囲コメント */ 0xff ; 行コメント 132 CM81-00208-5, September 1, 2014 Support Soft Ma nual 第8章 セクション メモリ空間を分割し , それぞれのメモリ空間に意味 を付けたのがセクションです。 セクションは , メモリ空間を用途ごとに区分し , 同 じセクション名を持つものどうしを 1 つのグルー プとして扱います。 セクションは , リンク時に同じセクション名を持つ ものどうしを集めて結合されます。このように , セ クションを用いることでメモリ空間を論理的に扱 うことができます。 この章では , セクションの書き方について説明しま す。 8.1 セクションの記述形式 8.2 セクションのタイプについて 8.3 セクションタイプと属性 8.4 セクションの配置形式について 8.5 セクションの結合方法 8.6 セクションの分割記述 8.7 ROM 化セクションの書き方 September 1, 2014, CM81-00208-5 133 Su pp or t 8.1 So ft Manu al セクションの記述形式 .SECTION 命令でセクションの開始を宣言します。 セクションはいくつも分割できます。 セクションタイプによりセクションの種類が決まります。 セクション配置形式によりセクションの配置形式が決まります。 ■ セクションの記述形式 【記述形式】 .SECTION セクション名 [, セクションタイプ ][, セクション配置形式 ] : テキスト : セクションタイプ :{CODE|DATA|CONST|COMMON|STACK|DUMMY| IO|IOCOMMON|DIR|DIRCONST|DIRCOMMON} セクション配置形式 : {ALIGN= 境界値 |LOCATE= 開始アドレス } 境界値 : 式 ( 絶対式 ) 開始アドレス : 式 ( 絶対式 ) 【説明】 .SECTION 命令でセクションの開始を宣言します。 最初の .SECTION 命令までの間には , オブジェクトコードを生成する命令やロケー ションカウンタを更新する命令を記述できません。 セクションはいくつにも分割できます。 詳細は , 「8.6 セクションの分割記述」を参照してください。 ■ セクションタイプ セクションタイプを指定することで , セクションの属性が決まります。 詳細は , 「8.2 セクションのタイプについて」を参照してください。 セクションタイプは , 次の 11 種類があります。 セクションタイプを省略した場合は , CODE となります。 134 • CODE : コードセクションになります。 • DATA : データセクションになります。 • CONST : 初期値付きデータセクションになります。 • COMMON : 共有セクションになります • STACK : スタックセクションになります。 • DUMMY : ダミーセクションになります。 • IO :I/O セクションになります。 CM81-00208-5, September 1, 2014 Support Soft Ma nual • IOCOMMON : 共有 I/O セクションになります。 • DIR : ダイレクトセクションになります。 • DIRCONST : 初期値付きダイレクトセクションになります。 • DIRCOMMON : 共有ダイレクトセクションになります。 ■ セクション配置形式 セクションの配置方法が決まります。 ● ALIGN: 相対セクションとなります。 メモリ上での配置アドレスはリンカで決定されます。 境界値で指定されたメモリ境界に配置されます。 ● LOCATE: 絶対セクションとなります。 指定された開始アドレスから配置されます。 セクション配置形式を省略した場合は ALIGN=1 となります。 詳細は , 「8.4 セクションの配置形式について」を参照してください。 【例】 .SECTION PROG, CODE, ALIGN=2 /* セクション名 : PROG */ /* セクションタイプ : コードセクション */ /* セクション属性 : 相対セクション ( 境界値 2) */ : .SECTION VAL, DATA, LOCATE=0x1000 /* セクション名 : VAL */ /* セクションタイプ : データセクション */ /* セクション属性 : 0x1000 番地から配置される絶対セクション */ : September 1, 2014, CM81-00208-5 135 Su pp or t 8.2 So ft Manu al セクションのタイプについて セクションのタイプは , セクションにどのようなデータを置くかで決めます。 ■ セクションのタイプについて セクションのタイプは , セクションにどのようなデータを置くかで決めます。 次にセクションタイプに対して一般的に使われるデータの種類を示します。 ● コードセクション (CODE 指定 ) プログラムコードを置きます。 通常 , 機械命令が記述されます。 【例】 .SECTION PROG, CODE, ALIGN=1 start_program: MOVW A, #0 PUSHW A CALL _func ● データセクション (DATA 指定 ) 初期値のないデータ領域を置きます。 通常 , .RES 命令 , .FRES 命令が記述されます。 【例】 .SECTION VAL, DATA, ALIGN=1 v1: .RES 1 v2: .RES.H 2 また , データセクションには , 変更可能な初期値データを置く場合にも使用します。 詳細は , 「8.7 ROM 化セクションの書き方」を参照してください。 【例】 .SECTION INIT, DATA, ALIGN=1 ptbl: .DATA 10, 11, 12 /* 変更可能なデータ値 */ ● 初期値付きデータセクション (CONST 指定 ) 変更しない初期値データを置きます。 主に ROM 内に配置するデータ値を記述する場合に指定します。 【例】 .SECTION PARAM, CONST, ALIGN=1 param1: .DATA 10 param2: .DATA -1 ● 共有セクション (COMMON 指定 ) 共有変数や共通領域を確保したい場合に指定します。 136 CM81-00208-5, September 1, 2014 Support Soft Ma nual リンカで共有結合されます。 【例】 .SECTION COMval, COMMON, ALIGN=1 val: .DATA 500 tbl: .DATAB.B 10, 0xff ● スタックセクション (STACK 指定 ) スタック領域を確保するセクションです。 通常は , .RES 命令で領域を確保します。 【例】 .SECTION STACKAREA, STACK, ALIGN=1 .RES.B 0x1000 /* 4K バイト */ ● ダミーセクション (DUMMY 指定 ) このセクションはオブジェクトコードには出力されません。 したがって , ダミーセクション内で意味を持つのは , 定義されたシンボルやダミーセク ションのサイズを算出する場合のみとなります。 【例】 IO 領域をダミーセクションとして使用する場合】 ヘッダファイル iodef.h .SECTION IO_MAP, DUMMY, LOCATE=0x100 iodata1:.RES.H 1 iodata2:.RES.H 1 iodata3:.RES.H 1 ソースファイル a.asm #include "iodef.h" /* IO 定義ファイルを読み込む */ .SECTION P, CODE, ALIGN=2 : MOVW A, @iodata2 /* IO から値を読む */ : ソースファイル b.asm #include "iodef.h" /* IO 定義ファイルを読み込む */ .SECTION P, CODE, ALIGN=2 : MOVW @iodata2, A /* IO へ値を書く */ : September 1, 2014, CM81-00208-5 137 Su pp or t So ft Manu al ● I/O セクション (IO 指定 ) このセクションは , 各種の入出力ポートが配置されている領域にデータを配置するこ とを指定します。 ● 共有 I/O セクション (IOCOMMON 指定 ) このセクションは , 各種の入出力ポートが配置されている領域にデータを配置するこ とを指定します。 このセクションは , リンカで共有結合されます。 ● ダイレクトセクション (DIR 指定 ) このセクションは , ダイレクトアクセス領域にデータを配置することを指定します。 ● 初期値付きダイレクトセクション (DIRCONST 指定 ) このセクションは , ダイレクトアクセス領域に変更しない初期値データを配置するこ とを指定します。 ● 共有ダイレクトセクション (DIRCOMMON 指定 ) このセクションは , ダイレクトアクセス領域にデータを配置することを指定します。 このセクションは , リンカで共有結合されます。 138 CM81-00208-5, September 1, 2014 Support 8.3 Soft Ma nual セクションタイプと属性 セクションはオブジェクトへ出力されるとき , セクション情報として内容種別 , 結合 種別 , リード種別 , ライト種別 , 実行種別という 5 つの属性を設定します。 これらの属性は , リンク時に , リンカでチェックされます。 ■ セクションタイプと属性 セクションはオブジェクトへ出力されるとき , セクション情報として内容種別 , 結合種 別 , リード種別 , ライト種別 , 実行種別という 5 つの属性を設定します。 これらの属性は , リンク時にリンカでチェックされます。 表 8.3-1 にセクションタイプに対する各属性を示します。 表 8.3-1 セクションタイプに対する各属性 セクションタイプ 内容種別 結合種別 リード ライト 実行 CODE コード 連結結合 ○ × ○ DATA データ 連結結合 ○ ○ × CONST コンスタント 連結結合 ○ × × COMMON データ 共有結合 ○ ○ × STACK スタック 連結結合 ○ ○ × IO データ (I/O) 連結結合 ○ ○ × IOCOMMON データ (I/O) 共有結合 ○ ○ × DIR ダイレクト 連結結合 ○ ○ × DIRCONST ダイレクト 連結結合 ○ × × DIRCOMMON ダイレクト 共有結合 ○ ○ × ○…可 ×…不可 <注意事項> ダミーセクションはオブジェクトには出力されませんので属性は持っていません。 September 1, 2014, CM81-00208-5 139 Su pp or t 8.4 So ft Manu al セクションの配置形式について セクションの配置形式は次の 2 種類があります。 • 相対セクション • 絶対セクション 相対セクションはリンカで配置アドレスが決定されます。 絶対セクションはアセンブラで配置アドレスを指定できます。 ■ セクションの配置形式について セクションの配置形式は次の 2 種類があります。 ● 相対セクション (ALIGN 指定 ) 相対セクションはリンカで配置アドレスが決定されます。したがって , 相対セクション 内のアドレスを持つシンボルはリンクされるまで値が確定しません。このようなシン ボルを相対シンボルといいます。 相対セクションは , どこに配置されるかわからない場合に使います。 ほとんどのプログラムは相対セクションで記述して , リンカで配置アドレスを決める やり方が一般的です。 リンカは , 相対セクションを配置するとき , ALIGN で指定された境界値のメモリ空間 に配置します。 【例】 .SECTION PROG, CODE, ALIGN=1 _main: PUSHW IX MOVW A, SP MOVW IX, A PUSHW A PUSHW A ● 絶対セクション (LOCATE 指定 ) 絶対セクションはアセンブラで配置アドレスを指定できます。 リンカは , 絶対セクションを LOCATE で指定された開始アドレスからメモリ空間に配 置します。したがって , 絶対セクション内のアドレスを持つシンボルはアドレスが決定 されているので値が確定しています。このようなシンボルを絶対シンボルといいます。 絶対セクションは , EIT ベクタテーブルや IO 領域の定義などに利用できます。 絶対セクションの指定では , 以下の記述ができます。 LOCATE= アドレス 【例】 .SECTION 140 IO, DATA, LOCATE=0x0000 CM81-00208-5, September 1, 2014 Support timer_cmd: Soft /* タイマコマンドアドレス */ .RES timer_data: 1 /* タイマデータアドレス */ .RES September 1, 2014, CM81-00208-5 Ma nual 1 141 Su pp or t 8.5 So ft Manu al セクションの結合方法 セクションの結合処理は , リンカで行います。 セクションの結合方法は , 連結結合と共有結合の 2 種類があります。 連結結合は , 同じ名前を持つセクションを連続したメモリ空間に結合します。 共有結合は , 同じ名前を持つセクションどうしのメモリ空間を共有します。 ■ セクションの結合方法 セクションの結合処理は , リンカで行います。 セクションの結合方法は , 連結結合と共有結合の 2 種類があります。 結合方法は , セクションのセクションタイプで決まります。 表 8.5-1 にセクションタイプと結合方法を示します。 表 8.5-1 セクションタイプと結合方法 セクションタイプ 結合方法 CODE DATA CONST STACK IO DIR 連結結合 COMMON IOCOMMON DIRCOMMON 共有結合 ■ 連結結合 複数のソースプログラムに含まれる同じ名前を持つセクションは , 連続したメモリ空 間に結合されます。ただし , セクションタイプ , セクション配置形式ともに同じ指定で なければなりません。 142 CM81-00208-5, September 1, 2014 Support Soft Ma nual 【例】 図 8.5-1 連結結合の例 ソースプログラム s1.asm .SECTION A ,CODE,ALIGN=2 2バイト境界 : : ソースプログラム s2.asm SECTION A ,CODE,ALIGN=2 : : s3.asm ソースプログラム SECTION A ,CODE,ALIGN=2 : ↑下位アドレス ソースプログラム s1.asm セクションA ソースプログラム s2.asm セクションA ソースプログラム s3.asm セクションA ↓上位アドレス : ■ 共有結合 複数のソースプログラムに含まれる同じ名前を持つセクションは , 同じメモリ空間を 共有します。 領域の大きさは , もっとも大きなセクションのサイズで確保されます。 【例】 図 8.5-2 共有結合の例 s1.asm ソースプログラム .SECTION A,DATA,COMMON ↑下位アドレス : : ソースプログラム s2.asm .SECTION A,DATA,COMMON : : ソースプログラム s1.asm セクションA 最終アドレス ソースプログラム s2.asm セクションA 最終アドレス September 1, 2014, CM81-00208-5 ↓上位アドレス 143 Su pp or t 8.6 So ft Manu al セクションの分割記述 セクションは , 1 つのソースプログラムの中に同じセクション名を持つ .SECTION 命令を複数個書くことができます。 その場合 , 同じ名前のセクションは連続した 1 つのセクションとして認識されます。 ■ セクションの分割記述 セクションは , 1 つのソースプログラムの中に同じセクション名を持つ .SECTION 命令 を複数個書くことができます。 その場合 , 同じ名前のセクションは連続した 1 つのセクションとして認識されます。 最初の .SECTION 命令では , そのセクションの開始を宣言し , 2 つめからのセクション は最初のセクションの継続を表します。 セクションが継続する場合 , ロケーションカウンタは直前の同じ名前のセクションの 値が継続されます。 分割して書かれた .SECTION 命令には , 異なる指定 ( セクションタイプとセクション配 置形式 ) をすることはできません。 ただし , セクション名が同じであり , 属性が省略された場合には , 以前に定義された指 定を引き継ぎます。 【例】 .SECTION P, CODE, ALIGN=2 テキスト 1 .SECTION D, DATA, ALIGN=4 テキスト 2 .SECTION P, CODE テキスト 3 .SECTION D テキスト 4 上記のソースプログラムは , 下のソースプログラムと同様に解釈されます。 .SECTION P, CODE, ALIGN=2 テキスト 1 テキスト 3 .SECTION D, DATA, ALIGN=4 テキスト 2 テキスト 4 144 CM81-00208-5, September 1, 2014 Support 8.7 Soft Ma nual ROM 化セクションの書き方 ROM 化するプログラムまたはデータ値の書き方について説明します。 プログラムコードと変更しない初期値データは , そのまま ROM 化しても問題ありま せんが , 変更可能な初期値データは , リンカの -sc オプションで初期値データを ROM に置いておき実行時に RAM に転送して使用することを指定する必要がありま す。 ■ ROM 化セクションの書き方 ROM 化するプログラムまたはデータ値は , 次のように分類できます。 1. プログラムコード (CODE セクション ) 2. 変更しない初期値データ (CONST セクション ) 3. 変更可能な初期値データ (DATA セクション ) 1. と 2. は , そのまま ROM 化しても問題ありませんが , 3. は変更可能な値であるため , ROM 化したデータを RAM 領域に転送する必要があります。したがって , リンカで初 期値を ROM 領域へ配置し , 実行時に RAM 領域に転送して使用する指定が必要となり ます。 このようなセクションの名前は , わかりやすいものに決めて置くことをお薦めいたし ます。 C コンパイラでは , 変更可能な初期値データのセクション名に "INIT" を使っています ので , アセンブラでも "INIT" を使うとよいでしょう。 ■ 初期値データの転送 変更可能な初期値データを ROM から RAM へ転送する方法を説明します。 リンカで , -sc オプションを用いて , ROM-RAM 転送セクション指定を行うと , リンカ は指定されたセクション名に対して , 次のシンボルを自動的に生成します。 • _ROM_ セクション名 • _RAM_ セクション名 それぞれのシンボルは , ROM 領域と RAM 領域の先頭アドレスを示しています。 ROM 領域 (0xE100 ~ 0xE1FF), RAM 領域 (0x0100 ~ 0x01FF) を指定し , INIT セクショ ンを ROM-RAM 転送セクションの指定をした場合の例を次に示します。 flnk896s -ro ROM=0xE100/0xE1FF -ra RAM=0x0100/0x01ff -sc @INIT=ROM, INIT=RAM sample.obj この場合, _ROM_INIT, _RAM_INITが生成され, _ROM_INITには0xE100が, _RAM_INIT には 0x0100 が設定されます。 詳細は , 『SOFTUNE リンケージキットマニュアル』を参照してください。 これらのシンボルを用いて , 次の例に示すように ROM-RAM 転送プログラムを作成し , スタートアップルーチンに組み込みます。 September 1, 2014, CM81-00208-5 145 Su pp or t So ft Manu al 【例】 .IMPORT _ROM_INIT /* ROM 側の INIT セクション先頭アドレス */ .IMPORT _RAM_INIT /* RAM 側の INIT セクション先頭アドレス */ INIT, DATA, ALIGN=4 /* 変更可能初期値データセクション .SECTION ptbl: .DATA 10, 11, 12 */ /* ptbl は RAM 側のアドレスを示す */ /* 初期値データは ROM 側に配置される */ /* ROM-RAM 転送プログラム */ : .SECTION CODE, CODE, ALIGN=2 init_copy: MOVW IX, #_ROM_INIT /* 転送元 (ROM) アドレス */ MOVW EP, #_RAM_INIT /* 転送先 (RAM) アドレス */ MOVW A, #SIZEOF(INIT) /* INIT セクションのサイズ */ BZ init_copy_end /* サイズが 0 なら終了 */ A, @IX+0 /* 転送元データを読み込む */ init_copy_loop: MOV MOV @EP, A /* 転送先にデータを書き込む */ INCW EP /* 転送先アドレスを 1 進める */ INCW IX /* 転送元アドレスを 1 進める */ XCH A, T /* サイズを A レジスタに読み込む */ DECW A /* サイズを 1 減らす */ BNZ init_copy_loop /* サイズが 0 になるまで繰り返す */ init_copy_end: 146 CM81-00208-5, September 1, 2014 Support Soft Ma nual 第9章 機械命令 この章では , 機械命令の記述形式 , 記述上の規則に ついて説明します。 機械命令およびアドレッシングモードの詳細は , 各 CPU の『インストラクションマニュアル』または 『プログラミングマニュアル』を参照してください。 9.1 機械命令の記述形式 9.2 オペランドフィールドの記述形式 September 1, 2014, CM81-00208-5 147 Su pp or t 9.1 So ft Manu al 機械命令の記述形式 機械命令の一般的な記述形式と規則について説明します。 ■ 機械命令の記述形式 機械命令は , プログラムの実行時に CPU により解釈され実行する命令です。 機械命令の詳細は , 各 CPU の『インストラクションマニュアル』または『プログラミ ングマニュアル』を参照してください。 機械命令を記述する一般的な記述形式は次のとおりです。 【記述形式】 [ シンボル ] オペレーション [ オペランド [, オペランド ]…] オペレーション : 命令ニーモニック オペランド : アドレッシングモード 【説明】 シンボルフィールドにシンボルを書いた場合 , そのシンボルに対して現在のアドレ スが割り付けられます。 オペレーションフィールドには , 命令ニーモニックを記述します。 オペランドフィールドには , その機械命令に必要なオペランドを記述します。複数 のオペランドを記述する場合は , カンマ (, ) でオペランドを区切ります。 各オペランドには , アドレッシングモードを記述します。 【例】 148 PUSHW IX MOVW A, SP MOVW IX, A PUSHW A CALL _proc0 CM81-00208-5, September 1, 2014 Support 9.2 Soft Ma nual オペランドフィールドの記述形式 オペランドフィールドの記述形式について説明します。 ■ オペランドフィールドの記述形式 【記述形式】 [ オペランド [, オペランド ]…] オペランド : アドレッシングモード 【説明】 機械命令のオペランドは各機械命令に記述できるアドレッシングモードが決まっ ています。 複数のオペランドを持つ機械命令は , カンマ (, ) でオペランドを区切ります。 各機械命令に記述できるアドレッシングモードおよびアドレッシングモードの詳 細は , 各 CPU の『インストラクションマニュアル』または『プログラミングマニュ アル』参照してください。 ■ オペランドの順序 オペランドの順序は機械命令ごとに定められていますが原則は次のとおりです。 ● 演算系の命令 演算系の命令では , 第 1 オペランドと第 2 オペランドで演算を行い , その結果を第 1 オ ペランドに格納します。 第 1 オペランド ← 第 1 オペランド .op. 第 2 オペランド 【例】 ADD A, #5 /* A ← A + 5 */ ● 転送系の命令 転送系の命令では , 第 2 オペランドから第 1 オペランドに転送を行います。 第 1 オペランド ← 第 2 オペランド 【例】 MOV September 1, 2014, CM81-00208-5 A, R5 /* A ← R5 */ 149 Su pp or t 150 So ft Manu al CM81-00208-5, September 1, 2014 Support Soft Ma nual 第 10 章 アセンブラ擬似命令 アセンブラ擬似命令は , 機械命令とは異なりアセン ブラ自身に対して指示を与える命令です。 アセンブラ擬似命令は , 次の 8 つに分類されます。 • プログラム構造定義命令 • アドレス制御命令 • プログラム結合命令 • シンボル定義命令 • 領域定義命令 • デバッグ情報出力制御命令 • ライブラリファイル指定命令 • リスト出力制御命令 この章では , アセンブラ擬似命令の各記述形式とそ の機能について説明します。 10.1 擬似命令で扱う整数定数の範囲 10.2 プログラム構造定義命令 10.3 アドレス制御命令 10.4 プログラム結合命令 10.5 シンボル定義命令 10.6 領域定義命令 10.7 デバッグ情報出力制御命令 10.8 ライブラリファイル指定命令 10.9 リスト出力制御命令 September 1, 2014, CM81-00208-5 151 Su pp or t So ft Manu al 10.1 擬似命令で扱う整数定数の範囲 擬似命令で整数定数を指定する場合 , ビット (1 ビット ), バイト (8 ビット ), ハーフ ワード (16 ビット ), ロングワード (32 ビット ), ワード (16 ビット ) の 5 種類のサイ ズがあります。 サイズの記述がない場合は , ワード (16 ビット ) になります。 ■ 擬似命令で扱う整数定数の範囲 擬似命令で整数定数を指定する場合 , 次の 5 種類のサイズがあります。 • ビット (1 ビット ) • バイト (8 ビット ) • ハーフワード (16 ビット ) • ロングワード (32 ビット ) • ワード (16 ビット ) サイズの記述がない場合は , ワード (16 ビット ) になります。 擬似命令で使うサイズ指定子を表 10.1-1 に示します。 表 10.1-1 サイズ指定子 152 サイズ指定子 データサイズ I( ビット ) 1bit B( バイト ) 8bit(1byte) H( ハーフ ) 16bit(2bytes) L( ロング ) 32bit(4bytes) W( ワード ) 16bit(2bytes) CM81-00208-5, September 1, 2014 Support Soft Ma nual 10.2 プログラム構造定義命令 プログラム構造定義命令は , ソースプログラムの終了 , モジュール名の宣言 , セク ション情報の定義などを行う命令です。 ■ プログラム構造定義命令 プログラム構造定義命令には , 次の 3 種類があります。 • .PROGRAM : モジュール名の宣言 • .END : ソースプログラムの終了 • .SECTION : セクションの定義 September 1, 2014, CM81-00208-5 153 Su pp or t 10.2.1 So ft Manu al .PROGRAM 命令 モジュール名の指定を行います。 モジュール名は , 名前の規則に従います。 .PROGRAM 命令が省略された場合は , オブジェクトファイルの主ファイル名をモ ジュール名とします。 ■ .PROGRAM 命令 【記述形式】 .PROGRAM モジュール名 【説明】 モジュール名の指定を行います。 モジュール名は , 名前の規則に従います。 .PROGRAM 命令は , ソースプログラム中 , 1 回限り有効です。 .PROGRAM 命令が省略された場合は , オブジェクトファイルの主ファイル名をモ ジュール名とします。 オブジェクトファイルの主ファイル名が , 名前規則から外れている場合は警告を出 力し , モジュール名に使用できない文字は , アンダバー (_) に置き換えます。 【例】 .PROGRAM test_name ■ 起動時オプションとの関係 -name を指定した場合 , -name で指定した名前がモジュール名となります。 154 CM81-00208-5, September 1, 2014 Support Soft Ma nual .END 命令 10.2.2 ソースプログラムの終了を示します。 .END 命令は省略できます。その場合 , ソースプログラムの最後までアセンブルされ ます。 開始アドレスを設定できます。 ■ .END 命令 【記述形式】 [ 開始アドレス ] .END 開始アドレス : 式 【説明】 ソースプログラムの終了を示します。 .END 命令は省略できます。その場合 , ソースプログラムの最後までアセンブルされ ます。 .END 命令以降にソースがある場合は , 以降のソースはアセンブルされません。 開始アドレスが指定されていると , プログラムの開始アドレスを設定します。 プログラムの開始アドレスは , SOFTUNE Workbench でプログラムをロードすると きに参照し , プログラムカウンタに値を設定するためのものです。 開始アドレスが省略された場合は , 開始アドレスは設定されません。 開始アドレスは , 絶対式か単純相対式でなければなりません。 開始アドレスは , コードセクション内を示していなければなりません。 【例】 .SECTION PROG, CODE, ALIGN=1 start: : .END September 1, 2014, CM81-00208-5 start 155 Su pp or t 10.2.3 So ft Manu al .SECTION 命令 セクションの開始を宣言し , セクションのタイプと配置形式を設定します。 ■ .SECTION 命令 【記述形式】 セクション名 [, 指定 [, 指定 ]] .SECTION 指定 :{ セクションタイプ | セクション配置形式 } セクションタイプ :{CODE|DATA|CONST|COMMON|STACK|DUMMY|IO |IOCOMMON|DIR|DIRCOMMON|DIRCONST} セクション配置形式 :{ALIGN= 境界値 |LOCATE= 開始アドレス } 境界値 : 式 ( 絶対式 ) 開始アドレス : 式 ( 絶対式 ) 【説明】 セクションの開始を宣言し , セクションのタイプと配置形式を設定します。 セクション名は , 名前の規則に従います。 セクションタイプ , セクション配置形式は , それぞれ 1 つのみ指定できます。 セクションタイプが省略された場合は , コードセクションとなります。 セクション配置形式が省略された場合は , ALIGN=1 が設定されます。 ■ セクションタイプ セクションタイプを指定します。 詳細は , 「8.2 セクションのタイプについて」を参照してください。 • CODE : コードセクションになります。 • DATA : データセクションになります。 • CONST : 初期値付きデータセクションになります。 • COMMON : 共有セクションになります。 • STACK : スタックセクションになります。 • DUMMY : ダミーセクションになります。 • IO : I/O セクションになります。 • IOCOMMON : 共有 I/O セクションになります。 • DIR : ダイレクトセクションになります。 • DIRCONST : 初期値付きダイレクトセクションになります。 • DIRCOMMON : 共有ダイレクトセクションになります。 156 CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ セクション配置形式 セクションの配置方法を指定します。 詳細は , 「8.4 セクションの配置形式について」を参照してください。 ● ALIGN= 境界値 相対セクションとなります。 リンカで , 指定された境界にセクションが配置されます。 境界値は , 絶対式でなければなりません。 境界値は , 2 のべき乗値でなければなりません。 ● LOCATE= 開始アドレス 絶対セクションとなります。 指定された開始アドレスからセクションが配置されます。 開始アドレスは , 絶対式でなければなりません。 【例】 .SECTION P, CODE, ALIGN=1 : .SECTION D, DATA, LOCATE=0x1000 : .SECTION C, CONST, LOCATE=0x2000 : .SECTION V, COMMON, ALIGN=1 : September 1, 2014, CM81-00208-5 157 Su pp or t So ft Manu al 10.3 アドレス制御命令 アドレス制御命令は , ロケーションカウンタ値の変更を行う命令です。 ■ アドレス制御命令 アドレス制御命令には , 次の 3 種類があります。 158 • .ALIGN : 境界整列 • .ORG : ロケーションカウンタ値の変更 • .SKIP : ロケーションカウンタ値のインクリメント CM81-00208-5, September 1, 2014 Support 10.3.1 Soft Ma nual .ALIGN 命令 現在のロケーションカウンタ値が指定された境界にない場合 , 境界値になるまでロ ケーションカウンタ値を進めます。 ただし , 境界にある場合は何も行いません。 ■ .ALIGN 命令 【記述形式】 .ALIGN 境界値 境界値 : 式 ( 絶対式 ) 【説明】 現在のロケーションカウンタ値が指定された境界にない場合 , 境界値になるまでロ ケーションカウンタ値を進めます。ただし , 境界にある場合は何も行いません。 式は , 絶対式でなければなりません。 式は , 0x8000 以下の正の値でなければなりません。 【条件】 .SECTION 命令の境界値≧ .ALIGN 命令の境界値 ( 絶対セクションの場合は , この条件は必要ありません ) 【例】 .SECTION D, DATA, ALIGN=8 /* (8=2^3) */ .DATA.B 0 .ALIGN 8 .DATA.B 0xff .ALIGN 4 : September 1, 2014, CM81-00208-5 159 Su pp or t 10.3.2 So ft Manu al .ORG 命令 ロケーションカウンタに式の値を設定します。 ■ .ORG 命令 【記述形式】 .ORG 式 【説明】 ロケーションカウンタに式の値を設定します。 絶対セクション内で .ORG 命令を使用した場合 , .SECTION 命令で指定した開始アド レス (LOCATE 指定 ) より前にロケーションカウンタを戻すことはできません。 式は , 絶対式または本命令と同じセクション内のシンボルを値に含む単純相対式で なければなりません。 【例】 .SECTION D, DATA, LOCATE=0x100 .DATA 0 .ORG 0x200 .DATA 2 .ORG 0x300 .DATA 3 : 160 CM81-00208-5, September 1, 2014 Support 10.3.3 Soft Ma nual .SKIP 命令 ロケーションカウンタを式の数分だけインクリメントします。 ■ .SKIP 命令 【記述形式】 .SKIP 式 【説明】 ロケーションカウンタを , 式の数分だけインクリメントします。 式は , 絶対式でなければなりません。 【例】 .SECTION D, DATA, ALIGN=2 .DATA.H 0x0505 .SKIP 2 .DATA.H 0x1010 : September 1, 2014, CM81-00208-5 161 Su pp or t So ft Manu al 10.4 プログラム結合命令 複数のプログラム間で , シンボルを共有する場合にプログラム結合命令を使用しま す。 シンボルをほかのプログラムも参照可能にする外部定義の宣言 , ほかのプログラム のシンボルを参照する外部参照の宣言を行います。 ■ プログラム結合命令 プログラム結合命令には , 次の 3 種類があります。 162 • .EXPORT : 外部定義シンボルの宣言 • .GLOBAL : 外部定義 / 外部参照シンボルの宣言 • .IMPORT : 外部参照シンボルの宣言 CM81-00208-5, September 1, 2014 Support 10.4.1 Soft Ma nual .EXPORT 命令 プログラム内で定義したシンボルを .EXPORT 命令で指定することによりほかのプ ログラムでもそのシンボルの参照ができるようになります。 ■ .EXPORT 命令 【記述形式】 シンボル [, シンボル ]… .EXPORT 【説明】 プログラム内で定義したシンボルを .EXPORT 命令で指定することによりほかのプ ログラムでもそのシンボルの参照ができるようになります。 シンボルは本プログラム中で定義されていなければなりません。 指定可能なシンボルの種類は次のとおりです。 - 絶対値を持つシンボル - アドレスを持つシンボル 同じシンボルが指定されてもエラーにはなりません。 【例】 -------- プログラム 1 -------.EXPORT abc1, abc2 : abc1: .EQU 5*3 : abc2: ADDC A, R5 -------- プログラム 2 -------.IMPORT abc1, abc2 : .DATA abc1 : .DATA abc2 : September 1, 2014, CM81-00208-5 163 Su pp or t 10.4.2 So ft Manu al .GLOBAL 命令 外部定義 , または外部参照するシンボルを宣言します。 本プログラム内で定義されているシンボルは , 外部定義シンボルとなります。 ■ .GLOBAL 命令 【記述形式】 シンボル [, シンボル ]… .GLOBAL 【説明】 外部定義 , または外部参照するシンボルを宣言します。 本プログラム内で定義されているシンボルは , 外部定義シンボルとなります。 指定可能な外部定義シンボルの種類は , 次のとおりです。 - 絶対値を持つシンボル - アドレスを持つシンボル 本プログラム内で定義されていないシンボルは , 外部参照シンボルとなります。 同じシンボルが指定されてもエラーにはなりません。 【例】 .GLOBAL abc, sub /* abc は外部定義シンボル */ /* sub は外部参照シンボル */ : abc: 164 CALL sub CM81-00208-5, September 1, 2014 Support 10.4.3 Soft Ma nual .IMPORT 命令 シンボルが , ほかのプログラムで定義されていることを指定します。 ■ .IMPORT 命令 【記述形式】 シンボル [, シンボル ]… .IMPORT 【説明】 シンボルが , ほかのプログラムで定義されていることを指定します。 このシンボルは , ほかのプログラム内で外部定義されていなければなりません。 同じシンボルが指定されてもエラーにはなりません。 【例】 -------- プログラム 1 -------.IMPORT xyz1, xyz2 : .DATA xyz1 : .DATA xyz2 -------- プログラム 2 -------.EXPORT xyz1, xyz2 : xyz1: .EQU 5*3 : xyz2: September 1, 2014, CM81-00208-5 ADDC A, R5 165 Su pp or t So ft Manu al 10.5 シンボル定義命令 シンボル定義命令は , シンボルに値を割り付けます。 ■ シンボル定義命令 シンボル定義命令には , 次の 1 種類があります。 • .EQU: シンボルへの値の割り付け 166 CM81-00208-5, September 1, 2014 Support Soft Ma nual .EQU 命令 10.5.1 シンボルに , 式の値を割り付けます。 ■ .EQU 命令 【記述形式】 シンボル 式 .EQU 【説明】 シンボルに , 式の値を割り付けます。 すでに定義されているシンボルに対して , 値を割り付けることはできません。 式は , 絶対式か単純相対式でなければなりません。 【例】 TEN: .EQU 10 /* TEN=10 */ ONE: .EQU TEN/10 /* ONE=TEN/10 */ val1: .DATA 0xFFFF0000 val2: .EQU val1+2 September 1, 2014, CM81-00208-5 167 Su pp or t So ft Manu al 10.6 領域定義命令 領域定義命令は , メモリ領域に定数や領域を確保できます。 ■ 領域定義命令 領域定義命令には , 次の 18 種類があります。 168 • .DATA: 定数定義 ( 整数型 ) • .BIT: 定数定義 (1 ビット整数定数 ) • .BYTE: 定数定義 (8 ビット整数定数 ) • .HALF: 定数定義 (16 ビット整数定数 ) • .LONG: 整数定義 (32 ビット整数定数 ) • .WORD: 定数定義 (16 ビット整数定数 ) • .DATAB: 定数ブロック定義 ( 整数定数 ) • .FDATA: 定数定義 ( 浮動小数点定数 ) • .FLOAT: 定数定義 (32 ビット浮動小数点定数 ) • .DOUBLE: 定数定義 (64 ビット浮動小数点定数 ) • .FDATAB: 定数ブロック定義 ( 浮動小数点定数 ) • .RES: 領域定義 ( 整数定数 ) • .FRES: 領域定義 ( 浮動小数点定数 ) • .SDATA: 文字列定義 • .ASCII: 文字列定義 • .SDATAB: 文字列ブロック定義 • .STRUCT: 構造体の定義開始 • .ENDS: 構造体の定義終了 CM81-00208-5, September 1, 2014 Support 10.6.1 Soft Ma nual .DATA 命令 , .BIT 命令 , .BYTE 命令 , .HALF 命令 , .LONG 命令 , .WORD 命令 式の値をメモリ領域に確保します。 .DATA 命令は , サイズ単位でメモリ領域を確保します。 .BIT 命令は , ビット単位でメモリ領域を確保します。 .BYTE 命令は , バイト単位でメモリ領域を確保します。 .HALF 命令は , ハーフワード単位でメモリ領域を確保します。 .LONG 命令は , ロングワード単位でメモリ領域を確保します。 .WORD 命令は , ワード単位でメモリ領域を確保します。 ■ .DATA 命令 【記述形式】 [ シンボル ] 式 [, 式 ]… .DATA.s サイズ指定 (s): I … ビット (1 ビット ) B … バイト (8 ビット ) H … ハーフワード (16 ビット ) L … ロングワード (32 ビット ) W …ワード (16 ビット ) < < デフォルト > > 【説明】 式の値をメモリ領域にサイズ (.s) 単位で確保します。 サイズ (.s) が省略された場合は , ワード指定となります。 式には , 絶対式と相対式が記述できます。 【例】 .DATA.B 0x12, 0x23, 0xa3 .DATA -1, 0xffff ■ .BIT 命令 【記述形式】 [ シンボル ] .BIT 式 [, 式 ]… 【説明】 ビット (1 ビット ) 単位でメモリ領域を確保します。 次の定義と同じ意味です。 .DATA.I 式 [, 式 ]… September 1, 2014, CM81-00208-5 169 Su pp or t So ft Manu al ■ .BYTE 命令 【記述形式】 [ シンボル ] .BYTE 式 [, 式 ]… 【説明】 バイト (8 ビット ) 単位でメモリ領域を確保します。 次の定義と同じ意味です。 .DATA.B 式 [, 式 ]… ■ .HALF 命令 【記述形式】 [ シンボル ] .HALF 式 [, 式 ]… 【説明】 ハーフワード (16 ビット ) 単位でメモリ領域を確保します。 次の定義と同じ意味です。 .DATA.H 式 [, 式 ]… ■ .LONG 命令 【記述形式】 [ シンボル ] .LONG 式 [, 式 ]… 【説明】 ロングワード (32 ビット ) 単位でメモリ領域を確保します。 次の定義と同じ意味です。 .DATA.L 式 [, 式 ]… ■ .WORD 命令 【記述形式】 [ シンボル ] .WORD 式 [, 式 ]… 【説明】 ワード (16 ビット ) 単位でメモリ領域を確保します。 次の定義と同じ意味です。 .DATA.W 式 [, 式 ]… 170 CM81-00208-5, September 1, 2014 Support Soft Ma nual .DATAB 命令 10.6.2 指定された数分だけ , 値をメモリ領域にサイズ単位で確保します。 サイズが省略された場合は , ワード指定となります。 ■ .DATAB 命令 【記述形式】 [ シンボル ] 式 1, 式 2 .DATAB.s サイズ指定 (s): I …ビット (1 ビット ) B …バイト (8 ビット ) H …ハーフ (16 ビット ) L …ロング (32 ビット ) W …ワード (16 ビット ) < < デフォルト > > 【説明】 式 1 の数分だけ , 式 2 の値をメモリ領域にサイズ (.s) 単位で確保します。 サイズ (.s) が省略された場合は , ワード指定となります。 式 1 は , 絶対式でなければなりません。 式 2 は , 絶対式と相対式が記述できます。 【例】 .DATAB.B 4, 0x12 <注意事項> .DATAB 命令は , 式 2 を式 1 の数分繰り返して領域を確保するため , 式 1 にあまりにも大 きな値を指定すると処理時間が非常に長くなります。そのため , 式 1 の値は 1048575 以 下にしてください。それ以上はエラーとなります。 September 1, 2014, CM81-00208-5 171 Su pp or t 10.6.3 So ft Manu al .FDATA 命令 , .FLOAT 命令 , .DOUBLE 命令 浮動小数点定数をメモリ領域に確保します。 .FDATA 命令は , 型指定で指定された単位でメモリ領域を確保します。 .FLOAT 命令は , 単精度 (4 バイト ) 単位でメモリ領域を確保します。 .DOUBLE 命令は , 倍精度 (8 バイト ) 単位でメモリ領域を確保します。 ■ .FDATA 命令 【記述形式】 [ シンボル ] 型指定 (t): .FDATA.t 浮動小数点定数 [, 浮動小数点定数 ]… S …単精度浮動小数点定数 , 32 ビット (4 バイト ) < < デフォルト > > D …倍精度浮動小数点定数 , 64 ビット (8 バイト ) 【説明】 浮動小数点定数をメモリ領域に型指定 (.t) 単位で確保します。 浮動小数点定数には , 式や整数定数を指定できません。 型指定 (.t) が省略された場合は , 単精度指定となります。 浮動小数点定数については , 「7.9 浮動小数点定数」を参照してください。 【例】 .FDATA.S 2.1e4 /* 単精度となります */ .FDATA.D 3.2e5 /* 倍精度となります */ .FDATA 4.3e-2 /* 単精度となります */ .FDATA 0xFFFF0000 /* 単精度となります */ ■ .FLOAT 命令 【記述形式】 [ シンボル ] .FLOAT 浮動小数点定数 [, 浮動小数点定数 ]… 【説明】 単精度 (4 バイト ) 単位でメモリ領域を確保します。 次の定義と同じ意味です。 .FDATA.S 浮動小数点定数 [, 浮動小数点定数 ]… 172 CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ .DOUBLE 命令 【記述形式】 [ シンボル ] .DOUBLE 浮動小数点定数 [, 浮動小数点定数 ]… 【説明】 倍精度 (8 バイト ) 単位でメモリ領域を確保します。 次の定義と同じ意味です。 .FDATA.D 浮動小数点定数 [, 浮動小数点定数 ]… September 1, 2014, CM81-00208-5 173 Su pp or t So ft Manu al .FDATAB 命令 10.6.4 指定された数分だけ , 浮動小数点定数をメモリ領域に型指定で指定された単位で確 保します。 型指定が省略された場合は , 単精度指定となります。 ■ .FDATAB 命令 【記述形式】 [ シンボル ] 型指定 (t): .FDATAB.t 式 , 浮動小数点定数 S …単精度浮動小数点定数 , 32 ビット (4 バイト ) < < デフォルト > > D …倍精度浮動小数点定数 , 64 ビット (8 バイト ) 【説明】 式の数分だけ , 浮動小数点定数をメモリ領域に型指定 (.t) 単位で確保します。 型指定 (.t) が省略された場合は , 単精度指定となります。 式は , 絶対式でなければなりません。 浮動小数点定数には , 式や整数定数を指定できません。 【例】 .FDATAB.S 4, 0xFFF00000 .FDATAB.S 12, 0r1.2e10 <注意事項> .FDATAB 命令は , 浮動小数点定数を式の数分繰り返して領域を確保するため , 式にあまり にも大きな値を指定すると処理時間が非常に長くなります。そのため , 式の値は 1048575 以下にしてください。それ以上はエラーとなります。 174 CM81-00208-5, September 1, 2014 Support Soft Ma nual .RES 命令 10.6.5 指定された数分だけ , メモリ領域をサイズ単位で確保します。 .RES 命令は , 領域を確保するだけでデータは未設定となります。 サイズが省略された場合は , ワード指定となります。 ■ .RES 命令 【記述形式】 [ シンボル ] 式 .RES.s サイズ指定 (s): I …ビット (1 ビット ) B …バイト (8 ビット ) H …ハーフワード (16 ビット ) L …ロングワード (32 ビット ) W …ワード (16 ビット ) < < デフォルト > > 【説明】 式の数分だけ , メモリ領域をサイズ (.s) 単位で確保します。 この命令は , 領域を確保するだけでデータは未設定となります。 サイズ (.s) が省略された場合は , ワード指定となります。 式は , 絶対式でなければなりません。 【例】 .RES.H 2 /* ハーフワード (16 ビット ) を 2 つ分確保 */ .RES.B 4 /* バイト (8 ビット ) を 4 つ分確保 */ September 1, 2014, CM81-00208-5 175 Su pp or t 10.6.6 So ft Manu al .FRES 命令 指定された数分だけ , メモリ領域を型指定で指定された単位で確保します。 .FRES 命令は , 領域を確保するだけでデータは未設定となります。 型指定省略された場合は , 単精度指定となります。 ■ .FRES 命令 【記述形式】 [ シンボル ] 型指定 (t): .FRES.t 式 S …単精度浮動小数点定数 , 32 ビット (4 バイト ) < < デフォルト > > D …倍精度浮動小数点定数 , 64 ビット (8 バイト ) 【説明】 式の数分だけ , メモリ領域を型指定 (.t) 単位で確保します。 この命令は , 領域を確保するだけでデータは未設定となります。 型指定 (.t) が省略された場合は , 単精度指定となります。 式は , 絶対式でなければなりません。 【例】 176 .FRES.S 2 /* 単精度 (4 バイト ) を 2 つ分確保 */ .FRES.D 4 /* 倍精度 (8 バイト ) を 4 つ分確保 */ CM81-00208-5, September 1, 2014 Support 10.6.7 Soft Ma nual .SDATA 命令 , .ASCII 命令 メモリ領域に , 文字列のデータを確保します。 ■ .SDATA 命令 【記述形式】 [ シンボル ] .SDATA 文字列 [, 文字列 ]… 【説明】 メモリ領域に , 文字列のデータを確保します。 文字列の書き方については , 「7.8 文字列」を参照してください。 【例】 .SDATA "STR", "IN", "G" → |S |T |R |I |N |G | .SDATA "EF\tXYZ\0" → |E |F |09|X |Y |Z |00| ■ .ASCII 命令 【記述形式】 [ シンボル ] .ASCII 文字列 [, 文字列 ]… 【説明】 .SDATA 命令と命令名が異なるだけで機能は全く同じです。 【例】 .ASCII September 1, 2014, CM81-00208-5 "GHI\r\n" → |G |H |I |0D|0A| 177 Su pp or t So ft Manu al .SDATAB 命令 10.6.8 メモリ領域に , 指定された数分だけ文字列データを確保します。 ■ .SDATAB 命令 【記述形式】 [ シンボル ] .SDATAB 式 , 文字列 【説明】 メモリ領域に , 式の数分だけ文字列データを確保します。 式は , 絶対式でなければなりません。 【例】 .SDATAB 3, "ABCD" A B C D A B C D A B C D 下位アドレス 上位アドレス <注意事項> .SDATAB 命令は , 文字列を式の数分繰り返して領域を確保するため , 式にあまりにも大き な値を指定すると処理時間が非常に長くなります。そのため , 式の値は 1048575 以下に してください。それ以上はエラーとなります。 178 CM81-00208-5, September 1, 2014 Support 10.6.9 Soft Ma nual .STRUCT 命令 , .ENDS 命令 構造体の名前とその構成要素を定義します。 構造体の開始 (.STRUCT 命令 ) と終了 (.ENDS 命令 ) は , 一致させなければなりません。 構造体の構成要素となる各メンバは領域定義擬似命令を記述します。 ■ .STRUCT 命令 , .ENDS 命令 【記述形式】 構造体タグ名 .STRUCT [ メンバ名 ] : 領域定義擬似命令 構造体タグ名 .ENDS 式 【説明】 構造体の名前とその構成要素を定義します。 構造体の開始(.STRUCT命令)と終了(.ENDS命令)は, 一致させなければなりません。 構造体の構成要素となる各メンバは , 領域定義擬似命令を記述します。 【例】 ABC: .STRUCT m1: .BIT 0 m2: .BYTE 2 ABC: .ENDS ■ 構造体の領域定義 【記述形式】 構造体シンボル 構造体タグ名 <[ 式 [, …]] > 【説明】 構造体タグ名は , この構造体が持つ大きさの領域を確保してくれる領域定義擬似命 令のように機能します。 オペランド欄には構造体の各メンバの値を記述します。 アングルブラケット ( < >) 内の式は , 省略できますが , アングルブラケットそのもの は省略できません。 式は構造体の各メンバへの初期値を記述します。 初期化しない領域がある場合は , カンマ (, ) だけを記述して式を記述しなければ , そ の部分は初期化されません。 初期化しないメンバが後に連続している場合には , そのメンバ以降の式を指定する 必要はありません。 September 1, 2014, CM81-00208-5 179 Su pp or t So ft Manu al 【例】 ABC: .STRUCT m1: .BIT 0 m2: .BYTE 2 ABC: .ENDS c: ABC <0, 2 > ■ 構造体のアクセス 【記述形式】 構造体シンボル . メンバ名 【説明】 構造体シンボルの後にピリオド (.) を付加して構造体メンバ名を続けて記述するこ とで構造体のメンバを参照できます。 構造体メンバは , 構造体内での 16 ビットオフセットを持ち , 式の中でディスプレー スメントとしても記述できます。 【例】 180 ABC: .STRUCT m1: .BIT 0 m2: .BYTE 2 ABC: .ENDS c: ABC <0, 2 > MOV A, c+m2 SETB c.m1 CM81-00208-5, September 1, 2014 Support Soft Ma nual 10.7 デバッグ情報出力制御命令 デバッグ情報出力の部分指定を行います。 起動時オプションでデバッグ情報出力 (-g) を指定すると , プログラムで使用されて いるシンボル情報がオブジェクトへ出力されます。 デバッグ情報出力制御命令は , ON/OFF 指定を行うことで必要な部分だけデバッグ 情報を出力できます。 ■ デバッグ情報出力制御命令 デバッグ情報出力制御命令には , 次の 1 種類があります。 • .DEBUG: デバッグ情報出力の部分指定 ■ .DEBUG 命令 【記述形式】 .DEBUG {ON|OFF} ON : デバッグ情報出力の開始を指定 OFF: デバッグ情報出力の中止を指定 【説明】 デバッグ情報出力の部分指定を行います。 起動時オプションでデバッグ情報出力 (-g) を指定すると , プログラムで使用されて いるシンボル情報がオブジェクトへ出力されます。 .DEBUG 命令は , ON/OFF 指定を行うことで必要な部分だけデバッグ情報を出力で きます。 .DEBUG 命令は , ソースプログラム上何回現れてもよく , その都度有効となります。 デバッグ情報出力が ON になっている部分のシンボルについてデバッグ情報が出力 されます。 初期値は , ON になっています。 【例】 .DEBUG ON : /* この部分のデバッグ情報は出力されます .DEBUG OFF : /* この部分のデバッグ情報は出力されません .DEBUG September 1, 2014, CM81-00208-5 */ */ ON 181 Su pp or t So ft Manu al ■ 起動時オプションとの関係 -g が指定されている場合のみ .DEBUG 命令が有効となります。 -g が指定されていない場合や -Xg で -g が取り消されている場合は , .DEBUG 命令はす べて無効となり , デバッグ情報は一切出力されません。 182 CM81-00208-5, September 1, 2014 Support Soft Ma nual 10.8 ライブラリファイル指定命令 ライブラリファイルを指定します。 ■ ライブラリファイル指定命令 ライブラリファイル指定命令には , 次の 1 種類があります。 • .LIBRARY: ライブラリファイルの指定 ■ .LIBRARY 命令 【記述形式】 .LIBRARY " ライブラリファイル名 " 【説明】 リンカで検索するライブラリファイル名の指定を行います。 ライブラリファイルをいくつも指定したい場合は , .LIBRARY 命令を複数記述しま す。 【例】 .LIBRARY "liblo.lib" .LIBRARY "libstd.lib" September 1, 2014, CM81-00208-5 183 Su pp or t So ft Manu al 10.9 リスト出力制御命令 アセンブルリストの出力形式を指定できます。 ■ リスト出力制御命令 ライブラリファイル指定命令には , 次の 6 種類があります。 • .FORM : 1 頁の行数と桁数指定 • .TITLE : タイトル指定 • .HEADING: タイトルの指定と変更 184 • .LIST : アセンブルソースリスト出力の詳細指定 • .PAGE : 改頁指定 • .SPACE : 空白行の出力 CM81-00208-5, September 1, 2014 Support 10.9.1 Soft Ma nual .FORM 命令 アセンブルリストに出力する 1 頁当たりの行数と桁数を指定します。 行数の値の範囲は , 20 ~ 255 です。0 を指定した場合は , 改頁されません。 桁数の値の範囲は , 80 ~ 1023 です。 初期値は , .FROM LIN=60, COL=100 です。 ■ .FORM 命令 【記述形式】 指定 [, 指定 ] .FORM 指定 :{ 行数 | 桁数 } 行数 :LIN= 式 ( 絶対式 ) {0|20 ~ 255} 桁数 :COL= 式 ( 絶対式 ) 80 ~ 1023 【説明】 アセンブルリストに出力する 1 頁当たりの行数と桁数を指定します。 .FORM命令は, ソースプログラム上に何回現れてもよく, その都度有効となります。 式は , 絶対式でなければなりません。 行数の値の範囲は , 20 ~ 255 です。0 を指定した場合は , 改頁されません。 桁数の値の範囲は , 80 ~ 1023 です。 初期値は , .FORM LIN=60, COL=100 です。 アセンブラは , 指定された行数と桁数内に余白を補って出力します。 【例】 図 10.9-1 .FORM 命令の出力例 ソースプログラム .FORM アセンブルリスト LIN=60, COL=80 80 60 ■ 起動時オプションとの関係 -pl を指定した場合 , 行数の指定は無効となります。 -pw を指定した場合 , 桁数の指定は無効となります。 September 1, 2014, CM81-00208-5 185 Su pp or t 10.9.2 So ft Manu al .TITLE 命令 アセンブルリストの各頁のヘッダ部に , コメントとして表示するタイトルを指定し ます。 指定されたタイトル文字は , 先頭頁から出力されます。 .TITLE 命令は , ソースプログラム上で 1 回のみ指定可能です。 ■ .TITLE 命令 【記述形式】 " タイトル文字 " .TITLE 【説明】 アセンブルリストの各ページのヘッダ部に , コメントとして表示するタイトルを指 定します。 指定されたタイトル文字は , 先頭頁から出力されます。 .TITLE 命令は , ソースプログラム上で 1 回のみ指定可能です。 タイトルの長さは 60 文字までです。 【例】 図 10.9-2 .TITLE 命令の出力例 ソースプログラム .TITLE "TEST PROGRAM" アセンブルリスト TEST PROGRAM TEST PROGRAM TEST PROGRAM 186 CM81-00208-5, September 1, 2014 Support 10.9.3 Soft Ma nual .HEADING 命令 アセンブルリストの各頁のヘッダ部に , コメントとして表示するタイトルを指定し ます。 指定されたタイトル文字は , 本命令で強制的に改頁されて本頁から出力されます。 .HEADING 命令は , ソースプログラム上で何回でも指定でき , その都度有効となりま す。 ■ .HEADING 命令 【記述形式】 " タイトル文字 " .HEADING 【説明】 アセンブルリストの各ページのヘッダ部に , コメントとして表示するタイトルを指 定します。 指定されたタイトル文字は , 本命令で強制的に改頁されて本頁から出力されます。 本命令が頁の第 1 行目にあたる場合は , 本頁から出力されます。 .LIST OFF が指定されている場合は , .LIST ON になってから頁の先頭行に出力され ます。 .HEADING 命令は , ソースプログラム上で何回も指定でき , その都度有効となりま す。 タイトルの長さは 60 文字までです。 【例】 図 10.9-3 .HEADING 命令の出力例 ソースプログラム .HEADING "PROGRAM=TEST1\"V1.0L2.0\"" : .HEADING "PROGRAM=TEST2\"V1.0L2.0\"" アセンブルリスト PROGRAM=TEST3 "V1.0L2.0" PROGRAM=TEST2 "V1.0L2.0" PROGRAM=TEST1 "V1.0L2.0" : .HEADING "PROGRAM=TEST3\"V1.0L2.0\"" : September 1, 2014, CM81-00208-5 187 Su pp or t So ft Manu al .LIST 命令 10.9.4 アセンブルリストの出力形式を詳細に指定します。 .LIST 命令は , ソースプログラム上で何回でも指定でき , その都度有効となります。 .LIST 命令は , ON または OFF 指定がある場合 , .LIST 命令自身は出力されません。 初期値は , .LIST ON, CALL, COND, DEF, EXPOBJ, INC です。 ■ .LIST 命令 【記述形式】 .LIST 指定 : 指定 [, 指定 ]… {ON|OFF} …アセンブルソースリスト出力制御 {CALL|NOCALL} …マクロコール命令の出力制御 {COND|NOCOND} …非テキスト部の出力制御 {DEF|NODEF} …マクロ命令およびマクロ定義部の出力制御 {EXP|NOEXP|EXPOBJ} …マクロ展開されたテキストの出力制御 {INC|NOINC} …インクルードファイルのテキストの出力制御 【説明】 アセンブルリストの出力形式を詳細に指定します。 .LIST 命令は , ソースプログラム上で何回でも指定でき , その都度有効となります。 .LIST 命令は , ON または OFF 指定がある場合 , .LIST 命令自身は出力されません。 初期値は , .LIST ON, CALL, COND, DEF, EXPOBJ, INC, STR です。 .LIST 命令の各指定の意味は次のとおりです。 - ON : アセンブルソースリストを出力します。 - OFF : アセンブルソースリストを出力しません。 - CALL : マクロコール命令をリストに出力します。 - NOCALL : マクロコール命令をリストに出力しません。 - COND : 非テキスト部 * をリストに出力します。 - NOCOND : 非テキスト部をリストに出力しません。 - DEF : マクロ定義部 , マクロ命令をリストに出力します。 - NODEF : マクロ定義部 , マクロ命令をリストに出力しません。 - EXP : マクロ展開されたテキストをリストに出力します。 - NOEXP : マクロ展開されたテキストをリストに出力しません。 - EXPOBJ : オブジェクトコードのみリストに出力します ( マクロ展開されたテキ ストはリストに出力しません )。 188 - INC : インクルードファイルのテキストをリストに出力します。 - NOINC : インクルードファイルのテキストをリストに出力しません。 CM81-00208-5, September 1, 2014 Support Soft Ma nual *:非テキスト部とは , if 節でアセンブルの対象とならない部分のことです。 【例】 .LIST ON : /* この部分はリストに出力されます : */ : .LIST OFF : /* この部分はリストに出力されません */ : : .LIST ON ■ 起動時オプションとの関係 ● -linc ON を指定した場合 INC/NOINC 指定は無効となり , 常にインクルードファイルのテキストはリストに出力 されます。 ● -linc OFF を指定した場合 INC/NOINC 指定は無効となり , 常にインクルードファイルのテキストはリストに出力 されません。 ● -lexp ON を指定した場合 EXP/NOEXP/EXPOBJ 指定は無効となり , 常にマクロ展開されたテキストはリストに出 力されます。 ● -lexp OFF を指定した場合 EXP/NOEXP/EXPOBJ 指定は無効となり , 常にマクロ展開されたテキストはリストに出 力されません。 ● -lexp OBJ を指定した場合 EXP/NOEXP/EXPOBJ 指定は無効となり , 常にマクロ展開されたテキストのオブジェク トコードのみがリストに出力されます。 September 1, 2014, CM81-00208-5 189 Su pp or t 10.9.5 So ft Manu al .PAGE 命令 頁番号を更新してアセンブルリストの印字を次頁から開始します。 頁の先頭行に .PAGE 命令があった場合は , .PAGE 命令は無効となります。 .PAGE 命令自身は出力されません。 ■ .PAGE 命令 【記述形式】 .PAGE 【説明】 頁番号を更新してアセンブルリストの印字を次頁から開始します。 頁の先頭行に .PAGE 命令があった場合は , .PAGE 命令は無効となります。 .PAGE 命令自身は出力されません。 【例】 図 10.9-4 .PAGE 命令の出力例 ソースプログラム アセンブルリスト ページ n .DATA 10 .DATA 20 .DATA 10 .PAGE .DATA 20 .DATA 30 .DATA 40 190 .DATA 30 ページ n+1 .DATA 40 CM81-00208-5, September 1, 2014 Support 10.9.6 Soft Ma nual .SPACE 命令 指定された分の空白行を出力します。 値の範囲は , 0 ~ 255 です。 .SPACE 命令自身は , リスト出力されませんが行数はカウントされます。 ■ .SPACE 命令 【記述形式】 .SPACE 空白行数 空白行数 : 式 ( 絶対式 ) 【説明】 空白行数で指定された分の空白行数を出力します。 式は , 絶対式でなければなりません。 空白行数の値の範囲は , 0 ~ 255 までです。 頁を超える空白行の指定があった場合 , 頁最終行以降の空白行は出力しません。 .SPACE 命令自身は , リスト出力されませんが行数はカウントされます。 【例】 .SPACE September 1, 2014, CM81-00208-5 4 191 Su pp or t 192 So ft Manu al CM81-00208-5, September 1, 2014 Support Soft Ma nual 第 11 章 プリプロセッサ処理 プリプロセッサ処理では , マクロ展開 , リピート展 開 , 条件アセンブル , マクロ置換 , ファイル読み込 みなどのテキスト処理ができます。 この機能により同じようなテキストを繰り返して 記述を行うアセンブリ言語プログラムを効率よく プログラミングできます。 プリプロセッサの各命令は C 言語と共有化しやす いように C コンパイラのプリプロセッサの仕様に 合わせてあります。 ただし , #macro 命令など , C コンパイラにはない , アセンブラ独自の仕様も含まれています。 この章では , プリプロセッサの機能と各命令を説明 します。 11.1 プリプロセッサ 11.2 プリプロセッサの基本規則 11.3 プリプロセッサの式 11.4 マクロ定義 11.5 マクロコール命令 11.6 リピート展開 11.7 条件付きアセンブル命令 11.8 マクロ名の置換処理 11.9 #include 命令 11.10 #line 命令 11.11 #error 命令 11.12 #pragma 命令 11.13 空命令 11.14 既定義マクロ名 11.15 C 言語プリプロセッサとの違い September 1, 2014, CM81-00208-5 193 Su pp or t So ft Manu al 11.1 プリプロセッサ プリプロセッサは , 一般的に前処理プログラムとよばれ , 実際にアセンブルを行う前 にテキストの加工処理を行うプログラムです。 プリプロセッサには , 大きく 4 つの機能があります。 • マクロ定義 • 条件アセンブル • マクロ名の置換処理 • ファイルの読込み ■ プリプロセッサ ● マクロ定義 複数の命令または , ある処理単位を 1 つの命令で実現したい場合があります。 このような場合にマクロ定義は有効です。 このとき , 定義する命令列のテキスト部分を「マクロボディ」といいます。 マクロコールすることによりマクロボディが展開されます。 このマクロボディには , 機械命令 , 擬似命令 , マクロ名のほかに仮引数 , #local 命令 , ローカルシンボルを記述できます。 【例】 #macro get_timer #local loop addr,reg loop: MOV A,#addr CMP A,#0 BEQ loop MOV reg, A マクロボディ マクロ定義 #endm /* get_timerがマクロコール命令 */ /* addr,regl,reg2が仮引数 */ /*loopがローカルシンボル */ get_timer 0x100, R1 /* マクロコール */ __0000000001loop: 194 MOV A,#0x100 CMP A,#0 BEQ __0000000001loop MOV R1,A マクロ展開 CM81-00208-5, September 1, 2014 Support Soft Ma nual ● 条件アセンブル 例えば , ある条件によりアセンブルしたい命令としたくない命令とがある場合は , 次の ように書きます。 #if CPU_TYPE==1 テキスト 1 #else テキスト 2 #endif この場合 , CPU_TYPE が 1 であればテキスト 1 が選択されてアセンブルされます。 CPU_TYPE が 1 以外であればテキスト 2 が選択されてアセンブルされます。 条件アセンブルを行う命令を条件付きアセンブル命令といいます。 条件付きアセンブル命令には , #if, #ifdef, #ifndef, #elif, #else, #endif 命令があります。 ● マクロ名の置換処理 プリプロセッサの大事な機能として , マクロ名の置換処理があります。 例えば , ある定数値を使う場合 , MOV A, #0xFF と直接書くよりも , 0xFF を何か意味のある名前に定義して , #define IOMASK MOV 0xFF A, #IOMASK と書いた方が , プログラムがわかりやすくなります。 このとき , IOMASK という名前を 0xFF に置き換える ( 置換 ) する機能をマクロ置換と いいます。 September 1, 2014, CM81-00208-5 195 Su pp or t So ft Manu al ● ファイルの読み込み 共通で使う変数やマクロ名を別ファイルにしておいて , 必要なファイルを読み込んで 使用すると便利です。 【例】 ファイル iodef.h #define IOMASK #define SETCMD : 0xFF 1 /* I/O のマスク値 */ /* データセットコマンド */ ファイル com.asm #include "iodef.h" : MOV A, R2 AND A, #IOMASK MOV R2, A MOV MOV MOV 196 A, #SETCMD A, R7 @A, T /* デファイン値の読み込み */ /* データをマスク */ /* データセットコマンドを送る */ CM81-00208-5, September 1, 2014 Support Soft Ma nual 11.2 プリプロセッサの基本規則 プリプロセッサ命令を使ったプログラムの書き方 , およびその規則について説明し ます。 ■ プリプロセッサ命令の記述形式 プリプロセッサ命令は , すべて先頭に "#" を付加して記述します。 プリプロセッサ命令を次に示します。 #macro #local #exitm #endm #repeat #if #ifdef #ifndef #elif #else #endif #define #set #undef #purge #include #line #error #pragma # ■ コメント コメントは , 任意のカラムから始めることができます。 セミコロン (;) または 2 個のスラッシュ (//) で行コメントとなります。 C 言語風に /* ~ */ で囲ってコメントを記述することもできます。 /* ~ */ で囲ったコメントは , 好きな位置にコメントを記述できます。 ■ 行の継続 行の最後にバックスラッシュ (\) を置くことによって次の行に継続できます。 継続を意味するバックスラッシュ (\) の位置に次の行の先頭が続きます。 バックスラッシュ (\) の次の文字に改行以外の文字がある場合は , 継続しません。 ■ 整数定数 整数定数には , 2 進定数 , 8 進定数 , 10 進定数 , 16 進定数の 4 種類があります。 ■ 文字定数 文字定数は文字をシングルクォート (') で囲って記述します。 ■ マクロ名 マクロ名は , テキストに出現するたびに定義されている定義文字の列に置き換えたり , マクロ展開したりします。 ■ 仮引数 仮引数は , マクロ定義 (#macro 命令 ) で定義され , マクロコール命令で引数を設定でき ます。 September 1, 2014, CM81-00208-5 197 Su pp or t So ft Manu al ■ ローカルシンボル ローカルシンボルは , マクロ展開時に自動的にユニークな名前を生成します。 したがって , マクロボディ内でジャンプシンボルなどをローカルシンボルに定義して おけば , 何回マクロ展開されてもシンボルの 2 重定義になることはありません。 198 CM81-00208-5, September 1, 2014 Support 11.2.1 Soft Ma nual プリプロセッサ命令の記述形式 プリプロセッサ命令は , すべての先頭に "#" を付加して記述します。 第 1 カラムからプリプロセッサ命令の間に空白やコメントを記述してもかまいませ ん。 ただし , 行コメントを記述した場合は , 行終端までコメント扱いとなります。 ■ プリプロセッサ命令の記述形式 【記述形式】 # プリプロセッサ命令 [ パラメタ…] 【説明】 プリプロセッサ命令は , すべて先頭に "#" を付加して記述します。 第 1 カラムからプリプロセッサ命令の間に空白やコメントを記述してもかまいませ ん。 ただし , 行コメントを記述した場合は , 行終端までコメント扱いとなります。 "#" の後に続くプリプロセッサ命令はマクロ置換の対象にはなりません。 プリプロセッサ命令を次に示します。 #macro #local #exitm #endm #repeat #if #ifdef #ifndef #elif #else #endif #define #set #undef #purge #include #line #error #pragma # 【例】 #define LINEMAX 255 #ifndef OFF /* OFF */ #define OFF 0 /* ON ON -1 */ #define /* 1 ではない */ #endif September 1, 2014, CM81-00208-5 199 Su pp or t 11.2.2 So ft Manu al コメント コメントには , 行コメントと範囲コメントがあります。 行コメントは , セミコロン (;) または 2 個のスラッシュ (//) で始まります。 C 言語風に , /* ~ */ で囲ってコメントを記述することもできます。これと範囲コメ ントといいます。 ■ コメント 【記述形式】 /* 範囲コメント */ // 行コメント ; 行コメント 【説明】 コメントは , 任意のカラムから始めることができます。 コメントには , 行コメントと範囲コメントがあります。 行コメントは , セミコロン (;) または 2 個のスラッシュ (//) で始まります。 C 言語風に , /* ~ */ で囲ってコメントを記述することもできます。これを範囲コメ ントといいます。 範囲コメントは , 好きな位置にコメントを記述できます。 【例】 /*---------コメント ------------*/ #define STRLEN ; 文字の長さ 10 /* test1 */ #if TEST == 1 // テストモード 1 : /* test2 */ #elif TEST == 2 /* 特殊なテスト */ : /* end */ 200 #endif CM81-00208-5, September 1, 2014 Support Soft Ma nual 11.2.3 行の継続 行の最後にバックスラッシュ (\) を置くことによって , 次の行に継続できます。 継続を意味するバックスラッシュ (\) の位置に次の行の先頭が続きます。 バックスラッシュ (\) の次の文字に改行以外の文字がある場合は , 継続しません。 ■ 行の継続 【記述形式】 \ 改行 【説明】 行の最後にバックスラッシュ (\) を置くことによって , 次の行に継続できます。 継続を意味するバックスラッシュ (\) の位置に次の行の先頭が続きます バックスラッシュ (\) の次の文字に改行以外の文字がある場合は , 継続しません。 行の継続は , コメント , 文字定数 , 文字列の途中にも指定できます。 【例】 .DATA 0x01, 0x02, 0x03, \ 0x04, 0x05, 0x06, ; コメント \ 0x07, 0x08, 0x09 .SDATA "abcdefghijklmnopqrstuvwxyz \ ABCDEFGHIJKLMNOPQRSTUVWXYZ" September 1, 2014, CM81-00208-5 /* 文字列の継続 */ 201 Su pp or t 11.2.4 So ft Manu al 整数定数 整数定数には , 2 進定数 , 8 進定数 , 10 進定数 , 16 進定数の 4 種類があります。 アセンブルフェーズの数値定数と全く同じです。 ■ 整数定数 整数定数には , 2 進定数 , 8 進定数 , 10 進定数 , 16 進定数の 4 種類があります。 C 言語の long 型指定 (123L など ), unsigned 型指定 (123U など ) もサポートしています。 ● 2 進定数 2 進法で表された整数定数です。 プリフィックス (B' または 0b) を付けるか , サフィックス (B) を付けて記述します。 プリフィックス(B'または0b), サフィックス(B)は大文字でも小文字でもかまいません。 【例】 B'0101 0b0101 0101B ● 8 進定数 8 進法で表された整数定数です。 プリフィックス (Q' または 0) を付けるか , サフィックス (Q) を付けて記述します。プリ フィックス (Q'), サフィックス (Q) は大文字でも小文字でもかまいません。 【例】 Q'377 0377 377Q ● 10 進定数 10 進法で表された整数定数です。 プリフィックス (D') を付けるか , サフィックス (D) を付けて記述します。 プリフィックス , サフィックスは 10 進定数のみ省略可能です。 プリフィックス (D'), サフィックス (D) は大文字でも小文字でもかまいません。 【例】 D'12345676 1234567 1234567D ● 16 進定数 16 進法で表された整数定数です。 プリフィックス (H' または 0x) を付けるか , サフィックス (H) を付けて記述します。 プリフィックス(H'または0x), サフィックス(H)は大文字でも小文字でもかまいません。 【例】 H'ff 202 0xFF 0FFH CM81-00208-5, September 1, 2014 Support Soft Ma nual 文字定数 11.2.5 文字定数は文字の値を示します。 文字定数は文字定数要素をシングルクォート (') で囲って記述します。 アセンブルフェーズの文字定数と全く同じです。 ■ 文字定数 文字定数は文字定数要素をシングルクォート (') で囲って記述します。 文字定数要素には , 文字 , 拡張表記 , 8 進表記 , 16 進表記があります。 文字定数要素は , 4 文字まで指定可能です。 文字定数は , 256 進法の扱いとなります。 ■ 文字定数要素 ● 文字 バックスラッシュ (\), シングルクォート (') を除くすべての文字と空白文字は単独で文 字定数要素となります。 【例】 'P' '@A' '0A"' ● 拡張表記 バックスラッシュ (\) の後に特定の文字を続けて文字定数要素とします。 これを拡張表記とよびます。 拡張表記を表 11.2-1 に示します。 表 11.2-1 拡張表記 文字 改行文字 水平タブ文字 後退文字 復帰文字 改ページ文字 バックスラッシュ シングルクォート ダブルクォート 警報文字 垂直タブ文字 疑問符 文字定数要素 値 \n \t \b \r \f \\ \' \” \a \v \? 0x0A 0x09 0x08 0x0D 0x0C 0x5C 0x27 0x22 0x07 0x0B 0x3F ( 注意事項 ) 拡張表記として用いられる文字は , 小文字のみです。 【例】 '\n' September 1, 2014, CM81-00208-5 '\'' '\"\\' 203 Su pp or t So ft Manu al ● 8 進表記 文字コードのビットパターンを直接表記して 1 バイトデータを表現します。 8 進表記は , バックスラッシュ (\) の後に 1 から 3 文字の 8 進数字を続けたものです。 【例】 文字定数要素 ビットパターン '\0' b'00000000 '\377' b'11111111 '\53' b'00101011 '\0123' b'00001010 → '\012' と '3' に分かれます ● 16 進表記 文字コードのビットパターンを直接表記して 1 バイトデータを表現します。 16 進表記は , バックスラッシュ (\) の後に文字 x( 小文字 ) と 1 文字か 2 文字の 16 進文 字を続けたものです。 【例】 204 文字定数要素 ビットパターン '\x0' b'00000000 '\xff' b'11111111 '\x2B' b'00101011 '\x0A5' b'00001010 → '\x0A' と '5' に分かれます CM81-00208-5, September 1, 2014 Support 11.2.6 Soft Ma nual マクロ名 マクロ名は , テキストに出現するたびに定義されている定義文字の列に置き換えた り , マクロ展開したりします。 なお , C 言語ではマクロ名を識別子とよぶ場合があります。 ■ マクロ名の規則 • 255 文字以内です。 • 先頭文字は , 英字 , アンダスコア (_) です。 • 2 文字目以降は , 英字 , 数字 , アンダスコア (_) で構成されます。 • 大文字 , 小文字は区別されます。 【例】 A Zabcde ppTRUE _123456789 ■ マクロ名の種類 ● デファインマクロ #define 命令 , #set 命令で定義したマクロ名をいいます。 テキストのどの場所にも記述でき , マクロ名が出現するたびに , 定義されている文字に 置き換えます。 【例】 #define TRUE 1 #define FALSE 0 #define add(a, b) (a)+(b) /* この場合 , TREU, FALSE, add がマクロ名となります。*/ ● マクロコール命令 #macro 命令で定義したマクロ名をいいます。 行の先頭からマクロコール命令の間には空白とコメントしか記述できません。 ただし , 行コメントの場合は行終端までコメント扱いとなります。 マクロコール命令は定義されているテキストをマクロ展開します。 【例】 #macro max a, b, c : #endm /* この場合 , max がマクロ名となります。*/ September 1, 2014, CM81-00208-5 205 Su pp or t 11.2.7 So ft Manu al 仮引数 仮引数は , マクロ定義 (#macro 命令 ) で定義され , マクロコール命令で引数を設定 できます。 ■ 仮引数の名前の規則 仮引数の名前は , 「11.2.6 マクロ名」のマクロ名の規則に準じます。 ■ 仮引数の置換規則 仮引数が置換できる場所は , マクロボディ内のみです。 仮引数は , マクロ展開が終了すると効力を失います。 【例】 #macro mv reg1 , reg2 MOV R0, reg2 MOV reg2 , reg1 mv R1 , R2 MOV R0 , R2 MOV R2 , R1 MOV reg1, R0 マクロボディ #endm /* マクロコール */ マクロ展開 /* ここはマクロボディ外なので,reg1は */ /* 仮引数とは認識されず置換されません。 */ 206 CM81-00208-5, September 1, 2014 Support Soft Ma nual ローカルシンボル 11.2.8 ローカルシンボルは , マクロ展開時に自動的にユニークな名前を生成します。 したがって , マクロボディ内でのジャンプシンボルなどをローカルシンボル定義し ておけば , 何回マクロ展開されてもシンボルの 2 重定義になることはありません。 ■ ローカルシンボルの名前規則 ローカルシンボルの名前は , 「11.2.6 マクロ名」のマクロ名の規則に準じます。 ■ ローカルシンボルの置換規則 ローカルシンボルが置換できる場所は , マクロボディ内のみです。 ローカルシンボルは次の形式で試製されます。 __nnnnn ローカルシンボル 2 個のアンダスコア (_) で始まり 5 桁の数字が続きます。 この 5 桁の数値は , マクロコールされるたびに 1 つ値が増加され , 00001 ~ 65535 まで の値を生成します。 次に , 5 桁の数値の後にユーザが指定したローカルシンボル名が続きます。 ローカルシンボルは , マクロ展開が終了すると効力を失います。 【例】 #macro get _timer #local loop addr, reg #local命令で,loopをローカルシンボル として定義 loop: MOV A,#addr CMP A,#0 BEQ loop MOV reg, A マクロボディ #endm get_timer 0x0100, R1 /* マクロコール */ __00001loop MOV A, 0x010 CMP A, #0 BEQ __00001loop MOV R1, A BRA loop /* ここはマクロボディ外なので,loopは */ マクロ展開 loopの部分が, __00001loopと置換 されています。 /* ローカルシンボルとは認識されず置換されません。 */ September 1, 2014, CM81-00208-5 207 Su pp or t So ft Manu al 11.3 プリプロセッサの式 プリプロセッサの式は , #if, #elif, #set, #repeat 命令で使用されます。 式の演算子などは , C 言語の定数式に準じています。 ■ プリプロセッサの式 式に使用できる項を次に示します。 • 整数定数 • 文字定数 • マクロ名 • 仮引数 ( マクロボディのみ ) マクロ名 , 仮引数は , 置き換えられたものが項となります。 未定義のマクロ名があった場合 , 0 に置き換えられて評価されます。 式は定数式のみ記述できます。 アセンブルフェーズの相対シンボル , 絶対シンボル , EQU シンボル , セクションシンボ ルなどは使用できません。 【例】 #if (MODE & 0xff) + 1 > 3 : #endif ■ プリプロセッサの式の演算精度 式の演算は , 32 ビットで行っております。したがって , 32 ビットを超える演算は保証 しておりませんので注意してください ( エラーにはなりません )。 関係式 , 等価式の場合は , 式の評価が真であれば 1, 偽であれば 0 となります。 208 CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ プリプロセッサの演算子 演算子は , 式の中で使用されます。 式で使用できる演算子を次に示します。 ● 単項演算子 ! 論理 NOT 真 / 偽の判定 ~ NOT ビットの判定 + 正 - 負 ● 2 項演算子 * 乗算 / 除算 % 剰余算 + 加算 - 減算 << 左算術シフト >> 右算術シフト < 関係演算子 小なり <= 関係演算子 小なりまたは等しい > 関係演算子 大なり >= 関係演算子 大なりまたは等しい == 関係演算子 等しい != 関係演算子 等しくない & ビット AND ^ ビット XOR | ビット OR && 論理 AND || 論理 OR September 1, 2014, CM81-00208-5 209 Su pp or t So ft Manu al ■ プリプロセッサの演算子の優先順位 表 11.3-1 にプリプロセッサの演算子の優先順位を示します。 表 11.3-1 プリプロセッサの演算子の優先順位 優先順位 210 演算子 結合性 適用される式 1 ( ) 左 括弧 2 ! ~ + - 右 単項式 3 * / % 左 乗法式 4 + - 左 加法式 5 << 左 シフト式 6 < <= 左 関係式 7 == != 左 等価式 8 & 左 ビット AND 式 9 ^ 左 ビット XOR 式 10 | 左 ビット OR 式 11 && 左 論理 AND 式 12 || 左 論理 OR 式 >> > >= CM81-00208-5, September 1, 2014 Support Soft Ma nual 11.4 マクロ定義 マクロ定義は , #macro 命令 , マクロボディ , #endm 命令で構成されています。 マクロコール時にはマクロ定義で定義されたマクロボディをマクロ展開します。 ■ マクロ定義 【記述形式】 マクロ名 [ 仮引数 [, 仮引数 ]…] マクロボディ #macro #endm 【説明】 マクロ定義は , #macro 命令 , マクロボディ , #endm 命令で構成されています。 #macro 命令から #endm 命令までのテキストをマクロボディといいます。 マクロボディは , マクロ名をキーワードとするマクロ定義体に登録され , マクロ名 を記述することで , マクロ名に対応したマクロボディが展開されます。 このキーワードとなったマクロ名を特にマクロコール命令といいます。 マクロボディの展開をマクロ展開といいます。 ■ マクロ定義の規則 マクロボディ内でさらにマクロを定義できません。 マクロボディの大きさは最大約 60K バイトです。この大きさを超えるマクロボディは 登録できません。 【例】 #macro mac reg, data MOVW A, #data MOV A, @A MOV reg, A mac R2, label MOVW A, #label MOV A, @A MOV R2, A マクロボディ マクロ定義 #endm September 1, 2014, CM81-00208-5 /* マクロコール命令 */ マクロ展開 211 Su pp or t 11.4.1 So ft Manu al #macro 命令 #macro 命令は , マクロ定義の開始を宣言し , マクロ名と仮引数の定義を行います。 ■ #macro 命令 【記述形式】 #macro マクロ名 [ 仮引数 [, 仮引数 ]…] 【説明】 #macro 命令は , マクロ定義の開始を宣言し , マクロ名と仮引数の定義を行います。 #macro 命令で指定したマクロ名は , マクロコール命令として使用します。 マクロコール命令を使用すると , 定義されているマクロボディが展開されます。 ■ #macro 命令の規則 • #macro 命令は , 必ず #endm 命令で定義を終了しなければなりません。 • #macro 命令で同じ名前の仮引数を 2 つ以上指定できません。 • ここで定義した仮引数は , このマクロボディ内でのみ有効です。 • 仮引数の置換は , 単語の区切りで区別され , 仮引数と同じ単語を見つけると直ちに 置換されます。 • マクロ名やローカルシンボルと仮引数の名前が同じ場合は , 仮引数の置換が優先さ れます。 • 仮引数は , 1 つも指定しなくても構いません。 【例】 #macro mac r1, r2, data MOV A, data MOV r2, r1 MOV r1, A マクロボディ #endm 212 mac R2, R 7, label MOV A,label MOV R7, R2 MOV R2, A /* マクロコール命令 */ マクロ展開 CM81-00208-5, September 1, 2014 Support 11.4.2 Soft Ma nual #local 命令 #local 命令で生成されるシンボルをローカルシンボルといいます。 ローカルシンボルは , マクロコールがあるたびに自動的にユニークな名前を生成し ます。 ■ #local 命令 【記述形式】 #local ローカルシンボル [, ローカルシンボル ]… 【説明】 #local 命令は , ローカルシンボルの定義を行います。 #local 命令で生成されるシンボルをローカルシンボルといいます。 ローカルシンボルは , マクロコールがあるたびに自動的にユニークな名前を生成し ます。 ローカルシンボルは 2 重定義とならないように単一な名前を生成します。 ローカルシンボルの生成規則は , 「11.2.8 ローカルシンボル」を参照してください。 ■ #local 命令の規則 • #local 命令は , マクロボディ内でのみ記述できます。 • ローカルシンボルの定義はいくつも指定できます。 • 同じ名前のローカルシンボルを 2 つ以上指定できません。 • ここで定義したローカルシンボルは , このマクロボディ内でのみ有効です。 • ローカルシンボルの生成は , 単語の区切りで区別され , ローカルシンボルと同じ単 語を見つけると直ちにユニークな名前を生成します。 • マクロ名や仮引数とローカルシンボルの名前が同じ場合は , 仮引数の置換が優先し ます。 September 1, 2014, CM81-00208-5 213 Su pp or t So ft Manu al 【例】 #macro busyloop data #local label MOVW A, #data DECW A BNE label マクロボディ label: #endm busyloop 10 MOVW /* マクロコール命令 */ A,#10 __00001loop 214 DECW A BNE __00001loop マクロ展開 CM81-00208-5, September 1, 2014 Support 11.4.3 Soft Ma nual #exitm 命令 #exitm 命令は , マクロ展開 , リピート展開に対して強制終了します。 ■ #exitm 命令 【記述形式】 #exitm 【説明】 #exitm 命令は , マクロ展開 , リピート展開に対して強制終了します。 ■ #exitm 命令の規則 • #exitm 命令は , マクロボディ内でのみ記述できます。 • #exitm 命令は , 条件付きアセンブル命令に対しては意味を持ちません。 • マクロ展開およびリピート展開がネストになっている場合は , #exitm 命令を囲む もっとも内側の展開処理を終了します。すべての展開を終了するわけではありませ ん。 • #exitm 命令は , マクロボディにいくつあっても構いません。 【例】 #macro mac cnt NOP #if cnt >= 5 マクロボディ #exitm #endif MOV A,#cnt mac 4 #endm /* マクロコール命令 */ NOP MOV A, #4 mac 5 NOP September 1, 2014, CM81-00208-5 マクロ展開 /* マクロコール命令 */ マクロ展開 215 Su pp or t 11.4.4 So ft Manu al #endm 命令 マクロ定義の終了を宣言します。 リピート展開も #endm 命令で展開部テキストを終了します。 ■ #endm 命令 【記述形式】 #endm 【説明】 マクロ定義の終了を宣言します。 リピート展開も , #endm 命令で展開部テキストを終了します。 したがって , #endm 命令は , #macro 命令または #repeat 命令と常に対になっていなけ ればなりません。 【例】 #macro mac a,b .DATA a,b #endm #repeat 3 NOP #endm NOP NOP リピート展開 NOP 216 CM81-00208-5, September 1, 2014 Support Soft Ma nual 11.5 マクロコール命令 #macro 命令で定義したマクロ名を記述することでマクロ展開を行います。 この機能をマクロコールといい , 特にこのマクロ名をマクロコール命令といいます。 ■ マクロコール命令 【記述形式】 マクロコール命令 [ 引数 [, 引数 ]…] 【説明】 #macro 命令で定義したマクロ名を記述することでマクロ展開を行います。 この機能をマクロコールといい , 特にこのマクロ名をマクロコール命令といいま す。 ■ マクロコール命令の規則 • マクロコールするマクロ名を命令フィールドに記述します。 • マクロ命令は , 使用する前にマクロ定義されていなければなりません。 • 引数にカンマ(, )を含める場合は, 括弧()またはアングルブラケット < >で囲みます。 • () で囲んだ場合は , () 自体も引数に含まれます。 • < > で囲んだ場合は , < > 自体は引数に含まれません。 • マクロ定義とマクロコール命令の引数の数は , 一致する必要がありますが , マクロ コール命令の引数が少ない場合は , 残りの仮引数に空文字が指定されたものとして 処理を行います。 • 引数に空文字を指定したい場合は , カンマ (, ) を続けて書くかアングルブラケットで 単に < > と書きます。 September 1, 2014, CM81-00208-5 217 Su pp or t So ft Manu al 11.6 リピート展開 リピート展開は , #repeat 命令と #endm 命令で構成されています。 展開部テキストには , 繰り返し展開したいテキストを記述します。 リピート展開は , #endm 命令の直後 , 繰り返し回数で指定された回数分だけ展開部 テキストを展開します。 ■ リピート展開 【記述形式】 #repeat 繰返し回数 展開部テキスト #endm 繰返し回数 : プリプロセッサ式 【説明】 リピート展開は , #repeat 命令と #endm 命令で構成されています。 展開部テキストには , 繰り返し展開したいテキストを記述します。 リピート展開は , #endm 命令の直後繰り返し回数で指定された回数分だけ展開部テ キストを展開します。 #repeat 命令から #endm 命令まではマクロ定義と同じ扱いとなります。また , リピー ト展開もマクロ展開と同じ扱いとなります。 したがって , リスト制御命令でマクロ定義部の出力制御を行うと , このリピート展 開に対しても同様の処理が行われます。 展開部テキストの大きさは最大約 60K バイトです。この大きさを超える展開部テキ ストは登録できません。 展開部テキストには , #local 命令は記述できません。 【例】 #repeat 1+2 MOVW A, @A PUSHW A MOVW A, @A PUSHW A MOVW A, @A PUSHW A MOVW A, @A PUSHW A 展開部テキスト マクロ定義と同じ扱い #endm 218 リピート展開(マクロ定義と同じ扱い) CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ #repeat 命令 【記述形式】 #repeat 繰返し回数 繰返し回数 : プリプロセッサ式 【説明】 #repeat 命令は , 展開部テキストの開始を宣言します。 繰返し回数で指定された回数分だけ展開部テキストを展開します。 ■ #repeat 命令の規則 • #repeat 命令は , 必ず #endm 命令で定義を終了しなければなりません。 • 繰返し回数に 0 以下の数字が指定された場合は何も展開されません。 September 1, 2014, CM81-00208-5 219 Su pp or t So ft Manu al 11.7 条件付きアセンブル命令 条件によってアセンブルするテキストを選択します。 #if 命令 , #ifdef 命令または #ifndef 命令から , #endif 命令までを #if 節といい , 条件 アセンブルの対象テキストを示します。 ■ 条件付きアセンブル命令 【記述形式】 #if 命令 |#ifdef 命令 |#ifndef 命令 テキスト [#else 命令 |#elif 命令 ] テキスト #endif 命令 【説明】 #if 命令 , #ifdef 命令または #ifndef 命令から , #endif 命令までを if 節といい , 条件ア センブルの対象テキストを示します。 if 節には , #else 命令 , #elif 命令を記述できます。 if 節中に , さらに if 節を記述できます。これを if 節のネストといいます。 条件付きアセンブル命令は次の 6 種類です。 - #if 命令 - #ifdef 命令 - #ifndef 命令 - #elif 命令 - #else 命令 - #endif 命令 220 CM81-00208-5, September 1, 2014 Support 11.7.1 Soft Ma nual #if 命令 if 節の開始を宣言します。 条件式が真であれば , 本命令から次の条件付きアセンブル命令までアセンブルされ ます。 条件式が偽であれば , 本命令から対応する #else 命令 , #elif 命令または #endif 命令 までアセンブルされません。 ■ #if 命令 【記述形式】 #if 条件式 条件式 : プリプロセッサ式 【説明】 if 節の開始を宣言します。 条件式は 0 が偽 , 0 以外が真です。 真であれば , 本命令から次の条件付きアセンブル命令までアセンブルされます。 偽であれば , 本命令から対応する #else 命令 , #elif 命令または #endif 命令までアセン ブルされません。 #if 命令は , #endif 命令で終わります。したがって , #if 命令と #endif 命令は必ず対に なっていなければなりません。 【例】 #define ABC 1 #if ABC == 1 .DATA 0 #endif /* #if 命令の条件式が真であるため .DATA 0 はアセンブルされます。*/ #if 0 .DATA 100 #endif /* #if 命令の条件式が偽であるため .DATA 100 はアセンブルされません。*/ September 1, 2014, CM81-00208-5 221 Su pp or t 11.7.2 So ft Manu al #ifdef 命令 if 節の開始を宣言します。 マクロ名が定義されていれば真 , 定義されていなければ偽となります。 真であれば , 本命令から次の条件付きアセンブル命令までアセンブルされます。 偽であれば , 本命令から対応する #else 命令 , #elif 命令または #endif 命令までアセ ンブルされません。 ■ #ifdef 命令 【記述形式】 #ifdef マクロ名 【説明】 if 節の開始を宣言します。 マクロ名が定義されていれば真 , 定義されていなければ偽となります。 真であれば , 本命令から次の条件付きアセンブル命令までアセンブルされます。 偽であれば , 本命令から対応する #else 命令 , #elif 命令または #endif 命令までアセン ブルされません。 #ifdef 命令は , #endif 命令で終わります。したがって , #ifdef 命令と #endif 命令は必 ず対になっていなければなりません。 【例】 #define ON #ifdef ON .DATA 0 #endif /* #ifdef 命令のマクロ名 (ON) が定義されているので .DATA 0 は , */ /* アセンブルされます。 */ #ifdef OFF .DATA 100 #endif 222 /* #ifdef 命令のマクロ名 (OFF) は定義されていないので .DATA 100 は , */ /* アセンブルされません。 */ CM81-00208-5, September 1, 2014 Support 11.7.3 Soft Ma nual #ifndef 命令 if 節の開始を宣言します。 マクロ名が定義されていれば偽 , 定義されていなければ真となります。 真であれば , 本命令から次の条件付きアセンブル命令までアセンブルされます。 偽であれば , 本命令から対応する #else 命令 , #elif 命令または #endif 命令までアセ ンブルされません。 #ifndef 命令は , #ifdef 命令と判定が逆の命令です。 ■ #ifndef 命令 【記述形式】 #ifndef マクロ名 【説明】 if 節の開始を宣言します。 マクロ名が定義されていれば偽 , 定義されていなければ真となります。 真であれば , 本命令から次の条件付きアセンブル命令までアセンブルされます。 偽であれば , 本命令から対応する #else 命令 , #elif 命令または #endif 命令までアセン ブルされません。 #ifndef 命令は , #ifdef 命令と判定が逆の命令です。 #ifndef 命令は , #endif 命令で終わります。したがって , #ifndef 命令と #endif 命令は 必ず対になっていなければなりません。 【例】 #define ON #ifndef ON .DATA 0 #endif /* #ifndef 命令のマクロ名 (ON) が定義されているので .DATA 0 は , */ /* アセンブルされません。 */ #ifndefOFF .DATA 100 #endif /* #ifndef 命令のマクロ名 (OFF) は定義されていないので .DATA 100 は , */ /* アセンブルされます。 September 1, 2014, CM81-00208-5 */ 223 Su pp or t 11.7.4 So ft Manu al #else 命令 #else 命令は , if 節の中に記述します。 #else 命令は , それまでのアセンブル条件を反転します。 ■ #else 命令 【記述形式】 #else 【説明】 #else 命令は , if 節の中に記述します。 #else 命令は , それまでのアセンブル条件を反転します。 if 節開始命令 (#if, #ifdef, #ifndef) の条件が真であった場合 , 逆の偽となり本命令から は , 対応する #endif 命令までアセンブルされません。 if 節開始命令 (#if, #ifdef, #ifndef) の条件が偽であった場合 , 逆の真となり本命令から は , 対応する #endif 命令までアセンブルされます。 【例】 #define NUM #if 3 NUM == 3 .SDATA "ABC" .SDATA "DEF" /* こちらがアセンブルされます。 */ .SDATA "===" /* こちらがアセンブルされます。 */ .SDATA "***" #else #endif #ifdef NUM #else #endif #ifndef NUM .SDATA "NO" .SDATA "OK" #else /* こちらがアセンブルされます。 */ #endif 224 CM81-00208-5, September 1, 2014 Support 11.7.5 Soft Ma nual #elif 命令 #elif 命令は , if 節の中に記述します。 #elif 命令は , #else 命令と #if 命令を連続して指定するのと同じ機能です。 したがって , 本命令までアセンブル条件が偽の場合のみ有効になります。 ■ #elif 命令 #elif 命令は , if 節の中にいくつでも記述できます。 【記述形式】 #elif 条件式 条件式 : プリプロセッサ式 【説明】 #elif 命令は , if 節の中に記述します。 #elif 命令は , #else 命令と #if 命令を連続して指定するのと同じ機能です。 したがって , 本命令までのアセンブル条件が偽の場合のみ有効になります。 ● 本命令までのアセンブル条件が真の場合 本命令から対応する #endif 命令までアセンブルされません。 ● 本命令までのアセンブル条件が偽の場合 条件式を判定し再度アセンブル条件を決めます。 真の場合 , 本命令の次から条件付きアセンブル命令までアセンブルされます。 偽の場合 , 本命令から対応する #else 命令 , #elif 命令または #endif 命令までアセンブル されません。 【例】 #define NUM 3 #if NUM == 1 .SDATA "ABC" NUM == 2 .SDATA "DEF" NUM == 3 .SDATA "GHI" /* こちらがアセンブルされます。 .SDATA "===" /* こちらがアセンブルされます。 NUM == 3 .SDATA "***" #elif #elif */ #endif #ifdef #elif NUM */ #endif September 1, 2014, CM81-00208-5 225 Su pp or t So ft Manu al #ifndef NUM #elif .SDATA "NO" NUM == 3 .SDATA "OK" /* こちらがアセンブルされます。 */ #endif /* 下のように条件が偽しかない場合は , 何もアセンブルされません。 */ #if #elif NUM == 10 .SDATA "??????" NUM == 20 .SDATA "$$$$$$" #endif 226 CM81-00208-5, September 1, 2014 Support 11.7.6 Soft Ma nual #endif 命令 #endif 命令は , 条件アセンブルの終了を示します。 条件アセンブルがネストしている場合は , もっとも内側の #if, #ifdef, #ifndef 命令に 対して終了します。 ■ #endif 命令 【記述形式】 #endif 【説明】 #endif 命令は , 条件アセンブルの終了を示します。 条件アセンブルがネストしている場合は , もっとも内側の #if, #ifdef, #ifndef 命令に 対して終了します。 【例】 #ifndef _IODEF_ #define _IODEF_ #define VER 2 #if VER == 1 #define IOBUFNUM #elif VER == #define IOBUFNUM #elif VER == #define IOBUFNUM 22 #endif /* #if VER == 1 の終わり */ #ifdef IOCH #undef IOCH #endif /* #ifdef IOCH の終わり */ #define IOCH #endif /* #ifndef _IODEF_ の終わり */ September 1, 2014, CM81-00208-5 /* アセンブルされます */ /* アセンブルされます */ 10 2 15 /* アセンブルされます */ 3 4 /* アセンブルされます */ 227 Su pp or t So ft Manu al 11.8 マクロ名の置換処理 #define 命令はマクロ名を定義します。マクロ名は出現するたびに定義されている文 字に置き換わります。 #set 命令はマクロ名に数値を定義します。式の評価結果が設定されます。 #undef 命令はマクロ名を取り消します。 ■ マクロ名の置換処理 テキスト中にマクロ名が出現すると , そのマクロ名に定義されている定義文字の列に 置き換わります。これをマクロ置換といいます。 #define 命令 , #set 命令で定義されたマクロ名はすべてのテキストにおいてマクロ置換 ができます。 ■ マクロ置換の規則 仮引数とローカルシンボルの置換処理もこの規則に従います。 次に示すところは , マクロ置換の対象にはなりません。 • プリプロセッサ命令の命令名の部分 • コメントの中の文字 • 文字列の中の文字 【例】 #define ABC define #ABC NUM 10 #define MSG any_string /* #ABC は , #define とは置換されない */ /* MSG は , any_string とは置換されない /* MSG */ .SDATA */ "MSG" /* .SDATA "MSG" は .SDATA "any_string" とは */ /* 置換されない */ • マクロ名はバックスラッシュ (\) を先頭に付けてマクロ名であることを明示できま す。バックスラッシュ (\) は通常省略できます。 【例】 #define MD FPU #define SYM start .PROGRAM MD MD\SYM: 228 /* .PROGRAM FPU と置換 */ と置換 */ /* FPU start: CM81-00208-5, September 1, 2014 Support Soft Ma nual • マクロ置換によって置き換えられた文字の列の中にマクロ名が存在する場合は , 再 度マクロ置換を行います。最大 255 回までマクロの置換処理を行います。 【例】 #define NUM 10 #define ANUM (NUM+2) #define BNUM ANUM*3 .DATA September 1, 2014, CM81-00208-5 BNUM /* .DATA (10+2)*3 と置換 */ 229 Su pp or t 11.8.1 So ft Manu al #define 命令 #define 命令は , マクロ名に任意の定義文字の列を定義します。 テキスト中にマクロ名を見つけると , 直ちに定義されている定義文字の列に置き換 えます。 #define 命令には , 引数なし #define 命令と引数付き #define 命令の 2 種類がありま す。 ■ 引数なし #define 命令 【記述形式】 #define マクロ名 定義文字の列 【説明】 引数なしのマクロ名を定義します。 マクロ名には定義文字の列が定義されます。 テキスト中にマクロ名を見つけると直ちに定義されている定義文字の列に置き換 えます。 定義文字の列を省略した場合は , 空文字が定義されます。 #define 命令は , マクロ名に対して一度定義した定義文字の列を変更できません。 【例】 #define DB .DATA.B #define DW .DATA.W DB 0, 2 DW 0xffffffff ■ 引数付き #define 命令 【記述形式】 #define マクロ名 ( 仮引数 [, 仮引数 ]…) 定義文字の列 【説明】 引数付きのマクロ名を定義します。 マクロ名の直後に左括弧 "(" があるとき , 引数付きとなります。マクロ名と左括弧 の間に空白やコメントがあってはなりません。 続いて , 仮引数を指定し最後に右括弧 ")" で閉じます。後は , 定義したい文字を記述 します。 テキスト中にマクロ名を見つけると , まず , 形式のチェックを行い , 仮引数に対応す る引数に置き換えてからテキストへ展開します。 230 CM81-00208-5, September 1, 2014 Support Soft Ma nual 引数付きのマクロ置換の形式を次に示します。 マクロ名 ( 引数 , [ 引数 ]…) 引数と仮引数の数は同じでなければなりません。 定義文字の列を省略した場合は , 空文字が定義されます。 #define 命令は , マクロ名に対して一度定義した定義文字の列を変更できません。 【例】 #define NUM 10 #define eq(a, b) a==b #define ne(a, b) a!=b .DATA eq(NUM, 10) /* .DATA (10==10) と置換 */ .DATA ne(5, NUM) /* .DATA (5!=10) と置換 */ .DATA eq(ne(5, NUM), 1) /* .DATA ((5!=10)==1) と置換 */ September 1, 2014, CM81-00208-5 231 Su pp or t 11.8.2 So ft Manu al マクロ仮引数の文字列化 (# 演算子 ) 仮引数に対応する引数文字が文字列に置き換わります。 ■ マクロ仮引数の文字列化 (# 演算子 ) 【記述形式】 # 仮引数 【説明】 # 演算子は , 引数付き #define 命令の定義文字列内でのみ適用されます。 仮引数に対応する引数文字が文字列に置き換わります。 引数文字の前後の空白は削除されて文字列化されます。 【例】 #define MDL(name) .SDATA 232 #name MDL(test) /* .SDATA "test"と置換*/ CM81-00208-5, September 1, 2014 Support 11.8.3 Soft Ma nual マクロ置換の文字の連結 (## 演算子 ) ## 演算子は , 前後にある文字を連結します。 ■ マクロ置換の文字の連結 (## 演算子 ) 【記述形式】 文字 ## 文字 【説明】 ## 演算子は , #define 命令の定義文字の列内でのみ適用されます。 マクロ置換において , 定義文字列の中で ## 演算子が記述されたとき , ## 演算子は削 除され ## 演算子の前後にある文字が連結されます。 引数付き #define 命令の場合において , 文字列の中で , 仮引数が ## 演算子の直前ま たは直後にある場合は , 仮引数に対応する実引数に置き換わり実引数が連結されま す。 ## 演算子で連結された文字はマクロ置換の対象となります。 【例】 #define abcd 10 #define val ab##cd .DATA val val2(x) x##cd .DATA val2(ab) #define September 1, 2014, CM81-00208-5 /* .DATA 10 と置換 */ /* .DATA 10 と置換 */ 233 Su pp or t 11.8.4 So ft Manu al #set 命令 式を評価して , その結果をマクロ名に 10 進定数として定義します。 ■ #set 命令 【記述形式】 #set マクロ名 式 式 : プリプロセッサ式 【説明】 式を評価して , その結果をマクロ名に 10 進定数として定義します。 #set 命令は , 同じマクロ名に対して何回でも再設定が可能です。 #define 命令との違いは , #set 命令はマクロ名を変数として利用できます。 【例】 #set CNT #repeat 3 #set 1 .DATA CNT CNT CNT+1 .DATA 1 .DATA 2 .DATA 3 #endm リピート展開 上の例で , #set 命令を #define 命令に置き換えると #define CNT CNT+1 となり , マク ロ置換の段階で CNT がうまく置換できずエラーとなります。 234 CM81-00208-5, September 1, 2014 Support 11.8.5 Soft Ma nual #undef 命令 指定されたマクロ名を取り消します。 ■ #undef 命令 【記述形式】 #undef マクロ名 【説明】 指定されたマクロ名を取り消します。 仮引数とローカルシンボルに対しては無効です。 取り消されたマクロ名は , #define 命令で再度定義が可能になります。 【例】 #define ABC 100*2 .DATA ABC #undef ABC #define ABC "***ABC***" .SDATA ABC September 1, 2014, CM81-00208-5 /* .DATA 100*2 と置換 */ /* .SDATA "***ABC***" と置換 */ 235 Su pp or t 11.8.6 So ft Manu al #purge 命令 マクロ名を開放します。 ■ #purge 命令 【記述形式】 #purge 【説明】 すべてのマクロ名を取り消します。 仮引数とローカルシンボルに対しては無効です。 取り消されたマクロ名は , #define 命令で再度定義が可能になります。 【例】 #define ABC 100*2 #define DEF 200*3 .DATA ABC /* .DATA 100*2 と置換 */ .DATA DEF /* .DATA 200*3 と置換 */ ABC "***ABC***" .SDATA ABC #purge #define 236 /* .SDATA "***ABC***" と置換 */ CM81-00208-5, September 1, 2014 Support Soft Ma nual 11.9 #include 命令 指定されたファイルを読み込み , ソースプログラム内に取り込みます。 ■ #include 命令 【記述形式】 #include < ファイル名 > #include " ファイル名 " #include ファイル名 【形式 1】 【形式 2】 【形式 3】 【説明】 指定されたファイルを読み込み , ソースプログラム内に取り込みます。 このように #include 命令で読み込まれたファイルをインクルードファイルといいま す。 インクルードファイル内でさらに #include 命令でファイルを読み込むことができま す。これをインクルードファイルのネストといいます。 ネストは最大 8 レベルまで可能です。 形式によって , ファイルを検索するディレクトリが違います。 <注意事項> #include 命令のファイル指定が , 相対形式のファイル指定で記述されている場合は , 現在 のソースファイルのあるディレクトリを基準にファイルを検索します。 ■ 形式 1 のファイル検索 形式 1 の場合 , 次の順序でファイルを検索します。 1. 起動時オプション (-I) で指定されたディレクトリを検索 2. 環境変数 "INC896" で指定されているディレクトリを検索 3. 開発環境内のインクルードディレクトリを検索 - %FETOOL%\LIB\896\INCLUDE を検索 September 1, 2014, CM81-00208-5 237 Su pp or t So ft Manu al ■ 形式 2 と形式 3 のファイル検索 形式 2 と計式 3 の場合 , 次の順序でファイルを検索します。 1. 記述されているファイル名をそのままアクセス 2. 起動時オプション (-I) で指定されたディレクトリを検索 3. 環境変数 "INC896" で指定されているディレクトリを検索 4. 開発環境内のインクルードディレクトリを検索 - %FETOOL%\LIB\896\INCLUDE を検索 【例】 238 #include <stdio.h > #include "stype.h" #include stype.h #include <sys\iodef.h > #include "..\iodef.h" #include \usr\local\iodef.h CM81-00208-5, September 1, 2014 Support 11.10 Soft Ma nual #line 命令 #line 命令は , 次の行の行番号を指定された行番号に変更します。 ■ #line 命令 【記述形式】 #line 行番号 [ ファイル名 ] ファイル名 : 文字列 【説明】 #line 命令は , 次の行の行番号を指定された行番号に変更します。 ファイル名が指定された場合は , ファイル名も変更します。 【例】 #line 1000 "test.asm" この結果, #line命令の次の行番号は1000になり, ファイル名は"test.asm"になります。 September 1, 2014, CM81-00208-5 239 Su pp or t 11.11 So ft Manu al #error 命令 #error 命令は , 指定されたメッセージをエラーとして標準出力へ出力します。 #error 命令以降の処理は行いません。 ■ #error 命令 【記述形式】 #error エラーメッセージ 【説明】 #error 命令は , 指定されたメッセージをエラーとして標準出力へ出力します。 #error 命令以降の処理は行いません。 【例】 #error 240 Test program miss! CM81-00208-5, September 1, 2014 Support 11.12 Soft Ma nual #pragma 命令 #pragma 命令は , 何も処理を行いません。 ■ #pragma 命令 【記述形式】 #pragma 文字の列 【説明】 #pragma 命令は , C 言語のプリプロセッサとの互換のために用意されています。 しかし , アセンブラには意味のない命令なので , アセンブラでは何も処理を行いま せん。 September 1, 2014, CM81-00208-5 241 Su pp or t 11.13 So ft Manu al 空命令 空命令は , 何も処理を行いません。 ■ 空命令 【記述形式】 # 【説明】 "#" の後ろに改行のみある場合 , 空命令となります。 空命令は , 何も処理を行いません。 【例】 # # # .SECTION CODE : 242 CM81-00208-5, September 1, 2014 Support 11.14 Soft Ma nual 既定義マクロ名 あらかじめ予約されているマクロ名です。 既定義マクロ名は , #undef 命令で取り消すことはできません。 ■ 既定義マクロ名 ● __LINE__ 現在のソース行の行番号の値を 10 進定数に置換します。 【例】現在のソース行が , 101 行目の場合 .DATA __LINE__ /* .DATA 101 と置換 */ ● __FILE__ 現在のソースファイル名を文字列に置換します。 【例】現在のソースファイル名が , "t1.asm" の場合 .SDATA __FILE__ /* .SDATA "t1.asm" と置換 */ ● __DATE__ アセンブルされた日付を次の形式に置換します。 "Mmm dd yyyy" Mmm は月名の省略形 , dd は日 , yyyy は西暦を示します。 【例】1966 年 8 月 7 日にアセンブルした場合 .SDATA __DATE__ /* .SDATA "Aug 7 1966" と置換 */ ● __TIME__ アセンブルされた時刻を次の形式に置換します。 "hh:mm:ss" hh は時 , mm は分 , ss は秒を示します。 【例】12 時 34 分 56 秒にアセンブルした場合 .SDATA __TIME__ /* .SDATA "12:34:56" と置換 */ ● __FASM__ 10 進定数 1 に置換します。 【例】 .DATA __FASM__ /* .DATA 1 と置換 */ ● __CPU_8L__ 10 進定数 1 に置換します。 F2MC-8L ファミリのみ有効です。 September 1, 2014, CM81-00208-5 243 Su pp or t So ft Manu al ● __CPU_8FX__ 10 進定数 1 に置換します。 F2MC-8FX ファミリのみ有効です。 ■ defined マクロ名 ● defined( マクロ名 ) すでにマクロ名が定義されている場合は , 10 進定数の 1 に , 定義されていなければ , 10 進定数の 0 に置き換えます。 【例】 .DATA defined(ABC) /* .DATA 0 と置換 */ #define ABC .DATA defined(ABC) 244 /* .DATA 1 と置換 */ CM81-00208-5, September 1, 2014 Support 11.15 Soft Ma nual C 言語プリプロセッサとの違い 本アセンブラのプリプロセッサと C 言語プリプロセッサの違いについて説明します。 ■ C 言語プリプロセッサとの違い 本アセンブラのプリプロセッサにあり , C 言語プリプロセッサにはない機能は次の 8 種 類です。 • #macro 命令 • #local 命令 • #exitm 命令 • #endm 命令 • #repeat 命令 • #set 命令 • #purge 命令 • __FASM__ 既定義マクロ また , 本アセンブラのプリプロセッサと C 言語プリプロセッサで仕様の違う機能は次 の 1 種類です。 • #pragma 命令 - 本アセンブラのプリプロセッサ : 何も処理をしません。 - C 言語プリプロセッサ :『C 言語マニュアル』を参照してください。 September 1, 2014, CM81-00208-5 245 Su pp or t 246 So ft Manu al CM81-00208-5, September 1, 2014 Support Soft Ma nual 第 12 章 アセンブラ擬似機械命令 本アセンブラでは , アセンブラ擬似機械命令を記述 できます。 アセンブラ擬似機械命令とは , MCU の持つ命令を 組み合わせることによって , 1 つの機械命令のよう に記述できる命令です。 この章では , アセンブラ擬似機械命令の各記述形式 とその機能について説明します。 12.1 F2MC-8L/8FX ファミリ用アセンブラ擬似機械命令 September 1, 2014, CM81-00208-5 247 Su pp or t So ft Manu al 12.1 F2MC-8L/8FX ファミリ用アセンブラ擬似機械命令 F2MC-8L/8FX ファミリ用アセンブラ擬似機械命令として , 3 種類の命令を記述でき ます。 また , 分岐先までの距離を計算し最適なコードを配置する分岐命令として , 次の種類 の命令を記述できます。 ■ F2MC-8L/8FX ファミリ用アセンブラ擬似機械命令 F2MC-8L/8FX ファミリ用アセンブラ擬似機械命令として , 次の種類の命令を記述でき ます。 • 分岐系擬似機械命令 • 演算系擬似機械命令 • その他の擬似機械命令 また , 分岐先までの距離を計算して最適なコードを配置する分岐命令として , 次の種類 の命令を記述できます。 • 最適配置分岐擬似機械命令 248 CM81-00208-5, September 1, 2014 Support 12.1.1 Soft Ma nual 分岐系擬似機械命令 分岐系擬似機械命令として , 次の命令を記述できます。 BV, BNV, BLE, BGT, BLS, BHI ■ 分岐系擬似機械命令 分岐系擬似機械命令として , 表 12.1-1 に示す命令を記述できます。 表 12.1-1 分岐系擬似機械命令 記述形式 条件 展開 備考 BV label V=1 で分岐 BN BLT JMP BGE $+7 label $+5 label 次の命令のアドレスか ら -128 ~ 122 バイト の範囲で分岐可能 BNV label V=0 で分岐 BN BGE JMP BLT $+7 label $+5 label 次の命令のアドレスか ら -128 ~ 122 バイト の範囲で分岐可能 BLE label (ZorNorV)=1で分岐 BEQ BLT label label 次の命令のアドレスか ら -128 ~ 125 バイト の範囲で分岐可能 BGT label (ZorNorV)=0で分岐 BEQ BGE $+4 label 次の命令のアドレスか ら -128 ~ 127 バイト の範囲で分岐可能 BLS label (ZorN)=1 で分岐 BEQ BLO label label 次の命令のアドレスか ら -128 ~ 125 バイト の範囲で分岐可能 BHI label (ZandN)=0 BEQ BHS $+4 label 次の命令のアドレスか ら -128 ~ 127 バイト の範囲で分岐可能 September 1, 2014, CM81-00208-5 249 Su pp or t 12.1.2 So ft Manu al 演算系擬似機械命令 演算系擬似機械命令として , 次の命令を記述できます。 NOTA, TESTA ■ 演算系擬似機械命令 演算系擬似機械命令として , 表 12.1-2 に示す命令を記述できます。 表 12.1-2 演算系擬似機械命令 記述形式 250 フラグ変化 展開 備考 NOTA Z, N XOR A, #0FFH A,T 動作は行われません TESTA Z, N, V, C CMP A, #00H アキュムレータの内容が 0 か判定します CM81-00208-5, September 1, 2014 Support Soft Ma nual その他の擬似機械命令 12.1.3 その他の擬似機械命令として , 次の命令を記述できます。 PUSHAT, POPAT, SETRP, SETRPA, SETDB, SETDBA ■ その他の擬似機械命令 その他の擬似機械命令として , 表 12.1-3 に示す命令を記述できます。 表 12.1-3 その他の擬似機械命令 (1 / 2) 記述形式 フラグ変化 展開 PUSHAT PUSHW A XCHW A, T PUSHW A POPAT POPW XCHW POPW SETRP #imm 備考 この命令の実行後は A と T の内容 は入れ替わります A A, T A 【F2MC-8L ファミリ】 MOVW A, PS MOVW A, #07FFH ANDW A MOVW A, #(imm < <11) ORW A MOVW PS, A この命令では A と T の内容は保存 されません。 この命令は F2MC-8L ファミリと F2MC-8FX ファミリで展開が異なり ます。 【F2MC-8FX ファミリ】 MOV A, 0x78 AND A, #3 OR A, #(imm < < 3) MOV 0x78, A September 1, 2014, CM81-00208-5 251 Su pp or t So ft Manu al 表 12.1-3 その他の擬似機械命令 (2 / 2) 記述形式 SETRPA フラグ変化 展開 【F2MC-8L ファミリ】 MOVW A, #001FH ANDW A PUSHW A MOVW A, PS MOVW A, #07FFH ANDW A XCHW A, T POPW A CLRC ROLC A ROLC A ROLC A SWAP ORW A MOVW PS, A 備考 この命令では A と T の内容は保存 されません。 この命令は F2MC-8L ファミリと F2MC-8FX ファミリで展開が異なり ます。 【F2MC-8FX ファミリ】 CLRC ROLC A ROLC A ROLC A MOV A, 0x78 AND A, #3 OR A MOV 0x78, A 252 SETDB #imm MOV AND OR MOV A, 0x78 A, #0xF8 A, #(imm & 7) 0x78, A この命令では A と T の内容は保存 されません。 この命令は F2MC-8FX ファミリで のみ有効です。 SETDBA AND MOV AND OR MOV A, #7 A, 0x78 A, #0xF8 A 0x78, A この命令では A と T の内容は保存 されません。 この命令は F2MC-8FX ファミリで のみ有効です。 CM81-00208-5, September 1, 2014 Support 12.1.4 Soft Ma nual 最適配置分岐擬似機械命令 最適配置分岐擬似機械命令は , 分岐先までの距離を計算し , 相対分岐が可能であるか の判断を行い , 最適なコードを配置する擬似機械命令です。 最適配置分岐擬似機械命令として , 次の命令を記述できます。 Bcc16 ■ 最適配置分岐擬似機械命令 最適配置分岐擬似機械命令は , 分岐先までの距離を計算し , 相対分岐が可能であるかの 判断を行い , 最適なコードを配置する擬似機械命令です。 最適配置分岐擬似機械命令として , 表 12.1-4 に示す命令を記述できます。 表 12.1-4 最適配置分岐擬似機械命令 (1 / 3) 分岐拡張命令 BZ16 BNZ16 BEQ16 BNE16 BC16 BNC16 BLO16 BHS16 September 1, 2014, CM81-00208-5 label label label label label label label label 動作 (Z)=1 なら分岐 (Z)=0 なら分岐 (Z)=1 なら分岐 (Z)=0 なら分岐 (C)=1 なら分岐 (C)=0 なら分岐 (C)=1 なら分岐 (C)=0 なら分岐 距離 -128 ~ +127 生成される命令 BZ label その他 BNZ JMP $+5 label -128 ~ +127 BNZ label その他 BZ JMP $+5 label -128 ~ +127 BEQ label その他 BNE JMP $+5 label -128 ~ +127 BNE label その他 BEQ JMP $+5 label BC label その他 BNC JMP $+5 label -128 ~ +127 BNC label その他 BC JMP $+5 label -128 ~ +127 BLO label その他 BHS JMP $+5 label -128 ~ +127 BHS label その他 BLO JMP $+5 label -128 ~ +127 253 Su pp or t So ft Manu al 表 12.1-4 最適配置分岐擬似機械命令 (2 / 3) 分岐拡張命令 BN16 BP16 BLT16 BGE16 BBC16 BBS16 BV16 BNV16 BLE16 254 label label label label bit, label bit, label label label label 動作 (N)=1 なら分岐 (N)=0 なら分岐 (V)xor(N)=1 なら分岐 (V)xor(N)=0 なら分岐 (bit)=0 なら分岐 (bit)=1 なら分岐 (V)=1 なら分岐 (V)=0 なら分岐 (Z)or((N)or(V))=1 なら分岐 距離 生成される命令 -128 ~ +127 BN label その他 BP JMP $+5 label BP label その他 BN JMP $+5 label -128 ~ +127 BLT label その他 BGE JMP $+5 label -128 ~ +127 BGE label その他 BLT JMP $+5 label -128 ~ +127 BBC label その他 BBS JMP $+6 label -128 ~ +127 BBS label その他 BBC JMP $+6 label -128 ~ +122 BN BLT JMP BGE $+7 label $+5 label その他 BN BGE JMP BLT JMP $+7 $+10 label $+5 label -128 ~ +122 BN BGE JMP BLT $+7 label $+5 label その他 BN BLT JMP BGE JMP $+7 $+10 label $+5 label -128 ~ +125 BEQ BLT label label その他 BEQ BGE JMP $+4 $+5 label -128 ~ +127 CM81-00208-5, September 1, 2014 Support Soft Ma nual 表 12.1-4 最適配置分岐擬似機械命令 (3 / 3) 分岐拡張命令 BGT16 BLS16 BHI16 September 1, 2014, CM81-00208-5 label label label 動作 (Z)or((N)or(V))=0 なら分岐 (Z)or(C)=1 なら分岐 (Z)or(C)=0 なら分岐 距離 生成される命令 -128 ~ +127 BEQ BGE $+4 label その他 BEQ BLT JMP $+7 $+5 label -128 ~ +125 BEQ BLO label label その他 BEQ BHS JMP $+4 $+5 label -128 ~ +127 BEQ BHS $+4 label その他 BEQ BLO JMP $+7 $+5 label 255 Su pp or t 256 So ft Manu al CM81-00208-5, September 1, 2014 Support Soft Ma nual 第 13 章 構造化命令 構造化命令は , 構造化プログラミングを行うために 用意された命令です。 この章では , 構造化命令について説明します。 13.1 構造化命令の概要 13.2 構造化プログラム命令 13.3 式 ( 代入式 , 代入演算式 , インクリメント / デクリメン ト式 ) September 1, 2014, CM81-00208-5 257 Su pp or t So ft Manu al 13.1 構造化命令の概要 構造化命令は , 構造化プログラミングを行うために用意された命令です。 ■ 構造化命令の概要 構造化命令は , 構造化プログラミングを行うために用意された命令です。 【例】 .program "Sample_for_8L" .import func .import para1 .section segment1, code .(R0 = #0) // 代入式 func1: .while (R0 <= #10) .(para1 < <= #1) CALL // 構造化プログラム命令 // 代入演算式 func .(R0++) // インクリメント式 .endw ret .end 258 CM81-00208-5, September 1, 2014 Support Soft Ma nual 13.2 構造化プログラム命令 構造化プログラム命令には , 2 処理選択 , 多処理選択 , 計算型繰返し , 終了条件型繰 返し , および実行条件型繰返しの 5 つの制御構文命令と , ブレイク , コンティニュー の 2 つの制御移行命令があります。 構造化プログラム命令の一覧を表 13.2-1 に示します。 ■ 構造化プログラム命令の概要 構造化プログラム命令には , 2 処理選択 , 多処理選択 , 計算型繰返し , 終了条件型繰返し , および実行条件型繰返しの 5 つの制御構文命令と , ブレイク , コンティニューの 2 つの 制御移行命令があります。 構造化プログラム命令の一覧を表 13.2-1 に示します。 表 13.2-1 構造化プログラム命令一覧 構造化プログラム命令 用途 .if .else 2 処理選択 .endif .switch .case 多処理選択 .default .endsw .for 計算型繰返し .endf .repeat 終了条件型繰返し .until .while 実行条件型繰返し .endw .break ブレイク .continue コンティニュー September 1, 2014, CM81-00208-5 259 Su pp or t 13.2.1 So ft Manu al 構造化プログラム命令の条件式 構造化プログラム命令は , プログラム制御のための条件式が記述できます。 ■ 構造化プログラム命令の条件式 条件式には , コンディションコード条件式 , 比較条件式 , ビット条件式の 3 つの条件式 が用意されています。 また , 前述の 3 つの条件式を最大 8 個まで組み合わせた複合条件式を記述できます。 ● コンディションコード条件式 コンディションコード条件式は , CPU のコンディションを表すビットを基本にコン ディションコードが用意されています。 コンディションコードは , 両端をアングルブラケット ( < >) で囲みます。 コンディションコード条件式で使用可能な条件式を表 13.2-2 に示します。 表 13.2-2 コンディションコード条件式で使用可能な条件式 Z(EQ) Z==1 NZ(NE) Z==0 C(LO) C==1 NC(NS) C==0 N N==1 P N==0 V V==1 NV V==0 LT (VorN)==1 GE (VorN)==0 LE ((VxorN)orZ)==1 GT ((VxorN)orZ)==0 LS (CorZ)==1 HI (CorZ)==0 【例】 .if ( <ne >) mov a, r1 .else mov a, r2 .endif 260 CM81-00208-5, September 1, 2014 Support Soft Ma nual ● 比較条件式 比較条件式は , 2 つのオペランドをもち , その比較結果により設定される CPU のコン ディションを元に判定されます。 比較条件式で使用可能な条件式を表 13.2-3 に示します。 表 13.2-3 比較条件式で使用可能な条件式 == 等しい != 等しくない < 小さい <= 小さいか等しい > 大きい >= 大きいか等しい <, <=, >, >= の比較条件で , 符号なし比較を行う場合には , 比較式に .u を付加します。 比較条件式のオペランドに記述可能な項を , 表 13.2-4 に示します。 表 13.2-4 比較条件式に記述可能なオペランド 左項 右項 A dir/#d8/@EP/@IX+off/Ri @EP @IX+off #d8 Ri 【例】 .if (A <= #0) call func .endif ● ビット条件式 ビット条件式は , オペランドのビット状態を判定に使用します。 ビット状態が 1 のときに条件が成立し , 0 のときには条件が不成立と判定します。 "!" を付加すると論理の反転を行います。 【例】 .while (bit_flag) call func .endw September 1, 2014, CM81-00208-5 261 Su pp or t So ft Manu al ● 複合条件式 複合条件式は , 前述の 3 つの条件式を最大 8 個まで組み合わせて , 論理和 (||) または論 理積 ( & &) を判定条件にします。 ビット条件式の後にコンディションコード条件式を用いる場合は , ビット条件式でゼ ロフラグ (Z) が更新されるので , 注意が必要です。 複合条件式の複合条件は , 論理和と論理積の混在はできません。 複合条件式が使用可能な構造化プログラム命令は次の 3 つです。 • 2 処理選択構文 (.if 構文 ) • 終了条件型繰返し構文 (.repeat 構文 ) • 実行条件型繰返し構文 (.while 構文 ) 【例】 .while (bit_flag1 call & & bit_flag2) func .endw 262 CM81-00208-5, September 1, 2014 Support 13.2.2 Soft Ma nual 構造化プログラム命令での生成規則 構造化プログラム命令で生成されるシンボルと命令文の生成規則について説明しま す。 ■ シンボルの生成規則 構造化プログラム命令では , 次のようにシンボルを生成します。 構造化プログラム命令 シンボル形式 2 処理選択 (.if) __Innnnn 多処理選択 (.switch) __Snnnnn 計算型繰返し (.for) __Fnnnnn 終了条件型繰返し (.repeat) __Rnnnnn 実行条件型繰返し (.while) __Wnnnnn 2 個のアンダバー '__' で始まり 5 桁の数値 (10 進数 ) が続きます。 この 5 桁の数値は , シンボルが生成されるたびに 1 つ値が加算され , 00001 ~ 65535 ま での値を生成します。 ■ 命令文の生成規則 構造化プログラム命令により生成される機械命令は , 次に示すように , 構造化プログラ ム命令のネストに関係なく 1 個のタブコードを前置して生成されます。 機械命令とオペランドの間にも 1 個のタブコードを出力します。 タブコード 機械命令 タブコード オペランド 改行コード シンボルを定義する場合には , シンボルにコロン ':' を付加し , シンボルだけを行の第 1 カラム目から生成します。 生成シンボル名 : September 1, 2014, CM81-00208-5 263 Su pp or t So ft Manu al 構造化プログラム命令の記述形式 13.2.3 構造化プログラム命令の基本的な記述形式について説明します。 各構造化プログラム命令の詳細については , 「13.2.4 2 処理選択構文」~「13.2.9 制御移行命令」を参照してください。 ■ 構造化プログラム命令の記述形式 【記述形式】 . 命令 ( 条件式 ) 【説明】 ● 命令 .if, .while などの構造化プログラム命令を記述します。 '. 命令 ' で 1 つの命令です。ピリオド (.) と命令を切り離して記述できません。 各構造化プログラム命令の詳細については , 「13.2.4 2 処理選択構文」~「13.2.9 制御 移行命令」を参照してください。 ● 条件式 コンディションコード条件式 , 比較条件式およびビット条件式のいずれかを記述しま す。 ■ 条件式の記述形式 ● コンディションコード条件式 ( < コンディションコード >) ● 比較条件式 (op1 比較式 op2) ● ビット条件式 ([!]op1) "!" を付加すると , 論理の反転 (0 で条件成立 ) を行います。 264 CM81-00208-5, September 1, 2014 Support 13.2.4 Soft Ma nual 2 処理選択構文 2 処理選択構文は , 条件式が真の場合には処理 1 が実行され , 条件式が偽の場合には 処理 2 が実行される命令を生成します。 条件式には , コンディションコード条件式 , 比較条件式およびビット条件式が記述で きます。 ■ 2 処理選択構文 【記述形式】 .if ( 条件式 ) 処理 1 [.else] 処理 2 .endif 【説明】 2 処理選択構文は , 条件式が真の場合には処理 1 が実行され , 条件式が偽の場合には 処理 2 が実行される命令を生成します。 条件式には , コンディションコード条件式 , 比較条件式 , ビット条件式が記述できま す。 【例】 .if mov ( <ne >) BEQ16 __I00001 a, r0 mov a, r0 JMP __I00002 .else __I00001: mov .endif September 1, 2014, CM81-00208-5 a, r1 mov a, r1 __I00002: 265 Su pp or t 13.2.5 So ft Manu al 多処理選択構文 多処理選択構文は , switch オペランドと case オペランドの比較を行い , 等しい場合 には該当する .case 以降に記述された処理を実行し , 異なる場合には次に記述され ている .case 文の比較を行う命令を生成します。 .case 文は任意の回数記述可能です。 多処理選択構文から抜けるには .break 文を使用します。 ■ 多処理選択構文 【記述形式】 .switch ( オペランド 1) .case ( オペランド n) 処理 [.break] [.default] 処理 .endsw 【説明】 多処理選択構文は , switch オペランド ( オペランド 1) と case オペランド ( オペラン ド n) の比較を行い , 等しい場合には該当する .case 以降に記述された処理を実行し , 異なる場合には次に記述されている .case 文の比較を行う命令を生成します。 .case 文は任意の回数記述可能です。 多処理選択構文から抜けるには , .break 文を使用します。 各オペランドに記述可能な項を表 13.2-5 に示します。 表 13.2-5 オペランドに記述可能な項 switch オペランド case オペランド A dir/#d8/@EP/@IX+off/Ri dir @EP #d8 @IX+off Ri 266 CM81-00208-5, September 1, 2014 Support Soft Ma nual 【例】 .switch (A) .case (#0) mov a, r0 .break .case (#1) a, r1 .break .default BNE16 __S00002 mov a, r0 JMP __S00001 CMP A, #1 BNE16 __S00003 mov a, r1 JMP __S00001 mov a, r0 __S00003: mov September 1, 2014, CM81-00208-5 A, #0 __S00002: mov .endsw CMP a, r0 __S00001: 267 Su pp or t 13.2.6 So ft Manu al 計算型繰返し構文 計算型繰返し構文は , 条件が成立する間 , 処理を繰り返し実行する命令を生成しま す。 カウンタの増減方向は , op4 の符号により指定します。 最初から条件が成立していない場合 , 処理は実行されません。 条件は , op1 と op3 の比較で判定されます。 ■ 計算型繰返し構文 【記述形式】 .for (op1=op2, 比較式 op3, [{+|-}]op4) 処理 .endf 【説明】 計算型繰返し構文は , 条件が成立する間 , 処理を繰り返し実行する命令を生成しま す。 カウンタの増減方向は , op4 の符号により指定します。符号を省略すると増分方向 になります。 最初から条件が成立していない場合 , 処理は実行されません。 条件は , op1 と op3 の比較で判定されます。 各オペランドに記述可能な項を表 13.2-6 に示します。 表 13.2-6 オペランドに記述可能な項 op1 A op2 op3 dir #d8 @EP @IX+off Ri @A dir #d8 @EP @IX+off Ri #d8 #d8 dir @EP op4 dir #d8 @EP @IX+off Ri @IX+off Ri 268 CM81-00208-5, September 1, 2014 Support Soft Ma nual 【例】 .for (A=#0, <=.u #255, +1) MOV A, #0 JMP __F00001 __F00002: incw .endf ep incw ep __F00003: ADDC A, #1 __F00001: CMP A, #255 BHI16 __F00001 __F00004: September 1, 2014, CM81-00208-5 269 Su pp or t 13.2.7 So ft Manu al 終了条件型繰返し構文 終了条件型繰返し構文は , 条件が成立するまで処理を繰り返し実行する命令を生成 します。 条件式には , コンディションコード条件式 , 比較条件式およびビット条件式が記述で きます。 終了条件型繰返し構文では , 処理を実行後に条件の判定を行うため , 最初から条件が 成立する場合でも , 必ず 1 度は処理が実行されます。 ■ 終了条件型繰返し構文 【記述形式】 .repeat 処理 .until ( 条件式 ) 【説明】 終了条件型繰返し構文は , 条件が成立するまで処理を繰り返し実行する命令を生成 します。 条件式には , コンディションコード条件式 , 比較条件式およびビット条件式が記述 できます。 終了条件型繰返し構文では , 処理を実行後に条件の判定を行うため , 最初から条件 が成立する場合でも , 必ず 1 度は処理が実行されます。 【例】 .repeat __R00001: decw .until ( <eq >) ep decw ep __R00002: BNE16 __R00001 __R00003: 270 CM81-00208-5, September 1, 2014 Support 13.2.8 Soft Ma nual 実行条件型繰返し構文 実行条件型繰返し構文は , 条件が成立する間 , 処理を繰り返し実行する命令を生成し ます。 条件式には , コンディションコード条件式 , 比較条件式およびビット条件式が記述で きます。 実行条件型繰返し構文では , 条件の判定後に処理の実行を行うため , 最初から条件が 成立しない場合は , 1 度も処理は実行されません。 ■ 実行条件型繰返し構文 【記述形式】 .while ( 条件式 ) 処理 .endw 【説明】 実行条件型繰返し構文は , 条件が成立する間 , 処理を繰り返し実行する命令を生成 します。 条件式には , コンディションコード条件式 , 比較条件式およびビット条件式が記述 できます。 実行条件型繰返し構文では , 条件の判定後に処理の実行を行うため , 最初から条件 が成立しない場合は , 1 度も処理は実行されません。 【例】 .while ( <le >) JMP _W00002 __W00001: incw .endw ep incw ep __W00002: BLE16 _W00001 __W00003: September 1, 2014, CM81-00208-5 271 Su pp or t 13.2.9 So ft Manu al 制御移行命令 制御移行命令は , 構文から脱出したり , 繰返し構文の繰返し制御に移行する場合に使 用します。 .break 命令は , その記述が含まれる最も内側の構文から脱出します。 .continue 命令は , その記述が含まれる最も内側の繰返し構文の繰返しへ制御を移行 します。 ■ .break 命令 【記述形式】 .break 【説明】 .break 命令は , その記述が含まれる最も内側の構文から脱出します。 多処理選択構文および各種繰返し構文で使用できます。 【例】 .while ( <le >) JMP __W00002 __W00001: incw incw ep .if ( <ne >) BEQ16 __I00001 .break JMP __W00003 .endif .endw ep __I00001: __W00002: BLE16 __W00001 __W00003: 272 CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ .continue 命令 【記述形式】 .continue 【説明】 .continue 命令は , その記述が含まれる最も内側の繰返し構文の繰返し制御に移行し ます。 各種繰返し構文で使用できます。 【例】 .while ( <le >) JMP __W00002 __W00001: incw ep .if ( <ne >) .continue .else incw ep BEQ16 __I00001 JMP __W00002 JMP __I00002 __I00001: .break .endif .endw JMP __W00003 __I00002: __W00002: BLE16 __W00001 __W00003: September 1, 2014, CM81-00208-5 273 Su pp or t So ft Manu al 13.3 式 ( 代入式 , 代入演算式 , インクリメント / デクリメント 式) 本アセンブラでは , 構造化プログラム命令に加えて , 式を使用できます。 式には , 代入式・代入演算式・インクリメント / デクリメント式があります。 ■ 式の概要 本アセンブラでは , 構造化プログラム命令に加えて , 式を使用できます。 式の種類を表 13.3-1 に示します。 表 13.3-1 式の種類 代入式 右項を左項に代入する式です。 代入演算式 右項と左項で演算を行い , 結果を右項に代入する式です。 インクリメント / デクリメント式 項の値に 1 を加算または減算し , 項の値とする式です。 使用可能な式の一覧を表 13.3-2 に示します。 表 13.3-2 式の一覧 式 用途 .(op1 = op2) 代入式 .(op1 += op2) .(op1 -= op2) .(op1 *= op2) .(op1 /= op2) .(op1 %= op2) 代入演算式 .(op1 &= op2) .(op1 |= op2) .(op1 ^= op2) .(op1 < <= op2) .(op1 > >= op2) 274 .(op++) インクリメント式 .(op--) デクリメント式 CM81-00208-5, September 1, 2014 Support 13.3.1 Soft Ma nual 式の記述形式 式の基本的な記述形式について説明します。 各式の詳細については , 「13.3.2 代入式」~「13.3.4 インクリメント / デクリメン ト式」を参照してください。 ■ 式の記述形式 【記述形式】 .( 式 ) 【説明】 式には , 代入式 , 代入演算式 , インクリメント式およびデクリメント式のいずれかを 記述します。 式は , 必ずピリオド (.)+ 括弧 '(' で始まり括弧 ')' で閉じられている必要があります。 各式の詳細については , 「13.3.2 代入式」から「13.3.4 インクリメント / デクリメ ント式」を参照してください。 September 1, 2014, CM81-00208-5 275 Su pp or t 13.3.2 So ft Manu al 代入式 代入式は , 右項から左項への代入を行う命令を生成します。 同じデータサイズで代入を行う場合には , 複数 ( 最大 8 個まで ) への代入処理が一度 に記述できます。この場合 , 16 ビット代入と 8 ビット代入の混在はできません。 16 ビットレジスタへ 8 ビット代入を行った場合 , 上位 8 ビットは不定です。 ■ 代入式 【記述形式】 .(op1[. データサイズ ] = op2[. データサイズ ] = … = op9) データサイズ :{b|w} 【説明】 代入式は , 右項から左項への代入を行う命令を生成します。 同じデータサイズで代入を行う場合には , 複数 ( 最大 8 個まで ) への代入処理が一 度に記述できます。 複数への代入処理を一度に記述した場合 , 16 ビット代入と 8 ビット代入の混在はで きません。 16 ビットレジスタへ 8 ビット代入を行った場合 , 上位 8 ビットは不定です。 【例】 .(R0=R1=#0) MOV A, #0 MOV R1, A MOV R0, A ■ デフォルトデータサイズ 代入を行う場合 , 代入先によりデフォルトのデータサイズが異なります。 代入先とデフォルトデータサイズの関係を表 13.3-3 に示します。 表 13.3-3 代入式の代入先とデフォルトデータサイズの関係 276 代入先 データサイズ EP, IX, PS, SP 16 ビット その他 8 ビット CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ 項に記述可能な種類 代入式の項には , アセンブラのオペランドに記述可能なレジスタやシンボルなど , ほと んどのものが記述できます。 ただし , 代入先と代入元に同じものを記述できません。 記述できる項の種類を表 13.3-4 に示します。 表 13.3-4 代入式に記述可能な項 8 ビット代入 項 代入先 代入元 レジスタ A, T, R0 ~ R7, EP, IX, PS, SP* A, T, R0 ~ R7, EP, IX, PS, SP* レジスタ間接 @A*, @IX+offset, @EP @A*, @IX+offset, @EP アドレス シンボル , アドレス値 シンボル , アドレス値 即値 # 数値 , # シンボル 16 ビット代入 レジスタ A, T, EP, IX, PS, SP* A, T, EP, IX, PS, SP* レジスタ間接 @A*, @IX+offset, @EP @A*, @IX+offset, @EP アドレス シンボル , アドレス値 シンボル , アドレス値 即値 # 数値 , # シンボル * 印のついているものは , 複数代入記述には使用できません。 September 1, 2014, CM81-00208-5 277 Su pp or t 13.3.3 So ft Manu al 代入演算式 代入演算式は , 右項と左項の演算結果を左項への代入を行う命令を生成します。 ■ 代入演算式 【記述形式】 .(op1[. データサイズ ] 代入演算記号 op2) データサイズ :{b|w} 【説明】 代入演算式は , 右項と左項の演算結果を左項への代入を行う命令を生成します。 代入演算記号として記述できるものを表 13.3-5 に示します。 表 13.3-5 使用可能な代入演算子 演算子 算術演算 論理演算 8ビット代入演算 16ビット代入演算 += += -= -= *= *= 符号なし演算です /= 符号なし演算です %= 符号なし演算です &= &= |= |= ^= ^= < <= 右項は #1 ~ #7 の即値です > >= 右項は #1 ~ #7 の即値です シフト演算 278 備考 CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ デフォルトデータサイズ 代入演算を行う場合 , 左項によりデフォルトのデータサイズが異なります。 左項とデフォルトデータサイズの関係を表 13.3-6 に示します。 表 13.3-6 代入演算式の左項とデフォルトデータサイズの関係 代入先 データサイズ EP, IX 16 ビット その他 8 ビット ■ 項に記述可能な種類 代入演算式の項には , アセンブラのオペランドに記述可能なレジスタやシンボルなど , ほとんどのものが記述できます。 記述できる項の種類を表 13.3-7 に示します。 表 13.3-7 代入演算式に記述可能な項 8 ビット代入 項 左項 右項 レジスタ A, T, R0 ~ R7, EP, IX A, T, R0 ~ R7, EP, IX レジスタ間接 @A, @IX+offset, @EP @A, @IX+offset, @EP アドレス シンボル , アドレス値 シンボル , アドレス値 即値 # 数値 , # シンボル 16 ビット代入 レジスタ A, T, EP, IX A, T, EP, IX レジスタ間接 @A, @IX+offset, @EP @A, @IX+offset, @EP アドレス シンボル , アドレス値 シンボル , アドレス値 即値 September 1, 2014, CM81-00208-5 # 数値 , # シンボル 279 Su pp or t So ft Manu al ■ 記述例 .(@IX-0 += @IX-1) .(_sym -= _sym+1) CLRC MOV A, @IX-0 ADDC A, @IX-1 MOV @IX-0, A CLRC MOV A, _sym MOV A, _sym+1 SUBC A MOV _sym, A MOVW A, EP MOVW A, #16 MULU A MOVW EP, A MOV A, #7 MOVW A, @EP XCHW A, T DIVU A MOVW @EP, A MOV A, #7 MOVW A, @EP XCHW A, T DIVU A XCHW A, T MOVW @EP, A AND A, #0x80 .(A |= #0xF0) OR A, #0xF0 .(A ^= #0xFF) XOR A, #0xFF .(R0 MOV A, R0 ROLC A ROLC A AND A, #0xFC .(EP *= #16) .(@EP /= #7) .(@EP %= #7) .(A &= #0x80) < <= #2) CLRC 280 CM81-00208-5, September 1, 2014 Support .(@A Soft > >= #3) Ma nual MOV R0, A MOV A, @A RORC A RORC A RORC A AND A, #0x1F CLRC September 1, 2014, CM81-00208-5 XCH A, T MOV @A, T 281 Su pp or t 13.3.4 So ft Manu al インクリメント / デクリメント式 項のインクリメントまたはデクリメントを行う命令を生成します。 8 ビットのインクリメントまたはデクリメントを行う場合 , R0 ~ R7 以外のものは 16 ビットで行われます。 ■ インクリメント / デクリメント式 【記述形式】 .(op[. データサイズ ]{++|--}) データサイズ :{b|w} 【説明】 項のインクリメントまたはデクリメントを行う命令を生成します。 インクリメント式は '++' をデクリメント式は '--' を記述します。 8 ビットのインクリメントまたはデクリメントを行う場合 , R0 ~ R7 以外のものは 16 ビットで行われます。したがって , インクリメントまたはデクリメントを行った 結果 8 ビットを超えた場合にフラグは反映されません。 【例】 .(EP++) INCW EP .(@EP--) MOV A, @EP DECW A MOV @EP, A ■ デフォルトデータサイズ インクリメント / デクリメント式は , 項によりデフォルトのデータサイズが異なりま す。 項とデフォルトデータサイズの関係を表 13.3-8 に示します。 表 13.3-8 インクリメント / デクリメント式の項デフォルトデータサイズの関係 282 代入先 データサイズ EP, IX 16 ビット その他 8 ビット CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ 項に記述可能な種類 インクリメント / デクリメント式の項には , アセンブラのオペランドに記述可能なレジ スタやシンボルなど , ほとんどのものが記述できます。 記述できる項の種類を表 13.3-9 に示します。 表 13.3-9 インクリメント / デクリメント式に記述可能な項 項 8 ビット 16 ビット レジスタ A, T, R0 ~ R7, EP, IX A, T, EP, IX レジスタ間接 @A, @IX+offset, @EP @A, @IX+offset, @EP アドレス シンボル , アドレス値 シンボル , アドレス値 September 1, 2014, CM81-00208-5 283 Su pp or t 284 So ft Manu al CM81-00208-5, September 1, 2014 Support Soft Ma nual 付録 付録では , エラーメッセージの一覧 , 制限事項を掲 載します。 付録 A エラーメッセージ一覧 付録 B 制限事項 付録 C 拡張ダイレクトアクセス領域バンク番号の取得方法 付録 D SOFTUNE アセンブラと旧版アセンブラの仕様の差 異 付録 E 主な変更内容 September 1, 2014, CM81-00208-5 285 Su pp or t 付録 A So ft Manu al エラーメッセージ一覧 本アセンブラで出力するエラーメッセージの一覧です。 ■ エラーメッセージの見方 図 A-1 エラーメッセージの見方 xx101A Expression too complex 式が複雑すぎて解析できません エラー認識番号 エラーメッセージ 上段に英語,下段に日本語のメッセージを示します。 x x 1 0 1 A ツール識別子 A:アセンブラ エラー番号(3桁) エラーレベル W1:警告レベル E4:文法エラー F9:致命的エラー(アセンブル強制終了) <注意事項> エラーメッセージの枠の下に補足説明が付いている場合があります。 286 CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ エラーメッセージ一覧 E4101A Expression too complex 式が複雑すぎて解析できません 【プログラム処置】 式処理を中断します。 E4102A Missing expression(s) 式の記述がありません 【プログラム処置】 式処理を中断します。 W1103A Divide by zero 除数 0 の除算です 【プログラム処置】 式処理を中断します。 E4104A No terms in parentheses 括弧中に項がありません 【プログラム処置】 式処理を中断します。 W1105A Illegal term in expression 式に不正な項があります 【プログラム処置】 式処理を中断します。 E4106A Unbalanced parentheses in expression 式の括弧の対応が合いません 【プログラム処置】 式処理を中断します。 September 1, 2014, CM81-00208-5 287 Su pp or t E4107A So ft Manu al Syntax error 文法に誤りがあります 【プログラム処置】 この命令を無効にします。 E4109A Nothing macro-name マクロ名の記述がありません 【プログラム処置】 この命令を無効にします。 E4110A Nothing include file-name インクルードファイル名の指定がありません 【プログラム処置】 この命令を無効にします。 E4111A Cannot open include file インクルードファイルがありません 【プログラム処置】 この命令を無効にします。 E4112A Nested include file exceeds 8 インクルードファイルのネストが 8 を超えました インクルードファイルのネストは 8 レベルまでです。 【プログラム処置】 この命令を無効にします。 288 CM81-00208-5, September 1, 2014 Support E4114A Soft Ma nual Nested macro-call exceeds 255 マクロコールのネストが 255 を超えました マクロコールのネストは 255 レベルまでです。 【プログラム処置】 この命令を無効にします。 E4115A Changed level exceeds 255 置換レベルが 255 を超えました 置換処理のネストは 255 レベルまでです。 【プログラム処置】 マクロ名を空文字に置換えます。 E4116A Invalid value 不正な値です 整数定数の記述に誤りがあります 【プログラム処置】 不正な文字のみを無視します。 E4117A Macro name duplicate definition マクロ名が 2 重定義です 【プログラム処置】 この命令を無視します。 W1118A Argument duplicate definition 引数が 2 重定義です 【プログラム処置】 この引数を無視します。 September 1, 2014, CM81-00208-5 289 Su pp or t W1119A So ft Manu al Local-symbol duplicate definition ローカルシンボルが 2 重定義です 【プログラム処置】 このローカルシンボルを無視します。 W1120A Too many arguments 引数が多すぎます 【プログラム処置】 多い引数を無視します。 W1121A Not enough arguments 引数の数が足りません 【プログラム処置】 足りない引数を空文字とします。 E4122A Missing '(' '(' がありません 【プログラム処置】 この命令を無視します。 E4123A Unterminated macro-name ')' マクロ命令の最後に ')' がありません 【プログラム処置】 この命令を無視します。 E4124A Unterminated comment コメントの終わりに '*/' がありません 【プログラム処置】 '*/' を補います。 290 CM81-00208-5, September 1, 2014 Support W1125A Soft Ma nual Unterminated ' 文字定数の終わりに ' がありません 【プログラム処置】 行終端までを文字定数とします。 W1126A Unterminated " 文字列の終わりに " がありません 【プログラム処置】 行終端までを文字列とします。 W1127A Unterminated ' >' インクルードファイル名の終わりに ' >' がありません 【プログラム処置】 ' >' を補います。 W1128A Value overflow 値がオーバフローです 32 ビットで表しきれない数が指定されています 【プログラム処置】 下位 32 ビットのみ有効とします。 W1129A Name too long 名前が長すぎます 名前の文字数が 255 文字を超えています。 【プログラム処置】 超えた分の文字を無効にします。 September 1, 2014, CM81-00208-5 291 Su pp or t W1130A So ft Manu al String too long 文字列が長すぎます 文字列が 4095 文字を超えています。 【プログラム処置】 超えた分の文字を無効にします。 W1131A Defined-string too long 定義文字列が長すぎます 定義文字列が 4095 文字を超えています。 【プログラム処置】 超えた分の文字を無効にします。 W1132A Expanded-string too long 展開文字列が長すぎます マクロ展開された文字列が 4095 文字を超えています。 【プログラム処置】 超えた分の文字を無効にします。 W1133A Logical-lines too long 値がオーバフローです 継続行を含めた論理行が 4095 文字を超えています。 【プログラム処置】 超えた分の文字を無効にします。 W1134A Meaningless description 不要な記述です 【プログラム処置】 この文字を無効にします。 292 CM81-00208-5, September 1, 2014 Support E4135A Soft Ma nual Has no #if-statement 対応する #if 文がありません 【プログラム処置】 この命令を無効にします。 E4136A Has no #macro-statement 対応する #macro 文がありません 【プログラム処置】 この命令を無効にします。 W1137A #endif expected #endif 文がありません 【プログラム処置】 #endif 文があったものとします。 E4138A #endm expected #endm 文がありません 【プログラム処置】 #endm 文があったものとします。 E4140A Not used macro-statement この命令はここでは使用できません 【プログラム処置】 この命令を無効にします。 E4141A Too long macro-body マクロボディが大きすぎます 【プログラム処置】 このマクロ定義を無効にします。 September 1, 2014, CM81-00208-5 293 Su pp or t W1142A So ft Manu al Meaningless .CASE .SWITCH 命令なしに , .CASE 命令が記述されています 【プログラム処置】 この記述を無視します。 W1143A Meaningless .DEFAULT .SWITCH 命令なしに , .DEFAULT 命令が記述されています 【プログラム処置】 この記述を無視します。 W1144A .CASE statement not permitted here .DEFAULT 命令の後ろに , .CASE 命令が記述されています 【プログラム処置】 この記述を無視します。 W1145A .ENDSW without .CASE statement .SWITCH 命令で .CASE 命令の記述がされないまま , .ENDSW 命令が 記述されました 【プログラム処置】 .CASE 命令はないものとして処理を続けます。 W1146A #PURGE not permitted here #PURGE 命令がマクロ定義体中で記述されています 【プログラム処置】 この記述を無視します。 W1147A Data width is not permitted to indicate to last item. Ignored this suffix 最後の項にデータ幅の指定が行われています 【プログラム処置】 データ幅指定の記述を無視します。 294 CM81-00208-5, September 1, 2014 Support E4148A Soft Ma nual .BREAK not in structured block 構造化制御構文の外に .BREAK 命令が記述されています 【プログラム処置】 この記述を無視します。 E4149A .CONTINUE not in structured block 構造化制御構文の外に .CONTINUE 命令が記述されています 【プログラム処置】 この記述を無視します。 E4150A Missing angle bracket アングルブラケット " <", " >" の対応がとれていません 【プログラム処置】 この記述を無視します。 E4151A Conditional expression overflow 複合条件式の数が多すぎます 【プログラム処置】 この記述を無視します。 E4152A & & and || conditional expression exist 複合条件式において論理積条件と論理和条件が混在しています 【プログラム処置】 この記述を無視します。 E4153A Illegal structured block order 構造化制御命令の記述が正しくありません 【プログラム処置】 この記述を無視します。 September 1, 2014, CM81-00208-5 295 Su pp or t E4154A So ft Manu al Source item and destination item is the same 代入先と代入元に同じものが記述されています 【プログラム処置】 この記述を無視します。 E4155A Number of item is overflowed 複数への代入の一括記述で , 代入先が多すぎます 【プログラム処置】 この記述を無視します。 E4501A Missing expression(s) 式の記述がありません 【プログラム処置】 この命令を無効にします。 E4502A Out of section セクションがまだ定義されていません 【プログラム処置】 .SECTION CODE, CODE, ALIGN=1 のセクションを生成します。 E4503A Invalid directive ( 命令名 ) 不正な擬似命令名です ( 命令名 ) 【プログラム処置】 この命令を無効にします。 E4504A Invalid word ( 詳細情報 ) 不正な単語です ( 詳細情報 ) 【プログラム処置】 区切り記号まで無視します。 296 CM81-00208-5, September 1, 2014 Support W1505A Soft Ma nual Name too long 名前が長すぎます 名前の文字数が 255 文字を超えています。 【プログラム処置】 超えた分の文字を無効にします。 E4506A Missing string terminator (") 文字列の終わりの (") がありません 【プログラム処置】 行終端までを文字列とします。 E4507A Expression too complex 式が複雑すぎて解析不能です 【プログラム処置】 式処理を中断します。 E4510A Value overflow ( 詳細情報 ) 値がオーバフローです ( 詳細情報 ) 32 ビットで表しきれない数が指定されています。 【プログラム処置】 下位 32 ビットのみ有効とします。 E4511A Missing string terminator (') 文字定数の終わりの (') がありません 【プログラム処置】 行終端までを文字定数とします。 September 1, 2014, CM81-00208-5 297 Su pp or t E4512A So ft Manu al Divide by zero 除数 0 の除算です 【プログラム処置】 式の値を 0 とします。 E4513A Expression too complex 式が複雑すぎて解析できません 【プログラム処置】 式処理を中断します。 E4514A Register not permitted in expression ( レジスタ名 ) 式にレジスタは指定できません ( レジスタ名 ) 【プログラム処置】 式処理を中断します。 E4515A No terms in parentheses 括弧中に項がありません 【プログラム処置】 式処理を中断します。 E4516A Illegal term in expression ( 詳細情報 ) 式に不正な項があります ( 詳細情報 ) 【プログラム処置】 式処理を中断します。 E4517A Unbalanced parentheses in expression 式の括弧の対応が合いません 【プログラム処置】 式処理を中断します。 298 CM81-00208-5, September 1, 2014 Support E4518A Soft Ma nual Cannot out this operator ( 詳細情報 ) この演算子はリロケーション情報に出ません ( 詳細情報 ) 【プログラム処置】 式の値を 0 とします。 E4519A Register list symbol not permitted in expression ( 詳細情報 ) 式にレジスタリストシンボルは指定できません ( 詳細情報 ) 【プログラム処置】 式処理を中断します。 E4520A String too long 文字列が長すぎます 文字列が 4095 文字を超えています。 【プログラム処置】 超えた分の文字を無効にします。 E4521A Structured definitions. Invalid directive 構造体定義中なので , この擬似命令は無効です。 【プログラム処置】 この擬似命令を無効にします。 E4522A Structured definitions. Invalid instruction 構造体定義中なので , 機械命令は無効です。 【プログラム処置】 この機械命令を無効にします。 September 1, 2014, CM81-00208-5 299 Su pp or t E4524A So ft Manu al Duplicate declaration ( シンボル名 ) 2 重宣言です ( シンボル名 ) .GLOBAL, .EXPORT, .IMPORT 命令で宣言されているシンボルです。 【プログラム処置】 宣言を無効にします。 E4525A Duplicate definition ( シンボル名またはセクション名 ) 2 重定義です ( シンボル名またはセクション名 ) 【プログラム処置】 このシンボル定義を無効にします。 E4526A Cannot declare ( シンボル名 ) 宣言できません ( シンボル名 ) .GLOBAL, .EXPORT, .IMPORT 命令では宣言できない種類のシンボルです。 【プログラム処置】 宣言を無効にします。 W1527A Undefined symbol : treats as an external reference symbol ( シンボル名 ) 未定義シンボルです : 外部参照シンボルとして扱います ( シンボル名 ) 【プログラム処置】 外部参照シンボルとして扱います。 E4528A Terms other than the section symbol are described in the size operator ( シン ボル名 ) サイズ演算子にセクションシンボル以外の項が記述されています ( シ ンボル名 ) 【プログラム処置】 式処理を中断します。 300 CM81-00208-5, September 1, 2014 Support E4529A Soft Ma nual External reference symbol is described in the size operator : Please make and deal with an empty section by the name ( シンボル名 ) サイズ演算子に外部参照シンボルが記述されています : その名前で空 セクションを作成して対処してください ( シンボル名 ) 【プログラム処置】 式処理を中断します。 E4530A Invalid symbol field ( 詳細情報 ) シンボルの記述方法が不正です ( 詳細情報 ) 【プログラム処置】 行終端まで無効にします。 E4531A Not an absolute expression 式が絶対式でありません 式に外部参照シンボルまたは相対シンボルが記述されています。 【プログラム処置】 この命令を無効にします。 E4532A Not complex relocatable expression 式が絶対式または単純相対式でありません 式に外部参照シンボルまたは相対シンボルが 2 個以上記述されています。 【プログラム処置】 この命令を無効にします。 E4533A Forward reference symbol is described in expression 式に前方参照シンボルが記述されています この命令の式には前方参照シンボルは記述できません。 【プログラム処置】 この命令を無効にします。 September 1, 2014, CM81-00208-5 301 Su pp or t E4534A So ft Manu al Syntax error in operand ( 詳細情報 ) オペランドの記述に誤りがあります ( 詳細情報 ) 【プログラム処置】 この命令を無効にします。 W1535A Meaningless description ( 詳細情報 ) 不要な記述です ( 詳細情報 ) 【プログラム処置】 不要な記述を無効にします。 E4536A Duplicate directive ( 詳細情報 ) 2 重指定できない擬似命令です ( 詳細情報 ) 【プログラム処置】 最初に指定された命令を有効にします。 E4537A Reserved word cannot define symbol ( 詳細情報 ) 予約語はシンボル定義できません ( 詳細情報 ) 【プログラム処置】 行終端まで無効にします。 E4538A Reserved word cannot be used as a section name ( 詳細情報 ) 予約語はセクション名として使用できません ( 詳細情報 ) 【プログラム処置】 この命令を無効にします。 302 CM81-00208-5, September 1, 2014 Support E4539A Soft Ma nual Size operator is described in expression 式にサイズ演算子が記述されています この命令の式には , サイズ演算子は記述できません。 【プログラム処置】 この命令を無効にします。 E4540A Conflicting section attribute ( パラメータ名 ) セクション属性が矛盾しています ( パラメータ名 ) 【プログラム処置】 この指定のみ無効にします。 W1541A Value out of range 値が範囲外です 【プログラム処置】 オペランドに記述された式の演算結果 ( 値 ) をオペランドサイズに合わせてマスク します ( 式については「7.11 式」を参照してください )。 アセンブラは , オブジェクトファイルを出力します。 【補足説明】 リストファイル出力指定オプション (-l) を指定していた場合 , アセンブラはリスト ファイルを出力します。 リストファイルに出力されるオペランドのコードは , 演算結果をオペランドサイズ に合わせてマスクした値になります。 本メッセージは, -OVFWオプション指定時にオペランドに記述された式の演算の結 果がそのオペランドサイズを超えた場合に出力されます。 詳細は , 「7.11.2 オペランド値の範囲」を参照してください。 September 1, 2014, CM81-00208-5 303 Su pp or t E4541A So ft Manu al Value out of range 値が範囲外です 【プログラム処置】 オペランドに記述された式の演算結果 ( 値 ) をオペランドサイズに合わせてマスク します ( 式については , 「7.11 式」を参照してください )。 アセンブラは , オブジェクトファイルを出力しません。 【補足説明】 リストファイル出力指定オプション (-l) を指定していた場合 , アセンブラはリスト ファイルを出力します。 リストファイルに出力されるオペランドのコードは , 演算結果をオペランドサイズ に合わせてマスクした値になります。 本メッセージは , -XOVFW オプション指定時にオペランドに記述された式の演算の 結果がそのオペランドサイズを超えた場合に出力されます。 E4542A Invalid keyword ( キーワード名 ) キーワード指定が不正です ( キーワード名 ) 【プログラム処置】 このキーワード指定のみ無効にします。 E4543A Invalid kind of register レジスタの種類が不正です 【プログラム処置】 この命令を無効にします。 E4544A Invalid register list ( 詳細情報 ) レジスタリスト記述が不正です ( 詳細情報 ) 【プログラム処置】 この命令を無効にします。 304 CM81-00208-5, September 1, 2014 Support W1545A Soft Ma nual Meaningless symbol field ( 詳細情報 ) シンボル部は記述不要です ( 詳細情報 ) 【プログラム処置】 シンボルフィールドの記述を無視します。 E4548A Missing keyword キーワード名が記述されていません 【プログラム処置】 この命令を無効にします。 E4550A Location counter overflow ロケーションカウンタがオーバフローしました 【プログラム処置】 そのまま処理を継続します。 W1551A Missing .END directive .END 擬似命令がありませんでした 【プログラム処置】 ファイル終端までをアセンブルの対象とします。 E4552A Invalid value 不正な値です ( 異なるセクション内のシンボル値が含まれています ) 【プログラム処置】 この命令を無効にします。 E4553A Missing (=) behind keyword ( キーワード名 ) キーワード名の後ろに (=) が記述されていません ( キーワード名 ) 【プログラム処置】 このキーワード指定のみ無効にします。 September 1, 2014, CM81-00208-5 305 Su pp or t E4554A So ft Manu al Duplicate keyword ( キーワード名 ) キーワード名が 2 重定義です ( キーワード名 ) 【プログラム処置】 最初に指定されたキーワードを有効にします。 W1555A Too long module-name モジュール名が長すぎます モジュール名が 255 文字を超えています。 【プログラム処置】 超えた分の文字を無効にします。 E4556A Missing symbol field シンボル記述がありません 【プログラム処置】 この命令を無効にします。 E4557A Starting address out of section 開始アドレスがセクション範囲外です 【プログラム処置】 開始アドレスを無効にします。 W1558A Starting address not in code section 開始アドレスのセクションがコード属性でありません 【プログラム処置】 ダミーセクションの場合のみ開始アドレスを無視します。他のセクションでは開始 アドレスはそのままセットされます。 306 CM81-00208-5, September 1, 2014 Support E4559A Soft Ma nual Conflicting Size-suffix ( 詳細情報 ) サイズ指定が矛盾しています ( 詳細情報 ) オペレーションサイズとオペランドサイズの指定が異なっています。 【プログラム処置】 オペレーションサイズを有効にします。 E4561A Floating value underflow ( 詳細情報 ) 浮動小数点定数がアンダフローです ( 詳細情報 ) 【プログラム処置】 浮動小数点定数を +0 の値にします。 E4562A Floating value overflow ( 詳細情報 ) 浮動小数点定数がオーバフローです ( 詳細情報 ) 【プログラム処置】 浮動小数点定数を指定された符号で , 値はこの精度で表すことができる最大の値に します。 E4565A Not a power of 2 2 のべき乗値でない値です。 【プログラム処置】 この指定を有効にします。 W1566A Bigger than alignment size of .SECTION directive .SECTION 命令の ALIGN 値より大きな値です。 【プログラム処置】 この指定を有効にします。 September 1, 2014, CM81-00208-5 307 Su pp or t E4567A So ft Manu al Not enough operands オペランドの数が足りません 【プログラム処置】 この命令を無効にします。 W1568A Invalid word in module name モジュール名が不正です モジュールの名前の規則に反しています。 【プログラム処置】 規則に反する文字を '_' に置き換えたモジュール名とします。 E4570A Invalid section name ( セクション名 ) セクション名が不正です ( セクション名 ) 【プログラム処置】 この命令を無効にします。 E4571A Smaller value than beginning address set with LOCATE value of .SECTION directive cannot be set .SECTION 命令の LOCATE 値で設定されている開始アドレスより小さ いアドレス値は設定できません 【プログラム処置】 この命令を無効にします。 E4572A Bigger value than boundary value set with ALIGN value of .SECTION directive cannot be set .SECTION 命令の ALIGN 値で設定されている境界値より大きな値は設 定できません 【プログラム処置】 この命令を無効にします。 308 CM81-00208-5, September 1, 2014 Support E4573A Soft Ma nual Has no statement 対応する命令がありません 【プログラム処置】 この命令を無効にします。 W1574A It cannot be guaranteed to arrange in a proper boundary. : Please set ALIGN value of .SECTION directive in 2 or more 適正な境界に配置することを保証できません :.SECTION 命令の ALIGN 値を 2 以上に設定してください。 【プログラム処置】 この命令を無効にします。 W1575A It cannot be guaranteed to arrange in a proper boundary. : Please set ALIGN value of .SECTION directive in 4 or more 適正な境界に配置することを保証できません :.SECTION 命令の ALIGN 値を 4 以上に設定してください。 【プログラム処置】 この命令を無効にします。 W1576A It cannot be guaranteed to arrange in a proper boundary. : Please set ALIGN value of .SECTION directive in 8 or more 適正な境界に配置することを保証できません :.SECTION 命令の ALIGN 値を 8 以上に設定してください。 【プログラム処置】 この命令を無効にします。 E4600A Invalid operation mnemonic ( 命令名 ) 不正な命令ニーモニック名です ( 命令名 ) 【プログラム処置】 この命令を無効にして , NOP 命令を 1 個生成します。 September 1, 2014, CM81-00208-5 309 Su pp or t E4605A So ft Manu al Invalid Operation-suffix 命令オプションは指定できません 【プログラム処置】 以降のオペレーションフィールドを無視します。 E4606A Invalid Option-suffix in operation field ( 詳細情報 ) 不正な命令オプションです ( 詳細情報 ) 【プログラム処置】 この指定のみを無視します。 W1608A Conflicting Option-suffix in operation field ( 詳細情報 ) 命令オプションの指定に矛盾があります ( 詳細情報 ) 【プログラム処置】 最初に指定された命令オプションを有効にします。 E4616A Not enough operands オペランドの数が足りません 【プログラム処置】 この命令を無視して , NOP 命令を 1 個生成します。 E4617A Too many operands ( 詳細情報 ) オペランドの数が多すぎます ( 詳細情報 ) 【プログラム処置】 多い分のオペランドを無効にします。 E4619A Unbalanced parentheses (in operand ( 番号 )) 括弧の対応がとれていません (in operand ( 番号 )) 【プログラム処置】 この命令を無視して , NOP 命令を 1 個生成します。 310 CM81-00208-5, September 1, 2014 Support E4622A Soft Ma nual Format-suffix not permitted ( 詳細情報 ) 許されていないフォーマット指定です ( 詳細情報 ) 【プログラム処置】 フォーマット指定を無効にします。 E4625A Invalid Size-suffix ( 文字列 ) サイズ指定が不正です ( 文字列 ) 【プログラム処置】 この指定を無効にします。 E4626A Size-suffix not permitted 許されていないサイズ指定です 【プログラム処置】 サイズ指定を無効にします。 E4629A Syntax error ( オペランド番号 , 詳細情報 ) 構文に誤りがあります ( オペランド番号 , 詳細情報 ) 【プログラム処置】 この命令を無効にして , NOP 命令を 1 個生成します。 E4639A Addressing mode not permitted (in operand ( 番号 )) 許されていないアドレッシングモードです (in operand ( 番号 )) 【プログラム処置】 この命令を無効にして , NOP 命令を 1 個生成します。 E4651A Floating point data too short (in operand ( 番号 )) 浮動小数点定数が短すぎる (in operand ( 番号 )) 【プログラム処置】 足りないデータ数を 0 で補います。 September 1, 2014, CM81-00208-5 311 Su pp or t E4652A So ft Manu al Floating point data too long (in operand ( 番号 )) 浮動小数点定数が長すぎる (in operand ( 番号 )) 【プログラム処置】 余分なデータを無視します。 E4654A Illegal instruction start address ( 詳細情報 ) 命令先頭アドレスが不正です ( 詳細情報 ) 命令先頭のアドレスが奇数番地です。 【プログラム処置】 命令先頭のアドレスを偶数番地に配置します。 【特記事項】 命令の先頭を偶数番地に配置してください。 E4656A Nothing operand ( 詳細情報 ) オペランドの記述がありません ( 詳細情報 ) 【プログラム処置】 この命令を無効にして , NOP 命令を 1 個生成します。 E4698A Number of include files exceeds 32766 インクルードファイル数が 32766 個を超えました 【プログラム処置】 アセンブル処理を中断します。 E4699A Source-line exceeds 65535 lines ソース行数が 65535 行を越えました 【プログラム処置】 ソース行数を 0 に戻してそのまま処理を続けます。オブジェクトは生成されません。 312 CM81-00208-5, September 1, 2014 Support W1701A Soft Ma nual Cannot optimize for insufficient memory メモリ不足のため最適化ができません 【プログラム処置】 分岐命令の最適化は行いません。 E4703A Cannot put machine-code 遅延スロットにこの命令はおけません 【プログラム処置】 そのまま処理を続行します。 W1704A It is possible to optimize. : The back and forth instruction is replaced. 最適化できます : 前後の命令を入れ替えます 【プログラム処置】 前後の命令を入れ替えます。 W1705A It is possible to optimize. : Changes to another instruction. 最適化できます : 別の命令に変更します 【プログラム処置】 別の命令に変更します。 W1706A It is possible to optimize. : The instruction is deleted. 最適化できます : 命令を削除します 【プログラム処置】 命令を削除します。 W1707A It is possible to optimize. : The instruction is newly generated. 最適化できます : 命令を新たに生成します 【プログラム処置】 命令を新たに生成します。 September 1, 2014, CM81-00208-5 313 Su pp or t W1710A So ft Manu al Instruction is written after .END .END 命令以降に記述があります 【プログラム処置】 .END 命令以降の記述を無視します。 W1711A Location address backed by .ORG .ORG 命令でアドレスが戻っています 【プログラム処置】 指定されたアドレスで処理を続けます。 W1712A This structure field cannot initialized ストラクチャのこのフィールドは初期化できません 【プログラム処置】 この記述を無視します。 W1713A Too many initialize data ストラクチャの初期化データが多く与えられました 【プログラム処置】 この記述を無視します。 W1714A Section type error 命令の持つアドレスの属性と異なった属性のシンボルを指定していま す 【プログラム処置】 シンボルの属性を無視して命令を生成します。 314 CM81-00208-5, September 1, 2014 Support E4715A Soft Ma nual Section type error 命令の持つアドレスの属性と異なった属性のシンボルを指定していま す 【プログラム処置】 この記述を無視します。 E4716A .ENDS expected .ENDS 命令がありません 【プログラム処置】 アセンブラは異常終了します。 W1717A Mismatch .ENDS .ENDS 命令と .STRUCT 命令の対応がとれていません 【プログラム処置】 この記述を無視します。 E4750A Terms other than the bit symbol are described in the bit operator ビット演算子にビットシンボル以外の項が記述されています 【プログラム処置】 この記述を無視します。 E4756A Invalid address modifier アドレス規定子を指定した命令に , 該当する命令がありません 【プログラム処置】 この記述を無視します。 E4758A Input to @A can not be written in this expression 複数への代入の一括記述式で @A への代入を行っています 【プログラム処置】 この記述を無視します。 September 1, 2014, CM81-00208-5 315 Su pp or t E4759A So ft Manu al @EP and EP or @IX and IX exist in this expression 複数への代入の一括記述で , レジスタ (EP, IX) への代入が , レジスタ間 接 ( @ EP, @ IX) への代入よりも先に行われています。 【プログラム処置】 この記述を無視します。 W1800A Not 2 bytes attribute 値が 2 バイト境界でありません 【プログラム処置】 値の下位 1 ビットを 0 にします。 W1801A Not 4 bytes attribute 値が 4 バイト境界でありません 【プログラム処置】 値の下位 2 ビットを 0 にします。 E4802A Invalid register このレジスタは指定できません 【プログラム処置】 この命令を無効にして , NOP 命令を 1 個生成します。 E4803A Fixed point of double precision is not supported 倍精度の固定小数点定数はサポートしていません 【プログラム処置】 この命令を無効にして , NOP 命令を 1 個生成します。 316 CM81-00208-5, September 1, 2014 Support W1806A Soft Ma nual DIVU is detected DIVU 命令が検出されました 【プログラム処置】 そのまま処理を続行します。 【補足説明】 F2MC-8FX ファミリは DIVU 命令の動作が従来の F2MC-8L ファミリと異なるため F2MC-8L ファミリ用アセンブラソースを F2MC-8FX ファミリ用に流用する場合 , DIVU 命令が使用されている箇所について問題がないか確認する必要があります。 本メッセージは , -div_check オプション指定時にアセンブラソース中に DIVU 命令 が検出された場合に出力されます。 本メッセージの出力が不要な場合は , -Xdiv_check オプションを指定してください。 -div_check オプションの詳細は , 「4.7.2 -div_check, -Xdiv_check」を参照してくださ い。 F9860A CPU information not found (CPU 名 ) CPU 情報がみつかりません (CPU 名 ) 【プログラム処置】 アセンブル処理を中止します。 【特記事項】 -cpu オプションで指定された CPU の情報が , CPU 情報ファイルに登録されていな い場合に発生します。 -cpu オプションにて指定された CPU の MB 番号を , 今一度ご確認ください。 この指定に誤りが無ければ , 営業部門へご連絡ください。 F9861A Mismatch CPU information file version CPU 情報ファイルのバージョンが適合しません 【プログラム処置】 アセンブル処理を中止します。 【特記事項】 読込んだ CPU 情報ファイルのバージョンが古く , 本アセンブラの必要とする情報を 含んでいない場合に発生します。 アセンブラパックを再インストールしてください。 September 1, 2014, CM81-00208-5 317 Su pp or t F9901A So ft Manu al Insufficient memory ( エラー ID) メモリが足りません ( エラー ID) 【プログラム処置】 アセンブラは異常終了します。 【特記事項】 メモリを増設していただきますよう , お願いいたします。 F9902A Internal error ( エラー ID) 内部エラー発生 ! ( エラー ID) アセンブラの内部処理の矛盾によるエラーです。 【プログラム処置】 アセンブラは異常終了します。 【特記事項】 エラー ID のメモを取り , 開発元に連絡してください。 F9903A File Write Error ( ファイル種別 ) ファイルの書き込みエラーです ( ファイル種別 ) 【プログラム処置】 アセンブラは異常終了します。 【特記事項】 ディスクの容量不足 , または , 書込み禁止のファイルです。これらの事項について 確認してください。 F9904A File read error ( ファイル種別 ) ファイルの読込みエラーです ( ファイル種別 ) ソースファイル , 作業ファイルのうち , 読込みができなくなったファイルがありま す。 【プログラム処置】 アセンブラは異常終了します。 【特記事項】 アセンブル途中に , ソースファイルまたはワークファイルが強制的に削除されな かったかどうか確認してください。 318 CM81-00208-5, September 1, 2014 Support F9905A Soft Ma nual Cannot open message file メッセージファイルがオープンできません 【プログラム処置】 アセンブラは異常終了します。 【特記事項】 環境変数を設定するか , メッセージファイルがあるか確認してください。 F9907A Structured nest level overflow 構造化制御のネストレベルが制限値を超えました 【プログラム処置】 アセンブラは異常終了します。 F9951A Source filename not specified ソースファイル名の指定がありません 【プログラム処置】 アセンブラは異常終了します。 F9952A Cannot open file ( ファイル名 ) ファイルがオープンできません ( ファイル名 ) 【プログラム処置】 アセンブラは異常終了します。 F9953A Invalid option name ( オプション名 ) オプション名に誤りがあります ( オプション名 ) 【プログラム処置】 アセンブラは異常終了します。 September 1, 2014, CM81-00208-5 319 Su pp or t F9954A So ft Manu al Invalid value ( オプション名 ) 値が不正です ( オプション名 ) 【プログラム処置】 アセンブラは異常終了します。 F9955A Invalid sub-option name ( オプション名 ) サブオプション名に誤りがあります ( オプション名 ) 【プログラム処置】 アセンブラは異常終了します。 F9956A Invalid option description ( オプション名 ) オプションの指定形式に誤りがあります ( オプション名 ) 【プログラム処置】 アセンブラは異常終了します。 F9959A Nested option file exceeds 8 ( 詳細情報 ) オプションファイルのネストは 8 までです ( 詳細情報 ) 【プログラム処置】 アセンブラは異常終了します。 F9960A Too many file ソースファイルの指定が多すぎます 複数のファイルはアセンブルできません。 【プログラム処置】 アセンブラは異常終了します。 320 CM81-00208-5, September 1, 2014 Support F9961A Soft Ma nual -cpu option not specified -cpu オプションの指定がありません 【プログラム処置】 アセンブラは異常終了します。 September 1, 2014, CM81-00208-5 321 Su pp or t 付録 B So ft Manu al 制限事項 アセンブラを使用するときの制限事項を示します。 ■ プリプロセッサ処理の制限 • インクルードファイルのネストレベルは最大 8 レベルです。 • 1 つのマクロボディの大きさは最大 64512 バイトです。 • マクロコールのネストレベルは最大 256 レベルです。 • マクロ定義で定義可能な仮引数の数は最大 32767 個です。 • 登録可能なマクロ名の数は無限です ( 使用可能メモリ領域に依存 )。 • 構造化制御構文のネストレベルは最大 40 レベルです。 • 構造化制御構文の複合条件式内の条件式は最大 8 個です。 • 構造化命令の複数への代入の一括記述の代入先は最大 8 個です。 ■ アセンブル処理の制限 • アセンブル可能なソースファイルの行数は最大 65535 行です。 • 登録可能なシンボルの数は無限です ( 使用可能メモリ領域に依存 )。 • 1 行に記述可能な文字数は , 継続行も含めて最大 4095 文字です。 • .DATAB 命令 , .FDATAB 命令の式 1 の値は最大 1048575 です。 ■ オプションファイルの制限 • オプションファイルの 1 行に記述可能な文字数は , 最大 4095 文字です。 • オプションファイルのネストレベルは最大 8 レベルです。 ■ その他の制限 • ソースファイルの主ファイル名の文字数は , 最大 248 文字です。 • モジュール名に 2 バイト文字は使用できません。 322 CM81-00208-5, September 1, 2014 Support 付録 C Soft Ma nual 拡張ダイレクトアクセス領域バンク番号の取得方法 F2MC-8FX ファミリで利用可能な拡張ダイレクトアクセス領域のバンク番号の取得 方法について説明します。 ■ 拡張ダイレクトアクセス領域バンク番号の取得方法 拡張ダイレクトアクセス領域に定義されたシンボルから , 拡張ダイレクトアクセス領 域バンク番号を取得するためには , 以下のヘッダファイルで定義されているマクロを 使用してください。 • ヘッダファイル : %FETOOL%\LIB\896\INCLUDE\extdir.inc • マクロ名 : EDIRBANK() 【使用例】 #include <extdir.inc > : .IMPORT DIR0_a : .SECTION CODE, CODE, ALIGN=1 SETDB #EDIRBANK(DIR0_a) MOV A, X:DIR0_a : September 1, 2014, CM81-00208-5 323 Su pp or t 付録 D So ft Manu al SOFTUNE アセンブラと旧版アセンブラの仕様の差異 SOFTUNE アセンブラ (FASM896S) と旧版アセンブラ (ASM96) の仕様の差異につい て説明します。 D.1 アセンブラ言語の基本規則 D.2 式処理 D.3 擬似命令 D.4 マクロ処理 D.5 構造化制御命令 D.6 機械命令 D.7 コマンド行の差異 D.8 環境変数 D.9 オプション D.10 制限事項の緩和 324 CM81-00208-5, September 1, 2014 Support D.1 Soft Ma nual アセンブラ言語の基本規則 FASM896S と ASM96 のソース行シンタックスの差異について説明します。 ■ 文の形式 アセンブラの 1 行は , 以下の形式で構成されます。 • 各フィールドは不要な場合 , 記述を省略できます。 • 各フィールドの区切りには , 1 文字以上の空白 , またはタブを記述します。 • コメントフィールド , 継続指示フィールドに差異があります。 【FASM896S の記述】 シンボル フィールド オペレーション フィールド オペランド フィールド コメント フィールド 継続指示 フィールド 1 行の長さは最大 4095 文字 【ASM96 の記述】 シンボル フィールド オペレーション フィールド オペランド フィールド コメント フィールド 1 行の長さは最大 127 文字 ■ コメントフィールド FASM896S ASM96 セミコロン (;), または 2 個のスラッシュ (//) でコメントが始まり , その行の終端ま でをコメントとします。 セミコロン (;) でコメントが始まり , その 行の終端までをコメントとします。 C 言語風に /* */ で囲ったコメントの記述 も可能です。 ■ 継続指示フィールド FASM896S 改行の直前にバックスラッシュ (\) を記 述することにより , 行の内容を継続でき ます。 September 1, 2014, CM81-00208-5 ASM96 継続行の記述はできません。 325 Su pp or t So ft Manu al ■ 文字セット ソース記述時に使用できる文字を以下に示します。 このほかに , コメント部には漢字コードを含むすべての文字が記述可能です。 種別 文字 英文字 ( 大文字 ) A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z 英文字 ( 小文字 ) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, y, v, w, x, y, z 数字 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 特殊文字 + - * / ( ) ; : ' " , _ . @ # $ ! % & < > = | \ 空白タブ また , 特殊文字として "~" および "^" は , FASM896S では使用できますが , ASM96 では 使用できません。 ■ 名前 ( シンボル , ラベル ) 名前を定義 / 記述する場合 , 以下の定義に従います。 FASM896S 名前の規則 英字 , またはアンダバー(_) から記述を開始し , 以降は英 字 , 数字 , アンダバーを使用して定義します。 最大文字列長 大文字 / 小文字の区別 ASM96 255 文字 区別する 31 文字 オプション指定により選 択可能 ■ ロケーションカウンタシンボルの記述 使用する文字 326 FASM896S ASM96 $ * CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ 整数定数の記述方法 FASM896S ASM96 2 進数の記述 B' nnnnnnn 0nnnnnnnB 0Bnnnnnnn B' nnnnnnn 0nnnnnnnB 8 進数の記述 Q' nnnnnnn nnnnnnnQ 0nnnnnnn Q' nnnnnnn nnnnnnnQ 10 進数の記述 D' nnnnnnn nnnnnnnD nnnnnnn D' nnnnnnn nnnnnnnD nnnnnnn 16 進数の記述 H' nnnnnnn nnnnnnnH 0xnnnnnnn H' nnnnnnn nnnnnnnH FASM896S ASM96 シングルクォートで 文字を括る ダブルクォートで 文字を括る 最大文字長 4 2 制御コードの記述 可 不可 拡張表記 \ 記号に続けて記述すること により , 特殊文字を指定でき ます。 ダブルクォートを記述する 場合は , 同じ文字を 2 個連続 して記述します。 その他 C 言語風の制御文字を指定で きます (\n, \t, etc.) 。 数値情報は記述できません。 ■ 文字定数 記述方法 September 1, 2014, CM81-00208-5 327 Su pp or t So ft Manu al ■ 文字列定数 FASM896S 記述方法 ASM96 ダブルクォートで文字を括る 制御コードの記述 可 不可 拡張表記 \ 記号に続けて記述すること により , 特殊文字を指定でき ます。 ダブルクォートを記述する 場合は , 同じ文字を 2 個連続 して記述します。 その他 C 言語風の制御文字を指定で きます (\n, \t, etc.) 。 数値情報は記述できません。 FASM896S ASM96 ■ 浮動小数点数 記述形式 記述例 328 [0r][+|-]{.d|d[.[d]]}[e[[+|-]d]] [F' ][+|-]{.d|d[.[d]]}[e[[+|-]d]] H' h d は 10 進数 0xh h は 16 進数 記述不可 0r-1.34e-20 F' -2.5 -1.2e10 CM81-00208-5, September 1, 2014 Support D.2 Soft Ma nual 式処理 式に使用する演算子の種類および優先順位の差異について説明します。 ■ 演算子一覧 機能 FASM896S 優先順位の変更 ASM96 () 論理地の否定 ! ビット反転 ~ NOT 単項 + + 単項 - - ビットアドレス抽出 bitadr % ビットポジション抽出 bitpos ! セクションサイズ抽出 sizeof Segsize 乗算 * 除算 / 剰余算 % 加算 + 減算 - 左シフト << SHL 右シフト >> SHR 未満 ( 比較 ) < LT 以下 ( 比較 ) <= LE 大きい ( 比較 ) > GT 以上 ( 比較 ) >= GE 等しい ( 比較 ) == EQ 不一致 ( 比較 ) != NE ビット AND & AND ビット XOR ^ XOR ビット OR | OR 論理 AND && 論理 OR September 1, 2014, CM81-00208-5 || 329 Su pp or t So ft Manu al ■ 演算子の優先順位の差異 機能 優先順位の変更 FASM896S ASM96 1 1 論理値の否定 2 ビット反転 単項 + 単項 - 2 ビットアドレス抽出 2 ビットポジション抽出 セクションサイズ抽出 乗算 除算 3 3 4 4 5 5 6 6 7 7 ビット AND 8 8 ビット XOR 9 9 ビット OR 10 10 論理 AND 11 論理 OR 12 剰余算 加算 減算 左シフト 右シフト 未満 ( 比較 ) 以下 ( 比較 ) 大きい ( 比較 ) 以上 ( 比較 ) 等しい ( 比較 ) 不一致 ( 比較 ) 330 CM81-00208-5, September 1, 2014 Support Soft Ma nual ■ 注意事項 機能 演算精度 符号 型付データのサポート September 1, 2014, CM81-00208-5 FASM896S ASM96 32ビット長, 指定により符 号あり / なしで演算する。 16 ビット長 , 符号なし。 符合あり / なし 符号なし あり なし 331 Su pp or t D.3 So ft Manu al 擬似命令 擬似命令の差異について説明します。 ■ 擬似命令の差異一覧 表 D.3-1 擬似命令の差異一覧 (1 / 2) 機能 FASM896S ASM96 .PROGRAM NAME .END END 外部参照シンボル宣言 .IMPORT EXTRN/EXTERN 外部定義シンボル宣言 .EXPORT PUBLIC .SECTION CODE *1 CSEG I/O 関連領域定義 .SECTION DIR *1 DIRSEG データ領域定義 .SECTION DATA *1 DSEG .SECTION STACK *1 SSEG 記述不要 ENDS ビット単位データ定義 .DATA.I DBIT バイト単位データ定義 .DATA.B or .SDATA *2 DB 2 バイト単位データ定義 .DATA.H DW 4 バイト単位データ定義 .DATA.L - ビット単位領域確保 .RES.I - バイト単位領域確保 .RES.B RBIT 2 バイト単位領域確保 .RES.H RB 4 バイト単位領域確保 .RES.L RW 単精度浮動小数データ定義 .FDATA.S - 倍精度浮動小数データ定義 .FDATA.D - 単精度浮動小数領域確保 .FRES.S - 倍精度浮動小数領域確保 .FRES.D - .STRUCT ~ .ENDS STRUC ~ ENDS シンボル定義 .EQU EQU シンボル定義 - SET オブジェクト名の設定 ソース記述終了宣言 命令領域定義 スタック領域定義 領域定義終了 構造体宣言 332 CM81-00208-5, September 1, 2014 Support Soft Ma nual 表 D.3-1 擬似命令の差異一覧 (2 / 2) 機能 FASM896S ASM96 .ALIGN - ロケーション調整 .ORG ORG リスト書式制御 .LIST LIST リスト出力抑止 .LIST LISTOFF リスト出力指定 .LIST LILSTON リスト改ページ指定 .PAGE PAGE リストタイトル指定 .HEADING TITLE - SUBTTL 境界整合 サブタイトル指定 *1 : 付加する属性 (ABS, WORD, COMMON, など ) により実際の対応関係は変化します。 *2 : 文字列データ定義か数値データ定義かによって , どちらかを選択します。 ■ セクション ( セグメント ) の定義 FASM896S のセクション定義は , 「10.2.3 .SECTION 命令」に記述されている規則にし たがって行います。 FASM896S と ASM96 のセクション定義の対応の詳細は以下のようになります。 機能 FASM896S ASM96 コード部 定義 .SECTION セクション名 , CODE, ALIGN=1 セクション名 CSEG .SECTION セクション名 , CODE, LOCATE=0 セクション名 CSEG ABS データ部 定義 .SECTION セクション名 , DATA, ALIGN=1 セクション名 DSEG .SECTION セクション名 , DATA, LOCATE=0 セクション名 DSEG ABS .SECTION セクション名 , DATA, ALIGN=1 セクション名 DSEG BYTE .SECTION セクション名 , CONST, ALIGN=1 セクション名 DSEG ROM .SECTION セクション名 , COMMON, ALIGN=1 セクション名 DSEG COMMON .SECTION セクション名 , DIR, ALIGN=1 セクション名 DIRSEG .SECTION セクション名 , DIR, LOCATE=0 セクション名 DIRSEG ABS .SECTION セクション名 , DIR, ALIGN=1 セクション名 DIRSEG BYTE .SECTION セクション名 , DIRCOMMON, ALIGN=1 セクション名 DIRSEG COMMON DIR部定義 スタック 領域定義 .SECTION セクション名 , STACK, ALIGN=1 SSEG <注意事項> ASM96 では , セクション名の記述を省略できます。 September 1, 2014, CM81-00208-5 333 Su pp or t So ft Manu al ■ 文字列データ定義 FASM896S 334 ASM96 .SDATA "ABS\n" DB "ABC", H' 0d, H' 0a .DATA.B D' 00, D' 05 .SDATA "ABCDE" .DATA.B D' 00 DB D' 00, D' 05, "ABCDE", ' 00 CM81-00208-5, September 1, 2014 Support D.4 Soft Ma nual マクロ処理 マクロ命令の差異について説明します。 ■ マクロ名の差異 機能 FASM896S ASM96 マクロ定義開始 #MACRO &MACRO ローカルシンボル設定 #LOCAL &LOCAL マクロシンボル設定 #SET &SET マクロシンボル解放 #PURGE &PURGE 繰返しマクロ定義 #REPEAT &REPEAT #IF &IF 条件マクロ 真 &THEN 偽 #ELSE &ELSE 条件マクロ終了 #ENDIF &ENDIF マクロ定義終了 #ENDM &ENDM #INCLUDE &INCLUDE ファイルの読込み September 1, 2014, CM81-00208-5 335 Su pp or t D.5 So ft Manu al 構造化制御命令 構造化制御命令の差異について説明します。 ■ 構造化制御命令 FASM896S と ASM96 で使用できる構造化制御命令は同じです。 条件式に記述するコンディションコード条件式の記述方法も同じです。 条件式に記述する比較条件式は以下の差異があります。 ASM96 符号あり 336 FASM896S 符号なし 符号あり 符号なし 等しい == Z(EQ) 等しくない != NZ(NE) より小さい < <.U LT LO 以下 <= <=.U LE LS より大きい > >.U GT HI 以上 >= >=.U GE CM81-00208-5, September 1, 2014 Support D.6 Soft Ma nual 機械命令 機械命令の記述方法は , ハードウェアマニュアルによって規定されるため , オペラン ド部の記述方法以外の変更はありません。 ■ 機械命令 機械命令の記述方法は , ハードウェアマニュアルによって規定されるため , オペランド 部の記述方法以外の変更はありません。 オペランド部の記述の際については ,「D.1 アセンブラ言語の基本規則」を参照してく ださい。 September 1, 2014, CM81-00208-5 337 Su pp or t D.7 So ft Manu al コマンド行の差異 コマンド行の差異について説明します。 ■ 起動形式 FASM896S ASM96 fasm896s [ オプション ]…[ ファイル名 ] asm96 ファイル名 [ オプション ]… asm96 @ オプションファイル ■ オプション指定 機能 オプション指定の位置 オプションファイルの指定 オプションファイルの複数指定 338 FASM896S ASM96 どの位置でも可能 ファイル名指定の後 -f オプションファイル @ オプションファイル 可 不可 CM81-00208-5, September 1, 2014 Support D.8 Soft Ma nual 環境変数 環境変数の差異について説明します。 ■ 環境変数 FASM896S ASM96 TMP TMP インクルードファイル 検索パス指定 INC896 INC96 インストールパス指定 FETOOL - 表示文字コード指定 FELANG - デフォルトオプションファイル 格納パス指定 OPT896 - 作業用ディレクトリ指定 September 1, 2014, CM81-00208-5 339 Su pp or t D.9 So ft Manu al オプション オプションの差異について説明します。 ■ オプション 表 D.9-1 オプション (1 / 2) FASM896S ASM96 -o O -Xo NO -g/-Xg DEB, DBG, LO, HI/ NDB 環境変数指定 WD pathname 常に区別 CP/NCP -W[0-3] - -name module - リストファイル出力 -l/-Xl -lf filename L [filename] リストの 1 頁の行数 -pl [0|20-255] PL [40-128] リストの 1 行の文字数 -pw [80-255] PW [80-136] -pl 0 - インフォメーションリスト出力 -linf [on|off] - ソースリスト出力 -lsrc [on|off] - セクションリスト出力 -lsec [on|off] - クロスリファレンスリスト出力 -lcros [on|off] XR/NXR インクルードファイルリスト出力制御 -linc [on|off] ICL/NCL マクロ if 文のリスト制御 - CD/NCD マクロ定義部のリスト制御 - DEF/NDEF マクロコール・構造化制御命令行のリスト制御 - CL/NCL 構造化制御命令の展開部のリスト制御 - STR/NSTR -lexp [on|off] EXP/NEXP -p - -P/Pf filename - オブジェクトファイル名指定 オブジェクトファイル出力抑止 デバッグ情報出力 作業ディレクトリ指定 大文字小文字の区別指定 警告メッセージ出力レベル指定 モジュール名指定 リストの改ページ処理抑止 マクロ展開部のリスト出力制御 プリプロセッサ抑止 プリプロセッサのみ起動 340 CM81-00208-5, September 1, 2014 Support Soft Ma nual 表 D.9-1 オプション (2 / 2) FASM896S ASM96 -D name[=def] - -U name - インクルードパス表示 -H - プリプロセッサ出力へのコメント出力 -C - エラー情報ファイルの出力 / 抑止 - -[NO]EP ステータスコードのファイル出力 - -RC ヘルプの表示 -help - ターゲット CPU の指定 -cpu - -Xdof - -V/-XV - マクロ名指定 未定義マクロシンボルへの値付け デフォルトオプションファイル入力抑止 起動メッセージの表示 / 非表示 September 1, 2014, CM81-00208-5 341 Su pp or t So ft Manu al D.10 制限事項の緩和 制限事項 ( 処理限界 ) の差異について説明します。 ■ 制限事項 FASM896S ASM96 1 行文字数 4095 文字 128 文字 ソースファイル行数 65535 文字 32000 行 シンボル数 無制限 32000 個 名前の長さ 255 文字 31 文字 無制限 マクロ定義数は 512 個 ローカルシンボル数は 256 個 256 レベル 8 レベル 登録可能マクロ名数 マクロのネスト 342 CM81-00208-5, September 1, 2014 Support 付録 E Soft Ma nual 主な変更内容 ページ 場所 変更箇所 Revision 4.1 - - 社名変更および記述フォーマットの変換 Revision 5.0 114 7.8 文字列 ■ 文字列 例の社名部分を削除 228 11.8 マクロ名の置換処理 ■ マクロ置換の規則 例の社名部分を変更 317 付録 A エラーメッセージ 一覧 エラーコード : F9860A September 1, 2014, CM81-00208-5 【特記事項】の社名部分を変更 343 Su pp or t 344 So ft Manu al CM81-00208-5, September 1, 2014 Support Soft Ma nual 索引 Symbols ## 演算子 マクロ置換の文字の連結 (## 演算子 ) ...............233 #define 命令 引数付き #define 命令 ...........................................230 引数なし #define 命令 ...........................................230 #elif 命令 #elif 命令 ................................................................225 #else 命令 #else 命令 ...............................................................224 #endif 命令 #endif 命令 .............................................................227 #endm 命令 #endm 命令 .............................................................216 #error 命令 #error 命令 ..............................................................240 #exitm 命令 #exitm 命令 .............................................................215 #exitm 命令の規則 .................................................215 #ifdef 命令 #ifdef 命令 ..............................................................222 #ifndef 命令 #ifndef 命令 ............................................................223 #if 命令 #if 命令 ...................................................................221 #include 命令 #include 命令 ..........................................................237 #line 命令 #line 命令 ................................................................239 #local 命令 #local 命令 ..............................................................213 #local 命令の規則 ..................................................213 #macro 命令 #macro 命令 ............................................................212 #macro 命令の規則 ................................................212 #pragma 命令 #pragma 命令 ..........................................................241 #purge 命令 #purge 命令 .............................................................236 #repeat 命令 #repeat 命令 ............................................................219 #repeat 命令の規則 ................................................219 #set 命令 #set 命令 .................................................................234 #undef 命令 #undef 命令 .............................................................235 # 演算子 マクロ仮引数の文字列化 (# 演算子 ) .................232 .ALIGN .ALIGN .....................................................................86 .ALIGN 命令 .ALIGN 命令 ..........................................................159 .ASCII .ASCII .......................................................................93 .ASCII 命令 .ASCII 命令 ............................................................177 September 1, 2014, CM81-00208-5 .BIT .BIT ........................................................................... 89 .BIT 命令 .BIT 命令 ................................................................ 169 .break 命令 .break 命令 .............................................................. 272 .BYTE .BYTE ....................................................................... 89 .BYTE 命令 .BYTE 命令 ............................................................ 170 .continue 命令 .continue 命令 .........................................................273 .DATA .DATA ......................................................................89 .DATAB .DATAB .................................................................... 90 .DATAB 命令 .DATAB 命令 .........................................................171 .DATA 命令 .DATA 命令 ...........................................................169 .DEBUG .DEBUG .................................................................... 94 .DEBUG 命令 .DEBUG 命令 .........................................................181 .DOUBLE .DOUBLE .................................................................91 .DOUBLE 命令 .DOUBLE 命令 ......................................................173 .END .END ......................................................................... 84 .ENDS 命令 .STRUCT 命令 ,.ENDS 命令 ................................. 179 .END 命令 .END 命令 .............................................................. 155 .EQU .EQU ......................................................................... 88 .EQU 命令 .EQU 命令 .............................................................. 167 .EXPORT .EXPORT .................................................................. 87 .EXPORT 命令 .EXPORT 命令 ....................................................... 163 .FDATA .FDATA .................................................................... 91 .FDATAB .FDATAB .................................................................91 .FDATAB 命令 .FDATAB 命令 ......................................................174 .FDATA 命令 .FDATA 命令 .........................................................172 .FLOAT .FLOAT ..................................................................... 91 .FLOAT 命令 .FLOAT 命令 .......................................................... 172 .FORM .FORM ......................................................................96 345 Su pp or t .FORM 命令 .FORM 命令 ...........................................................185 .FRES .FRES ........................................................................92 .FRES 命令 .FRES 命令 .............................................................176 .GLOBAL .GLOBAL .................................................................87 .GLOBAL 命令 .GLOBAL 命令 ......................................................164 .HALF .HALF .......................................................................89 .HALF 命令 .HALF 命令 ............................................................170 .HEADING .HEADING ...............................................................97 .HEADING 命令 .HEADING 命令 ....................................................187 .IMPORT .IMPORT ...................................................................87 .IMPORT 命令 .IMPORT 命令 ........................................................165 .LIBRARY .LIBRARY ................................................................95 .LIBRARY 命令 .LIBRARY 命令 .....................................................183 .LIST .LIST .........................................................................97 .LIST 命令 .LIST 命令 ..............................................................188 .LONG .LONG .......................................................................90 .LONG 命令 .LONG 命令 ............................................................170 .ORG .ORG .........................................................................86 .ORG 命令 .ORG 命令 ..............................................................160 .PAGE .PAGE .......................................................................97 .PAGE 命令 .PAGE 命令 ............................................................190 .PROGRAM .PROGRAM ..............................................................84 .PROGRAM 命令 .PROGRAM 命令 ...................................................154 .RES .RES ..........................................................................92 .RES 命令 .RES 命令 ...............................................................175 .SDATA .SDATA ....................................................................93 .SDATAB .SDATAB ..................................................................93 .SDATAB 命令 .SDATAB 命令 .......................................................178 .SDATA 命令 .SDATA 命令 .........................................................177 .SECTION .SECTION .................................................................85 .SECTION 命令 .SECTION 命令 ......................................................156 346 So ft Manu al .SKIP .SKIP ......................................................................... 86 .SKIP 命令 .SKIP 命令 .............................................................. 161 .SPACE .SPACE ..................................................................... 98 .SPACE 命令 .SPACE 命令 .......................................................... 191 .STRUCT 命令 .STRUCT 命令 ,.ENDS 命令 ................................. 179 .TITLE .TITLE ......................................................................96 .TITLE 命令 .TITLE 命令 ...........................................................186 .WORD .WORD ..................................................................... 90 .WORD 命令 .WORD 命令 .......................................................... 170 CM81-00208-5, September 1, 2014 Support Soft Ma nual Numerics B 10 進定数 10 進定数 ................................................................110 16 進定数 16 進定数 ................................................................110 2 処理選択構文 2 処理選択構文 ......................................................265 2 進定数 2 進定数 ..................................................................110 8 進定数 8 進定数 ..................................................................110 BITADR 演算子 ビットシンボルアドレス演算子 (BITADR 演算子 ) ...........................................128 BITPOS 演算子 ビットポジション番号演算子 (BITPOS 演算子 ) ..........................................................................128 C -C -C .............................................................................. 48 -cif -cif ............................................................................. 68 -cmsg -cmsg ......................................................................... 59 -cpu -cpu ........................................................................... 62 -cwno -cwno ........................................................................60 C 言語プリプロセッサ C 言語プリプロセッサとの違い .........................245 D -D -D .............................................................................. 45 defined マクロ名 defined マクロ名 ................................................... 244 F -f -f ................................................................................ 55 fasm896s fasm896s コマンド行 .............................................. 18 FELANG FELANG ................................................................... 11 FETOOL FETOOL ................................................................... 10 G -g -g ...............................................................................34 H -H -H .............................................................................. 47 -help -help ..........................................................................61 I -I -I ................................................................................ 46 INC896 INC896 ......................................................................13 September 1, 2014, CM81-00208-5 347 Su pp or t K S -kanji -kanji .........................................................................63 -sa L -l -l ................................................................................36 -LBA -LBA .........................................................................64 -lcros -lcros ..........................................................................39 -lexp -lexp ..........................................................................40 -lf -lf ...............................................................................36 -linc -linc ...........................................................................40 -linf -linf ............................................................................38 -lsec -lsec ...........................................................................39 -lsrc -lsrc ............................................................................38 So ft Manu al -sa .............................................................................. 50 SIZEOF 演算子 セクションサイズ抽出 (SIZEOF 演算子 ) ......... 129 SOFTUNE 概要 (SOFTUNE アセンブラ ) ................................. 4 T -tab -tab ............................................................................41 TMP TMP ..........................................................................12 U -U -U .............................................................................. 45 V -V -V .............................................................................. 58 N W -name -name .........................................................................57 -w -w .............................................................................. 56 O X -o -o ...............................................................................33 OPT896 OPT896 .....................................................................14 -OVFW -OVFW ......................................................................66 P -P -P ...............................................................................44 -p -p ...............................................................................43 -Pf -Pf ..............................................................................44 -pl -pl ..............................................................................37 -pw -pw ............................................................................37 R -Xcmsg -Xcmsg ......................................................................59 -Xcwno -Xcwno ......................................................................60 -Xdof -Xdof ......................................................................... 54 -Xg -Xg ............................................................................34 -Xl -Xl ............................................................................. 36 -XLBA -XLBA ......................................................................64 -Xo -Xo ............................................................................33 -XOVFW -XOVFW .................................................................. 67 -Xsa -Xsa ........................................................................... 50 -XV -XV ........................................................................... 58 ROM 化セクション ROM 化セクションの書き方 ..............................145 348 CM81-00208-5, September 1, 2014 Support Soft あ アセンブラ 概要 (SOFTUNE アセンブラ ) .................................4 概要 ( アセンブラ文法 ) ...........................................6 アセンブラ擬似機械命令 F2MC-8L/8FX ファミリ用アセンブラ擬似機械命 令 ......................................................................248 アセンブル アセンブル処理の制限 .........................................322 アセンブルフェーズ アセンブルフェーズ .................................................4 アドレス規定子 アドレス規定子 .....................................................122 アドレス制御命令 アドレス制御命令 .................................................158 い インクリメント インクリメント / デクリメント式 .....................282 インクルードファイル インクルードファイル ...........................................83 インフォメーションリスト インフォメーションリスト .............................76, 78 え エラー番号 エラー番号 W1551A ...............................................56 エラー番号 W1711A ...............................................56 エラー表示 エラー表示 ...............................................................82 エラーメッセージ エラーメッセージ一覧 .........................................287 エラーメッセージの見方 .....................................286 演算系擬似機械命令 演算系擬似機械命令 .............................................250 演算子 演算子の優先順位 .................................................131 プリプロセッサの演算子 .....................................209 プリプロセッサの演算子の優先順位 .................210 演算精度 プリプロセッサの式の演算精度 .........................208 お オブジェクト オブジェクトおよびデバッグに関するオプション ............................................................................32 オプション オブジェクトおよびデバッグに関するオプション ............................................................................32 起動時オプション一覧 ...........................................29 起動時オプションの規則 .......................................28 その他のオプション ...............................................53 ターゲット依存オプション ...................................49 プリプロセッサに関するオプション ...................42 リスティングに関するオプション .......................35 September 1, 2014, CM81-00208-5 Ma nual オプションファイル オプションファイル .............................................. 23 オプションファイルに記述できるコメント ...... 24 オプションファイルの制限 ................................322 オペランド オペランドの順序 ................................................149 オペランドフィールド オペランドフィールド ........................................ 105 オペランドフィールドの記述形式 .................... 149 オペレーションフィールド オペレーションフィールド ................................104 か 開発環境 開発環境のディレクトリ構造 ..............................15 外部参照値 外部参照値 ............................................................ 121 概要 概要 (SOFTUNE アセンブラ ) ................................. 4 概要 ( アセンブラ文法 ) ...........................................6 空命令 空命令 ....................................................................242 仮引数 仮引数の置換規則 ................................................206 仮引数の名前の規則 ............................................ 206 関係演算子 関係演算子 ............................................................ 126 き 機械命令 機械命令の記述形式 ............................................ 148 擬似命令 擬似命令で扱う整数定数の範囲 ........................ 152 サイズ演算子を含む式が記述できない擬似命令 ..........................................................................130 既定義マクロ名 既定義マクロ名 ....................................................243 起動時オプション 起動時オプション一覧 .......................................... 29 起動時オプションとの関係 ..74, 154, 182, 185, 189 起動時オプションの規則 ...................................... 28 行 行の継続 ................................................................ 201 共有結合 共有結合 ................................................................ 143 く クロスリファレンスリスト クロスリファレンスリスト ................................100 け 計算型繰返し構文 計算型繰返し構文 ................................................268 継続指示フィールド 継続指示フィールド ............................................ 105 349 Su pp or t こ 項 項に記述可能な種類 .............................277, 279, 283 項の種類 .................................................................121 構造化プログラム命令 構造化プログラム命令の概要 .............................259 構造化プログラム命令の記述形式 .....................264 構造化プログラム命令の条件式 .........................260 構造化命令 構造化命令の概要 .................................................258 構造体 構造体のアクセス .................................................180 構造体の領域定義 .................................................179 後方参照シンボル 前方参照シンボルと後方参照シンボル .............109 コマンド行 fasm896s コマンド行 ..............................................18 コメント オプションファイルに記述できるコメント .......24 コメント .........................................................132, 200 コメントフィールド コメントフィールド .............................................105 さ サイズ演算子 サイズ演算子について .........................................109 サイズ演算子を含む式が記述できない擬似命令 ... 130 最適化 分岐命令の最適化 ...................................................70 最適配置分岐擬似機械命令 最適配置分岐擬似機械命令 .................................253 算術演算子 算術演算子 .............................................................127 し 式 サイズ演算子を含む式が記述できない擬似命令 ..........................................................................130 式の演算精度について .........................................120 式の概要 .................................................................274 式の記述形式 .........................................................275 式の構文 .................................................................119 式の種類 .................................................................120 プリプロセッサの式 .............................................208 プリプロセッサの式の演算精度 .........................208 実行条件型繰返し構文 実行条件型繰返し構文 .........................................271 終了コード 終了コード ...............................................................26 終了条件型繰返し構文 終了条件型繰返し構文 .........................................270 条件式 構造化プログラム命令の条件式 .........................260 条件式の記述形式 .................................................264 条件付きアセンブル命令 条件付きアセンブル命令 .....................................220 初期値データ 初期値データの転送 .............................................145 350 So ft Manu al シンボル シンボルの生成規則 ............................................ 263 シンボル定義命令 シンボル定義命令 ................................................166 シンボルフィールド シンボルフィールド ............................................ 104 せ 整数定数 擬似命令で扱う整数定数の範囲 ........................ 152 整数定数 ........................................................110, 202 セクション セクションタイプ ........................................134, 156 セクションタイプと属性 .................................... 139 セクション値 ........................................................ 122 セクションの記述形式 ........................................ 134 セクションの結合方法 ........................................ 142 セクションのタイプについて ............................136 セクションの配置形式について ........................ 140 セクションの分割記述 ........................................ 144 セクション配置形式 ....................................135, 157 セクションサイズ セクションサイズ抽出 (SIZEOF 演算子 ) ......... 129 他のモジュールにあるセクションサイズを得るに は ......................................................................130 セクションリスト セクションリスト ..................................................99 絶対値 絶対値 ....................................................................121 全体形式 全体形式 .................................................................. 74 前方参照シンボル 前方参照シンボルと後方参照シンボル ............109 そ 相対値 相対値 ....................................................................121 ソースリスト ソースリスト .......................................................... 80 その他 その他のオプション .............................................. 53 その他の制限 ........................................................ 322 その他の擬似機械命令 その他の擬似機械命令 ........................................ 251 た ターゲット依存 ターゲット依存オプション ..................................49 代入演算式 代入演算式 ............................................................ 278 代入式 代入式 ....................................................................276 多処理選択構文 多処理選択構文 ....................................................266 単精度 単精度と倍精度の指定 ........................................ 116 単精度浮動小数点定数 単精度浮動小数点定数のデータ形式 ................ 117 CM81-00208-5, September 1, 2014 Support Soft て ディレクトリ 開発環境のディレクトリ構造 ...............................15 デクリメント インクリメント / デクリメント式 .....................282 デバッグ オブジェクトおよびデバッグに関するオプション 32 デバッグ情報出力制御命令 デバッグ情報出力制御命令 .................................181 デフォルトオプションファイル デフォルトオプションファイル ...........................25 デフォルトデータサイズ デフォルトデータサイズ .....................276, 279, 282 な 名前 名前から値を算出する演算子 .............................127 名前の規則 .............................................................107 名前の分類 .............................................................107 は 倍精度 単精度と倍精度の指定 .........................................116 倍精度浮動小数点定数 倍精度浮動小数点定数のデータ形式 .................117 Ma nual プリプロセッサの演算子 .................................... 209 プリプロセッサの演算子の優先順位 ................ 210 プリプロセッサの式 ............................................ 208 プリプロセッサの式の演算精度 ........................ 208 プリプロセッサフェーズ プリプロセッサフェーズ ........................................ 4 プリプロセッサ命令 プリプロセッサ命令の記述形式 ........................ 199 プログラム結合命令 プログラム結合命令 ............................................ 162 プログラム構造定義命令 プログラム構造定義命令 .................................... 153 分岐系擬似機械命令 分岐系擬似機械命令 ............................................ 249 分岐命令 分岐命令の最適化 ..................................................70 文の形式 文の形式 ................................................................ 104 文法 概要 ( アセンブラ文法 ) ...........................................6 へ ヘッダ ヘッダの形式 .......................................................... 77 ま ビットアドレス ビットアドレス .....................................................122 ビット演算子 ビット演算子 .........................................................126 ビットシンボルアドレス演算子 ビットシンボルアドレス演算子 (BITADR 演算子 ) .........................................................................128 ビットポジション番号演算子 ビットポジション番号演算子 (BITPOS 演算子 ) ..........................................................................128 マクロ置換 マクロ置換の規則 ................................................228 マクロ置換の文字の連結 (## 演算子 ) ............... 233 マクロ仮引数 マクロ仮引数の文字列化 (# 演算子 ) ................. 232 マクロコール命令 マクロコール命令 ................................................217 マクロコール命令の規則 .................................... 217 マクロ定義 マクロ定義 ............................................................ 211 マクロ定義の規則 ................................................211 マクロ名 マクロ名の規則 ....................................................205 マクロ名の種類 ....................................................205 マクロ名の置換処理 ............................................ 228 ふ め ファイル ファイル指定 ...........................................................19 ファイル検索 形式 1 のファイル検索 .........................................237 形式 2 と形式 3 のファイル検索 .........................238 ファイル名 ファイル名の指定形式 ...........................................21 ファイル名の省略指定 ...........................................22 浮動小数点定数 浮動小数点定数の表記 .........................................115 浮動小数点定数の表現可能な範囲 .....................118 プリプロセッサ プリプロセッサ .....................................................194 プリプロセッサ処理 ...............................................81 プリプロセッサ処理の制限 .................................322 プリプロセッサに関するオプション ...................42 命令文 命令文の生成規則 ................................................263 ひ September 1, 2014, CM81-00208-5 も 文字定数 文字定数 ........................................................112, 203 文字定数要素 ........................................................ 203 文字セット 文字セット ............................................................ 106 文字列 文字列 ....................................................................114 351 Su pp or t So ft Manu al よ 予約語 予約語 .....................................................................108 ら ライブラリファイル指定命令 ライブラリファイル指定命令 .............................183 り リスティング リスティングに関するオプション .......................35 リスト出力制御命令 リスト出力制御命令 .............................................184 リピート展開 リピート展開 .........................................................218 領域定義命令 領域定義命令 .........................................................168 れ 連結結合 連結結合 .................................................................142 ろ ローカルシンボル ローカルシンボルの置換規則 .............................207 ローカルシンボルの名前規則 .............................207 ロケーションカウンタシンボル ロケーションカウンタシンボル .........................111 論理演算子 論理演算子 .............................................................126 論理値 論理値 .....................................................................126 352 CM81-00208-5, September 1, 2014 Support Soft Ma nual 奥付 CM81-00208-5 Spansion • SUPPORT SOFT MANUAL F2MC®-8L/8FX 8 ビット・マイクロコントローラ SOFTUNE® アセンブラマニュアル V3 対応 2014 年 9 月 Rev. 5.0 発行 Spansion Inc. 編集 コーポレートコミュニケーション部 September 1, 2014, CM81-00208-5 353 Su pp or t So ft Manu al 免責事項 本資料に記載された製品は、通常の産業用 , 一般事務用 , パーソナル用 , 家庭用などの一般的用途 ( ただし、用途の限定はあ りません ) に使用されることを意図して設計・製造されています。(1) 極めて高度な安全性が要求され、仮に当該安全性が 確保されない場合、社会的に重大な影響を与えかつ直接生命・身体に対する重大な危険性を伴う用途 ( 原子力施設における 核反応制御 , 航空機自動飛行制御 , 航空交通管制 , 大量輸送システムにおける運行制御 , 生命維持のための医療機器 , 兵器シ ステムにおけるミサイル発射制御等をいう ) 、ならびに (2) 極めて高い信頼性が要求される用途 ( 海底中継器 , 宇宙衛星等を いう ) に使用されるよう設計・製造されたものではありません。上記の製品の使用法によって惹起されたいかなる請求また は損害についても、Spansion は、お客様または第三者、あるいはその両方に対して責任を一切負いません。半導体デバイス はある確率で故障が発生します。当社半導体デバイスが故障しても、結果的に人身事故 , 火災事故 , 社会的な損害を生じさ せないよう、お客様において、装置の冗長設計 , 延焼対策設計 , 過電流防止対策設計 , 誤動作防止設計などの安全設計をお 願いします。本資料に記載された製品が、外国為替及び外国貿易法、米国輸出管理関連法規などの規制に基づき規制され ている製品または技術に該当する場合には、本製品の輸出に際して、同法に基づく許可が必要となります。 商標および注記 このドキュメントは、断りなく変更される場合があります。本資料には Spansion が開発中の Spansion 製品に関する情報が 記載されている場合があります。Spansion は、それらの製品に対し、予告なしに仕様を変更したり、開発を中止したりする 権利を有します。このドキュメントに含まれる情報は、現状のまま、保証なしに提供されるものであり、その正確性 , 完全 性 , 実施可能性および特定の目的に対する適合性やその市場性および他者の権利を侵害しない事を保証するものでなく、ま た、明示 , 黙示または法定されているあらゆる保証をするものでもありません。Spansion は、このドキュメントに含まれる 情報を使用することにより発生したいかなる損害に対しても責任を一切負いません。 Copyright © 2004-2014 Spansion. All rights reserved. 商標:Spansion®, Spansion ロゴ ( 図形マーク ), MirrorBit®, MirrorBit® EclipseTM, ORNANDTM 及びこれらの組合せは、米国・ 日本ほか諸外国における Spansion LLC の商標です。第三者の社名・製品名等の記載はここでは情報提供を目的として表記 したものであり、各権利者の商標もしくは登録商標となっている場合があります。 354 CM81-00208-5, September 1, 2014
© Copyright 2024 Paperzz