Comments
Description
Transcript
本ドキュメントはCypress (サイプレス) 製品に関する情報が記載されて
本ドキュメントはCypress (サイプレス) 製品に関する情報が記載されております。 富士通半導体デバイス CONTROLLER MANUAL CM71-00101-5 FR ファミリ 32 ビット・マイクロコントローラ インストラクション マニュアル FR ファミリ 32 ビット・マイクロコントローラ インストラクション マニュアル 富士通株式会社 はじめに ■ 本書の目的と対象読者 FR* ファミリは , 新しい RISC アーキテクチャの CPU をコアとした 32 ビットシングル チップマイクロコントローラです。FR ファミリは , 高性能な CPU 処理パワーを要求さ れる組込み用途に最適な仕様になっています。 本書は , 実際にこの FR ファミリマイクロコントローラを使用して , 製品を開発される 技術者の方 , 特に FR ファミリ用アセンブラのアセンブリ言語を用いてプログラムを制 作されるプログラマの方を対象に, FRファミリの各種命令について解説したものです。 本書をご一読ください。 なお , コプロセッサ命令の実装・未実装および各コプロセッサの仕様は , その機能を内 蔵する品種に依存して決まります。このため , コプロセッサ部分の仕様は各品種のハー ドウェアマニュアルを参照してください。また , アセンブリ言語の文法規約およびアセ ンブラプログラムの使用方法については ,『FR ファミリ アセンブラマニュアル』を参 照してください。 * : FR は , FUJITSU RISC controller の略で , 富士通株式会社の製品です。 ■ 商標 その他の記載されている社名および製品名などの固有名詞は , 各社の商標または登録 商標です。 ■ 本書の全体構成 本書は , 以下に示す 7 つの章と付録から構成されます。 第 1 章 FR ファミリの概要 FR ファミリ CPU コアの特長と構成例について説明します。 第 2 章 メモリアーキテクチャ FR ファミリ CPU の持つメモリアーキテクチャについて説明します。 第 3 章 レジスタ説明 FR ファミリ CPU 内に存在するレジスタについて説明します。 第 4 章 リセット , EIT 処理 FR ファミリ CPU のリセットと EIT 処理について説明します。 第 5 章 FR ファミリ CPU の注意事項 FR ファミリ CPU の使用上の注意事項について説明します。 第 6 章 命令概要 FR ファミリ CPU の命令の概要について説明します。 第 7 章 実行命令細則 アセンブラで使用する各実行命令について , リファレンス形式で説明します。 付録 FR ファミリ CPU の命令一覧と命令マップを示します。 i • • • • • • • 本資料の記載内容は , 予告なしに変更することがありますので , ご用命の際は営業部門にご確認くださ い。 本資料に記載された動作概要や応用回路例は , 半導体デバイスの標準的な動作や使い方を示したもので , 実際に使用する機器での動作を保証するものではありません。したがいまして , これらを使用するにあ たってはお客様の責任において機器の設計を行ってください。これらの使用に起因する損害などについ ては , 当社はその責任を負いません。 本資料に記載された動作概要・回路図を含む技術情報は , 当社もしくは第三者の特許権 , 著作権等の知的 財産権やその他の権利の使用権または実施権の許諾を意味するものではありません。また , これらの使用 について , 第三者の知的財産権やその他の権利の実施ができることの保証を行うものではありません。し たがって , これらの使用に起因する第三者の知的財産権やその他の権利の侵害について , 当社はその責任 を負いません。 本資料に記載された製品は , 通常の産業用 , 一般事務用 , パーソナル用 , 家庭用などの一般的用途に使用 されることを意図して設計・製造されています。極めて高度な安全性が要求され , 仮に当該安全性が確保 されない場合 , 社会的に重大な影響を与えかつ直接生命・身体に対する重大な危険性を伴う用途(原子力 施設における核反応制御 , 航空機自動飛行制御 , 航空交通管制 , 大量輸送システムにおける運行制御 , 生 命維持のための医療機器 , 兵器システムにおけるミサイル発射制御をいう), ならびに極めて高い信頼性 が要求される用途(海底中継器 , 宇宙衛星をいう)に使用されるよう設計・製造されたものではありませ ん。したがって , これらの用途にご使用をお考えのお客様は , 必ず事前に営業部門までご相談ください。 ご相談なく使用されたことにより発生した損害などについては , 責任を負いかねますのでご了承くださ い。 半導体デバイスはある確率で故障が発生します。当社半導体デバイスが故障しても , 結果的に人身事故 , 火災事故 , 社会的な損害を生じさせないよう , お客様は , 装置の冗長設計 , 延焼対策設計 , 過電流防止対策 設計 , 誤動作防止設計などの安全設計をお願いします。 本資料に記載された製品を輸出または提供する場合は , 外国為替及び外国貿易法および米国輸出管理関 連法規等の規制をご確認の上 , 必要な手続きをおとりください。 本書に記載されている社名および製品名などの固有名詞は , 各社の商標または登録商標です。 Copyright ©1996-2007 FUJITSU LIMITED All rights reserved. ii 目次 第1章 1.1 1.2 1.3 第2章 FR ファミリの概要 .................................................................................... 1 FR ファミリ CPU コアの特長 ................................................................................................ 2 FR ファミリの構成例 ............................................................................................................. 3 FR ファミリ CPU の構成例.................................................................................................... 4 メモリアーキテクチャ ............................................................................... 5 2.1 FR ファミリのメモリ空間 ...................................................................................................... 6 2.1.1 ダイレクトアドレス領域 .............................................................................................. 7 2.1.2 ベクタテーブル領域 ..................................................................................................... 8 2.2 ビットの順序とバイトの順序 ............................................................................................... 10 2.3 ワードアライメント ............................................................................................................. 11 第3章 レジスタ説明............................................................................................ 13 3.1 FR ファミリのレジスタ構成 ................................................................................................ 14 3.2 汎用レジスタ ........................................................................................................................ 15 3.3 専用レジスタ ........................................................................................................................ 17 3.3.1 プログラムカウンタ (PC)........................................................................................... 18 3.3.2 プログラムステータス (PS) ....................................................................................... 19 3.3.3 テーブルベースレジスタ (TBR) ................................................................................. 23 3.3.4 リターンポインタ (RP) .............................................................................................. 25 3.3.5 システムスタックポインタ (SSP), ユーザスタックポインタ (USP).......................... 27 3.3.6 乗除算レジスタ (MD) ................................................................................................. 29 第4章 リセット , EIT 処理 .................................................................................. 31 4.1 リセット ............................................................................................................................... 32 4.2 EIT 処理の基本動作 .............................................................................................................. 33 4.3 割込み ................................................................................................................................... 36 4.3.1 ユーザ割込み .............................................................................................................. 37 4.3.2 ノンマスカブルインタラプト (NMI)........................................................................... 39 4.4 例外処理 ............................................................................................................................... 41 4.4.1 未定義命令例外 ......................................................................................................... 42 4.5 トラップ ............................................................................................................................... 43 4.5.1 INT 命令...................................................................................................................... 44 4.5.2 INTE 命令 ................................................................................................................... 45 4.5.3 ステップトレーストラップ ........................................................................................ 46 4.5.4 コプロセッサ不在トラップ ........................................................................................ 48 4.5.5 コプロセッサエラートラップ..................................................................................... 49 4.6 優先順位 ............................................................................................................................... 51 第5章 5.1 5.2 5.3 5.4 FR ファミリ CPU の注意事項.................................................................. 53 パイプライン動作 ................................................................................................................. 54 パイプライン動作と割込み処理 ........................................................................................... 55 レジスタハザード ................................................................................................................. 56 遅延分岐処理 ........................................................................................................................ 58 iii 5.4.1 5.4.2 第6章 6.1 6.2 第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 7.13 7.14 7.15 7.16 7.17 7.18 7.19 7.20 7.21 7.22 7.23 7.24 7.25 7.26 7.27 7.28 7.29 7.30 7.31 7.32 7.33 7.34 7.35 7.36 7.37 7.38 7.39 7.40 遅延なし分岐命令の処理例 ........................................................................................ 60 遅延分岐命令の処理例 ............................................................................................... 61 命令概要................................................................................................... 63 命令フォーマット ................................................................................................................. 64 命令記述形式 ........................................................................................................................ 67 実行命令細則............................................................................................ 69 ADD(Add Word Data of Source Register to Destination Register) ....................................... 74 ADD(Add 4bit Immediate Data to Destination Register)....................................................... 75 ADD2(Add 4bit Immediate Data to Destination Register)..................................................... 76 ADDC(Add Word Data of Source Register and Carry Bit to Destination Register) .............. 77 ADDN(Add Word Data of Source Register to Destination Register) .................................... 78 ADDN(Add Immediate Data to Destination Register) ........................................................... 79 ADDN2(Add Immediate Data to Destination Register) ......................................................... 80 SUB(Subtract Word Data in Source Register from Destination Register) ............................ 81 SUBC(Subtract Word Data in Source Register and Carry bit from Destination Register) ............................................................................................................................................. 82 SUBN(Subtract Word Data in Source Register from Destination Register).......................... 83 CMP(Compare Word Data in Source Register and Destination Register) ........................... 84 CMP(Compare Immediate Data of Source Register and Destination Register) ................... 85 CMP2(Compare Immediate Data and Destination Register)................................................ 86 AND(And Word Data of Source Register to Destination Register) ....................................... 87 AND(And Word Data of Source Register to Data in Memory) .............................................. 88 ANDH(And Halfword Data of Source Register to Data in Memory)...................................... 89 ANDB(And Byte Data of Source Register to Data in Memory) ............................................. 91 OR(Or Word Data of Source Register to Destination Register)............................................ 93 OR(Or Word Data of Source Register to Data in Memory)................................................... 94 ORH(Or Halfword Data of Source Register to Data in Memory) .......................................... 96 ORB(Or Byte Data of Source Register to Data in Memory).................................................. 98 EOR(Exclusive Or Word Data of Source Register to Destination Register) ....................... 100 EOR(Exclusive Or Word Data of Source Register to Data in Memory) .............................. 101 EORH(Exclusive Or Halfword Data of Source Register to Data in Memory)...................... 103 EORB(Exclusive Or Byte Data of Source Register to Data in Memory) ............................. 105 BANDL(And 4bit Immediate Data to Lower 4bit of Byte Data in Memory).......................... 107 BANDH(And 4bit Immediate Data to Higher 4bit of Byte Data in Memory) ........................ 108 BORL(Or 4bit Immediate Data to Lower 4bit of Byte Data in Memory) .............................. 109 BORH(Or 4bit Immediate Data to Higher 4bit of Byte Data in Memory)............................. 110 BEORL(Eor 4bit Immediate Data to Lower 4bit of Byte Data in Memory) .......................... 111 BEORH(Eor 4bit Immediate Data to Higher 4bit of Byte Data in Memory)......................... 112 BTSTL(Test Lower 4bit of Byte Data in Memory) ............................................................... 113 BTSTH(Test Higher 4bit of Byte Data in Memory).............................................................. 114 MUL(Multiply Word Data) ................................................................................................... 115 MULU(Multiply Unsigned Word Data)................................................................................. 116 MULH(Multiply Halfword Data) ........................................................................................... 117 MULUH(Multiply Unsigned Halfword Data) ........................................................................ 118 DIV0S(Initial Setting Up for Signed Division)...................................................................... 119 DIV0U(Initial Setting Up for Unsigned Division).................................................................. 121 DIV1(Main Process of Division) .......................................................................................... 123 iv 7.41 7.42 7.43 7.44 7.45 7.46 7.47 7.48 7.49 7.50 7.51 7.52 7.53 7.54 7.55 7.56 7.57 7.58 7.59 7.60 7.61 7.62 7.63 7.64 7.65 7.66 7.67 7.68 7.69 7.70 7.71 7.72 7.73 7.74 7.75 7.76 7.77 7.78 7.79 7.80 7.81 7.82 7.83 7.84 7.85 7.86 7.87 7.88 7.89 DIV2(Correction When Remain is 0) .................................................................................. 125 DIV3(Correction When Remain is 0) .................................................................................. 127 DIV4S(Correction Answer for Signed Division) .................................................................. 128 LSL(Logical Shift to the Left Direction) ............................................................................... 129 LSL(Logical Shift to the Left Direction) ............................................................................... 130 LSL2(Logical Shift to the Left Direction) ............................................................................. 131 LSR(Logical Shift to the Right Direction) ............................................................................ 132 LSR(Logical Shift to the Right Direction) ............................................................................ 133 LSR2(Logical Shift to the Right Direction) .......................................................................... 134 ASR(Arithmetic shift to the Right Direction)........................................................................ 135 ASR(Arithmetic shift to the Right Direction)........................................................................ 136 ASR2(Arithmetic shift to the Right Direction)...................................................................... 137 LDI:32(Load Immediate 32 bit Data to Destination Register) ............................................. 138 LDI:20(Load Immediate 20bit Data to Destination Register) .............................................. 139 LDI:8(Load Immediate 8bit Data to Destination Register) .................................................. 140 LD(Load Word Data in Memory to Register) ...................................................................... 141 LD(Load Word Data in Memory to Register) ...................................................................... 142 LD(Load Word Data in Memory to Register) ...................................................................... 143 LD(Load Word Data in Memory to Register) ...................................................................... 144 LD(Load Word Data in Memory to Register) ...................................................................... 145 LD(Load Word Data in Memory to Register) ...................................................................... 146 LD(Load Word Data in Memory to Program Status Register) ............................................ 148 LDUH(Load Halfword Data in Memory to Register)............................................................ 150 LDUH(Load Halfword Data in Memory to Register)............................................................ 151 LDUH(Load Halfword Data in Memory to Register)............................................................ 152 LDUB(Load Byte Data in Memory to Register)................................................................... 153 LDUB(Load Byte Data in Memory to Register)................................................................... 154 LDUB(Load Byte Data in Memory to Register)................................................................... 155 ST(Store Word Data in Register to Memory)...................................................................... 156 ST(Store Word Data in Register to Memory)...................................................................... 157 ST(Store Word Data in Register to Memory)...................................................................... 158 ST(Store Word Data in Register to Memory)...................................................................... 159 ST(Store Word Data in Register to Memory)...................................................................... 160 ST(Store Word Data in Register to Memory)...................................................................... 161 ST(Store Word Data in Program Status Register to Memory)............................................ 162 STH(Store Halfword Data in Register to Memory).............................................................. 163 STH(Store Halfword Data in Register to Memory).............................................................. 164 STH(Store Halfword Data in Register to Memory).............................................................. 165 STB(Store Byte Data in Register to Memory)..................................................................... 166 STB(Store Byte Data in Register to Memory)..................................................................... 167 STB(Store Byte Data in Register to Memory)..................................................................... 168 MOV(Move Word Data in Source Register to Destination Register) .................................. 169 MOV(Move Word Data in Source Register to Destination Register) .................................. 170 MOV(Move Word Data in Program Status Register to Destination Register)..................... 171 MOV(Move Word Data in Source Register to Destination Register) .................................. 172 MOV(Move Word Data in Source Register to Program Status Register) ........................... 173 JMP(Jump) ......................................................................................................................... 174 CALL(Call Subroutine)........................................................................................................ 175 CALL(Call Subroutine)........................................................................................................ 176 v 7.90 7.91 7.92 7.93 7.94 7.95 7.96 7.97 7.98 7.99 7.100 7.101 7.102 7.103 7.104 7.105 7.106 7.107 7.108 7.109 7.110 7.111 7.112 7.113 7.114 7.115 7.116 7.117 7.118 7.119 7.120 7.121 7.122 7.123 7.124 7.125 7.126 7.127 7.128 7.129 7.130 7.131 7.132 RET(Return from Subroutine)............................................................................................. 177 INT(Software Interrupt) ....................................................................................................... 178 INTE(Software Interrupt for Emulator) ................................................................................ 180 RETI(Return from Interrupt)................................................................................................ 182 Bcc(Branch relative if Condition satisfied) .......................................................................... 184 JMP:D(Jump)...................................................................................................................... 186 CALL:D(Call Subroutine) .................................................................................................... 187 CALL:D(Call Subroutine) .................................................................................................... 188 RET:D(Return from Subroutine) ......................................................................................... 189 Bcc:D(Branch relative if Condition satisfied)....................................................................... 190 DMOV(Move Word Data from Direct Address to Register) ................................................ 192 DMOV(Move Word Data from Register to Direct Address) ................................................ 193 DMOV(Move Word Data from Direct Address to Post Increment Register Indirect Address) ............................................................................................................................................ 194 DMOV(Move Word Data from Post Increment Register Indirect Address to Direct Address) ............................................................................................................................................ 195 DMOV(Move Word Data from Direct Address to Pre Decrement Register Indirect Address) ............................................................................................................................................ 196 DMOV(Move Word Data from Post Increment Register Indirect Address to Direct Address) ............................................................................................................................................ 197 DMOVH(Move Halfword Data from Direct Address to Register) ........................................ 198 DMOVH(Move Halfword Data from Register to Direct Address) ........................................ 199 DMOVH(Move Halfword Data from Direct Address to Post Increment Register Indirect Address) ............................................................................................................................. 200 DMOVH(Move Halfword Data from Post Increment Register Indirect Address to Direct Address) ............................................................................................................................. 201 DMOVB(Move Byte Data from Direct Address to Register) ............................................... 202 DMOVB(Move Byte Data from Register to Direct Address) ............................................... 203 DMOVB(Move Byte Data from Direct Address to Post Increment Register Indirect Address) ............................................................................................................................................ 204 DMOVB(Move Byte Data from Post Increment Register Indirect Address to Direct Address) ............................................................................................................................................ 205 LDRES(Load Word Data in Memory to Resource) ............................................................. 206 STRES(Store Word Data in Resource to Memory) ............................................................ 207 COPOP(Co-Processor Opetation)...................................................................................... 208 COPLD(Load 32bit Data from Register to Co-processor Register) .................................... 210 COPST(Store 32bit Data from Co-processor Register to Register) ................................... 212 COPSV(Save 32bit Data from Co-processor Register to Register).................................... 214 NOP(No Operation) ............................................................................................................ 216 ANDCCR(And Condition Code Register and Immediate Data) .......................................... 217 ORCCR(Or Condition Code Register and Immediate Data)............................................... 218 STILM(Set Immediate Data to Interrupt Level Mask Register) ........................................... 219 ADDSP(Add Stack Pointer and Immediate Data)............................................................... 220 EXTSB(Sign Extend from Byte Data to Word Data) ........................................................... 221 EXTUB(Unsign Extend from Byte Data to Word Data)....................................................... 222 EXTSH(Sign Extend from Byte Data to Word Data)........................................................... 223 EXTUH(Unsign Extend from Byte Data to Word Data)....................................................... 224 LDM0(Load Multiple Registers) .......................................................................................... 225 LDM1(Load Multiple Registers) .......................................................................................... 227 STM0(Store Multiple Registers).......................................................................................... 229 STM1(Store Multiple Registers).......................................................................................... 231 vi 7.133 ENTER(Enter Function)...................................................................................................... 233 7.134 LEAVE(Leave Function) ..................................................................................................... 235 7.135 XCHB(Exchange Byte Data)............................................................................................... 236 付録 付録 A A.1 A.2 付録 B B.1 B.2 ............................................................................................................... 237 命令一覧 ........................................................................................................................ 238 命令一覧表の記号の意味 ............................................................................................ 239 命令一覧表 .................................................................................................................. 242 命令マップ..................................................................................................................... 252 命令マップ .................................................................................................................. 253 E フォーマット ........................................................................................................... 254 vii viii 本版での主な変更内容 ページ - i 変更内容(詳細は本文を参照してください。) ...『Check Sheet』を参照してください。の記述を削除 「■本書の目的と対象読者」を変更 (FR → FR*, FR は→ *:FR は ) (「■商標」の記述を追加 ) 「表 2.1-1 ベクタテーブル領域の構造 (2 / 2)」の 3E0H を変更 ( "#0FF" → "#007" ) 9 「表 2.1-1 ベクタテーブル領域の構造 (2 / 2)」の 3F8H を変更 ( " なし " → " あり " ) 19 「図 3.3-3 ILM のビット構成」を変更 ( "ILIM" → "ILM" ) 20 「図 3.3-4 ILM の機能」を変更 ( ILM から Comp への線を追加 ) 「■ PS レジスタに関する注意事項」の命令名を変更 ( " ● DIVOU/DIVOS" → " ● DIV0U/DIV0S" ) 22 「● ユーザ割込み・NMI 要因が発生している状態で , 割込みを許可するために ORCCR/ STILM/MOV Ri, PS の各命令が実行されると , 以下のような動作を行います。」を変更 ( "1") → "1." ) 23 「図 3.3-7 テーブルベースレジスタ (TBR) の動作例」を変更 ( "31" → "bit31" ) 28 「■ EIT ハンドラからの復帰」を変更 ( "「4.2 EIT 処理の基本動作 ■ EIT ハンドラからの復帰」" → "「4.2 EIT 処理の基本動作」の「■ EIT ハンドラからの復帰」") 「3.3.6 乗除算レジスタ (MD)」を変更 ( " 除数 " → " 被除数 " ) 29 「■ 乗除算レジスタの概要」を変更 ( " 除数 " → " 被除数 (2 箇所 )" ), ( " 被乗算 " → " 乗算 " ) 「4.3 割込み」を変更 ( " 外部割込み " → " ユーザ割込み " ) 36 「■ 割込みを発生する要因」を変更 ( " 外部割込み " → " ユーザ割込み " ) ix ページ 変更内容(詳細は本文を参照してください。) 「4.3.1 ユーザ割込み」を変更 ( " 外部割込み " → " ユーザ割込み " ) 「4.3.1 ユーザ割込み」を変更 ( " 外部割込みとは ," → " ユーザ割込みとは ,"), ( " 外部割込みの受付け条件 " → " ユーザ割込みの受付け条件 " ) 「■ ユーザ割込みの概要」を変更 ( " 外部割込みの概要 " → " ユーザ割込みの概要 " ) 「■ ユーザ割込みの概要」を変更 ( " 外部割込みとは " → " ユーザ割込みとは " ) 37 「■ ユーザ割込みの概要」を変更 ( " 割込み要求が CPU の外側から発生するという意味で " 外部 " とよんでいます。ただし ," の記述を削除 ) 「■ ユーザ割込み要求受付け条件」を変更 ( " 外部割込み要求受付け条件 " → " ユーザ割込み要求受付け条件 " ) 「■ ユーザ割込み要求受付け条件 」を変更 ( "CPU は外部割込みを受け付けます。" → "CPU はユーザ割込みを受け付けます。" ) 「■ ユーザ割込み受付け時の動作」を変更 ( " 外部割込み受付け時の動作 " → " ユーザ割込み受付け時の動作 " ) 「■ ユーザ割込み受付け時の動作 」を変更 ( " 外部割込みが受け付けられると " → " ユーザ割込みが受け付けられると " ) 「■ ユーザ割込みの使い方」を変更 ( " 外部割込みの使い方 " → " ユーザ割込みの使い方 " ) 「■ ユーザ割込みの使い方 」を変更 ( " 外部割込みを使用する場合には " → " ユーザ割込みを使用する場合には " ) 38 「■ ユーザ割込みの使い方」を変更 ( " 図 4.3-1 に外部割込みの使い方を示します。" → " 図 4.3-1 にユーザ割込みの使い方を 示します。" ) 「図 4.3-1 ユーザ割込みの使い方」を変更 ( " 図 4.3-1 外部割込みの使い方 " → " 図 4.3-1 ユーザ割込みの使い方 " ) 47 「■ ステップトレーストラップの使用上の注意事項」を変更 ( "INTE 命令よる EIT 機能 " → "INTE 命令による EIT 機能 " ) 51 「表 4.6-1 EIT 要因の受付けの優先順位」を変更 ( " 他の要因に対するマスク " → " ほかの要因に対するマスク " ) ( " 他の要因を破棄 " → " ほかの要因を破棄 " ) ( " 他の要因を取消し " → " ほかの要因を取消し " ) 「表 4.6-1 EIT 要因の受付けの優先順位」を変更 ( 仕切り線追加 ) 51 「表 4.6-1 EIT 要因の受付けの優先順位」を変更 ( " 外部割込み " → " ユーザ割込み " ), ( "INT 命令 " → "INTE 命令 " ) x ページ 52 変更内容(詳細は本文を参照してください。) 「表 4.6-2 EIT ハンドラの実行順序」を変更 ( " 他の要因に対するマスク " → " ほかの要因に対するマスク " ) ( " 他の要因を破棄 " → " ほかの要因を破棄 " ) ( " 他の要因を取消し " → " ほかの要因を取消し " ) ( " 外部割込み " → " ユーザ割込み " ) 「■ 遅延スロットで使用できない命令」を変更 ( "LDI:32 #i32, RiLDI:20 #i20, Ri" → "LDI:32 #i32, Ri LDI:20 #i20, Ri" ) 「■ 遅延スロットで使用できない命令」を変更 ( "COPOP #u4, #CC, CRj, CRiCOPLD #u4, #CC, Rj, CRiCOPST #u4, #CC, CRj, RiCOPSV #u4, #CC, CRj, Ri" → "COPOP #u4, #CC, CRj, CRi COPLD #u4, #CC, Rj, Cri COPST #u4, #CC, CRj, Ri COPSV #u4, #CC, CRj, Ri" ) 58 「■ 遅延スロットで使用できない命令」を変更 ( "JMP @RiCALL label12CALL @RiRET 条件付き分岐命令およびこれらの遅延分岐付 き命令 " → "JMP @Ri CALL label12 CALL @Ri RET 条件付き分岐命令およびこれらの遅延分岐付き命令 " ) 「■ 遅延スロットで使用できない命令」を変更 ( "INT #u8RETIINTE" → "INT #u8 RETI INTE") 59 「■ 遅延スロットで使用できない命令」を変更 ( "AND Rj,@Ri ANDH Rj,@RiANDB Rj,@RiOR Rj,@RiORH Rj,@RiORB Rj,@RiEOR Rj,@RiEORH Rj,@RiEORB Rj,@Ri" → "AND Rj,@Ri ANDH Rj,@Ri ANDB Rj,@Ri OR Rj,@Ri ORH Rj,@Ri ORB Rj,@Ri EOR Rj,@Ri EORH Rj,@Ri EORB Rj,@Ri" ) xi ページ 変更内容(詳細は本文を参照してください。) 「■ 遅延スロットで使用できない命令」を変更 ( "BANDH #u4,@RiBANDL #u4,@RiBORH #u4,@RiBORL #u4,@RiBEORH #u4,@RiBEORL #u4,@RiBTSTH #u4,@RiBTSTL #u4,@Ri" → "BANDH #u4,@Ri BANDL #u4,@Ri BORH #u4,@Ri BORL #u4,@Ri BEORH #u4,@Ri BEORL #u4,@Ri BTSTH #u4,@Ri BTSTL #u4,@Ri" ) 「■ 遅延スロットで使用できない命令」を変更 ( "MUL Rj, RiMULU Rj, RiMULH Rj, RiMULUH Rj, Ri" → "MUL Rj, Ri MULU Rj, Ri MULH Rj, Ri MULUH Rj, Ri" ) 59 「■ 遅延スロットで使用できない命令」を変更 ( "LDM0 (reglist)LDM1(reglist)STM0 (reglist)STM1(reglist)ENTER #u10XCHB @Rj, Ri" → "LDM0 (reglist) LDM1(reglist) STM0 (reglist) STM1(reglist) ENTER #u10 XCHB @Rj, Ri" ) 「■ 遅延スロットで使用できない命令」を変更 ( "DMOV @dir10,@R13+DMOV @R13+,@dir10DMOV @dir10,@-R15DMOV @R15+,@dir10DMOVH @dir9,@R13+DMOVH @R13+,@dir9DMOVB @dir8,@R13+DMOVB @R13+,@dir8" → "DMOV @dir10,@R13+ DMOV @R13+,@dir10 DMOV @dir10,@-R15 DMOV @R15+,@dir10 DMOVH @dir9,@R13+ DMOVH @R13+,@dir9 DMOVB @dir8,@R13+ DMOVB @R13+,@dir8" ) 74 「7.1 ADD(Add Word Data of Source Register to Destination Register) の実行例」を変更 ( " 命令のビットパターン :1010 0110 0010 0011" の記述を追加 ) 76 「7.3 ADD2(Add 4bit Immediate Data to Destination Register) の実行例」を変更 ( "ADD2 #-2, R3 \ " → "ADD2 #-2, R3" ) 77 「7.4 ADDC(Add Word Data of Source Register and Carry Bit to Destination Register) 」を変更 ( " 命令のビットパターン:1010 0111 0010 0011" の記述を追加 ) 78 「7.5 ADDN(Add Word Data of Source Register to Destination Register) 」を変更 ( " 命令のビットパターン:1010 0010 0010 0011" の記述を追加 ) xii ページ 変更内容(詳細は本文を参照してください。) 81 「7.8 SUB(Subtract Word Data in Source Register from Destination Register) 」を変更 ( " 命令のビットパターン :1010 1100 0010 0011" の記述を追加 ) 82 「7.9 SUBC(Subtract Word Data in Source Register and Carry bit from Destination Register) 」を 変更 ( " 命令のビットパターン:1010 1101 0010 0011" の記述を追加 ) 83 「7.10 SUBN(Subtract Word Data in Source Register from Destination Register) 」を変更 ( " 命令のビットパターン:1010 1110 0010 0011" の記述を追加 ) 84 「7.11 CMP(Compare Word Data in Source Register and Destination Register) 」を変更 ( " 命令のビットパターン:1010 1010 0010 0011" の記述を追加 ) 87 「7.14 AND(And Word Data of Source Register to Destination Register)」を変更 ( " 命令のビットパターン:1000 0010 0010 0011" の記述を追加 ) 88 「7.15 AND(And Word Data of Source Register to Data in Memory) 」を変更 ( " 命令のビットパターン:1000 0100 0010 0011" の記述を追加 ) 90 「7.16 ANDH(And Halfword Data of Source Register to Data in Memory) 」を変更 ( " 命令のビットパターン:1000 0101 0010 0011" の記述を追加 ) 92 「7.17 ANDB(And Byte Data of Source Register to Data in Memory) 」を変更 ( " 命令のビットパターン:1000 0110 0010 0011" の記述を追加 ) 93 「7.18 OR(Or Word Data of Source Register to Destination Register) 」を変更 ( 命令のビットパターン:1001 0010 0010 0011 の記述を追加 ) 95 「7.19 OR(Or Word Data of Source Register to Data in Memory) 」を変更 ( " 命令のビットパターン:1001 0100 0010 0011" の記述を追加 ) 97 「7.20 ORH(Or Halfword Data of Source Register to Data in Memory) 」を変更 ( " 命令のビットパターン:1001 0101 0010 0011" の記述を追加 ) 99 「7.21 ORB(Or Byte Data of Source Register to Data in Memory) 」を変更 ( " 命令のビットパターン:1001 0110 0010 0011" の記述を追加 ) 100 「7.22 EOR(Exclusive Or Word Data of Source Register to Destination Register) 」を変更 ( " 命令のビットパターン:1001 1010 0010 0011" の記述を追加 ) 102 「7.23 EOR(Exclusive Or Word Data of Source Register to Data in Memory)」を変更 ( " 命令のビットパターン:1001 1100 0010 0011" の記述を追加 ) 104 「7.24 EORH(Exclusive Or Halfword Data of Source Register to Data in Memory) 」を変更 ( 命令のビットパターン:1001 1101 0010 0011 の記述を追加 ) 106 「7.25 EORB(Exclusive Or Byte Data of Source Register to Data in Memory) 」を変更 ( " 命令のビットパターン:1001 1110 0010 0011" の記述を追加 ) 115 「7.34 MUL(Multiply Word Data) 」を変更 ( " 命令のビットパターン:1010 1111 0010 0011" の記述を追加 ) 116 「7.35 MULU(Multiply Unsigned Word Data)」を変更 ( " 命令のビットパターン:1010 1011 0010 0011" の記述を追加 ) 117 「7.36 MULH(Multiply Halfword Data)」を変更 ( " 命令のビットパターン:1011 1111 0010 0011" の記述を追加 ) xiii ページ 変更内容(詳細は本文を参照してください。) 118 「7.37 MULUH(Multiply Unsigned Halfword Data) 」を変更 ( " 命令のビットパターン:1011 1011 0010 0011" の記述を追加 ) 120 「7.38 DIV0S(Initial Setting Up for Signed Division) 」を変更 ( 命令のビットパターン:1001 0111 0100 0010 の記述を追加 ) 121 「7.39 DIV0U(Initial Setting Up for Unsigned Division) 」を変更 ( " 命令のビットパターン:1001 0111 0101 0010" の記述を追加 ) 124 「7.40 DIV1(Main Process of Division) 」を変更 ( " 命令のビットパターン:1001 0111 0110 0010" の記述を追加 ) 126 「7.41 DIV2(Correction When Remain is 0) 」を変更 ( " 命令のビットパターン:1001 0111 0111 0010" の記述を追加 ) 「7.42 DIV3(Correction When Remain is 0) 」を変更 ( "DIVOS" → "DIV0S" ) 127 「7.42 DIV3(Correction When Remain is 0) 」を変更 ( " 命令のビットパターン:1001 1111 0110 0000" の記述を追加 ) 「7.43 DIV4S(Correction Answer for Signed Division)」を変更 (DIVOS → DIV0S) 128 「7.43 DIV4S(Correction Answer for Signed Division)」を変更 ( " 命令のビットパターン:1001 1111 0111 0000" の記述を追加 ) 「7.44 LSL(Logical Shift to the Left Direction)」を変更 ( "< <" → "<<" ) 129 「7.44 LSL(Logical Shift to the Left Direction)」を変更 ( " 命令のビットパターン:1011 0110 0010 0011" の記述を追加 ) 「7.47 LSR(Logical Shift to the Right Direction)」を変更 ( "> >" → ">>" ) 132 「7.47 LSR(Logical Shift to the Right Direction)」を変更 ( " 命令のビットパターン:1011 0010 0010 0011" の記述を追加 ) 133 「7.48 LSR(Logical Shift to the Right Direction)」を変更 (> > → >>) 134 「7.49 LSR2(Logical Shift to the Right Direction)」を変更 ( "(u4+16)" → "{u4+16}" ) 「7.50 ASR(Arithmetic shift to the Right Direction)」を変更 ( "> >" → ">>" ) 135 「7.50 ASR(Arithmetic shift to the Right Direction)」を変更 ( " 命令のビットパターン:1011 1010 0010 0011" の記述を追加 ) 136 「7.51 ASR(Arithmetic shift to the Right Direction)」を変更 ( "> >" → ">>" ) 137 「7.52 ASR2(Arithmetic shift to the Right Direction)」を変更 ( "> >" → ">>" ) xiv ページ 変更内容(詳細は本文を参照してください。) 138 「7.53 LDI:32(Load Immediate 32 bit Data to Destination Register)」を変更 ( " 命令のビットパターン :1001 1111 1000 0011 :1000 0111 0110 0101 :0100 0011 0010 0001" の記述を追加 ) 139 「7.54 LDI:20(Load Immediate 20bit Data to Destination Register)」を変更 ( 命令のビットパターン :1001 1011 0101 0011 :0100 0011 0010 0001 の記述を追加 ) 140 「7.55 LDI:8(Load Immediate 8bit Data to Destination Register)」を変更 ( " 命令のビットパターン:1100 0010 0001 0011" の記述を追加 ) 141 「7.56 LD(Load Word Data in Memory to Register)」を変更 ( " 命令のビットパターン:0000 0100 0010 0011" の記述を追加 ) 142 「7.57 LD(Load Word Data in Memory to Register)」を変更 ( 命令のビットパターン:0000 0000 0010 0011 の記述を追加 ) 144 「7.59 LD(Load Word Data in Memory to Register)」を変更 ( (R15+o4 × 4) → (R15+u4 × 4) ,o4 → u4) 145 「7.60 LD(Load Word Data in Memory to Register)」を変更 ( " 命令のビットパターン:0000 0111 0000 0011" の記述を追加 ) 147 「7.61 LD(Load Word Data in Memory to Register)」を変更 ( " 命令のビットパターン:0000 0111 1000 0100" の記述を追加 ) 149 「7.62 LD(Load Word Data in Memory to Program Status Register)」を変更 ( " 命令のビットパターン:0000 0111 1001 0000" の記述を追加 ) 150 「7.63 LDUH(Load Halfword Data in Memory to Register)」を変更 ( " 命令のビットパターン:0000 0101 0010 0011" の記述を追加 ) 151 「7.64 LDUH(Load Halfword Data in Memory to Register)」を変更 ( " 命令のビットパターン:0000 0001 0010 0011" の記述を追加 ) 153 「7.66 LDUB(Load Byte Data in Memory to Register)」を変更 ( 命令のビットパターン:0000 0110 0010 0011 の記述を追加 ) 154 「7.67 LDUB(Load Byte Data in Memory to Register)」を変更 ( " 命令のビットパターン:0000 0010 0010 0011" の記述を追加 ) 156 「7.69 ST(Store Word Data in Register to Memory)」を変更 ( " 命令のビットパターン:0001 0100 0010 0011" の記述を追加 ) 157 「7.70 ST(Store Word Data in Register to Memory)」を変更 ( " 命令のビットパターン:0001 0000 0010 0011" の記述を追加 ) 159 「7.72 ST(Store Word Data in Register to Memory)」を変更 ( "(R15+o4 × 4)" → "(R15+u4 × 4)" ), ( "o4" → "u4" ) 160 「7.73 ST(Store Word Data in Register to Memory)」を変更 ( " 命令のビットパターン:0001 0111 0000 0011" の記述を追加 ) xv ページ 変更内容(詳細は本文を参照してください。) 161 「7.74 ST(Store Word Data in Register to Memory)」を変更 ( " 命令のビットパターン:0001 0111 1000 0100" の記述を追加 ) 162 「7.75 ST(Store Word Data in Program Status Register to Memory)」を変更 ( " 命令のビットパターン:0001 0111 1001 0000" の記述を追加 ) 163 「7.76 STH(Store Halfword Data in Register to Memory)」を変更 ( " 命令のビットパターン:0001 0101 0010 0011" の記述を追加 ) 164 「7.77 STH(Store Halfword Data in Register to Memory)」を変更 ( " 命令のビットパターン:0001 0001 0010 0011" の記述を追加 ) 166 「7.79 STB(Store Byte Data in Register to Memory) 」を変更 ( " 命令のビットパターン:0001 0110 0010 0011" の記述を追加 ) 167 「7.80 STB(Store Byte Data in Register to Memory)」を変更 ( " 命令のビットパターン:0001 0010 0010 0011" の記述を追加 ) 169 「7.82 MOV(Move Word Data in Source Register to Destination Register)」を変更 ( " 命令のビットパターン:1000 1011 0010 0011" の記述を追加 ) 170 「7.83 MOV(Move Word Data in Source Register to Destination Register)」を変更 ( " 命令のビットパターン:1011 0111 0101 0011" の記述を追加 ) 171 「7.84 MOV(Move Word Data in Program Status Register to Destination Register)」を変更 ( " 命令のビットパターン:0001 0111 0001 0011" の記述を追加 ) 172 「7.85 MOV(Move Word Data in Source Register to Destination Register)」を変更 ( " 命令のビットパターン:1011 0011 0101 0011" の記述を追加 ) 173 「7.86 MOV(Move Word Data in Source Register to Program Status Register)」を変更 ( " 命令のビットパターン:0000 0111 0001 0011" の記述を追加 ) 174 「7.87 JMP(Jump)」を変更 ( " 命令のビットパターン:1001 0111 0000 0001" の記述を追加 ) 175 「7.88 CALL(Call Subroutine)」を変更 ( "CALL 120H" → "CALL label ・・・ label: ; CALL 命令のアドレス+ 122H" ) 「7.88 CALL(Call Subroutine)」を変更 ( " 命令のビットパターン:1101 0000 1001 0000" の記述を追加 ) 176 「7.89 CALL(Call Subroutine)」を変更 ( " 命令のビットパターン:1001 0111 0001 0001" の記述を追加 ) 177 「7.90 RET(Return from Subroutine)」を変更 ( " 命令のビットパターン:1001 0111 0010 0000" の記述を追加 ) 178 「7.91 INT(Software Interrupt)」を変更 ( "INT#9 ∼ #13, #64, #65" → "INT#9 ∼ INT#13, INT#64, INT#65" ) 179 「7.91 INT(Software Interrupt)」を変更 ( " 命令のビットパターン:0001 1111 0010 0000" の記述を追加 ) xvi ページ 変更内容(詳細は本文を参照してください。) 181 「7.92 INTE(Software Interrupt for Emulator)」を変更 ( 命令のビットパターン:1001 1111 0011 0000 の記述を追加 ) 183 「7.93 RETI(Return from Interrupt)」を変更 ( " 命令のビットパターン:1001 0111 0011 0000" の記述を追加 ) 「7.94 Bcc(Branch relative if Condition satisfied)」を変更 ( " 符号拡張され , 分岐先アドレスとなります " → " 符号拡張されます " ) 184 185 「7.94 Bcc(Branch relative if Condition satisfied)」を変更 ( "BRA label9BV label9" → "BRA label9 BV label9" ) ( "BNO label9BNV label9" → "BNO label9 BNV label9" ) ( "BEQ label9BLT label9" → "BEQ label9 BLT label9" ) ( "BNE label9BGE label9" → "BNE label9 BGE label9" ) ( "BC label9BLE label9" → "BC label9 BLE label9" ) ( "BNC label9BGT label9" → "BNC label9 BGT label9" ) ( "BN label9BLS label9" → "BN label9 BLS label9" ) ( "BP label9BHI label9" → "BP label9 BHI label9" ) 「7.94 Bcc(Branch relative if Condition satisfied)」を変更 ( "BHI 50H" → "BHI label ・・・ label: ; BHI 命令のアドレス+ 50H" ) 「7.94 Bcc(Branch relative if Condition satisfied)」を変更 ( " 命令のビットパターン:1110 1111 0010 1000" の記述を追加 ) 186 187 「7.95 JMP:D(Jump)」を変更 ( " 命令のビットパターン:1001 1111 0000 0001" の記述を追加 ) 「7.96 CALL:D(Call Subroutine)」を変更 ( "CALL:D 120H LDI:8 #0, R2 ; 遅延スロットに置かれた命令 …" → "CALL:D label LDI:8 #0, R2 ; 遅延スロットに置かれた命令 ・・・ label: ; CALL:D 命令のアドレス+ 122H" ) 「7.96 CALL:D(Call Subroutine)」を変更 ( " 命令のビットパターン:1101 1000 1001 0000" の記述を追加 ) 188 「7.97 CALL:D(Call Subroutine)」を変更 ( " 命令のビットパターン:1001 1111 0001 0001" の記述を追加 ) 189 「7.98 RET:D(Return from Subroutine)」を変更 ( " 命令のビットパターン:1001 1111 0010 0000" の記述を追加 ) xvii ページ 変更内容(詳細は本文を参照してください。) 「7.99 Bcc:D(Branch relative if Condition satisfied)」を変更 ( " 符号拡張され , 分岐先アドレスとなります " → " 符号拡張されます " ) 190 191 「7.99 Bcc:D(Branch relative if Condition satisfied)」を変更 ( "BRA:D label9BV:D label9" → "BRA:D label9 BV:D label9" ) ( "BNO:D label9BNV:D label9" → "BNO:D label9 BNV:D label9" ) ( "BEQ:D label9BLT:D label9" → "BEQ:D label9 BLT:D label9" ) ( "BNE:D label9BGE:D label9" → "BNE:D label9 BGE:D label9" ) ( "BC:D label9BLE:D label9" → "BC:D label9 BLE:D label9" ) ( "BNC:D label9BGT:D label9" → "BNC:D label9 BGT:D label9" ) ( "BN:D label9BLS:D label9" → "BN:D label9 BLS:D label9" ) ( "BP:D label9BHI:D label9" → "BP:D label9 BHI:D label9" ) 「7.99 Bcc:D(Branch relative if Condition satisfied) 」を変更 ( "BHI:D 50H LDI:8 #255, R1 ; 遅延スロットに置かれた …" → "BHI:D label LDI:8 #255, R1 ; 遅延スロットに置かれた命令 ・・・ label: ; BHI:D 命令のアドレス+ 50H" ) 「7.99 Bcc:D(Branch relative if Condition satisfied)」を変更 ( " 命令のビットパターン:1111 1111 0010 1000" の記述を追加 ) 206 「7.114 LDRES(Load Word Data in Memory to Resource)」を変更 ( " 命令のビットパターン:1011 1100 1000 0010" の記述を追加 ) 208 「7.116 COPOP(Co-Processor Opetation)」を変更 ( " リソース " → " コプロセッサ " ) 210 「7.117 COPLD(Load 32bit Data from Register to Co-processor Register)」を変更 ( " リソース " → " コプロセッサ " ) 212 「7.118 COPST(Store 32bit Data from Co-processor Register to Register)」を変更 ( " リソース " → " コプロセッサ " ) 214 「7.119 COPSV(Save 32bit Data from Co-processor Register to Register)」を変更 ( " リソース " → " コプロセッサ " ) 216 「7.120 NOP(No Operation) 」を変更 ( " 命令のビットパターン:1001 1111 1010 0000" をの追加 ) 217 「7.121 ANDCCR(And Condition Code Register and Immediate Data)」を変更 ( " 命令のビットパターン:1000 0011 1111 1110" を追加 ) 218 「7.122 ORCCR(Or Condition Code Register and Immediate Data)」を変更 ( " 命令のビットパターン:1001 0011 0001 0000" を追加 ) 「7.123 STILM(Set Immediate Data to Interrupt Level Mask Register)」を変更 ( "i8" → "u8" ) 219 「7.123 STILM(Set Immediate Data to Interrupt Level Mask Register)」を変更 ( " 命令のビットパターン:1000 0111 0001 0100" を追加 ) xviii ページ 変更内容(詳細は本文を参照してください。) 221 「7.125 EXTSB(Sign Extend from Byte Data to Word Data)」を変更 ( " 命令のビットパターン:1001 0111 1000 0001" を追加 ) 222 「7.126 EXTUB(Unsign Extend from Byte Data to Word Data) 」を変更 ( " 命令のビットパターン:1001 0111 1001 0001" を追加 ) 223 「7.127 EXTSH(Sign Extend from Byte Data to Word Data)」を変更 ( " 命令のビットパターン:1001 0111 1010 0001" を追加 ) 224 「7.128 EXTUH(Unsign Extend from Byte Data to Word Data) 」を変更 ( " 命令のビットパターン:1001 0111 1011 0001" を追加 ) 225 「7.129 LDM0(Load Multiple Registers)」を変更 ( a(n:1)+b+1 → :a(n-1)+b+1 ) 234 「7.133 ENTER(Enter Function) 」を変更 ( " 命令のビットパターン :XXXX XXXX 0000 0011" → " 命令のビットパターン :0000 1111 0000 0011" ) 235 「7.134 LEAVE(Leave Function) 」を変更 ( " 命令のビットパターン:1001 1111 1001 0000" を追加 ) 236 「7.135 XCHB(Exchange Byte Data)」を変更 ( " 命令のビットパターン:1000 1010 0001 0000" を追加 ) 「A.1 命令一覧表の記号の意味」 「● ニーモニック欄および動作欄」を変更 ( "-128 ∼ 255" → "0 ∼ 255" ) 「A.1 命令一覧表の記号の意味」 「● ニーモニック欄および動作欄」を変更 ( " <注意事項> -128 ∼ -1 は 128 ∼ 255 として扱います。" を削除 ) 「A.1 命令一覧表の記号の意味」 「● ニーモニック欄および動作欄」を変更 ( "-0x80000H ∼ 0xFFFFFH" → "00000H ∼ FFFFFH" ) 239 「A.1 命令一覧表の記号の意味」 「● ニーモニック欄および動作欄」を変更 ( " <注意事項> -0x80000H ∼ -1 は 0x80000H ∼ 0xFFFFFH として扱います。" を削除 ) 「A.1 命令一覧表の記号の意味」 「● ニーモニック欄および動作欄」を変更 ( "-0x80000000H ∼ 0xFFFFFFFFH" → "00000000H ∼ FFFFFFFFH" ) 「A.1 命令一覧表の記号の意味」 「● ニーモニック欄および動作欄」を変更 ( " <注意事項> -0x80000000H ∼ -1 は , 0x80000000H ∼ 0xFFFFFFFFH として扱います。" を削除 ) 240 「A.1 命令一覧表の記号の意味」 「● ニーモニック欄および動作欄」を変更 ( "Ri" → "Ri, Rj" ) xix ページ 変更内容(詳細は本文を参照してください。) 「A.1 命令一覧表の記号の意味」 「● 動作欄」を変更 ( "( ) 間接アドレッシングを示します。( ) 内のレジスタまたは式の示すアドレスのメモリ 読出し・書込み値です。" を追加 ) 240 「A.1 命令一覧表の記号を意味」 「● 動作欄 」の変更 ( "{ } 演算の優先順位を明示するための括弧になります。( ) を間接アドレス指定に使用し ているため , { } を使用します。" を追加 ) 「A.2 命令一覧表」 「表 A.2-13 ダイレクトアドレス指定命令 (14 命令 )」 「<注意事項>」を変更 ( "disp8 ∼ disp10" → "dir8 ∼ dir10" ) 249 「A.2 命令一覧表」 「表 A.2-13 ダイレクトアドレス指定命令 (14 命令 )」 「<注意事項>」を変更 ( "disp8 → dir=disp8" → "dir8 → dir=dir8" ) ( "disp9 → dir=disp9 > >1" → "dir9 → dir=dir9 >>1" ) ( "disp10 → dir=disp10 > >2" → "dir10 → dir=dir10 >>2" ) 250 「A.2 命令一覧表」 「表 A.2-16 その他の命令 (16 命令 )」を変更 ( "i8" → "u8" ) 253 「B.1 命令マップ」 「図 B.1-1 命令マップ 」を変更 ( R → Ri ) 254 「B.2 E フォーマット」 「表 B.2-1 E フォーマット」を変更 ( CRl → CRj ), ( "Ri" → "Rj" ) xx 第1章 FR ファミリの概要 FR ファミリ CPU コアの特長と構成例について説 明します。 1.1 FR ファミリ CPU コアの特長 1.2 FR ファミリの構成例 1.3 FR ファミリ CPU の構成例 1 第 1 章 FR ファミリの概要 1.1 FR ファミリ CPU コアの特長 FR ファミリ CPU は富士通オリジナルのアーキテクチャをもつ , 32 ビット RISC ベースのコントローラ向け CPU コアです。特に高速制御を行う必要がある組込み制 御向けのマイクロコントローラの CPU コアとして最適なアーキテクチャとなってい ます。 ■ FR ファミリ CPU コアの特長 • 汎用レジスタアーキテクチャ • 32 ビットアドレス (4G バイト ) 指定のリニア空間 • 16 ビット固定命令長 ( 即値データ , コプロセッサ命令を除く ) • 5 段パイプライン構造による基本命令 , 1 命令 1 サイクルの高速処理 • 32 ビット× 32 ビットの演算を 5 サイクルで完了する乗算命令 • ステップ除算命令による 32 ビット÷ 32 ビットの除算の実行 • 周辺アクセスのためのダイレクトアドレッシング命令 • ペリフェラルアクセラレータを直接指定するコプロセッサ命令 • 6 サイクルで完了する高速割込み処理 2 第 1 章 FR ファミリの概要 1.2 FR ファミリの構成例 FR ファミリのデバイスは , 各モジュールがバスによって接続されるブロック構成に なっています。この構成にすることによって , 必要に応じて各モジュールを容易に組 み換えられ , 多様な機能構成に容易に対応できます。 図 1.2-1 に , FR ファミリのデバイスの構成例を示します。 ■ FR ファミリの構成例 図 1.2-1 FR ファミリのデバイスの構成例 FRファミリCPU 低速周辺 低速周辺 周辺バス RAM 命令バス データバス データ キャッシュ 命令キャッシュ DMAC 低速周辺 高速周辺 内部バスインタフェース ROM 統合 バス 低速周辺 ユーザバスインタフェース 必須 汎用ポート :品種によらず必ずあり オプション :品種により存在しない場合あり 3 第 1 章 FR ファミリの概要 1.3 FR ファミリ CPU の構成例 FR ファミリ CPU は汎用レジスタを中心として , 用途別の特殊機能を果たす専用レ ジスタと ALU および乗算器などからブロックを構成しています。 図 1.3-1 に , FR ファミリ CPU の構成例を示します。 ■ FR ファミリ CPU の構成例 図 1.3-1 FR ファミリ CPU の構成例 命令 データ 命令 デコーダ バイパス インターロック 命令 シーケンサ 制御信号 パイプライン 例外処理 ウェイト キャンセル 制御 ウェイト バス制御 データ 内部バス 内部バス バレル シフタ 乗算器 ALU 32×8 ビット データ アドレス 命令 アドレス 4 バイパス レジスタ ファイル 割込み NMI PC adder/ inc PC 内部バス 第2章 メモリアーキテクチャ FR ファミリ CPU の持つメモリアーキテクチャに ついて説明します。メモリアーキテクチャとは , メ モリ空間の割当て , メモリへアクセスするときの方 式などのことです。 2.1 FR ファミリのメモリ空間 2.2 ビットの順序とバイトの順序 2.3 ワードアライメント 5 第 2 章 メモリアーキテクチャ 2.1 FR ファミリのメモリ空間 FR ファミリはメモリ空間をバイト単位で管理し , 32 ビットの空間をリニアに指定し ます。さらに , 命令効率の向上のために , ダイレクトアドレス領域とベクタテーブル 領域が決められた領域に割り当ててあります。 ■ メモリ空間 図 2.1-1 に , FR ファミリのメモリ空間を示します。 なお , ダイレクトアドレス領域の詳細は「2.1.1 ダイレクトアドレス領域」, ベクタテー ブル領域の詳細は「2.1.2 ベクタテーブル領域」で説明します。 図 2.1-1 FR ファミリのメモリ空間 ダイレクトアドレス領域 一般のアドレッシング 0000 0000H バイトデータ 0000 0100H ハーフワードデータ 0000 0200H ワードデータ 0000 0400H ~ ~ 000F FC00H 0010 0000H ~ FFFF FFFFH 000F FC00H ベクタテーブル 初期領域 プログラムまたは データ領域 TBR ↑TBRの初期値 ~ ■ 未使用ベクタテーブル領域 未使用ベクタテーブル領域は , プログラムまたはデータ領域として使用できます。 6 第 2 章 メモリアーキテクチャ 2.1.1 ダイレクトアドレス領域 アドレス空間の下位アドレスにダイレクトアドレス領域があります。ダイレクトア ドレス指定命令の中でアドレスを直接指定することにより , 汎用レジスタを使用せず に命令中のオペランド情報だけでこの領域へのアクセスを行うことができます。ダ イレクトアドレス指定可能なアドレス領域の大きさは , 転送するデータ長に依存して 変化します。 ■ ダイレクトアドレス領域 転送するデータ長に依存して変化するダイレクトアドレス指定可能領域を以下に示し ます。 • 転送がバイトデータの場合…… 0000 0000H ∼ 0000 00FFH • 転送がハーフワードデータの場合…… 0000 0000H ∼ 0000 01FFH • 転送がワードデータの場合…… 0000 0000H ∼ 0000 03FFH ■ 命令中のオペランド情報の使い方 命令内で指定する 8 ビットのアドレス情報を以下に示します。 • バイトデータの場合……そのままアドレスの下位 8 ビットとして使用 • ハーフワードデータの場合……2 倍してアドレスの下位 9 ビットとして使用 • ワードデータの場合……4 倍してアドレスの下位 10 ビットとして使用 図 2.1-2 に , ダイレクトアドレス指定の使用データ長とメモリアドレスの関係を示しま す。 図 2.1-2 ダイレクトアドレス指定の使用データ長とメモリアドレスの関係 〔例1〕バイトデータの場合:DMOVB R13,@58H オブジェクトコード:1A58H ⇒ シフトなし ⇒⇒⇒⇒⇒58H メモリ空間 ~ ~ ⇒ R13 12345678 0000 0058H 〔例2〕ハーフワードデータの場合:DMOVH R13,@58H 右1ビットシフト オブジェクトコード:192CH ⇒ 左1ビットシフト ⇒⇒⇒58H 78 ~ ~ メモリ空間 ~ ~ ⇒ R13 12345678 0000 0058H 〔例3〕ワードデータの場合:DMOV R13,@58H 右2ビットシフト オブジェクトコード:1816H ⇒ 左2ビットシフト ⇒⇒⇒58H 5678 ~ ~ メモリ空間 ~ ~ ⇒ R13 12345678 1345678 0000 0058H ~ ~ 7 第 2 章 メモリアーキテクチャ 2.1.2 ベクタテーブル領域 テーブルベースレジスタ (TBR) の内容が示すアドレスから 1K バイトの領域は , EIT のベクタアドレスを格納する領域です。 ■ ベクタテーブル領域の概要 テーブルベースレジスタ (TBR) の内容が示すアドレスから 1K バイトの領域は EIT の ベクタアドレスを格納する領域です。この領域に例外処理 , 割込み処理 , トラップ処理 のエントリアドレスを記述します。 テーブルベースレジスタ (TBR) の書換えにより , この領域はワードアライメントの制 約内で任意の領域に割り当てることができます。図 2.1-3 に , ベクタテーブルの構造を 示します。 図 2.1-3 テーブルベースレジスタ (TBR) とベクタテーブルアドレスの関係 メモリ空間 番号 TBRからの オフセット FFH 000H INT命令のエントリアドレス FEH 004H INT命令のエントリアドレス FDH 008H INT命令のエントリアドレス FCH 00CH INT命令のエントリアドレス 00H 3FCH リセット処理のエントリアドレス 0000 0000H ~ TBR ~ ベクタ テーブル 領域 1Kバイト FFFF FFFFH ~ EIT要因 ~ ■ ベクタテーブル領域の内容 ベクタテーブルは各 EIT 処理プログラムのエントリアドレスにより構成されます。各 テーブルは , CPU のアーキテクチャにより固定されて使用されるものと , 内蔵周辺の種 類により変化するものがあります。表 2.1-1 にベクタテーブル領域の構造を示します。 表 2.1-1 ベクタテーブル領域の構造 (1 / 2) 8 TBR からの オフセット 番号 HEX 品種 依存 000H FFH なし INT #0FFH 004H FEH なし INT #0FEH … … … 2F8H 41H なし システム予約 2FCH 40H なし システム予約 … … … EIT 内容 備考 … … 使用しないでください … … 第 2 章 メモリアーキテクチャ 表 2.1-1 ベクタテーブル領域の構造 (2 / 2) TBR からの オフセット 番号 HEX 品種 依存 33CH 30H なし INT #030H 340H 2FH あり INT #02FH または IR31 344H 2EH あり INT #02EH または IR30 … … … 3BCH 10H あり INT #010H または IR00 3C0H 0FH なし INT #00FH または NMI 3C4H 0EH なし 未定義命令例外 3C8H 0DH なし エミュレータ用例外 3CCH 0CH なし ステップトレースブレークトラップ 3D0H 0BH なし オペランドブレークトラップ 3D4H 0AH なし 命令ブレークトラップ 3D8H 09H なし エミュレータ用例外 3DCH 08H なし 3E0H 07H なし 3E4H 06H なし … … … 3F8H 01H あり システム予約またはモードベクタ 各品種のハードウェアマ ニュアルを参照のこと 3FCH 00H なし リセット * EIT 内容 … 備考 この例は 32 要因 拡張時は番号が 大きい方へ延びる 各品種のハードウェアマ ニュアルを参照のこと INT #008H または コプロセッサエラートラップ INT #007H または コプロセッサ不在トラップ システム予約 使用しないでください … * : TBR の値を変更しても , リセットベクタは常に固定アドレス "000FFFFCH" が使用されます。 ■ ベクタテーブル領域の初期値 リセットにより , テーブルベースレジスタ (TBR) が "000FFC00H" になりますので , ベ クタテーブル領域は "000FFC00H" から "000FFFFFH" になります。 9 第 2 章 メモリアーキテクチャ 2.2 ビットの順序とバイトの順序 FR ファミリのもつデータタイプには 8, 16, 32 ビットの 3 種類があり , これらをメ モリへ配置する際の順序について説明します。 FR ファミリのビットの順序は MSB に近いほど番号が大きくなり , バイトの順序は アドレスが小さいほど番号が大きい構成です。 ■ ビットの順序とバイトの順序 ビットの順序の並びは汎用レジスタに転送したときに , MSB に近い方が大きい番号 , LSB に近い方が小さい番号となります。また , バイトの順序の並びは上位データをメモ リアドレスの小さい方に配置し , 下位データを大きい方に配置する構成です。 図 2.2-1 に , ビットの順序とバイトの順序を示します。 図 2.2-1 ビットの順序とバイトの順序 0000 0000H ビット位置 ⇒ 31 24 23 1615 87 0 R0 H 34 H 56 H 78 H 12 メモリ空間 ~ ~ 1234 5678H 12H 1234 5679H 34H 1234 567AH 56H 1234 567BH 78H FFFF FFFFH ~ LD @R10,R0 ~ R10 10 12345678H 第 2 章 メモリアーキテクチャ ワードアライメント 2.3 FR ファミリには , 使用するデータ長により指定するメモリアドレス ( ワードアライ メント ) に制約があります。 ■ プログラムにおけるワードアライメントに対する制約 命令長はハーフワードであり , 2 の倍数のアドレスに配置する必要があります。分岐命 令などで , 結果として PC に奇数値を格納するような状況になったとしても , PC の最下 位ビットを "0" と見なします。したがって , 分岐先の命令をフェッチしようとして発生 するアドレスは , 常に偶数扱いになります。 ■ データにおけるワードアライメントに対する制約 ● ワードデータ 4 の倍数のアドレスに配置する必要があります。オペランドの値が 4 の倍数以外であっ た場合でも , メモリアドレスの最下位 2 ビットは強制的に "0" と見なします。 ● ハーフワードデータ 2 の倍数のアドレスに配置する必要があります。オペランドの値が 2 の倍数以外であっ た場合でも , メモリアドレスの最下位ビットは強制的に "0" と見なします。 ● バイトデータ 配置するアドレスに制約はありません。 ワードデータおよびハーフワードデータのアクセス時に一部のビットを強制的に "0" に する対象は , 実行アドレスの計算後の結果です。アドレス情報の供給元ではありません。 図 2.3-1 に , プログラムワードバウンダリとデータワードバウンダリの例を示します。 図 2.3-1 プログラムワードバウンダリとデータワードバウンダリの例 R10 12345679H JMP @R10;0ビット目=0 12345678H R1 43215679H 4321567BH ~ R14 ~ 1234 5678H ST R13,@(R14,4) 1234 567AH STH R13,@R2 1234 567CH STB R13,@R1 EFH 89ABCDEFH 1,0ビット目 =0 4321567CH CDEFH 4321 567CH 89ABH 4321 567EH CDEFH FFFF FFFFH 4321567FH ~ R13 ~ 4321567BH + 00000004H ⇒ そのまま 4321 5678H 0ビット目=0 4321 567AH 4321567BH ⇒ R2 メモリ空間 ⇒ PC 0000 0000H ~ ~ 11 第 2 章 メモリアーキテクチャ 12 第3章 レジスタ説明 FR ファミリ CPU 内に存在するレジスタについて 説明します。 3.1 FR ファミリのレジスタ構成 3.2 汎用レジスタ 3.3 専用レジスタ 13 第 3 章 レジスタ説明 3.1 FR ファミリのレジスタ構成 FR ファミリには , 汎用レジスタと専用レジスタの 2 種類のレジスタがあります。 • 汎用レジスタ : 演算データやアドレス情報を保持 • 専用レジスタ : 用途別の情報を保持 図 3.1-1 に , FR ファミリのレジスタ構成を示します。 ■ FR ファミリのレジスタ構成 図 3.1-1 FR ファミリのレジスタ構成 初期値 32ビット 汎用レジスタ R0 不定 R1 不定 R2 不定 R3 不定 R12 不定 R13 アキュムレータ(AC) 不定 R14 フレームポインタ(FP) 不定 R15 00000000H SSPまたはUSP PC リセットエントリアドレス 専用レジスタ PS - ILM SCR CCR ILM=01111B SCR=XX0B CCR=XX00XXXXB TBR 000FFC00H RP 不定 SSP 00000000H USP 不定 MD 不定 64ビット 14 - 第 3 章 レジスタ説明 3.2 汎用レジスタ FR ファミリ CPU は , 各種演算の結果の保持 , メモリアクセスのポインタとしてのア ドレス情報の保持などに使用します。また , ある種の命令においては特別な用途があ ります。 ■ 汎用レジスタの概要 FR ファミリ CPU には , 32 ビット長の汎用レジスタが 16 本あります。一般的な命令で は , これら 16 本の汎用レジスタは区別なく使用することができます。 図 3.2-1 に汎用レジスタの構成を示します。 図 3.2-1 汎用レジスタの構成 初期値 32ビット R0 不定 R1 不定 R2 不定 R3 不定 R12 不定 R13 アキュムレータ(AC) 不定 R14 フレームポインタ(FP) 不定 R15 SSPまたはUSP 00000000H 15 第 3 章 レジスタ説明 ■ 汎用レジスタの特殊な使い方 R13, R14, R15 は一般的な汎用レジスタの使用方法のほかに , ある種の命令においては 以下に示すような特別な使用方法があります。 ● R13( アキュムレータ :AC) • メモリとのロード / ストア命令でのベースアドレスレジスタ [ 例 :LD @(R13, Rj), Ri] • ダイレクトアドレス指定におけるアキュムレータ [ 例 :DMOV @dir10, R13] • ダイレクトアドレス指定におけるメモリポインタ [ 例 :DMOV @dir10,@R13+] ● R14( フレームポインタ :FP) • メモリとのロード / ストア命令でのインデックスレジスタ [ 例 :LD @(R14, disp10), Ri] • 動的領域の確保 / 開放でのフレームポインタ [ 例 :ENTER #u10] ● R15( スタックポインタ :SP) • メモリとのロード / ストア命令でのインデックスレジスタ [ 例 :LD @(R15, udisp6), Ri] • スタックポインタ [ 例 :LD @R15+, Ri] • 動的領域の確保 / 開放でのスタックポインタ [ 例 :ENTER #u10] ■ R15 とスタックポインタの関係 R15は物理的には専用レジスタのシステムスタックポインタ(SSP)またはユーザスタッ クポインタ (USP) のいずれかになります。命令記述で R15 を指定した場合 , プログラ ムステータス (PS) の中にあるコンディションコードレジスタ (CCR) の S フラグの値が "1" のときは USP, "0" のときは SSP として使用します。 なお , RETI 命令で EIT ハンドラから復帰してくるときは S フラグの値が必ず "0" になっ ている必要があります。 ■ 汎用レジスタの初期値 リセットで , R00 ∼ R14 は不定 , R15 は "00000000H " となります。 16 第 3 章 レジスタ説明 専用レジスタ 3.3 FR ファミリには , 各種用途専用の 32 ビット長専用レジスタが 6 本と , 乗除算用の 64 ビット長専用レジスタが 1 本あります。 ■ 専用レジスタ 以下に 7 種類の専用レジスタを示します。詳細は 「 , 3.3.1 プログラムカウンタ (PC)」∼ 「3.3.6 乗除算レジスタ (MD)」で説明します。 ● 32 ビット専用レジスタ • プログラムカウンタ (PC) • プログラムステータス (PS) • テーブルベースレジスタ (TBR) • リターンポインタ (RP) • システムスタックポインタ (SSP) • ユーザスタックポインタ (USP) ● 64 ビット専用レジスタ • 乗除算レジスタ (MD) 図 3.3-1 に , 専用レジスタの構成を示します。 図 3.3-1 専用レジスタの構成 PC PS リセットエントリアドレス - ILM - SCR CCR ILM=01111B SCR=XX0B CCR=XX00XXXXB TBR 000FFC00H RP 不定 SSP 00000000H USP 不定 MD 不定 64ビット 17 第 3 章 レジスタ説明 3.3.1 プログラムカウンタ (PC) 現在実行中の命令を格納しているアドレスを指すレジスタです。リセットで PC の 内容はベクタテーブルに記述したリセットエントリアドレスになります。 ■ プログラムカウンタの概要 現在実行中の命令を格納してあるアドレスを指すレジスタです。最下位の 1 ビットは "0"として扱います。 このため,各命令は2の倍数のアドレスに記述する必要があります。 ■ プログラムカウンタの機能 ● プログラムカウンタの最下位の 1 ビット 最下位の 1 ビットはデバイス内部の回路で "0" として扱います。このため , 最下位ビッ トへ "1" を書き込んでも , アドレスとしては "0" と同じように扱われます。セル自体は 存在しますが , プログラムアドレスの更新の際に , 最下位ビットが "1" であった場合は "0" になるので , 分岐直後以外は必ず "0" になります。 最下位の 1 ビットはデバイス内部の回路で "0" と扱う設計になっていますので , 各命令 は 2 の倍数のアドレスに記述する必要があります。 ● プログラムカウンタの初期値 リセットで , ベクタテーブルに記述したリセットエントリアドレスになります。テーブ ルベースレジスタ (TBR) の初期化の方を先に行うため , リセットベクタのアドレスは "000FFFFCH " となります。 18 第 3 章 レジスタ説明 3.3.2 プログラムステータス (PS) プログラムステータス (PS) は , プログラム実行の状態を示すレジスタで , 以下の 3 つのパートがあります。 • インタラプトレベルマスクレジスタ (ILM) • システムコンディションコードレジスタ (SCR) • コンディションコードレジスタ (CCR) ■ プログラムステータスの概要 プログラムステータスは , 割込み許可レベルの設定 , CPU 内のプログラムトレースブ レーク機能の制御 , 命令実行状況の状態表示をする各レジスタがあります。 ■ プログラムステータスの構成 図 3.3-2 に , プログラムステータスの構成を示します。 図 3.3-2 プログラムステータスの構成 bit No ⇒ 31 21 20 PS 空き 16 15 ILM 1110 空き 08 07 SCR 00 CCR ■ プログラムステータスの空きビット 空きビットはすべて将来の拡張用として予約済みです。書込み値は "0" としてくださ い。読出し値は常に "0" です。 ■ インタラプトレベルマスクレジスタ (ILM: bit20 ∼ bit16) ● ILM のビット構成 図 3.3-3 ILM のビット構成 20 ILM 19 18 17 16 ILM4 ILM3 ILM2 ILM1 ILM0 初期値 01111B ● ILM の機能 ILM は , 割込み受付けを行うレベルを規定するレジスタです。CCR 中の I フラグが "1" のときは , 本レジスタの内容と現在要求中の割込みに対応する割込みレベルを比較し , 本レジスタの値の方が大きいときに割込み処理を起動します。割込みレベルの強弱は , 0 に近いほど強く , 31 に近いほど弱くなります。ただし , ILM4 はそのほかのビットと 異なり , 設定可能な値に制約があります。 図 3.3-4 に , ILM の機能を示します。 19 第 3 章 レジスタ説明 図 3.3-4 ILM の機能 FRファミリCPU 周辺 割込みコントローラ ILM ICR 29 割込み要求 Iフラグ 1 25 comp 29>25 A N D 割込み起動 起動OK ● ILM のプログラムで設定可能な値 元の値が 16 ∼ 31 のとき , 新たな値として設定できるのは 16 ∼ 31 です。0 ∼ 15 を設 定する命令を実行すると , ( 設定した値 +16) という値が転送されます。 元の値が 0 ∼ 15 のときは , 0 ∼ 31 の任意の値を設定できます。 ● リセットによる ILM の初期値 リセットで "01111B" になります。 ■ システムコンディションコードレジスタ (SCR: bit10 ∼ bit08) ● SCR のビット構成 図 3.3-5 SCR のビット構成 SCR 10 09 08 D1 D0 T 初期値 XXOB ● SCR の機能 • D1, D0 ビット D1, D0 ビットはステップ除算実行時の中間データです。ステップ除算プログラム実行 中に , 割込みが発生した場合の再開を保証するためのレジスタです。除算処理実行途中 にこのレジスタの内容を変更すると , 除算結果は保証されません。 • T ビット T ビットはステップトレーストラップフラグです。このビットを "1" にすることでス テップトレーストラップの動作が有効になります。 <注意事項> ステップトレーストラップ処理ルーチンのデバッグをエミュレータで行うことはできま せん。 ● リセットによる SCR の初期値 D1, D0 は不定 , T ビットは "0" になります。 20 第 3 章 レジスタ説明 ■ コンディションコードレジスタ (CCR: bit07 ∼ bit00) ● CCR のビット構成 図 3.3-6 CCR のビット構成 CCR 07 06 05 04 03 02 01 00 - - S I N Z V C 初期値 --00XXXXB ● CCR の機能 • S フラグ 使用するスタックポインタを選択します。"0" でシステムスタックポインタ (SSP), "1" でユーザスタックポインタ (USP) を指定します。 なお , RETI 命令は "0" のときのみ実行可能です。 • I フラグ マスク可能割込みの許可 / 禁止を制御します。"0" で禁止 , "1" で許可となります。 • N フラグ 演算の結果を 2 の補数として扱ったときの結果の正負を示します。"0" で正 , "1" で負 を示します。 • Z フラグ 演算の結果が "0" であったかどうかを示します。"0" で演算結果が "0" でないこと , "1" で演算結果が "0" であることを示します。 • V フラグ 演算の結果を 2 の補数として扱ったときの結果にオーバフローがあったかどうかを示 します。"0" でオーバフローなし , "1" でオーバフローありを示します。 • C フラグ 演算の結果に最上位ビットからのキャリまたはボローがあったかどうかを示します。 "0" でキャリまたはボローなし , "1" でキャリまたはボローありを示します。また , シフ ト命令の場合は , 最後にシフトアウトしたビットの値になります。 ● リセットによる CCR の初期値 S, I フラグは "0" になります。N, Z, V, C フラグは不定です。 21 第 3 章 レジスタ説明 ■ PS レジスタに関する注意事項 一部の命令で PS レジスタを先行処理しているため , 下記の例外動作により , デバッガ ご使用時に割込み処理ルーチンでブレークしたり , PS レジスタ内のフラグの表示内容 が更新されたりする場合があります。いずれの場合も , EIT から復帰後以降に , 正しく 再処理を行うように設計されていますので , EIT 前後の動作は仕様どおりの処理を行い ます。 ● DIV0U/DIV0S 命令の直前の命令で , a) ユーザ割込み・NMI を受けた場合 , b) ステップ実行を 行った場合 , c) データイベントまたはエミュレータメニューにてブレークした場合 , 以下 のような動作を行う場合があります。 1. D0, D1 フラグが先行して更新されます。 2. EIT 処理ルーチン ( ユーザ割込み・NMI またはエミュレータ ) を実行します。 3. EIT から復帰後 , DIV0U/DIV0S 命令が実行され , D0, D1 フラグが "1.") と同じ値に更 新されます。 ● ユーザ割込み・NMI 要因が発生している状態で , 割込みを許可するために ORCCR/STILM/ MOV Ri, PS の各命令が実行されると , 以下のような動作を行います。 1. PS レジスタが先行して更新されます。 2. EIT 処理ルーチン ( ユーザ割込み・NMI) を実行します。 3. EIT から復帰後 , 上記命令が実行され , PS レジスタが "1." と同じ値に更新されます。 22 第 3 章 レジスタ説明 テーブルベースレジスタ (TBR) 3.3.3 テーブルベースレジスタ (TBR) は , EIT 発生時のエントリアドレスを格納するテー ブルを指すレジスタです。 ■ テーブルベースレジスタの概要 テーブルベースレジスタ (TBR) は , EIT 発生時のエントリアドレスを格納するテーブル を指すレジスタです。このレジスタの内容と発生した EIT に対応したベクタオフセッ トの加算値が参照するベクタのアドレスになります。 図 3.3-7 に , テーブルベースレジスタの動作例を示します。 図 3.3-7 テーブルベースレジスタ (TBR) の動作例 ベクタ対応表 ベクタ ベクタ番号 オフセット ~ タイマ 割込み ~ 11H ~ bit31 0 Eaddr0 Eaddr1 Eaddr2 Eaddr3 PC ~ TBR 87654123H 3B8H ~ ~ 加算器 ベクタテーブル +0 ⇒ 87654123H+000003B8H 876544DBH ~ 876544D8H ~ +1 ~ +2 ~ +3 ~ ~ EAddr0 EAddr1 EAddr2 EAddr3 ~ ~ ~ ~ <注意事項> ベクタテーブルの参照では , ワードアクセスによるアドレスアライメント操作が適用され ます。 23 第 3 章 レジスタ説明 ■ テーブルベースレジスタの構成 図 3.3-8 に , テーブルベースレジスタのビット構成を示します。 図 3.3-8 テーブルベースレジスタのビット構成 bit No ⇒ 31 00 TBR ■ テーブルベースレジスタの機能 ● ベクタテーブル参照アドレス ベクタ参照のためのアドレスは , TBR の内容と各種割込みで決まっているベクタオフ セット値の加算値より生成されます。ベクタへのアクセスはワード単位で行いますの で , 生成アドレスの下位 2 ビットは強制的に "0" になります。 ● ベクタテーブルの配置 ベクタテーブルの配置はワード単位で行うことができます。 ● テーブルベースレジスタの初期値 リセットで , "000FFC00H" となります。 ■ テーブルベースレジスタの注意事項 TBR には , "FFFFFC00H" 以上の値を設定しないでください。これを超えた値を設定す ると , オフセット値を加算した結果がオーバフローする場合があります。加算結果が オーバフローした場合 , "00000000H" ∼ "000003FFH" の領域に対してベクタアクセスを 行うことになり暴走の原因となります。 24 第 3 章 レジスタ説明 リターンポインタ (RP) 3.3.4 リターンポインタ (RP) は , CALL 命令の実行後の戻りアドレスを保証するために , CALL 命令実行時のプログラムカウンタ (PC) の値を保持するレジスタです。 ■ リターンポインタの概要 リターンポインタ (RP) の内容は , 遅延スロットあり CALL 命令であればその命令が格 納されているアドレス +4 に , 遅延スロットなし CALL 命令であればその命令が格納さ れているアドレス +2 になります。RET 命令の実行により , RP から退避データを PC に 戻します。 図 3.3-9 に遅延スロットなし CALL 命令実行時の RP の動作例を , 図 3.3-10 に RET 命令 実行時の RP の動作例を示します。 図 3.3-9 遅延スロットなし CALL 命令実行時の RP の動作例 メモリ空間 実行前 ~ PC 12345678H RP ????????H メモリ空間 実行後 ~ ~ CALL SUB1 ~ ~ PC SUB1 RP 1234567AH RET SUB1 ~ ~ CALL SUB1 ~ RET SUB1 ~ ~ ~ ~ 図 3.3-10 RET 命令実行時の RP の動作例 メモリ空間 ~ 実行前 メモリ空間 ~ ~ 実行後 CALL SUB1 PC SUB1 RP 1234567AH CALL:D SUB ADD #1,R00 ~ ~ RET SUB1 ~ ~ PC 1234567AH RP 1234567AH ADD #1,R00 ~ RET SUB1 ~ ~ ~ ~ 25 第 3 章 レジスタ説明 ■ リターンポインタの構成 図 3.3-11 にリターンポインタのビット構成を示します。 図 3.3-11 リターンポインタのビット構成 bit No ⇒ 31 00 RP ■ リターンポインタの機能 ● 多重 CALL 命令時のリターンポインタ RP はスタック構造ではないので , サブルーチンから別のサブルーチンを呼び出す場合 には , あらかじめ退避しておく必要があります。 ● リターンポインタの初期値 初期値は不定です。 26 第 3 章 レジスタ説明 3.3.5 システムスタックポインタ (SSP), ユーザスタックポ インタ (USP) システムスタックポインタ (SSP) とユーザスタックポインタ (USP) は , スタック領 域を示すレジスタです。CCR 中の S フラグの値により , SSP か USP のいずれを使 用するかが決まります。また , EIT 発生時にプログラムカウンタ (PC) とプログラム ステータス (PS) を退避するスタックは , S フラグの設定値とは関係なく SSP に設定 された領域になります。 ■ システムスタックポインタ , ユーザスタックポインタの概要 システムスタックポインタ (SSP) とユーザスタックポインタ (USP) は , スタック領域を 示すポインタです。スタック領域は , 汎用レジスタの R15 を間接レジスタとする命令 およびレジスタマルチ転送命令でアクセスします。R15 を間接レジスタとして使用す るレジスタは , コンディションコードレジスタ (CCR) の S フラグが "0" のときに SSP, S フラグが "1" のときに USP となります。また , S フラグの値によらず EIT 発生時に PC と PS を退避するスタックは , SSP が示す領域になります。 図 3.3-12 に , S フラグが "0", 図 3.3-13 に , S フラグが "1" のときに ST R13,@-R15 を実 行したときのスタックポインタの動作例を示します。 図 3.3-12 S フラグが "0" のときに ST R13,@-R15 を実行したときのスタックポインタの動作例 ST R13,@-R15実行前 SSP 12345678H USP 76543210H R13 17263540H メモリ空間 00000000H ~ ~ ???????? ???????? ~ SSP 12345674H USP 76543210H R13 17263540H FFFFFFFFH S CCR ~ ST R13,@-R15実行後 メモリ空間 00000000H ~ ~ 17263540H ???????? ~ CCR 0 ~ FFFFFFFFH S 0 図 3.3-13 S フラグが "1" のときに ST R13,@-R15 を実行したときのスタックポインタの動作例 ST R13,@-R15実行前 SSP 12345678H USP 76543210H R13 17263540H S CCR 1 メモリ空間 00000000H ~ ~ ???????? ???????? ~ ~ ST R13,@-R15実行後 SSP 12345678H USP 7654320CH R13 17263540H FFFFFFFFH S CCR メモリ空間 00000000H ~ ~ 17263540H ???????? ~ ~ FFFFFFFFH 1 27 第 3 章 レジスタ説明 ■ スタックポインタの構成 図 3.3-14 に , スタックポインタのビット構成を示します。 図 3.3-14 スタックポインタのビット構成 bit No ⇒ 31 00 SSP USP ■ システムスタックポインタとユーザスタックポインタの機能 ● スタックポインタの自動増減 スタックポインタはプリデクリメント / ポストインクリメントです。 ● スタックポインタの初期値 SSP は "00000000H", USP は不定です。 ■ EIT ハンドラからの復帰 RETI 命令で EIT ハンドラから復帰するときは , S フラグを "0" に設定し , スタックとし てシステムスタックを選択しておく必要があります。詳しくは「4.2 EIT 処理の基本動 作 」の「■ EIT ハンドラからの復帰」中の同項目を参照してください。 28 第 3 章 レジスタ説明 乗除算レジスタ (MD) 3.3.6 乗除算レジスタ (MD) は , 乗算の結果を格納 , 除算の被除数設定と結果を格納する 64 ビットのレジスタです。 ■ 乗除算レジスタの概要 乗除算レジスタ (MD) は , 乗算の結果を格納 , 除算の被除数設定と結果を格納するレジ スタです。乗算の結果は 64 ビットとして MD へ格納されます。除算は , 除算開始前に MD の下位 32 ビットに被除数を設定する必要があります。その後 , 除算を実行すると , 最終的に MD の上位 32 ビットに剰余が , 下位 32 ビットに商が得られます。 図 3.3-15 に , 乗除算レジスタの乗算動作例を , 図 3.3-16 に , 乗除算レジスタの除算動作 例を示します。 図 3.3-15 乗除算レジスタの乗算動作例 MUL ROO,R01 実行後 MUL ROO,R01 実行前 R00 12345678H R00 12345678H R01 76543210H R01 76543210H MD MD ????????????????H 086A1C970B88D780H 図 3.3-16 乗除算レジスタの除算動作例 ステップ除算実行後 ステップ除算実行前 R00 R00 12345678H 12345678H R00を使用 MD ????????76543210H MD 091A264000000006H 29 第 3 章 レジスタ説明 ■ 乗除算レジスタの構成 図 3.3-17 に , 乗除算レジスタのビット構成を示します。 図 3.3-17 乗除算レジスタのビット構成 bit No ⇒ 31 00 MDH MDL ■ 乗除算レジスタの機能 ● 乗除算結果の格納 乗算の結果は MDH に上位 32 ビット , MDL に下位 32 ビットを格納します。 除算の商は 32 ビット長として MDL に , 剰余は 32 ビット長として MDH に , それぞれ 格納します。 ● 乗除算レジスタ (MD) の初期値 初期値は不定です。 30 第4章 リセット , EIT 処理 FR ファミリ CPU のリセットと EIT 処理について 説明します。 リセットは , 現在実行中の処理を強制的に中断し , デバイス全体を初期化して , プログラムを先頭から 再起動させるための方法です。これに対して EIT は , 現在実行中の処理を中断し , 再開できる情報を メモリへ退避した後に , 決められた処理プログラム へ制御を移す方法です。EIT 処理プログラムは , RETI 命令により元のプログラムへ復帰させること ができます。 EIT 処理動作は , 例外 , 割込み , トラップともほぼ 同じで , 以下に示す若干の違いによりそれぞれを区 別しています。 • 割込みとは命令シーケンスとは無関係に発生す るものです。割込み受付け直後の命令から再実 行できるようになっています。 • 例外とは命令シーケンスに関連して発生し , 例外 を発生した命令から再実行できるようになって いるものです。 • トラップとは命令シーケンスに関連して発生し , トラップを発生した命令の次の命令から再実行 できるようになっているものです。 4.1 リセット 4.2 EIT 処理の基本動作 4.3 割込み 4.4 例外処理 4.5 トラップ 4.6 優先順位 31 第 4 章 リセット , EIT 処理 4.1 リセット リセットは , 現在実行中の処理を強制的に中断し , デバイス全体を初期化して , プロ グラムを先頭から再起動させるための方法です。リセットは , LSI を最初に動かし始 めるときや不具合状況に陥ったときの復帰方法として使用します。 ■ リセットの動作 リセットが発生すると , CPU はそれまで行っていた命令動作を中断し , リセットが解除 されるまで停止状態となります。リセットが解除されると , CPU は内部レジスタを初 期化し , 新しいプログラムカウンタ (PC) の値からプログラムを取り込んで実行を再開 します。 ■ リセットによる CPU 内レジスタの初期化値 リセットが発生すると , FR ファミリ CPU は各レジスタを以下に示す状態に初期化しま す。 • PC……"000FFFFCH" に格納したワードデータ • ILM ……"01111B" • T フラグ……"0"( トレース OFF) • I フラグ……"0"( 割込み禁止 ) • S フラグ……"0"(SSP 使用 ) • TBR ……"000FFC00H" • SSP ……"00000000H" • R00 ∼ R14 ……不定 • R15 ……SSP リセットが発生したときの内蔵機能の動作に関しては , 各デバイスのハードウェアマ ニュアルを参照してください。 ■ リセットの優先順位 リセットの方が EIT の各動作より優先順位が高くなっています。 32 第 4 章 リセット , EIT 処理 4.2 EIT 処理の基本動作 割込み , 例外 , トラップは , 一部の条件以外は同一の動作で , 命令実行を中断 , 復帰 させるための情報の退避および処理プログラムへの分岐を行います。 ■ EIT 処理の基本動作 FR ファミリは , EIT が発生すると以下の処理を行います。 1. テーブルベースレジスタ (TBR) が示すベクタテーブルと発生した EIT に対応する番 号のオフセット値から , 発生した EIT の処理プログラムのエントリアドレスを求め ます。 2. 復帰のために , 旧プログラムカウンタ (PC) と旧プログラムステータス (PS) の内容を システムスタックポインタ (SSP) が示すスタック領域へ格納します。 3. 処理フローの最後に新たな EIT 要因発生の有無を検出します。 図 4.2-1 に , EIT シーケンスの動作手順を示します。 図 4.2-1 EIT シーケンスの動作 EITを検出した命令⇒ キャンセルされる命令⇒ IF キャンセルされる命令⇒ ID IF EX MA WB ID xxxx xxxx xxxx IF xxxx xxxx xxxx xxxx ①ベクタアドレス計算と新PC設定 EITシーケンス ②SSP更新とPS退避⇒ ③SSP更新とPC退避⇒ ④新規EIT発生の検出⇒ EITハンドラ先頭命令(分岐先命令)⇒ ID(1) EX(1)MA(1)WB(1) ID(2)EX(2)MA(2) WB(2) ID(3)EX(3) MA(3)WB(3) ID(4)EX(4)MA(4)WB(4) IF ID EX MA PC <注意事項> パイプライン動作については ,「5.1 パイプライン動作」を参照してください。 33 第 4 章 リセット , EIT 処理 ■ ベクタテーブルの構造 ベクタテーブルは主記憶メモリ内にあり , TBR で示されるアドレスから 1K バイトの領 域を占めます。この領域は EIT 用エントリアドレスのためのテーブル領域として使用 しますが,この用途で使用しない場合には通常の命令またはデータ領域として使用する こともできます。 図 4.2-2 に , ベクタテーブルの構造を示します ( この例は 32 要因 ) 。 図 4.2-2 ベクタテーブルの構造 TBR オフセット ベクタ番号 メモリ空間 00000000H ~ ~ ~ 000H FFH INT #0FFH 004H FEH INT #0FEH 008H FDH INT ~ 1K バイト ~ FFFFFFFFH ~ #0FDH ~ ~ 33CH 30H INT #030H 340H 2FH INT #02FH または IR31 344H 2EH INT ~ ~ #02EH または IR30 ~ ~ 3BCH 10H INT #010H または IR00 3C0H 0FH INT 3C4H 0EH 未定義命令例外 3C8H 0DH エミュレータ例外 3CCH 0CH ステップトレーストラップ 3D0H ~ 34 内容 オペランドブレークトラップ 0BH ~ #00FH または NMI ~ 3F8H 01H 3FCH 00H ~ システム予約またはモードベクタ リセット 第 4 章 リセット , EIT 処理 ■ 退避するレジスタ リセット以外は PS と PC を以下のように , CCR 中の S フラグの値によらず SSP が指す スタックへ退避します。リセットでは , 退避操作を行いません。 図 4.2-3 に , EIT 発生時の PC, PS の退避を示します。 図 4.2-3 EIT 発生時の PC, PS の退避図 メモリ空間 割込み直前 00000000H メモリ空間 割込み直後 ~ ~ SSP 7FFFFFF8H 7FFFFFFCH 割込み SSP 80000000H TBR 000FFC00H 12345678H PS 000C0010H 7FFFFFF8H ~ 12345678H 000C0010H 7FFFFFFCH ~ PC ~ 80000000H IL=9 オフセット:000003B8H 00000000H ~ ~ TBR 56781234H + オフセット:000003B8H ~ PC 56781234H PS 00090010H 56781234H + ~ FFFFFFFFH ~ 000FFC00H ~ ~ FFFFFFFFH ■ EIT ハンドラからの復帰 EIT ハンドラからの復帰には RETI 命令を使用します。 このとき , 復帰後のプログラム実行結果を保証するためには CPU の全レジスタ内容が 保存されていることが必要です。 なお , PC と PS については EIT 発生時にスタックに退避した値を RETI 命令による復帰 シーケンス中にスタックから復帰しますので , スタック内の PC, PS の値は必要がない 限り書き換えないでください。また , RETI 命令実行時の S フラグの値は必ず "0" にし てください。 35 第 4 章 リセット , EIT 処理 4.3 割込み 割込みは , 命令シーケンスとは無関係に発生し , それまで実行していた一連の命令 シーケンス処理を再開するために必要な情報を退避し , その後 , 発生した割込みに対 応した処理ルーチンを起動するものです。 割込みを発生する要因には以下の 2 つがあります。 • ユーザ割込み • ノンマスカブルインタラプト (NMI) ■ 割込みの概要 割込みとは命令シーケンスとは無関係に発生し,それまで実行していた一連の命令シー ケンス処理を再開するために必要な情報を退避し , その後 , 発生した割込みに対応した 処理ルーチンを起動するものです。 割込みが発生するより前に CPU に取り込まれ実行中の命令はそのまま継続して実行し ますが , 割込み受付け後にパイプライン動作で取り込んだ命令はキャンセルされます。 このため , 割込み処理完了後に戻る命令は割込み受付け直後の命令からとなります。 ■ 割込みを発生する要因 割込みを発生する要因には以下の 2 つがあります。 • ユーザ割込み ( 詳細は「4.3.1 ユーザ割込み」参照 ) • ノンマスカブルインタラプト (NMI)( 詳細は「4.3.2 ノンマスカブルインタラプト (NMI)」参照 ) ■ ステップ除算プログラム中の割込みの発生 ステップ除算プログラム中で割込みが発生した場合 , 再開を行えるようにするためにプ ログラムステータス (PS) 中に中間データを格納し , スタックへ退避します。このため , スタック内の PS の内容を割込み処理プログラムで書き換えると , 処理再開後の命令動 作は通常と同じように実行しますが , 除算結果が誤った値になります。 36 第 4 章 リセット , EIT 処理 4.3.1 ユーザ割込み ユーザ割込みとは , 各種周辺回路から要求が発生する割込みです。割込み要求ごとに 割込みレベルが設定されており , レベル値に応じて要求をマスクすることができま す。 以下に , ユーザ割込みの受付け条件 , 動作および使い方などについて説明します。 ■ ユーザ割込みの概要 ユーザ割込みとは , 各種周辺回路から要求が発生する割込みです。 割込み要求ごとに割込みレベルが設定されており,レベル値に応じて要求をマスクする ことができます。また , プログラムステータス (PS) のコンディションコードレジスタ (CCR) の I フラグの操作により , 一括して割込みを禁止することも可能です。 端子入力により発生する割込み要求もありますが , ほとんどの割込み要求は , このマイ クロコントローラに内蔵された周辺回路から発生します。 ■ ユーザ割込み要求受付け条件 以下の条件が成立したとき , CPU はユーザ割込みを受け付けます。 • 周辺回路が動作して割込み要求を発生 • 周辺回路の制御レジスタ内にある割込み許可ビットが"許可"状態に設定されている • 発生した割込み要求 (ICR *1) のレベルより ILM *2 のレベルの方が高い場合 • I フラグが "1" の場合 *1:インタラプトコントロールレジスタ ( マイクロコントローラ内にある割込みコント ローラ内のレジスタ ) *2:インタラプトレベルマスクレジスタ (CPU のプログラムステータス (PS) 内のレジス タ) ■ ユーザ割込み受付け時の動作 ユーザ割込みが受け付けられると , 以下の動作を行います。 • PS の内容をシステムスタックに退避 • 次の命令のアドレスをシステムスタックに退避 • システムスタックポインタ (SSP) の値から 8 を減算 • 受け付けた割込み要求の値 ( レベル ) を ILM に格納 • PS のコンディションコードレジスタ (CCR) 内の S フラグに "0" を格納 • プログラムカウンタ (PC) に " 受け付けた割込み要求のベクタアドレス " の値を格納 37 第 4 章 リセット , EIT 処理 ■ 割込み処理を起動するまでの時間 割込み処理を起動するまでの時間は,割込み要求発生時に実行していた命令の実行サイ クル数を n とすると , この命令の実行開始時点より最大 (n+6) サイクルです。 命令中でメモリアクセスを含む場合または命令供給が不足した場合は,その分のウェイ トサイクルが上記の値に加算されます。 ■ 割込み発生時に退避する PC の値 割込みを受け付けると , パイプラインで処理している命令のうち , 動作の中断が間に合 わないものはそのまま実行し,中断が間に合うものは割込み受付け以降の処理をキャン セルします。EIT シーケンスでは , 実行をキャンセルした命令のアドレスを PC として システムスタックに退避します。 ■ ユーザ割込みの使い方 ユーザ割込みを使用する場合には,プログラムにより次の手順で設定を行う必要があり ます。 図 4.3-1 にユーザ割込みの使い方を示します。 図 4.3-1 ユーザ割込みの使い方 FRファミリCPU PS I SSP AND 割込み コントローラ USP ILM ⑦ INT OK ② S ⑥ ② 周辺 ICR#n 割込み 許可 ビット ④ ⑤ 比較 内部バス ① 割込みベクタテーブルの値を設定 ( データとして定義 ) ② SSP の値を設定 ③ テーブルベースレジスタ (TBR) の値を設定 ④ 割込みコントローラ内の , 割込みを発生させようとしている周辺の割込みに対応 する ICR に適切なレベル設定 ⑤ 割込み要求を発生する周辺機能の初期化と割込みの許可 ⑥ PS 内の ILM に適切な値を設定 ⑦ I フラグを "1" に設定 38 第 4 章 リセット , EIT 処理 4.3.2 ノンマスカブルインタラプト (NMI) ノンマスカブルインタラプト (NMI) はノンマスカブルな割込みです。マイクロコン トローラの外部端子 NMI がアクティブになると NMI 要求が発生します。 以下に , NMI の受付け条件 , 動作および使い方などについて説明します。 ■ ノンマスカブルインタラプトの概要 NMI はノンマスカブルな割込みです。マイクロコントローラの外部端子 NMI がアク ティブになると NMI 要求が発生します。 プログラムステータス (PS) のコンディションコードレジスタ (CCR) 内の I フラグによ り割込みを禁止することはできません。 PS のインタラプトレベルマスクレジスタ (ILM) の値によるマスクは有効です。ただし , ソフトウェアからは NMI を抑止する値を ILM に設定することはできないため , プログ ラムから NMI をマスクすることはできません。 ■ ノンマスカブルインタラプト要求受付け条件 以下の条件が成立したとき , CPU は NMI 要求を受け付けます。 ● NMI 端子入力がアクティブ • 通常の動作中 : ネガティブエッジの検出 • ストップモード時 : "L" レベルの検出 ● ILM >15 ■ ノンマスカブルインタラプト受付け時の動作 NMI が受け付けられると , 以下の動作を行います。 1. PS の内容をシステムスタックに退避 2. 次の命令のアドレスをシステムスタックに退避 3. システムスタックポインタ (SSP) の値から 8 を減算 4. ILM に 15 を格納 5. PS の CCR 内の S フラグに "0" を格納 6. プログラムカウンタ (PC) に (TBR+3C0H) の値を格納 ■ ノンマスカブルインタラプト処理を起動するまでの時間 NMI 処理を起動するまでの時間は , NMI 要求発生時に実行していた命令の実行サイク ル数を n とすると , この命令の実行開始時点より最大 (n+6) サイクルです。 命令中でメモリアクセスを含む場合または命令供給が不足した場合は,その分のウェイ トサイクルが上記の値に加算されます。 39 第 4 章 リセット , EIT 処理 ■ ノンマスカブルインタラプト発生時に退避する PC の値 NMI を受け付けると , パイプラインで処理している命令のうち , 動作の中断が間に合わ ないものはそのまま実行し , 中断が間に合うものは NMI を受付け以降の処理をキャン セルします。EIT シーケンスでは , 実行をキャンセルした命令のアドレスを PC として システムスタックに退避します。 ■ ノンマスカブルインタラプトの使い方 NMI を使用する場合には , プログラムの中で次の手順で設定する必要があります。 1. 割込みベクタテーブルの値を設定 ( データとして定義 ) 2. SSP の値を設定 3. TBR の値を設定 4. PS 内の ILM に適切な値を設定 40 第 4 章 リセット , EIT 処理 4.4 例外処理 例外処理は命令シーケンスに関連して発生し , そのときに実行しようとした命令から シーケンス処理を再開するために必要な情報を退避し , その後 , 発生した例外処理に 対応した処理ルーチンを起動するものです。 ■ 例外処理の概要 例外処理は命令シーケンスに関連して発生し , そのときに実行しようとした命令から シーケンス処理を再開するために必要な情報を退避し , その後 , 発生した例外に対応し た処理ルーチンを起動するものです。 処理ルーチンへの分岐は , 例外処理の原因となった命令が実行される前に起こります。 例外発生時にスタックへ退避するプログラムカウンタ (PC) は , 例外を発生した命令の アドレスとなります。 ■ 例外処理を発生する要因 例外処理を発生する要因は未定義命令例外(詳細は 「4.4.1 未定義命令例外」参照)です。 41 第 4 章 リセット , EIT 処理 4.4.1 未定義命令例外 未定義命令例外とは , 定義されていない命令コードを実行しようとしたときに発生す る例外です。 以下に , 未定義命令例外の動作 , 起動するまでの時間 , 使い方などについて説明し ます。 ■ 未定義命令例外の概要 未定義命令例外とは,定義されていない命令コードを実行しようとしたときに発生する 例外です。 ■ 未定義命令例外の動作 外部割込みを受け付けると , 以下の動作を行います。 1. プログラムステータス (PS) の内容をシステムスタックに退避 2. 未定義命令例外が発生したアドレスをシステムスタックに退避 3. システムスタックポインタ (SSP) の値から 8 を減算 4. PS のコンディションコードレジスタ (CCR) 内の S フラグに "0" を格納 5. プログラムカウンタ (PC) に (TBR+3C4H) の値を格納 ■ 未定義命令例外処理が起動するまでの時間 例外処理を起動するまでの時間は , 7 サイクルです。 ■ 未定義命令例外発生時に退避する PC の値 PC の値としてシステムスタックに退避されるアドレスは , 未定義命令例外を発生した 命令自身を示しています。RETI 命令を実行したときに , 未定義命令例外を発生した命 令の次のアドレスやしかるべき処理ルーチンから実行を再開するよう,システムスタッ クの内容を例外処理ルーチンで書き換えてください。 ■ 未定義命令例外の使い方 未定義命令例外を使用する場合には,プログラムの中で次の手順で設定する必要があり ます。 1. 割込みベクタテーブルの値を設定 ( データとして定義 ) 2. SSP の値を設定 3. TBR の値を設定 ■ 遅延スロットに置かれた未定義命令 遅延スロットに置かれた未定義命令は , 未定義命令例外を発生しません。このとき , 未 定義命令は NOP 命令と同じ動作になります。 42 第 4 章 リセット , EIT 処理 4.5 トラップ トラップとは命令シーケンスに関連して発生し , そのとき実行した命令の次の命令か らシーケンス処理を再開するために必要な情報を退避し , その後 , 発生したトラップ に対応した処理ルーチンを起動するものです。 トラップを発生する要因には以下のものがあります。 • INT 命令 • INTE 命令 • ステップトレーストラップ • コプロセッサ不在トラップ • コプロセッサエラートラップ ■ トラップの概要 トラップとは命令シーケンスに関連して発生し,そのとき実行した命令の次の命令から シーケンス処理を再開するために必要な情報を退避し , その後 , 発生したトラップに対 応した処理ルーチンを起動するものです。 処理ルーチンへの分岐は , トラップの原因となった命令が実行された後に起こります。 トラップ発生時にスタックへ退避する PC は , トラップを発生した命令のアドレスとな ります。 ■ トラップを発生する要因 トラップを発生する要因には以下のものがあります。 • INT 命令 ( 詳細は「4.5.1 INT 命令」を参照 ) • INTE 命令 ( 詳細は「4.5.2 INTE 命令」を参照 ) • ステップトレーストラップ ( 詳細は「4.5.3 ステップトレーストラップ」を参照 ) • コプロセッサ不在トラップ ( 詳細は「4.5.4 コプロセッサ不在トラップ」を参照 ) • コプロセッサエラートラップ ( 詳細は「4.5.5 コプロセッサエラートラップ」を参照 ) 43 第 4 章 リセット , EIT 処理 4.5.1 INT 命令 INT 命令は , ソフトウェアでトラップを発生する命令です。 以下に , INT 命令の動作 , 起動するまでの時間および退避するプログラムカウンタ (PC) の値などについて説明します。 ■ INT 命令の概要 INT #u8 命令は , ソフトウェアでトラップを発生する命令です。 オペランドで指定された割込み番号のトラップを発生します。 ■ INT 命令実行時の動作 INT #u8 命令を実行すると , 以下の動作を行います。 1. プログラムステータス (PS) の内容をシステムスタックに退避 2. 次の命令のアドレスをシステムスタックに退避 3. システムスタックポインタ (SSP) の値から 8 を減算 4. PS のコンディションコードレジスタ (CCR) 内の I フラグに "0" を格納 5. PS の CCR 内の S フラグに "0" を格納 6. PC に (TBR+3FCH-4 × u8) の値を格納 ■ INT 命令のトラップ処理を起動するまでの時間 トラップ処理を起動するまでの時間は 6 サイクルです。 ■ INT 命令実行時に退避する PC の値 INT 命令の次のアドレスを PC としてシステムスタックに退避します。 ■ INT 命令使用上の注意事項 INTE 命令ハンドラ , ステップトレーストラップハンドラの中では , INT 命令を使用し ないでください。RETI 命令による復帰後 , 正常に動作しません。 44 第 4 章 リセット , EIT 処理 4.5.2 INTE 命令 INTE 命令は , デバッグ用にソフトウェアでトラップを発生する命令です。 以下に , INTE 命令の動作 , 起動するまでの時間および退避するプログラムカウンタ (PC) の値などについて説明します。 ■ INTE 命令の概要 INTE 命令は , エミュレータが使用します。 エミュレータでデバッグを行わないシステムの場合は,ユーザが使用することもできま す。 ■ INTE 命令実行時の動作 INTE 命令を実行すると , 以下の結果が得られます。 1. プログラムステータス (PS) の内容をシステムスタックに退避 2. 次の命令のアドレスをシステムスタックに退避 3. システムスタックポインタ (SSP) の値から 8 を減算 4. PS のインタラプトレベルマスクレジスタ (ILM) に 4 を格納 5. PS のコンディションコードレジスタ (CCR) 内の S フラグに "0" を格納 6. PC に (TBR+3D8H) の値を格納 ■ INTE 命令のトラップ処理を起動するまでの時間 トラップ処理を起動するまでの時間は 6 サイクルです。 ■ INTE 命令実行時に退避する PC の値 INTE 命令の次のアドレスを PC としてシステムスタックに退避します。 ■ INTE 命令使用上の注意事項 エミュレータを使ってデバッグを行う場合は , ユーザプログラム中で INTE 命令を使う ことはできません。また , INTE 命令ハンドラ , ステップトレーストラップハンドラの 中では , INTE 命令を使用しないでください。RETI 命令による復帰後 , 正常に動作しま せん。また , ステップ実行中は INTE 命令による EIT の発生はありません。 45 第 4 章 リセット , EIT 処理 4.5.3 ステップトレーストラップ ステップトレーストラップはデバッグ用のトラップです。プログラムステータス (PS) のシステムコンディションコードレジスタ (SCR) 内の T フラグをセットするこ とにより , 1 命令実行ごとに発生します。 以下に , ステップトレーストラップの発生条件 , 動作および退避するプログラムカウ ンタ (PC) の値などについて説明します。 ■ ステップトレーストラップの概要 ステップトレーストラップは PS の SCR 内の T フラグをセットすることにより , 1 命令 実行ごとに発生します。 ステップトレーストラップは,遅延分岐命令実行時の分岐命令実行直後には発生しませ ん。遅延スロット内の命令を実行した後に発生します。 エミュレータでデバッグを行わないシステムの場合は,ユーザが使用することもできま す。 ■ ステップトレーストラップ発生の条件 以下の条件が成立したとき , ステップトレーストラップが発生します。 • PS の SCR 内の T フラグが "1" の場合 • 実行している命令が遅延分岐命令以外の場合 • INTE 命令およびステップトレーストラップの処理ルーチン内以外の場合 ■ ステップトレーストラップ発生時の動作 ステップトレーストラップが発生すると , 以下の動作を行います。 1. PS の内容をシステムスタックに退避 2. 次の命令のアドレスをシステムスタックに退避 3. システムスタックポインタ (SSP) の値から 8 を減算 4. PS のコンディションコードレジスタ (CCR) 内の S フラグに "0" を格納 5. PC に (TBR+3C4H) の値を格納 ■ ステップトレーストラップ発生時に退避する PC の値 アドレスを PC としてシステムスタックに退避します。 ■ ステップトレーストラップと NMI およびユーザ割込みの関係 T フラグを設定してステップトレーストラップを許可すると , NMI とユーザ割込みは 禁止状態となります。 46 第 4 章 リセット , EIT 処理 ■ ステップトレーストラップの使用上の注意事項 エミュレータを使ってデバッグを行う場合は,ユーザプログラム中でステップトレース トラップ機能を使うことはできません。また , ステップトレーストラップ機能を使用す ると INTE 命令による EIT 機能は使用できなくなります。 47 第 4 章 リセット , EIT 処理 4.5.4 コプロセッサ不在トラップ コプロセッサ不在トラップは , 実装されていないコプロセッサ命令を使用するコプロ セッサ命令を実行すると発生します。 以下に , コプロセッサ不在トラップ発生の条件 , 動作および退避するプログラムカウ ンタ (PC) の値について説明します。 ■ コプロセッサ不在トラップの概要 コプロセッサ不在トラップは , 実装されていないコプロセッサ命令を使用するコプロ セッサ命令を実行すると発生します。 ■ コプロセッサ不在トラップ発生の条件 以下の条件が成立したとき , コプロセッサ不在トラップが発生します。 • COPOP/COPLD/COPST/COPSV 命令を実行した場合 • 上記命令のオペランド #u4 に該当するコプロセッサが実装されていない場合 ■ コプロセッサ不在トラップ発生時の動作 コプロセッサ不在トラップが発生すると , 以下の動作を行います。 1. プログラムステータス (PS) の内容をシステムスタックに退避 2. 次の命令のアドレスをシステムスタックに退避 3. システムスタックポインタ (SSP) の値から 8 を減算 4. PS のコンディションコードレジスタ (CCR) 内の S フラグに "0" を格納 5. PC に (TBR+3E0H) の値を格納 ■ コプロセッサ不在トラップ発生時に退避する PC の値 トラップの原因となったコプロセッサ命令の次の命令のアドレスをPCとしてシステム スタックに退避します。 ■ COPST/COPSV 命令実行時の汎用レジスタ COPST/COPSV 命令実行時に , 実装されていないコプロセッサを指定した場合 , オペラ ンドとして指定された汎用レジスタ (R0 ∼ R14) には不定の値が転送されます。コプロ セッサ不在トラップは,オペランドとして指定された汎用レジスタが更新された後に起 動されます。 48 第 4 章 リセット , EIT 処理 4.5.5 コプロセッサエラートラップ コプロセッサの動作中にエラーが発生した場合 , 次に CPU が該当するコプロセッサ を操作するコプロセッサ命令を実行した時点で , コプロセッサエラートラップが発生 します。 以下に , コプロセッサエラートラップの発生条件 , 動作 , 退避するプログラムカウン タ (PC) の値について説明します。 ■ コプロセッサエラートラップの概要 コプロセッサの動作中にエラーが発生した場合 , 次に CPU が該当するコプロセッサを 操作するコプロセッサ命令を実行した時点で,コプロセッサエラートラップが発生しま す。ただし , COPSV 命令の実行ではコプロセッサエラートラップは発生しません。 ■ コプロセッサエラートラップ発生の条件 以下の条件が成立したとき , コプロセッサエラートラップが発生します。 • コプロセッサの動作中にエラーが発生 • 該当するコプロセッサを操作する COPOP/COPLD/COPST 命令を実行 ■ コプロセッサエラートラップ発生時の動作 コプロセッサエラートラップが発生すると , 以下の動作を行います。 1. プログラムステータス (PS) の内容をシステムスタックに退避 2. 次の命令のアドレスをシステムスタックに退避 3. システムスタックポインタ (SSP) の値から 8 を減算 4. PS のコンディションコードレジスタ (CCR) 内の S フラグに "0" を格納 5. PC に (TBR+3DCH) の値を格納 ■ コプロセッサエラートラップ時に退避する PC の値 トラップの原因となったコプロセッサ命令の次の命令のアドレスをPCとしてシステム スタックに退避します。 ■ コプロセッサエラートラップ発生時のコプロセッサ命令の動作結果 コプロセッサエラートラップが発生した場合でも,実行したコプロセッサ命令(COPOP/ COPLD/COPST 命令 ) は有効で , 各命令に応じた結果が残ります。ただし , コプロセッ サのエラーが影響する動作については , 正しい結果は得られません。 49 第 4 章 リセット , EIT 処理 ■ コプロセッサエラー情報の退避と復帰 マルチタスク環境でコプロセッサを使用する場合には,コプロセッサ内部の資源がコン テキストとなります。そのため , コンテキストスイッチ切換え時点においてそれらの退 避 , もしくは復帰を行う必要があります。コプロセッサエラー情報の退避 , もしくは復 帰を行った場合に問題となるのは , コンテキストスイッチ切換え時点で , 旧タスクにお いてコプロセッサエラーが潜在的に発生していた場合です。 この場合 , ディスパッチャでのコプロセッサコンテキスト退避命令で例外を検出すると , 旧タスクにその情報を返せなくなります。これを回避するために , コプロセッサエラー の通知を行わない COPSV 命令を実行させます。COPSV 命令を実行するとコプロセッサ はエラーを通知せず , さらに内部的なエラー情報をクリアします。ただし , 退避するス テータス情報にはエラー情報を残します。旧タスクへの再ディスパッチ時点で退避ス テータスがコプロセッサ内部に復帰されると , 潜在的なエラー状態は回復され , 次のコプ ロセッサ命令を実行したとき CPU に通知します。 図 4.5-1 にコプロセッサエラーの通知がうまくいかない例を , 図 4.5-2 に COPSV 命令に よるエラー情報の退避・復帰を示します。 図 4.5-1 コプロセッサエラーの通知がうまくいかない例 潜在的エラー状態 コプロセッサ 通知 CPU(メイン) COPOP 割込み CPU(ディスパッチャ) COPST 図 4.5-2 COPSV 命令によるエラー情報の退避・復帰 潜在的エラー状態 コプロセッサ CPU (メイン) 潜在的エラー状態 × 通知しない COPOP COPST 割込み RETI CPU(ディスパッチャ) COPSV 50 COPLD 第 4 章 リセット , EIT 処理 4.6 優先順位 複数の EIT 要求が同時に発生している場合 , 優先順位に従って 1 つの要因を選択し , EIT シーケンスを実行します。EIT シーケンスの最後に , 再度 EIT 要求の検出を行う ことにより , 多重の EIT 要求を処理します。 1 つの EIT 要因を受理すると , 要因の種類に応じて , ほかの要因をマスクする機能が あります。そのため , EIT 処理ハンドラが実行される順序は必ずしも受理の優先順位 とは一致しません。 ■ 同時発生の優先順位 FR ファミリの EIT 要因受理の優先順位はハードウェアで決まっています。 表 4.6-1 に , EIT 要因の受付けの優先順位を示します。 表 4.6-1 EIT 要因の受付けの優先順位 優先順位 要因 ほかの要因に対するマスク 1 リセット ほかの要因を破棄 2 未定義命令例外 ほかの要因を取消し INT 命令 I フラグ =0 コプロセッサ不在トラップ コプロセッサエラートラップ なし 4 ユーザ割込み ILM = 受理した要因のレベル 5 NMI ILM =15 6 ステップトレーストラップ ILM =4 7 INTE 命令 ILM =4 3 51 第 4 章 リセット , EIT 処理 ■ 多重処理の優先順位 EIT 要因を受理した後のほかの要因に対するマスクの処理を考慮すると , 同時に発生し た EIT 要因の各ハンドラの実行順序を表 4.6-2 に示します。 表 4.6-2 EIT ハンドラの実行順序 優先順位 要因 ほかの要因に対するマスク 1 リセット ほかの要因を破棄 2 未定義命令例外 ほかの要因を取消し 3 ステップトレーストラップ ILM =4 * 4 INTE 命令 ILM =4 * 5 NMI ILM =15 6 INT 命令 I フラグ =0 7 ユーザ割込み ILM = 受理した要因のレベル 8 コプロセッサ不在トラップ コプロセッサエラートラップ なし *: INTE 命令をステップ実行した場合は , ステップトレースの EIT のみ発生します。 INTE 命令による要因は無視されます。 52 第5章 FR ファミリ CPU の注意事項 FR ファミリ CPU の使用上の注意事項について説 明します。 5.1 パイプライン動作 5.2 パイプライン動作と割込み処理 5.3 レジスタハザード 5.4 遅延分岐処理 53 第 5 章 FR ファミリ CPU の注意事項 5.1 パイプライン動作 FR ファミリ CPU はすべての命令処理を 5 段のパイプライン動作で行っています。 このため , ほとんどの命令の実行を 1 サイクルで処理できます。 ■ パイプライン動作の概要 パイプライン動作とは , CPU の命令の解釈と実行を行う各種ステップを数種類のサイ クルに分割し , 各命令の異なったサイクルを同時に実行することにより , ほかの処理方 法では複数サイクルかかる命令実行を見かけ上 1 サイクルで行うものです。FR ファミ リ CPU では図 5.1-1 に示すように , 5 種類のサイクル (IF, ID, EX, MA, WB) を同時に実 行させる 5 段パイプライン処理を採用しています。 • IF: 命令取込み • ID: 命令解釈 • EX: 命令実行 • MA: メモリアクセス • WB: レジスタ書込み 図 5.1-1 FR ファミリのパイプライン動作例 1サイクル LD @R10, R1 LD @R11, R2 ADD R1, R3 BNE:D TestOK ① ② ③ ④ ⑤ IF ID EX MA WB IF ID EX MA WB IF ID EX MA WB IF ID EX MA WB IF ID EX MA ST R2, @R12 WB ● 上記例での 1 サイクル当たりに行っている処理 ① LD @R10, R1 の命令取込み ② LD @R10, R1 の命令解釈 LD, @R11, R2 の命令取込み ③ LD @R10, R1 の命令実行 LD, @R11, R2 の命令解釈 , ADD R1, R3 の命令取込み ④ LD @R10, R1 のメモリアクセス LD, @R11, R2 の命令実行 , ADD R1, R3 の命令解釈 , BNE:D TestOK の命令取込み ⑤ LD @R10, R1 のレジスタ書込み LD, @R11, R2 のメモリアクセス , ADD R1, R3 の命 令実行 , BNE:D TestOK の命令解釈 ST R2,@R12 の命令取込み 54 第 5 章 FR ファミリ CPU の注意事項 5.2 パイプライン動作と割込み処理 FR ファミリ CPU はすべての命令処理において , パイプライン動作を行っています。 このため , 特に命令によりハードウェア起因のイベントを起動するときに , 命令の前 後関係が食い違うように見えることがあります。 ■ パイプライン動作と割込み処理に関する注意事項 FR ファミリ CPU はパイプライン処理を行っているため , 割込み発生を認知したときに は既に数命令のパイプライン処理を実行しています。このため , パイプラインで実行中 の命令の中で該当する割込みを取り消すような処理を行った場合,該当する割込み処理 プログラムへの分岐は正常に行われるようになっていますが,割込み処理プログラムに 制御が移行したときには , 割込み要求がなくなっている場合があります。 なお , 例外およびトラップにはこのような条件はありません。 図 5.2-1 割込みの受付けと取消しの前後不一致の例 割込み要求 なし LD @R10, R1 IF ST R2, @R11 なし なし なし 発生 取消し なし なし ID EX MA WB IF ID EX MA WB IF ID -- -- -- IF -- -- -- -- IF ID EX MA ADD R1, R3(cancelled) BNE TestOK(cancelled) EITシーケンス実行#1 なし WB -- :キャンセルしたステージ ■ 実際に発生する条件 以下のような処理を行うと,割込み要求が受け付けられた後で要求がなくなることがあ ります。 • 割込み許可状態で割込み要因のクリアを行うプログラム • 割込み許可状態で周辺機能内にある割込み許可ビットの書込み ■ 前後不一致の回避方法 割込み要求が受け付けられたにもかかわらず,要求がなくなってしまうことを避けたい 場合には , プログラムステータス (PS) のコンディションコードレジスタ (CCR) 内の I フラグを用いて割込みを禁止してから割込み要因を制御するようなプログラムにして ください。 55 第 5 章 FR ファミリ CPU の注意事項 5.3 レジスタハザード FR ファミリ CPU はプログラム列の順序どおりの処理を行うためにレジスタハザー ドの発生を検出し , 必要があればパイプライン処理を停止する機能を内蔵していま す。このため , レジスタの使用する順序を気にせずプログラムを記述することができ ます。 ■ レジスタハザードの概要 パイプライン動作を行っている CPU では , 連続する命令列の前の命令で書き込んだレ ジスタの値を次の命令で参照しようとすると,参照時にまだ書込みが完了していない状 況が発生する場合があります。これがレジスタハザードです。 図 5.3-1 の例では , アドレスとして使用する R1 の読出しは直前の命令の R1 への書込み より前になり , このままであれば変更前の値になります。 図 5.3-1 レジスタハザードの例 IF ADD R0, R1 SUB R1, R2 ID EX MA WB IF ID EX MA : R1への書込みサイクル WB : R1からの読出しサイクル ■ レジスタバイパス レジスタハザードが発生した場合でも,命令が参照しようとしているレジスタを前の命 令の処理途中から取り出すことができれば,命令の動作を遅らせることなく処理を実現 できる場合があります。このようなデータ転送処理がレジスタバイパスで , FR ファミ リ CPU にはレジスタバイパス機構が搭載されています。 図 5.3-2 の例では , SUB 命令の ID ステージで R1 レジスタから読み出す代わりに , ADD 命令の EX ステージで生成される計算結果 ( レジスタへの格納前 ) を使用することで , 遅延なく命令を実行できます。 図 5.3-2 バイパスの例 ADD R0, R1 SUB R1, R2 56 IF ID EX MA WB IF ID EX MA : R1へのデータを計算するサイクル WB : R1からの読出しサイクル 第 5 章 FR ファミリ CPU の注意事項 ■ インターロック データが CPU 内部に取り込まれるタイミングが遅い命令では , レジスタバイパスでは 対応できないレジスタハザードが生じる場合があります。 図 5.3-3 の例では , SUB 命令の ID ステージで必要とするデータを LD 命令の MA ステー ジで CPU 内部に取り込むため , バイパス機構では対処できません。 図 5.3-3 レジスタバイパスで対応できないレジスタハザードの例 LD @R0, R1 IF SUB R1, R2 ID EX MA WB IF ID EX MA : R0へのデータの読出しサイクル WB : R1からの読出しサイクル このような場合 , FR ファミリ CPU では後続の命令の動作を待たせることで , 命令を正 しく動作させます。この機構がインターロックです。 図 5.3-4 の例では , SUB 命令の ID ステージを遅らせることで , LD 命令の MA ステージ からデータを取り込みます。 図 5.3-4 インターロックの例 LD @R0, R1 SUB R1, R2 IF ID EX MA WB IF ID ID EX : R0へのデータの読出しサイクル MA WB : R1からの読出しサイクル ■ S フラグ書換え後の R15 および汎用レジスタの参照によるインターロックの発生 汎用レジスタの R15 の実体はシステムスタックポインタ (SSP) かユーザスタックポイ ンタ (USP) になっています。このため , プログラムステータス (PS) のコンディション コードレジスタ (CCR) 内の S フラグを更新する命令の直後に R15 を参照する命令を配 置すると , CPU はプログラムに記述された順序で SSP または USP を参照できるように インターロックを自動的に生成します。ハードウェアの都合上 , S フラグを更新する命 令の直後に命令フォーマットが TYPE-A の命令を配置した場合も同様にインターロッ クを生成します。 なお , 命令フォーマットの TYPE については ,「6.1 命令フォーマット」を参照してく ださい。 57 第 5 章 FR ファミリ CPU の注意事項 5.4 遅延分岐処理 FR ファミリ CPU はパイプライン動作のため , 分岐命令を実行したときは既にその 命令の取込みを完了しています。遅延分岐処理は , この取り込んだ命令を実行させる 機能で , 使用することにより処理速度を向上できます。 ■ 遅延なし分岐命令の概要 パイプライン動作を行うと , CPU の命令解釈後に分岐命令であることが判明した段階 で既に次の命令を取り込んでしまっています。プログラムの記述どおりに実行させる のであれば,この分岐命令の後に取り込んだ命令を実行途中でキャンセルさせる必要が あります。このような処理を行う分岐命令が遅延なし分岐命令です。 遅延なし分岐命令 ( 分岐条件が成立した場合と成立しない場合 ) の処理例を「5.4.1 遅 延なし分岐命令の処理例」で説明します。 ■ 遅延分岐命令の概要 分岐命令の直後に置かれた命令は,分岐命令実行時には既に取り込まれてしまっていま す。このような分岐命令の直後の位置を遅延スロットとよびます。 分岐条件の成立・不成立にかかわらず , 遅延スロットに置かれた命令を実行する分岐命 令が遅延分岐命令です。 遅延分岐命令 ( 分岐条件が成立した場合と成立しない場合 ) の処理例を「5.4.2 遅延分 岐命令の処理例」で説明します。 ■ 遅延スロットで使用できない命令 FR ファミリ CPU で遅延分岐処理に使用できない命令を以下に示します。 • LDI:32 #i32, Ri LDI:20 #i20, Ri • COPOP #u4, #CC, CRj, CRi COPLD #u4, #CC, Rj, CRi COPST #u4, #CC, CRj, Ri COPSV #u4, #CC, CRj, Ri • JMP @Ri CALL label12 CALL @Ri RET 条件付き分岐命令およびこれらの遅延分岐付き命令 • INT #u8 RETI INTE 58 第 5 章 FR ファミリ CPU の注意事項 • AND ANDH ANDB OR ORH ORB EOR EORH EORB Rj,@Ri Rj,@Ri Rj,@Ri Rj,@Ri Rj,@Ri Rj,@Ri Rj,@Ri Rj,@Ri Rj,@Ri • BANDH BANDL BORH BORL BEORH BEORL BTSTH BTSTL #u4,@Ri #u4,@Ri #u4,@Ri #u4,@Ri #u4,@Ri #u4,@Ri #u4,@Ri #u4,@Ri • MUL MULU MULH MULUH Rj, Ri Rj, Ri Rj, Ri Rj, Ri • LD @R15+, PS • LDM0 LDM1 STM0 STM1 ENTER XCHB (reglist) (reglist) (reglist) (reglist) #u10 @Rj, Ri • DMOV DMOV DMOV DMOV DMOVH DMOVH DMOVB DMOVB @dir10,@R13+ @R13+,@dir10 @dir10,@-R15 @R15+,@dir10 @dir9,@R13+ @R13+,@dir9 @dir8,@R13+ @R13+,@dir8 ■ 遅延分岐命令実行中の割込みに関する制限 遅延分岐命令と遅延分岐処理で実行する命令の間では , EIT 処理の受付けは行いませ ん。 59 第 5 章 FR ファミリ CPU の注意事項 遅延なし分岐命令の処理例 5.4.1 遅延なし分岐命令はプログラムの記述の順序に命令を実行しますが , 分岐する場合に は実行速度が 1 サイクル遅くなります。 ■ 遅延なし分岐命令の処理例 図 5.4-1 に , 分岐条件が成立した場合の遅延なし分岐命令の処理例を示します。 この例では , 分岐先の命令をフェッチする前にパイプラインが動作し始めていた ST R2,@R12 命令 ( 分岐命令の直後に置かれた命令 ) の実行を途中でキャンセルします。 このため , プログラム処理はプログラマが記述したとおりの順序になります。その代わ り分岐命令は見かけ上 2 サイクルかかることになります。 図 5.4-1 遅延なし分岐命令の処理例 ( 分岐条件が成立した場合 ) LD @R10, R1 IF LD @R11, R2 ID EX MA WB IF ID EX MA WB IF ID EX MA WB IF ID EX MA WB IF -- -- -- -- IF ID EX MA ADD R1, R3 BNE TestOK(分岐条件成立時) ST R2, @R12(直後の命令) ST R2, @R13(分岐先の命令) WB -- : キャンセルしたステージ : PC更新 図 5.4-2 に , 分岐条件が成立しない場合の遅延なし分岐命令の処理例を示します。 この例では , 分岐先の命令をフェッチする前にパイプラインが動作し始めていた ST R2,@R12 命令 ( 分岐命令の直後に置かれた命令 ) をキャンセルせずに実行します。 分岐せずに順序に命令を実行していくので,プログラム処理はプログラマが記述したと おりの順序になります。分岐命令の実行速度は見かけ上 1 サイクルです。 図 5.4-2 遅延なし分岐命令の処理例 ( 分岐条件が成立しない場合 ) LD @R10, R1 IF LD @R11, R2 ID EX MA WB IF ID EX MA WB IF ID EX MA WB IF ID EX MA WB IF ID EX MA WB キャンセルしない IF ID EX MA WB ADD R1, R3 BNE TestOK(分岐条件不成立時) ST R2, @R12(直後の命令) ADD #4, R12(その次の命令) 60 第 5 章 FR ファミリ CPU の注意事項 遅延分岐命令の処理例 5.4.2 遅延分岐命令は分岐条件の成立 , 不成立にかかわらず , 見かけ上の実行速度は 1 サイ クルとなり , 遅延なし分岐命令で分岐する場合より処理が速くなります。 しかし , 分岐する場合 , 見かけ上 , 命令実行の順序が反転したように見えます。 ■ 遅延分岐命令の処理例 図 5.4-3 に , 分岐条件が成立した場合の遅延分岐命令の処理例を示します。 この例では , 遅延スロットの ST R2,@R12 命令を実行した後に分岐先の ST R2,@R13 命 令を実行します。このため , 分岐命令の見かけ上の実行速度は 1 サイクルとなります。 しかし , 分岐先の ST R2,@R13 命令の実行前に遅延スロットの ST R2,@R12 命令が実行 されるため , 見かけ上は処理の順序が反転したように見えます。 図 5.4-3 遅延分岐命令の処理例 ( 分岐条件が成立した場合 ) IF LD @R10, R1 LD @R11, R2 ID EX MA WB IF ID EX MA WB IF ID EX MA WB IF ID EX MA WB IF ID EX MA WB キャンセルしない IF ID EX MA WB ADD R1, R3 BNE:D TestOK(分岐条件成立時) ST R2, @R12(遅延スロットの命令) ST R2, @R13(分岐先の命令) : PC更新 図 5.4-4 に , 分岐条件が成立しない場合の遅延分岐命令の処理例を示します。 この例では , 遅延スロットの ST R2,@R12 命令をキャンセルせずに実行します。このた め , プログラム処理はプログラマが記述したとおりの順序になります。分岐命令の実行 速度は見かけ上 1 サイクルです。 図 5.4-4 遅延分岐命令の処理例 ( 分岐条件が成立しない場合 ) LD @R10, R1 LD @R11, R2 IF ID EX MA WB IF ID EX MA WB IF ID EX MA WB IF ID EX MA WB IF ID EX MA WB キャンセルしない IF ID EX MA WB ADD R1, R3 BNE:D TestOK(分岐条件不成立時) ST R2, @R12(遅延スロットの命令) ADD #4, R12 61 第 5 章 FR ファミリ CPU の注意事項 ■ 遅延分岐命令のプログラム例 遅延分岐命令のプログラム例を示します。 ・ ・ LD @R10, R1 LD @R11, R2 ADD R1, R3 BNE:D TestOK ST R2, @R12 ADD #4, R12 ( 条件不成立時 ) ・ ・ TestOK: ( 条件成立時 ) ST R2, @R13 62 第6章 命令概要 FR ファミリ CPU の命令の概要について説明しま す。 FR ファミリ CPU の命令は 16 ビットを超える即値 データ転送命令を除いて , すべて 16 ビット固定長 のフォーマットになっています。この形式により , パイプライン動作を乱さずに , よりコンパクトなオ ブジェクトにすることができます。 6.1 命令フォーマット 6.2 命令記述形式 63 第 6 章 命令概要 6.1 命令フォーマット FR ファミリ CPU の命令フォーマットには , TYPE-A ∼ TYPE-F の 6 種類があります。 ■ 命令フォーマット FR ファミリ CPU のすべての命令は , 図 6.1-1 の 6 種類のフォーマットになります。 図 6.1-1 命令フォーマット MSB 16ビット 4ビット 8ビット OP TYPE-A TYPE-B Ri Rj 8ビット 4ビット OP i8/o8 Ri 8ビット 4ビット 4ビット OP u4/m4/i4 Ri 8ビット 8ビット OP TYPE-D TYPE-E 64 4ビット 4ビット TYPE-C TYPE-F LSB u8/rel8/dir/rlist 12ビット 4ビット OP Ri/Rs 5ビット 11ビット OP rel11 第 6 章 命令概要 ■ Ri および Rj と数値の関係 4 ビットのフィールドの数値と Ri および Rj の関係を , 表 6.1-1 に示します。 表 6.1-1 汎用レジスタ番号とフィールドのビットパターンの関係 Ri/Rj レジスタ 0000 R0 0001 R1 0010 R2 0011 R3 0100 R4 0101 R5 0110 R6 0111 R7 1000 R8 1001 R9 1010 R10 1011 R11 1100 R12 1101 R13 1110 R14 1111 R15 65 第 6 章 命令概要 ■ Rs と数値の関係 4 ビットのフィールドの数値と Rs の関係を , 表 6.1-2 に示します。 表 6.1-2 専用レジスタ番号とフィールドのビットパターンの関係 Rs レジスタ 000 TBR 0001 RP 0010 SSP 0011 USP 0100 MDH 0101 MDL 0110 reserved 0111 reserved 1000 reserved 1001 reserved 1010 reserved 1011 reserved 1100 reserved 1101 reserved 1110 reserved 1111 reserved <注意事項> reserved はシステムの予約パターンで , 指定した場合の動作は保証できません。 66 第 6 章 命令概要 6.2 命令記述形式 FR ファミリ CPU の命令には以下の 3 種類の記述形式があります。 • オペランド 1 とオペランド 2 の間でニーモニックの演算を行い , オペランド 2 へ 格納する場合 • オペランド 1 を用いてニーモニックの操作を行う場合 • ニーモニックの操作を行う場合 ■ 命令記述形式 FR ファミリ CPU の命令記述は以下の形式になっています。 ● オペランド1とオペランド2の間でニーモニックの演算を行い,オペランド2へ格納する場合 < ニーモニック > < オペランド 1 > < オペランド 2 > 【例】 ADD R1, R2 ; R1+R2 → R2 ● オペランド 1 を用いてニーモニックの操作を行う場合 < ニーモニック > < オペランド 1 > 【例】 JMP @R1 ; R1 → PC ● ニーモニックの操作を行う場合 < ニーモニック > 【例】 NOP ; No operation 67 第 6 章 命令概要 68 第7章 実行命令細則 アセンブラで使用する各実行命令について , リファ レンス形式で説明します。 FR ファミリの実行命令は , 以下の分類順に掲載し ています。 • 加減算命令 • 比較演算命令 • 論理演算命令 • ビット操作演算命令 • 乗除算命令 • シフト演算命令 • 即値データ転送命令 • メモリロード命令 • メモリストア命令 • レジスタ間転送命令 / 専用レジスタ転送命令 • 遅延なし分岐命令 • 遅延分岐命令 • ダイレクトアドレス指定命令 • リソース命令 • コプロセッサ命令 • その他の命令 7.1 ADD(Add Word Data of Source Register to Destination Register) 7.2 ADD(Add 4bit Immediate Data to Destination Register) 7.3 ADD2(Add 4bit Immediate Data to Destination Register) 7.4 ADDC(Add Word Data of Source Register and Carry Bit to Destination Register) 7.5 ADDN(Add Word Data of Source Register to Destination Register) 69 第 7 章 実行命令細則 7.6 ADDN(Add Immediate Data to Destination Register) 7.7 ADDN2(Add Immediate Data to Destination Register) 7.8 SUB(Subtract Word Data in Source Register from Destination Register) 7.9 SUBC(Subtract Word Data in Source Register and Carry bit from Destination Register) 7.10 SUBN(Subtract Word Data in Source Register from Destination Register) 7.11 CMP(Compare Word Data in Source Register and Destination Register) 7.12 CMP(Compare Immediate Data of Source Register and Destination Register) 7.13 CMP2(Compare Immediate Data and Destination Register) 7.14 AND(And Word Data of Source Register to Destination Register) 7.15 AND(And Word Data of Source Register to Data in Memory) 7.16 ANDH(And Halfword Data of Source Register to Data in Memory) 7.17 ANDB(And Byte Data of Source Register to Data in Memory) 7.18 OR(Or Word Data of Source Register to Destination Register) 7.19 OR(Or Word Data of Source Register to Data in Memory) 7.20 ORH(Or Halfword Data of Source Register to Data in Memory) 7.21 ORB(Or Byte Data of Source Register to Data in Memory) 7.22 EOR(Exclusive Or Word Data of Source Register to Destination Register) 7.23 EOR(Exclusive Or Word Data of Source Register to Data in Memory) 7.24 EORH(Exclusive Or Halfword Data of Source Register to Data in Memory) 7.25 EORB(Exclusive Or Byte Data of Source Register to Data in Memory) 7.26 BANDL(And 4bit Immediate Data to Lower 4bit of Byte Data in Memory) 7.27 BANDH(And 4bit Immediate Data to Higher 4bit of Byte Data in Memory) 7.28 BORL(Or 4bit Immediate Data to Lower 4bit of Byte Data in Memory) 7.29 BORH(Or 4bit Immediate Data to Higher 4bit of Byte Data in Memory) 7.30 BEORL(Eor 4bit Immediate Data to Lower 4bit of Byte Data in Memory) 7.31 BEORH(Eor 4bit Immediate Data to Higher 4bit of Byte Data in Memory) 7.32 BTSTL(Test Lower 4bit of Byte Data in Memory) 7.33 BTSTH(Test Higher 4bit of Byte Data in Memory) 7.34 MUL(Multiply Word Data) 7.35 MULU(Multiply Unsigned Word Data) 7.36 MULH(Multiply Halfword Data) 7.37 MULUH(Multiply Unsigned Halfword Data) 7.38 DIV0S(Initial Setting Up for Signed Division) 7.39 DIV0U(Initial Setting Up for Unsigned Division) 7.40 DIV1(Main Process of Division) 7.41 DIV2(Correction When Remain is 0) 7.42 DIV3(Correction When Remain is 0) 7.43 DIV4S(Correction Answer for Signed Division) 70 第 7 章 実行命令細則 7.44 LSL(Logical Shift to the Left Direction) 7.45 LSL(Logical Shift to the Left Direction) 7.46 LSL2(Logical Shift to the Left Direction) 7.47 LSR(Logical Shift to the Right Direction) 7.48 LSR(Logical Shift to the Right Direction) 7.49 LSR2(Logical Shift to the Right Direction) 7.50 ASR(Arithmetic shift to the Right Direction) 7.51 ASR(Arithmetic shift to the Right Direction) 7.52 ASR2(Arithmetic shift to the Right Direction) 7.53 LDI:32(Load Immediate 32 bit Data to Destination Register) 7.54 LDI:20(Load Immediate 20bit Data to Destination Register) 7.55 LDI:8(Load Immediate 8bit Data to Destination Register) 7.56 LD(Load Word Data in Memory to Register) 7.57 LD(Load Word Data in Memory to Register) 7.58 LD(Load Word Data in Memory to Register) 7.59 LD(Load Word Data in Memory to Register) 7.60 LD(Load Word Data in Memory to Register) 7.61 LD(Load Word Data in Memory to Register) 7.62 LD(Load Word Data in Memory to Program Status Register) 7.63 LDUH(Load Halfword Data in Memory to Register) 7.64 LDUH(Load Halfword Data in Memory to Register) 7.65 LDUH(Load Halfword Data in Memory to Register) 7.66 LDUB(Load Byte Data in Memory to Register) 7.67 LDUB(Load Byte Data in Memory to Register) 7.68 LDUB(Load Byte Data in Memory to Register) 7.69 ST(Store Word Data in Register to Memory) 7.70 ST(Store Word Data in Register to Memory) 7.71 ST(Store Word Data in Register to Memory) 7.72 ST(Store Word Data in Register to Memory) 7.73 ST(Store Word Data in Register to Memory) 7.74 ST(Store Word Data in Register to Memory) 7.75 ST(Store Word Data in Program Status Register to Memory) 7.76 STH(Store Halfword Data in Register to Memory) 7.77 STH(Store Halfword Data in Register to Memory) 7.78 STH(Store Halfword Data in Register to Memory) 7.79 STB(Store Byte Data in Register to Memory) 7.80 STB(Store Byte Data in Register to Memory) 7.81 STB(Store Byte Data in Register to Memory) 7.82 MOV(Move Word Data in Source Register to Destination Register) 71 第 7 章 実行命令細則 7.83 MOV(Move Word Data in Source Register to Destination Register) 7.84 MOV(Move Word Data in Program Status Register to Destination Register) 7.85 MOV(Move Word Data in Source Register to Destination Register) 7.86 MOV(Move Word Data in Source Register to Program Status Register) 7.87 JMP(Jump) 7.88 CALL(Call Subroutine) 7.89 CALL(Call Subroutine) 7.90 RET(Return from Subroutine) 7.91 INT(Software Interrupt) 7.92 INTE(Software Interrupt for Emulator) 7.93 RETI(Return from Interrupt) 7.94 Bcc(Branch relative if Condition satisfied) 7.95 JMP:D(Jump) 7.96 CALL:D(Call Subroutine) 7.97 CALL:D(Call Subroutine) 7.98 RET:D(Return from Subroutine) 7.99 Bcc:D(Branch relative if Condition satisfied) 7.100 DMOV(Move Word Data from Direct Address to Register) 7.101 DMOV(Move Word Data from Register to Direct Address) 7.102 DMOV(Move Word Data from Direct Address to Post Increment Register Indirect Address) 7.103 DMOV(Move Word Data from Post Increment Register Indirect Address to Direct Address) 7.104 DMOV(Move Word Data from Direct Address to Pre Decrement Register Indirect Address) 7.105 DMOV(Move Word Data from Post Increment Register Indirect Address to Direct Address) 7.106 DMOVH(Move Halfword Data from Direct Address to Register) 7.107 DMOVH(Move Halfword Data from Register to Direct Address) 7.108 DMOVH(Move Halfword Data from Direct Address to Post Increment Register Indirect Address) 7.109 DMOVH(Move Halfword Data from Post Increment Register Indirect Address to Direct Address) 7.110 DMOVB(Move Byte Data from Direct Address to Register) 7.111 DMOVB(Move Byte Data from Register to Direct Address) 7.112 DMOVB(Move Byte Data from Direct Address to Post Increment Register Indirect Address) 7.113 DMOVB(Move Byte Data from Post Increment Register Indirect Address to Direct Address) 7.114 LDRES(Load Word Data in Memory to Resource) 7.115 STRES(Store Word Data in Resource to Memory) 72 第 7 章 実行命令細則 7.116 COPOP(Co-Processor Opetation) 7.117 COPLD(Load 32bit Data from Register to Co-processor Register) 7.118 COPST(Store 32bit Data from Co-processor Register to Register) 7.119 COPSV(Save 32bit Data from Co-processor Register to Register) 7.120 NOP(No Operation) 7.121 ANDCCR(And Condition Code Register and Immediate Data) 7.122 ORCCR(Or Condition Code Register and Immediate Data) 7.123 STILM(Set Immediate Data to Interrupt Level Mask Register) 7.124 ADDSP(Add Stack Pointer and Immediate Data) 7.125 EXTSB(Sign Extend from Byte Data to Word Data) 7.126 EXTUB(Unsign Extend from Byte Data to Word Data) 7.127 EXTSH(Sign Extend from Byte Data to Word Data) 7.128 EXTUH(Unsign Extend from Byte Data to Word Data) 7.129 LDM0(Load Multiple Registers) 7.130 LDM1(Load Multiple Registers) 7.131 STM0(Store Multiple Registers) 7.132 STM1(Store Multiple Registers) 7.133 ENTER(Enter Function) 7.134 LEAVE(Leave Function) 7.135 XCHB(Exchange Byte Data) 73 第 7 章 実行命令細則 7.1 ADD(Add Word Data of Source Register to Destination Register) Rj のワードデータと Ri のワードデータを加算し , 結果を Ri に格納します。 ■ ADD(Add Word Data of Source Register to Destination Register) アセンブラ形式 ADD Rj, Ri オペレーション Ri + Rj → Ri フラグ変化 N Z V C C C C C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 演算の結果 , オーバフローが発生したときセット , それ以外はクリアされます。 C: 演算の結果 , キャリが発生したときセット , それ以外はクリアされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 0 0 1 1 0 Rj Ri 実行例 ADD R2, R3 命令のビットパターン:1010 0110 0010 0011 R2 1 2 3 4 5 6 7 8 R2 1 2 3 4 5 6 7 8 R3 8 7 6 5 4 3 2 1 R3 9 9 9 9 9 9 9 9 N Z V C CCR 0 0 0 0 実行前 74 N Z V C CCR 1 0 0 0 実行後 第 7 章 実行命令細則 7.2 ADD(Add 4bit Immediate Data to Destination Register) 4 ビット即値データの上位 28 ビットをゼロ拡張した結果の数値と Ri のワードデー タを加算し , 結果を Ri に格納します。 ■ ADD(Add 4bit Immediate Data to Destination Register) アセンブラ形式 ADD #i4, Ri オペレーション Ri + extu(i4) → Ri フラグ変化 N Z V C C C C C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 演算の結果 , オーバフローが発生したときセット , それ以外はクリアされます。 C: 演算の結果 , キャリが発生したときセット , それ以外はクリアされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 0 0 1 0 0 i4 Ri 実行例 ADD #2, R3 命令のビットパターン:1010 0100 0010 0011 R3 9 9 9 9 9 9 9 7 R3 N Z V C CCR 0 0 0 0 実行前 9 9 9 9 9 9 9 9 N Z V C CCR 1 0 0 0 実行後 75 第 7 章 実行命令細則 7.3 ADD2(Add 4bit Immediate Data to Destination Register) 4 ビット即値データの上位 28 ビットをマイナス拡張した結果の数値と Ri のワード データを加算し , 結果を Ri に格納します。 この命令の C フラグの変化は SUB 命令とは異なり , ADD 命令と同じになります。 ■ ADD2(Add 4bit Immediate Data to Destination Register) アセンブラ形式 ADD2 #i4, Ri オペレーション Ri + extn(i4) → Ri フラグ変化 N Z V C C C C C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 演算の結果 , オーバフローが発生したときセット , それ以外はクリアされます。 C: 演算の結果 , キャリが発生したときセット , それ以外はクリアされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 0 0 1 0 1 i4 Ri 実行例 ADD2 #-2, R3 命令のビットパターン:1010 0101 1110 0011 R3 9 9 9 9 9 9 9 9 R3 N Z V C CCR 0 0 0 0 実行前 76 9 9 9 9 9 9 9 7 N Z V C CCR 1 0 0 1 実行後 第 7 章 実行命令細則 7.4 ADDC(Add Word Data of Source Register and Carry Bit to Destination Register) Rj のワードデータと Ri のワードデータとキャリビットを加算し , 結果を Ri に格納 します。 ■ ADDC(Add Word Data of Source Register and Carry Bit to Destination Register) アセンブラ形式 ADDC Rj, Ri オペレーション Ri + Rj + C → Ri フラグ変化 N Z V C C C C C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 演算の結果 , オーバフローが発生したときセット , それ以外はクリアされます。 C: 演算の結果 , キャリが発生したときセット , それ以外はクリアされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 0 0 1 1 1 Rj Ri 実行例 ADDC R2, R3 命令のビットパターン:1010 0111 0010 0011 R2 1 2 3 4 5 6 7 8 R2 1 2 3 4 5 6 7 8 R3 8 7 6 5 4 3 2 0 R3 9 9 9 9 9 9 9 9 N Z V C CCR 0 0 0 1 実行前 N Z V C CCR 1 0 0 0 実行後 77 第 7 章 実行命令細則 7.5 ADDN(Add Word Data of Source Register to Destination Register) Rj のワードデータと Ri のワードデータを加算し , 結果を Ri に格納します。 フラグは変化しません。 ■ ADDN(Add Word Data of Source Register to Destination Register) アセンブラ形式 ADDN Rj, Ri オペレーション Ri + Rj → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 0 0 0 1 0 Rj Ri 実行例 ADDN R2, R3 命令のビットパターン:1010 0010 0010 0011 R2 1 2 3 4 5 6 7 8 R2 1 2 3 4 5 6 7 8 R3 8 7 6 5 4 3 2 1 R3 9 9 9 9 9 9 9 9 N Z V C CCR 0 0 0 0 実行前 78 N Z V C CCR 0 0 0 0 実行後 第 7 章 実行命令細則 7.6 ADDN(Add Immediate Data to Destination Register) 4 ビット即値データの上位 28 ビットをゼロ拡張した結果の数値と Ri のワードデー タを加算し , 結果を Ri に格納します。 フラグは変化しません。 ■ ADDN(Add Immediate Data to Destination Register) アセンブラ形式 ADDN #i4, Ri オペレーション Ri + extu(i4) → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 0 0 0 0 0 i4 Ri 実行例 ADDN #2, R3 命令のビットパターン:1010 0000 0010 0011 R3 9 9 9 9 9 9 9 7 R3 N Z V C CCR 0 0 0 0 実行前 9 9 9 9 9 9 9 9 N Z V C CCR 0 0 0 0 実行後 79 第 7 章 実行命令細則 7.7 ADDN2(Add Immediate Data to Destination Register) 4 ビット即値データの上位 28 ビットをマイナス拡張した結果の数値と Ri のワード データを加算し , 結果を Ri に格納します。 フラグは変化しません。 ■ ADDN2(Add Immediate Data to Destination Register) アセンブラ形式 ADDN2 #i4, Ri オペレーション Ri + extn(i4) → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 0 0 0 0 1 i4 Ri 実行例 ADDN2 #-2, R3 命令のビットパターン:1010 0001 1110 0011 R3 9 9 9 9 9 9 9 9 R3 N Z V C CCR 0 0 0 0 実行前 80 9 9 9 9 9 9 9 7 N Z V C CCR 0 0 0 0 実行後 第 7 章 実行命令細則 7.8 SUB(Subtract Word Data in Source Register from Destination Register) Ri のワードデータから Rj のワードデータを減算し , 結果を Ri に格納します。 ■ SUB(Subtract Word Data in Source Register from Destination Register) アセンブラ形式 SUB Rj, Ri オペレーション Ri - Rj → Ri フラグ変化 N Z V C C C C C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 演算の結果 , オーバフローが発生したときセット , それ以外はクリアされます。 C: 演算の結果 , ボローが発生したときセット , それ以外はクリアされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 0 1 1 0 0 Rj Ri 実行例 SUB R2, R3 命令のビットパターン:1010 1100 0010 0011 R2 1 2 3 4 5 6 7 8 R2 1 2 3 4 5 6 7 8 R3 9 9 9 9 9 9 9 9 R3 8 7 6 5 4 3 2 1 N Z V C CCR 0 0 0 0 実行前 N Z V C CCR 1 0 0 0 実行後 81 第 7 章 実行命令細則 7.9 SUBC(Subtract Word Data in Source Register and Carry bit from Destination Register) Ri のワードデータから Rj のワードデータとキャリを減算し , 結果を Ri に格納しま す。 ■ SUBC(Subtract Word Data in Source Register and Carry bit from Destination Register) アセンブラ形式 SUBC Rj, Ri オペレーション Ri - Rj - C → Ri フラグ変化 N Z V C C C C C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 演算の結果 , オーバフローが発生したときセット , それ以外はクリアされます。 C: 演算の結果 , ボローが発生したときセット , それ以外はクリアされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 0 1 1 0 1 Rj Ri 実行例 SUBC R2, R3 命令のビットパターン:1010 1101 0010 0011 R2 1 2 3 4 5 6 7 8 R2 1 2 3 4 5 6 7 8 R3 9 9 9 9 9 9 9 9 R3 8 7 6 5 4 3 2 0 N Z V C CCR 0 0 0 1 実行前 82 N Z V C CCR 1 0 0 0 実行後 第 7 章 実行命令細則 7.10 SUBN(Subtract Word Data in Source Register from Destination Register) Ri のワードデータから Rj のワードデータを減算し , 結果を Ri に格納します。 フラグは変化しません。 ■ SUBN(Subtract Word Data in Source Register from Destination Register) アセンブラ形式 SUBN Rj, Ri オペレーション Ri - Rj → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 0 1 1 1 0 Rj Ri 実行例 SUBN R2, R3 命令のビットパターン:1010 1110 0010 0011 R2 1 2 3 4 5 6 7 8 R2 1 2 3 4 5 6 7 8 R3 9 9 9 9 9 9 9 9 R3 8 7 6 5 4 3 2 1 N Z V C CCR 0 0 0 0 実行前 N Z V C CCR 0 0 0 0 実行後 83 第 7 章 実行命令細則 7.11 CMP(Compare Word Data in Source Register and Destination Register) Ri のワードデータから Rj のワードデータを減算し , 結果をコンディションコードレ ジスタ (CCR) にセットします。 ■ CMP(Compare Word Data in Source Register and Destination Register) アセンブラ形式 CMP Rj, Ri オペレーション Ri - Rj フラグ変化 N Z V C C C C C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 演算の結果 , オーバフローが発生したときセット , それ以外はクリアされます。 C: 演算の結果 , ボローが発生したときセット , それ以外はクリアされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 0 1 0 1 0 Rj Ri 実行例 CMP R2, R3 命令のビットパターン:1010 1010 0010 0011 R2 1 2 3 4 5 6 7 8 R2 1 2 3 4 5 6 7 8 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 5 6 7 8 N Z V C CCR 0 0 0 0 実行前 84 N Z V C CCR 0 1 0 0 実行後 第 7 章 実行命令細則 7.12 CMP(Compare Immediate Data of Source Register and Destination Register) Ri のワードデータから 4 ビットの即値データの上位 28 ビットをゼロ拡張した結果 の数値を減算し , 結果をコンディションコードレジスタ (CCR) にセットします。 ■ CMP(Compare Immediate Data of Source Register and Destination Register) アセンブラ形式 CMP #i4, Ri オペレーション Ri - extu(i4) フラグ変化 N Z V C C C C C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 演算の結果 , オーバフローが発生したときセット , それ以外はクリアされます。 C: 演算の結果 , ボローが発生したときセット , それ以外はクリアされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 0 1 0 0 0 i4 Ri 実行例 CMP #3, R3 命令のビットパターン:1010 1000 0011 0011 R3 0 0 0 0 0 0 0 3 R3 N Z V C CCR 0 0 0 0 実行前 0 0 0 0 0 0 0 3 N Z V C CCR 0 1 0 0 実行後 85 第 7 章 実行命令細則 7.13 CMP2(Compare Immediate Data and Destination Register) Ri のワードデータから -16 ∼ -1 の 4 ビット即値データの上位 28 ビットをマイナス 拡張した結果の数値を減算し , 結果をコンディションコードレジスタ (CCR) にセッ トします。 ■ CMP2(Compare Immediate Data and Destination Register) アセンブラ形式 CMP2 #i4, Ri オペレーション Ri - extn(i4) フラグ変化 N Z V C C C C C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 演算の結果 , オーバフローが発生したときセット , それ以外はクリアされます。 C: 演算の結果 , ボローが発生したときセット , それ以外はクリアされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 0 1 0 0 1 i4 Ri 実行例 CMP2 #-3, R3 命令のビットパターン:1010 1001 1101 0011 R3 F F F F F F F D R3 N Z V C CCR 0 0 0 0 実行前 86 F F F F F F F D N Z V C CCR 0 1 0 0 実行後 第 7 章 実行命令細則 7.14 AND(And Word Data of Source Register to Destination Register) Rj のワードデータと Ri のワードデータの論理積演算を行い , 結果を Ri に格納しま す。 ■ AND(And Word Data of Source Register to Destination Register) アセンブラ形式 AND Rj, Ri オペレーション Ri and Rj → Ri フラグ変化 N Z V C C C - - N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 0 0 0 1 0 Rj Ri 実行例 AND R2, R3 命令のビットパターン:1000 0010 0010 0011 R2 1 1 1 1 0 0 0 0 R2 1 1 1 1 0 0 0 0 R3 1 0 1 0 1 0 1 0 R3 1 0 1 0 0 0 0 0 N Z V C CCR 0 0 0 0 実行前 N Z V C CCR 0 0 0 0 実行後 87 第 7 章 実行命令細則 7.15 AND(And Word Data of Source Register to Data in Memory) メモリの Ri 番地のワードデータと Rj のワードデータの論理積演算を行い , 結果をメ モリの Ri 番地に格納します。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ AND(And Word Data of Source Register to Data in Memory) アセンブラ形式 AND Rj,@Ri オペレーション (Ri) and Rj → (Ri) フラグ変化 N Z V C C C - - N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB 1 LSB 0 0 0 0 1 0 0 Rj Ri 実行例 AND R2,@R3 命令のビットパターン:1000 0100 0010 0011 R2 1 1 1 1 0 0 0 0 R2 1 1 1 1 0 0 0 0 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 5 6 7 8 メモリ 12345678 1 0 1 0 1 0 1 0 1234567C メモリ 12345678 0 0 0 0 実行前 88 0 0 0 0 1234567C N Z V C CCR 1 0 1 0 N Z V C CCR 0 0 0 0 実行後 第 7 章 実行命令細則 7.16 ANDH(And Halfword Data of Source Register to Data in Memory) メモリの Ri 番地のハーフワードデータと Rj のハーフワードデータの論理積演算を 行い , 結果をメモリの Ri 番地に格納します。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ ANDH(And Halfword Data of Source Register to Data in Memory) アセンブラ形式 ANDH Rj,@Ri オペレーション (Ri) and Rj → (Ri) フラグ変化 N Z V C C C - - N: 演算結果の MSB(bit15) が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB 1 LSB 0 0 0 0 1 0 1 Rj Ri 89 第 7 章 実行命令細則 実行例 ANDH R2,@R3 命令のビットパターン:1000 0101 0010 0011 R2 0 0 0 0 1 1 0 0 R2 0 0 0 0 1 1 0 0 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 5 6 7 8 メモリ 12345678 メモリ 12345678 1 0 1 0 1234567A 1234567A N Z V C CCR 0 0 0 0 実行前 90 1 0 0 0 N Z V C CCR 0 0 0 0 実行後 第 7 章 実行命令細則 7.17 ANDB(And Byte Data of Source Register to Data in Memory) メモリの Ri 番地のバイトデータと Rj のバイトデータの論理積演算を行い , 結果をメ モリの Ri 番地に格納します。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ ANDB(And Byte Data of Source Register to Data in Memory) アセンブラ形式 ANDB Rj,@Ri オペレーション (Ri) and Rj → (Ri) フラグ変化 N Z V C C C - - N: 演算結果の MSB(bit7) が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB 1 LSB 0 0 0 0 1 1 0 Rj Ri 91 第 7 章 実行命令細則 実行例 ANDB R2,@R3 命令のビットパターン:1000 0110 0010 0011 R2 0 0 0 0 0 0 1 0 R2 0 0 0 0 0 0 1 0 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 5 6 7 8 メモリ 12345678 メモリ 12345678 1 1 12345679 12345679 N Z V C CCR 0 0 0 0 実行前 92 1 0 N Z V C CCR 0 0 0 0 実行後 第 7 章 実行命令細則 7.18 OR(Or Word Data of Source Register to Destination Register) Ri のワードデータと Rj のワードデータの論理和演算を行い , 結果を Ri に格納しま す。 ■ OR(Or Word Data of Source Register to Destination Register) アセンブラ形式 OR Rj, Ri オペレーション Ri or Rj → Ri フラグ変化 N Z V C C C - - N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 1 0 0 1 0 Rj Ri 実行例 OR R2, R3 命令のビットパターン:1001 0010 0010 0011 R2 1 1 1 1 0 0 0 0 R2 1 1 1 1 0 0 0 0 R3 1 0 1 0 1 0 1 0 R3 1 1 1 1 1 0 1 0 N Z V C CCR 0 0 0 0 実行前 N Z V C CCR 0 0 0 0 実行後 93 第 7 章 実行命令細則 7.19 OR(Or Word Data of Source Register to Data in Memory) メモリの Ri 番地のワードデータと Rj のワードデータの論理和演算を行い , 結果をメ モリの Ri 番地に格納します。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ OR(Or Word Data of Source Register to Data in Memory) アセンブラ形式 OR Rj,@Ri オペレーション (Ri) or Rj → (Ri) フラグ変化 N Z V C C C - - N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB 1 94 LSB 0 0 1 0 1 0 0 Rj Ri 第 7 章 実行命令細則 実行例 OR R2,@R3 命令のビットパターン:1001 0100 0010 0011 R2 1 1 1 1 0 0 0 0 R2 1 1 1 1 0 0 0 0 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 5 6 7 8 メモリ 12345678 1 0 1 0 1 0 1 0 1234567C メモリ 12345678 1 0 1 0 1234567C N Z V C CCR 1 1 1 1 0 0 0 0 実行前 N Z V C CCR 0 0 0 0 実行後 95 第 7 章 実行命令細則 7.20 ORH(Or Halfword Data of Source Register to Data in Memory) メモリの Ri 番地のハーフワードデータと Rj のハーフワードデータの論理和演算を 行い , 結果をメモリの Ri 番地に格納します。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ ORH(Or Halfword Data of Source Register to Data in Memory) アセンブラ形式 ORH Rj,@Ri オペレーション (Ri) or Rj → (Ri) フラグ変化 N Z V C C C - - N: 演算結果の MSB(bit15) が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB 1 96 LSB 0 0 1 0 1 0 1 Rj Ri 第 7 章 実行命令細則 実行例 ORH R2,@R3 命令のビットパターン:1001 0101 0010 0011 R2 0 0 0 0 1 1 0 0 R2 0 0 0 0 1 1 0 0 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 5 6 7 8 メモリ 12345678 メモリ 12345678 1 0 1 0 1234567A 1234567A N Z V C CCR 1 1 1 0 0 0 0 0 実行前 N Z V C CCR 0 0 0 0 実行後 97 第 7 章 実行命令細則 7.21 ORB(Or Byte Data of Source Register to Data in Memory) メモリの Ri 番地のバイトデータと Rj のバイトデータの論理和演算を行い , 結果をメ モリの Ri 番地に格納します。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ ORB(Or Byte Data of Source Register to Data in Memory) アセンブラ形式 ORB Rj,@Ri オペレーション (Ri) or Rj → (Ri) フラグ変化 N Z V C C C - - N: 演算結果の MSB(bit7) が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB 1 98 LSB 0 0 1 0 1 1 0 Rj Ri 第 7 章 実行命令細則 実行例 ORB R2,@R3 命令のビットパターン:1001 0110 0010 0011 R2 0 0 0 0 0 0 1 1 R2 0 0 0 0 0 0 1 1 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 5 6 7 8 メモリ 12345678 メモリ 12345678 1 0 12345679 12345679 N Z V C CCR 1 1 0 0 0 0 実行前 N Z V C CCR 0 0 0 0 実行後 99 第 7 章 実行命令細則 7.22 EOR(Exclusive Or Word Data of Source Register to Destination Register) Ri のワードデータと Rj のワードデータの排他的論理和演算を行い , 結果を Ri に格 納します。 ■ EOR(Exclusive Or Word Data of Source Register to Destination Register) アセンブラ形式 EOR Rj, Ri オペレーション Ri eor Rj → Ri フラグ変化 N Z V C C C - - N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 1 1 0 1 0 Rj Ri 実行例 EOR R2, R3 命令のビットパターン:1001 1010 0010 0011 R2 1 1 1 1 0 0 0 0 R2 1 1 1 1 0 0 0 0 R3 1 0 1 0 1 0 1 0 R3 0 1 0 1 1 0 1 0 N Z V C CCR 0 0 0 0 実行前 100 N Z V C CCR 0 0 0 0 実行後 第 7 章 実行命令細則 7.23 EOR(Exclusive Or Word Data of Source Register to Data in Memory) メモリの Ri 番地のワードデータと Rj のワードデータの排他的論理和演算を行い , 結 果をメモリの Ri 番地に格納します。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ EOR(Exclusive Or Word Data of Source Register to Data in Memory) アセンブラ形式 EOR Rj,@Ri オペレーション (Ri) eor Rj → (Ri) フラグ変化 N Z V C C C - - N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB 1 LSB 0 0 1 1 1 0 0 Rj Ri 101 第 7 章 実行命令細則 実行例 EOR R2,@R3 命令のビットパターン:1001 1100 0010 0011 R2 1 1 1 1 0 0 0 0 R2 1 1 1 1 0 0 0 0 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 5 6 7 8 メモリ 12345678 1 0 1 0 1 0 1 0 1234567C メモリ 12345678 0 0 0 0 実行前 102 1 0 1 0 1234567C N Z V C CCR 0 1 0 1 N Z V C CCR 0 0 0 0 実行後 第 7 章 実行命令細則 7.24 EORH(Exclusive Or Halfword Data of Source Register to Data in Memory) メモリの Ri 番地のハーフワードデータと Rj のハーフワードデータの排他的論理和 演算を行い , 結果をメモリの Ri 番地に格納します。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ EORH(Exclusive Or Halfword Data of Source Register to Data in Memory) アセンブラ形式 EORH Rj,@Ri オペレーション (Ri) eor Rj → (Ri) フラグ変化 N Z V C C C - - N: 演算結果の MSB(bit15) が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB 1 LSB 0 0 1 1 1 0 1 Rj Ri 103 第 7 章 実行命令細則 実行例 EORH R2,@R3 命令のビットパターン:1001 1101 0010 0011 R2 0 0 0 0 1 1 0 0 R2 0 0 0 0 1 1 0 0 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 5 6 7 8 メモリ 12345678 メモリ 12345678 1 0 1 0 1234567A 1234567A N Z V C CCR 0 0 0 0 実行前 104 0 1 1 0 N Z V C CCR 0 0 0 0 実行後 第 7 章 実行命令細則 7.25 EORB(Exclusive Or Byte Data of Source Register to Data in Memory) メモリの Ri 番地のバイトデータと Rj のバイトデータの排他的論理和演算を行い , 結 果をメモリの Ri 番地に格納します。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ EORB(Exclusive Or Byte Data of Source Register to Data in Memory) アセンブラ形式 EORB Rj,@Ri オペレーション (Ri) eor Rj → (Ri) フラグ変化 N Z V C C C - - N: 演算結果の MSB(bit7) が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB 1 LSB 0 0 1 1 1 1 0 Rj Ri 105 第 7 章 実行命令細則 実行例 EORB R2,@R3 命令のビットパターン:1001 1110 0010 0011 R2 0 0 0 0 0 0 1 1 R2 0 0 0 0 0 0 1 1 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 5 6 7 8 メモリ 12345678 メモリ 12345678 1 0 12345679 12345679 N Z V C CCR 0 0 0 0 実行前 106 0 1 N Z V C CCR 0 0 0 0 実行後 第 7 章 実行命令細則 7.26 BANDL(And 4bit Immediate Data to Lower 4bit of Byte Data in Memory) 4 ビットの即値データとメモリの Ri 番地のバイトデータの下位 4 ビットの論理積演 算を行い , 結果をメモリの Ri 番地に格納します。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ BANDL(And 4bit Immediate Data to Lower 4bit of Byte Data in Memory) アセンブラ形式 BANDL #u4,@Ri オペレーション {F0H+u4} and (Ri) → (Ri) [ 下位 4 ビットのみ操作 ] フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB 1 LSB 0 0 0 0 0 0 0 u4 Ri 実行例 BANDL #0,@R3 命令のビットパターン:1000 0000 0000 0011 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 メモリ 12345678 メモリ 12345678 1 1 1 0 12345679 12345679 N Z V C CCR 5 6 7 8 0 0 0 0 実行前 N Z V C CCR 0 0 0 0 実行後 107 第 7 章 実行命令細則 7.27 BANDH(And 4bit Immediate Data to Higher 4bit of Byte Data in Memory) 4 ビットの即値データとメモリの Ri 番地のバイトデータの上位 4 ビットの論理積演 算を行い , 結果をメモリの Ri 番地に格納します。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ BANDH(And 4bit Immediate Data to Higher 4bit of Byte Data in Memory) アセンブラ形式 BANDH #u4,@Ri オペレーション {u4 < <4 + FH} and (Ri) → (Ri) [ 上位 4 ビットのみ操作 ] フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB 1 LSB 0 0 0 0 0 0 1 u4 Ri 実行例 BANDH #0,@R3 命令のビットパターン:1000 0001 0000 0011 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 メモリ 12345678 メモリ 12345678 1 1 N Z V C 0 0 0 0 実行前 108 0 1 12345679 12345679 CCR 5 6 7 8 N Z V C CCR 0 0 0 0 実行後 第 7 章 実行命令細則 7.28 BORL(Or 4bit Immediate Data to Lower 4bit of Byte Data in Memory) 4 ビットの即値データとメモリの Ri 番地のバイトデータの下位 4 ビットの論理和演 算を行い , 結果をメモリの Ri 番地に格納します。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ BORL(Or 4bit Immediate Data to Lower 4bit of Byte Data in Memory) アセンブラ形式 BORL #u4,@Ri オペレーション u4 or (Ri) → (Ri) [ 下位 4 ビットのみ操作 ] フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB 1 LSB 0 0 1 0 0 0 0 u4 Ri 実行例 BORL #1,@R3 命令のビットパターン:1001 0000 0001 0011 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 メモリ 12345678 メモリ 12345678 0 0 0 1 12345679 12345679 N Z V C CCR 5 6 7 8 0 0 0 0 実行前 N Z V C CCR 0 0 0 0 実行後 109 第 7 章 実行命令細則 7.29 BORH(Or 4bit Immediate Data to Higher 4bit of Byte Data in Memory) 4 ビットの即値データとメモリの Ri 番地のバイトデータの上位 4 ビットの論理和演 算を行い , 結果をメモリの Ri 番地に格納します。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ BORH(Or 4bit Immediate Data to Higher 4bit of Byte Data in Memory) アセンブラ形式 BORH #u4,@Ri オペレーション {u4 < <4} or (Ri) → (Ri) [ 上位 4 ビットのみ操作 ] フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB 1 LSB 0 0 1 0 0 0 1 u4 Ri 実行例 BORH #1,@R3 命令のビットパターン:1001 0001 0001 0011 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 メモリ 12345678 メモリ 12345678 0 0 N Z V C 0 0 0 0 実行前 110 1 0 12345679 12345679 CCR 5 6 7 8 N Z V C CCR 0 0 0 0 実行後 第 7 章 実行命令細則 7.30 BEORL(Eor 4bit Immediate Data to Lower 4bit of Byte Data in Memory) 4 ビットの即値データとメモリの Ri 番地のバイトデータの下位 4 ビットの排他的論 理和演算を行い , 結果をメモリの Ri 番地に格納します。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ BEORL(Eor 4bit Immediate Data to Lower 4bit of Byte Data in Memory) アセンブラ形式 BEORL #u4,@Ri オペレーション u4 eor (Ri) → (Ri) [ 下位 4 ビットのみ操作 ] フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB 1 LSB 0 0 1 1 0 0 0 u4 Ri 実行例 BEORL #1,@R3 命令のビットパターン:1001 1000 0001 0011 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 メモリ 12345678 メモリ 12345678 0 0 0 1 12345679 12345679 N Z V C CCR 5 6 7 8 0 0 0 0 実行前 N Z V C CCR 0 0 0 0 実行後 111 第 7 章 実行命令細則 7.31 BEORH(Eor 4bit Immediate Data to Higher 4bit of Byte Data in Memory) 4 ビットの即値データとメモリの Ri 番地のバイトデータの上位 4 ビットの排他的論 理和演算を行い , 結果をメモリの Ri 番地に格納します。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ BEORH(Eor 4bit Immediate Data to Higher 4bit of Byte Data in Memory) アセンブラ形式 BEORH #u4,@Ri オペレーション {u4 < <4} eor (Ri) → (Ri) [ 上位 4 ビットのみ操作 ] フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB 1 LSB 0 0 1 1 0 0 1 u4 Ri 実行例 BEORH #1,@R3 命令のビットパターン:1001 1001 0001 0011 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 メモリ 12345678 メモリ 12345678 0 0 N Z V C 0 0 0 0 実行前 112 1 0 12345679 12345679 CCR 5 6 7 8 N Z V C CCR 0 0 0 0 実行後 第 7 章 実行命令細則 7.32 BTSTL(Test Lower 4bit of Byte Data in Memory) 4 ビットの即値データとメモリの Ri 番地のバイトデータの下位 4 ビットの論理積演 算を行い , 結果をコンディションコードレジスタ (CCR) にセットします。 ■ BTSTL(Test Lower 4bit of Byte Data in Memory) アセンブラ形式 BTSTL #u4,@Ri オペレーション u4 and (Ri) [ 下位 4 ビットのみテスト ] フラグ変化 N Z V C 0 C - - N: クリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 2+a サイクル 命令フォーマット MSB 1 LSB 0 0 0 1 0 0 0 u4 Ri 実行例 BTSTL #1,@R3 命令のビットパターン:1000 1000 0001 0011 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 メモリ 12345678 メモリ 12345678 1 0 1 0 12345679 12345679 N Z V C CCR 5 6 7 8 0 0 0 0 実行前 N Z V C CCR 0 1 0 0 実行後 113 第 7 章 実行命令細則 7.33 BTSTH(Test Higher 4bit of Byte Data in Memory) 4 ビットの即値データとメモリの Ri 番地のバイトデータの上位 4 ビットの論理積演 算を行い , 結果をコンディションコードレジスタ (CCR) にセットします。 ■ BTSTH(Test Higher 4bit of Byte Data in Memory) アセンブラ形式 BTSTH #u4,@Ri オペレーション {u4 < <4} and (Ri) [ 上位 4 ビットのみテスト ] フラグ変化 N Z V C C C - - N: 演算結果の MSB(bit7) が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 2+a サイクル 命令フォーマット MSB 1 LSB 0 0 0 1 0 0 1 u4 Ri 実行例 BTSTH #1,@R3 命令のビットパターン:1000 1001 0001 0011 R3 1 2 3 4 5 6 7 8 R3 1 2 3 4 メモリ 12345678 メモリ 12345678 0 1 N Z V C 0 0 0 0 実行前 114 0 1 12345679 12345679 CCR 5 6 7 8 N Z V C CCR 0 1 0 0 実行後 第 7 章 実行命令細則 7.34 MUL(Multiply Word Data) Rj のワードデータと Ri のワードデータを符号付き数値として乗算し , 結果である符 号付き 64 ビットデータの上位ワードを乗除算レジスタ (MDH) に , 下位ワードを乗 除算レジスタ (MDL) に格納します。 ■ MUL(Multiply Word Data) アセンブラ形式 MUL Rj, Ri オペレーション Rj × Ri → MDH, MDL フラグ変化 N Z V C C C C - N : 演算結果の MDL の MSB が "1" ならばセット , "0" ならばクリアされます。 Z : 演算結果の MDL の内容が "0" ならばセット , それ以外ならクリアされます。 V : 演算結果が -2147483648 ∼ 2147483647 のときクリアされ , それ以外のときセッ トされます。 C : 変化しません。 実行サイクル数 5 サイクル 命令フォーマット MSB 1 LSB 0 1 0 1 1 1 1 Rj Ri 実行例 MUL R2, R3 命令のビットパターン:1010 1111 0010 0011 R2 0 0 0 0 0 0 0 2 R2 0 0 0 0 0 0 0 2 R3 8 0 0 0 0 0 0 1 R3 8 0 0 0 0 0 0 1 MDH ×××× ×××× MDH F F F F F F F F MDL ×××× ×××× MDL 0 0 0 0 0 0 0 2 N Z V C CCR 0 0 0 0 実行前 N Z V C CCR 0 0 1 0 実行後 115 第 7 章 実行命令細則 7.35 MULU(Multiply Unsigned Word Data) Rj のワードデータと Ri のワードデータを符号なし数値として乗算し , 結果である符 号なし 64 ビットデータの上位ワードを乗除算レジスタ (MDH) に , 下位ワードを乗 除算レジスタ (MDL) に格納します。 ■ MULU(Multiply Unsigned Word Data) アセンブラ形式 MULU Rj, Ri オペレーション Rj × Ri → MDH, MDL フラグ変化 N Z V C C C C - N: 演算結果の MDL の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果の MDL の内容が "0" ならばセット , それ以外ならクリアされます。 V: 演算結果が 0 ∼ 4294967295 のときクリアされ , それ以外のときセットされます。 C: 変化しません。 実行サイクル数 5 サイクル 命令フォーマット MSB 1 LSB 0 1 0 1 0 1 1 Rj Ri 実行例 MULU R2, R3 命令のビットパターン:1010 1011 0010 0011 R2 0 0 0 0 0 0 0 2 R2 0 0 0 0 0 0 0 2 R3 8 0 0 0 0 0 0 1 R3 8 0 0 0 0 0 0 1 MDH ×××× ×××× MDH 0 0 0 0 0 0 0 1 MDL ×××× ×××× MDL 0 0 0 0 0 0 0 2 N Z V C CCR 0 0 0 0 実行前 116 N Z V C CCR 0 0 1 0 実行後 第 7 章 実行命令細則 7.36 MULH(Multiply Halfword Data) Rj の下位 16 ビットのハーフワードデータと Ri の下位 16 ビットのハーフワード データを符号付き数値として乗算し , 結果である符号付き 32 ビットデータを乗除算 レジスタ (MDL) に格納します。 乗除算レジスタ (MDH) は不定です。 ■ MULH(Multiply Halfword Data) アセンブラ形式 MULH Rj, Ri オペレーション Rj × Ri → MDL フラグ変化 N Z V C C C - - N: 演算結果の MDL の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果の MDL の内容が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 3 サイクル 命令フォーマット MSB 1 LSB 0 1 1 1 1 1 1 Rj Ri 実行例 MULH R2, R3 命令のビットパターン:1011 1111 0010 0011 R2 F E D C B A 9 8 R2 F E D C B A 9 8 R3 0 1 2 3 4 5 6 7 R3 0 1 2 3 4 5 6 7 MDH ×××× ×××× MDH ×××× ×××× MDL ×××× ×××× MDL E D 2 F N Z V C CCR 0 0 0 0 実行前 0 B 2 8 N Z V C CCR 1 0 0 0 実行後 117 第 7 章 実行命令細則 7.37 MULUH(Multiply Unsigned Halfword Data) Rj の下位 16 ビットのハーフワードデータと Ri の下位 16 ビットのハーフワード データを符号なし数値として乗算し , 結果である符号なし 32 ビットデータを乗除算 レジスタ (MDL) に格納します。 乗除算レジスタ (MDH) は不定です。 ■ MULUH(Multiply Unsigned Halfword Data) アセンブラ形式 MULUH Rj, Ri オペレーション Rj × Ri → MDL フラグ変化 N Z V C C C - - N: 演算結果の MDL の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果の MDL の内容が "0" ならばセット , それ以外ならクリアされます。 V, C: 変化しません。 実行サイクル数 3 サイクル 命令フォーマット MSB 1 LSB 0 1 1 1 0 1 1 Rj Ri 実行例 MULUH R2, R3 命令のビットパターン:1011 1011 0010 0011 R2 F E D C B A 9 8 R2 F E D C B A 9 8 R3 0 1 2 3 4 5 6 7 R3 0 1 2 3 4 5 6 7 MDH ×××× ×××× MDH ×××× ×××× MDL ×××× ×××× MDL 3 2 9 6 N Z V C CCR 0 0 0 0 実行前 118 0 B 2 8 N Z V C CCR 0 0 0 0 実行後 第 7 章 実行命令細則 7.38 DIV0S(Initial Setting Up for Signed Division) 乗除算レジスタの MDL を被除数 , Ri を除数として , 商を MDL, 剰余を乗除算レジス タの MDH に格納する符号付き除算を実現するための命令です。 MDL, Ri の符号ビットに応じてシステムコンディションコードレジスタ (SCR) 中の D0, D1 フラグをセットします。 • D0: 被除数が負のときセット , 正のときクリアします。 • D1: 除数と被除数の符号が異なるときセット , 等しいときクリアします。 MDL のワードデータを 64 ビットに符号拡張し , 上位 1 ワードを MDH に , 下位 1 ワードを MDL に格納します。 符号付き除算を実現するためには , 次のように命令を組み合せてください。 DIV0S, DIV1 × 32, DIV2, DIV3, DIV4S ■ DIV0S(Initial Setting Up for Signed Division) アセンブラ形式 DIV0S Ri オペレーション MDL[31] → D0 MDL[31]^Ri[31] → D1 exts(MDL) → MDH, MDL フラグ変化 N Z V C - - - - N, Z, V, C: フラグは変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 1 0 1 1 1 0 1 0 0 Ri 119 第 7 章 実行命令細則 実行例 DIV0S R2 命令のビットパターン:1001 0111 0100 0010 R2 0 F F F F F F F R2 0 F F F F F F F MDH 0 0 0 0 0 0 0 0 MDH F F F F F F F F MDL F F F F F F F 0 MDL F F F F F F F 0 D1 D0 T SCR D1 D0 T SCR ××0 1 1 0 実行前 実行後 実行例 実際の使い方 MDL ÷ R2=MDL( 商 )…MDH( 剰余 ), 符号付き演算 DIV0S DIV1 DIV1 : DIV1 DIV2 DIV3 DIV4S R2 0 1 2 3 MDH ×××× ×××× MDL F E D C 4 5 6 7 B A 9 8 R2 R2 R2 DIV1を32個並べる R2 R2 R2 0 1 2 3 4 5 6 7 MDH F F F F F F F F MDL F F F F F F F F D1 D0 T SCR ××0 実行前 120 D1 D0 T SCR 1 1 0 実行後 第 7 章 実行命令細則 7.39 DIV0U(Initial Setting Up for Unsigned Division) 乗除算レジスタの MDL を被除数 , Ri を除数として , 商を MDL, 剰余を乗除算レジス タの MDH に格納する符号なし除算を実現するための命令です。 MDH, D1, D0 を "0" にクリアします。 符号なし除算を実現するためには , DIV0U, DIV1 × 32 のように命令を組み合せてく ださい。 ■ DIV0U(Initial Setting Up for Unsigned Division) アセンブラ形式 DIV0U Ri オペレーション 0 → D0 0 → D1 0 → MDH フラグ変化 N Z V C - - - - N, Z, V, C: フラグは変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 1 0 1 1 1 0 1 0 1 Ri 実行例 DIV0U R2 命令のビットパターン:1001 0111 0101 0010 R2 0 0 F F F F F F R2 0 0 F F F F F F MDH 0 0 0 0 0 0 0 0 MDH 0 0 0 0 0 0 0 0 MDL 0 F F F F F F 0 MDL 0 F F F F F F 0 D1 D0 T SCR ××0 実行前 D1 D0 T SCR 0 0 0 実行後 121 第 7 章 実行命令細則 実行例 実際の使い方 MDL ÷ R2=MDL( 商 )…MDH( 剰余 ), 符号なし演算 DIV0U DIV1 DIV1 : DIV1 R2 0 1 2 3 MDH ×××× ×××× MDL F E D C 4 5 6 7 B A 9 8 R2 R2 R2 DIV1を32個並べる R2 R2 0 1 2 3 4 5 6 7 MDH 0 0 0 0 0 0 7 8 MDL 0 0 0 0 0 0 E 0 D1 D0 T SCR ××0 実行前 122 D1 D0 T SCR 0 0 0 実行後 第 7 章 実行命令細則 7.40 DIV1(Main Process of Division) 符号なし除算を実現するための命令です。DIV0U, DIV1 × 32 のように命令を組み合 せてください。 ■ DIV1(Main Process of Division) アセンブラ形式 DIV1 Ri オペレーション {MDH,MDL}<<=1 if(D1==1){ MDH + Ri → temp } else{ MDH - Ri → temp } if((D0^D1^C)==0){ temp → MDH 1 → MDL[0] } フラグ変化 N Z V C - C - C N, V: 変化しません。 Z : ステップ除算の演算結果が "0" ならばセット , それ以外ならクリアされます。除 算結果の剰余に応じて設定されます。商に応じて設定されるのではありません。 C : ステップ除算の演算の結果 , キャリが発生したときセット , それ以外はクリアさ れます。 実行サイクル数 d サイクル 実行サイクル数は通常 1 サイクルです。しかし , 直後の命令が MOV MDH, Ri/MOV MDL, Ri/ST Rs,@-R15 のときは , インターロックがかかり 2 サイクルになります。 Rs: 特殊レジスタ (TBR, RP, USP, SSP, MDH, MDL) 命令フォーマット MSB 1 LSB 0 0 1 0 1 1 1 0 1 1 0 Ri 123 第 7 章 実行命令細則 実行例 DIV1 R2 命令のビットパターン:1001 0111 0110 0010 R2 0 0 F F F F F F R2 0 0 F F F F F F MDH 0 0 F F F F F F MDH 0 1 0 0 0 0 0 0 MDL 0 0 0 0 0 0 0 0 MDL 0 0 0 0 0 0 0 1 D1 D0 T SCR 0 0 0 D1 D0 T SCR N Z V C CCR 0 0 0 0 実行前 124 0 0 0 N Z V C CCR 0 0 0 0 実行後 第 7 章 実行命令細則 7.41 DIV2(Correction When Remain is 0) 符号付き除算を実現するための命令です。DIV0S, DIVI × 32, DIV2, DIV3, DIV4S の ように命令を組み合せてください。 ■ DIV2(Correction When Remain is 0) アセンブラ形式 DIV2 Ri オペレーション if(D1==1){ MDH + Ri → temp } else{ MDH - Ri → temp } if(Z==1){ 0 → MDH } フラグ変化 N Z V C - C - C N, V: 変化しません。 Z : ステップ除算の演算結果が "0" ならばセット , それ以外ならクリアされます。除 算結果の剰余に応じて設定されます。商に応じて設定されるのではありません。 C : ステップ除算の演算の結果 , キャリまたはボローが発生したときセット , それ以 外はクリアされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 1 0 1 1 1 0 1 1 1 Ri 125 第 7 章 実行命令細則 実行例 DIV2 R2 命令のビットパターン:1001 0111 0111 0010 R2 0 0 F F F F F F R2 0 0 F F F F F F MDH 0 0 F F F F F F MDH 0 0 0 0 0 0 0 0 MDL 0 0 0 0 0 0 0 F MDL 0 0 0 0 0 0 0 F D1 D0 T SCR 0 0 0 D1 D0 T SCR N Z V C CCR 0 0 0 0 実行前 126 0 0 0 N Z V C CCR 0 1 0 0 実行後 第 7 章 実行命令細則 7.42 DIV3(Correction When Remain is 0) 符号付き除算を実現するための命令です。DIV0S, DIVI × 32, DIV2, DIV3, DIV4S の ように命令を組み合せください。 ■ DIV3(Correction When Remain is 0) アセンブラ形式 DIV3 オペレーション if(Z==1){ MDL + 1 → MDL } フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 1 1 1 1 1 0 1 1 0 0 0 0 0 実行例 DIV3 命令のビットパターン:1001 1111 0110 0000 R2 0 0 F F F F F F R2 0 0 F F F F F F MDH 0 0 0 0 0 0 0 0 MDH 0 0 0 0 0 0 0 0 MDL 0 0 0 0 0 0 0 F MDL 0 0 0 0 0 0 1 0 D1 D0 T SCR 0 0 0 D1 D0 T SCR N Z V C CCR 0 1 0 0 実行前 0 0 0 N Z V C CCR 0 1 0 0 実行後 127 第 7 章 実行命令細則 7.43 DIV4S(Correction Answer for Signed Division) 符号付き除算を実現するための命令です。DIV0S, DIVI × 32, DIV2, DIV3, DIV4S の ように命令を組み合せてください。 ■ DIV4S(Correction Answer for Signed Division) アセンブラ形式 DIV4S オペレーション if(D1==1){ 0 - MDL → MDL } フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 1 1 1 1 1 0 1 1 1 0 0 0 0 実行例 DIV4S 命令のビットパターン:1001 1111 0111 0000 R2 0 0 F F F F F F R2 0 0 F F F F F F MDH 0 0 0 0 0 0 0 0 MDH 0 0 0 0 0 0 0 0 MDL 0 0 0 0 0 0 0 F MDL F F F F F F F 1 D1 D0 T SCR 1 1 0 D1 D0 T SCR N Z V C CCR 0 0 0 0 実行前 128 1 1 0 N Z V C CCR 0 0 0 0 実行後 第 7 章 実行命令細則 7.44 LSL(Logical Shift to the Left Direction) Ri のワードデータを左方向に Rj ビット論理シフトし , 結果を Ri に格納します。 シフト量を示す Rj は下位 5 ビットのみ有効で , 0 ∼ 31 を指定できます。 ■ LSL(Logical Shift to the Left Direction) アセンブラ形式 LSL Rj, Ri オペレーション Ri << Rj → Ri フラグ変化 N Z V C C C - C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 変化しません。 C: 最後にシフトアウトしたビットの内容が入ります。シフト量が "0" のときはクリ アされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 1 0 1 1 0 Rj Ri 実行例 LSL R2, R3 命令のビットパターン:1011 0110 0010 0011 R2 0 0 0 0 0 0 0 8 R2 0 0 0 0 0 0 0 8 R3 F F F F F F F F R3 F F F F F F 0 0 N Z V C CCR 0 0 0 0 実行前 N Z V C CCR 1 0 0 1 実行後 129 第 7 章 実行命令細則 7.45 LSL(Logical Shift to the Left Direction) Ri のワードデータを左方向に u4 ビット論理シフトし , 結果を Ri に格納します。 ■ LSL(Logical Shift to the Left Direction) アセンブラ形式 LSL #u4, Ri オペレーション Ri << u4 → Ri フラグ変化 N Z V C C C - C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 変化しません。 C: 最後にシフトアウトしたビットの内容が入ります。シフト量が "0" のときはクリ アされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 1 0 1 0 0 u4 Ri 実行例 LSL #8, R3 命令のビットパターン:1011 0100 1000 0011 R3 F F F F F F F F R3 N Z V C CCR 0 0 0 0 実行前 130 F F F F F F 0 0 N Z V C CCR 1 0 0 1 実行後 第 7 章 実行命令細則 7.46 LSL2(Logical Shift to the Left Direction) Ri のワードデータを左方向に {u4+16} ビット論理シフトし , 結果を Ri に格納しま す。 ■ LSL2(Logical Shift to the Left Direction) アセンブラ形式 LSL2 #u4, Ri オペレーション Ri << {u4+16} → Ri フラグ変化 N Z V C C C - C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 変化しません。 C: 最後にシフトアウトしたビットの内容が入ります。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 1 0 1 0 1 u4 Ri 実行例 LSL2 #8, R3 命令のビットパターン:1011 0101 1000 0011 R3 F F F F F F F F R3 N Z V C CCR 0 0 0 0 実行前 F F 0 0 0 0 0 0 N Z V C CCR 1 0 0 1 実行後 131 第 7 章 実行命令細則 7.47 LSR(Logical Shift to the Right Direction) Ri のワードデータを右方向に Rj ビット論理シフトし , 結果を Ri に格納します。 シフト量を示す Rj は下位 5 ビットのみ有効で , 0 ∼ 31 が指定可能な値となります。 ■ LSR(Logical Shift to the Right Direction) アセンブラ形式 LSR Rj, Ri オペレーション Ri >> Rj → Ri フラグ変化 N Z V C C C - C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 変化しません。 C: 最後にシフトアウトしたビットの内容が入ります。シフト量が "0" のときはクリ アされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 1 0 0 1 0 Rj Ri 実行例 LSR R2, R3 命令のビットパターン:1011 0010 0010 0011 R2 0 0 0 0 0 0 0 8 R2 0 0 0 0 0 0 0 8 R3 F F F F F F F F R3 0 0 F F F F F F N Z V C CCR 0 0 0 0 実行前 132 N Z V C CCR 0 0 0 1 実行後 第 7 章 実行命令細則 7.48 LSR(Logical Shift to the Right Direction) Ri のワードデータを右方向に u4 ビット論理シフトし , 結果を Ri に格納します。 ■ LSR(Logical Shift to the Right Direction) アセンブラ形式 LSR #u4, Ri オペレーション Ri >> u4 → Ri フラグ変化 N Z V C C C - C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 変化しません。 C: 最後にシフトアウトしたビットの内容が入ります。シフト量が "0" のときはクリ アされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 1 0 0 0 0 u4 Ri 実行例 LSR #8, R3 命令のビットパターン:1011 0000 1000 0011 R3 F F F F F F F F R3 N Z V C CCR 0 0 0 0 実行前 0 0 F F F F F F N Z V C CCR 0 0 0 1 実行後 133 第 7 章 実行命令細則 7.49 LSR2(Logical Shift to the Right Direction) Ri のワードデータを左方向に {u4+16} ビット論理シフトし , 結果を Ri に格納しま す。 ■ LSR2(Logical Shift to the Right Direction) アセンブラ形式 LSR2 #u4, Ri オペレーション Ri >> {u4+16} → Ri フラグ変化 N Z V C C C - C N: クリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 変化しません。 C: 最後にシフトアウトしたビットの内容が入ります。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 1 0 0 0 1 u4 Ri 実行例 LSR2 #8, R3 命令のビットパターン:1011 0001 1000 0011 R3 F F F F F F F F R3 N Z V C CCR 0 0 0 0 実行前 134 0 0 0 0 0 0 F F N Z V C CCR 0 0 0 1 実行後 第 7 章 実行命令細則 7.50 ASR(Arithmetic shift to the Right Direction) Ri のワードデータを右方向に Rj ビット算術シフトし , 結果を Ri に格納します。 シフト量を示す Rj は下位 5 ビットのみ有効で , 0 ∼ 31 が指定可能な値となります。 ■ ASR(Arithmetic shift to the Right Direction) アセンブラ形式 ASR Rj, Ri オペレーション Ri >> Rj → Ri フラグ変化 N Z V C C C - C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 変化しません。 C: 最後にシフトアウトしたビットの内容が入ります。シフト量が "0" のときは , ク リアされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 1 1 0 1 0 Rj Ri 実行例 ASR R2, R3 命令のビットパターン:1011 1010 0010 0011 R2 0 0 0 0 0 0 0 8 R2 0 0 0 0 0 0 0 8 R3 F F 0 F F F F F R3 F F F F 0 F F F N Z V C CCR 0 0 0 0 実行前 N Z V C CCR 1 0 0 1 実行後 135 第 7 章 実行命令細則 7.51 ASR(Arithmetic shift to the Right Direction) Ri のワードデータを右方向に u4 ビット算術シフトし , 結果を Ri に格納します。 ■ ASR(Arithmetic shift to the Right Direction) アセンブラ形式 ASR #u4, Ri オペレーション Ri >> u4 → Ri フラグ変化 N Z V C C C - C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 変化しません。 C: 最後にシフトアウトしたビットの内容が入ります。シフト量が "0" のときはクリ アされます。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 1 1 0 0 0 u4 Ri 実行例 ASR #8, R3 命令のビットパターン:1011 1000 1000 0011 R3 F F 0 F F F F F R3 N Z V C CCR 0 0 0 0 実行前 136 F F F F 0 F F F N Z V C CCR 1 0 0 1 実行後 第 7 章 実行命令細則 7.52 ASR2(Arithmetic shift to the Right Direction) Ri のワードデータを左方向に (u4+16) ビット算術シフトし , 結果を Ri に格納しま す。 ■ ASR2(Arithmetic shift to the Right Direction) アセンブラ形式 ASR2 #u4, Ri オペレーション Ri >> {u4+16} → Ri フラグ変化 N Z V C C C - C N: 演算結果の MSB が "1" ならばセット , "0" ならばクリアされます。 Z: 演算結果が "0" ならばセット , それ以外ならクリアされます。 V: 変化しません。 C: 最後にシフトアウトしたビットの内容が入ります。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 1 1 0 0 1 u4 Ri 実行例 ASR2 #8, R3 命令のビットパターン:1011 1001 1000 0011 R3 F 0 F F F F F F R3 N Z V C CCR 0 0 0 0 実行前 F F F F F F F 0 N Z V C CCR 1 0 0 1 実行後 137 第 7 章 実行命令細則 7.53 LDI:32(Load Immediate 32 bit Data to Destination Register) 1 ワードの即値データを Ri に格納します。 ■ LDI:32(Load Immediate 32 bit Data to Destination Register) アセンブラ形式 LDI:32 #i32, Ri オペレーション i32 → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 3 サイクル 命令フォーマット MSB (n+0) 1 LSB 0 0 1 1 1 1 1 1 (n+2) i32(上位) (n+4) i32(下位) 0 0 0 Ri 実行例 LDI:32 #87654321H, R3 命令のビットパターン :1001 1111 1000 0011 :1000 0111 0110 0101 :0100 0011 0010 0001 R3 0 0 0 0 0 0 0 0 実行前 138 R3 8 7 6 5 4 3 2 1 実行後 第 7 章 実行命令細則 7.54 LDI:20(Load Immediate 20bit Data to Destination Register) 20 ビットの即値データの上位 12 ビットをゼロ拡張し , Ri に格納します。 ■ LDI:20(Load Immediate 20bit Data to Destination Register) アセンブラ形式 LDI:20 #i20, Ri オペレーション extu(i20) → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 2 サイクル 命令フォーマット MSB (n+0) 1 LSB 0 0 1 (n+2) 1 0 1 1 i20(上位) Ri i20(下位) 実行例 LDI:20 #54321H, R3 命令のビットパターン :1001 1011 0101 0011 :0100 0011 0010 0001 R3 0 0 0 0 0 0 0 0 実行前 R3 0 0 0 5 4 3 2 1 実行後 139 第 7 章 実行命令細則 7.55 LDI:8(Load Immediate 8bit Data to Destination Register) 8 ビットの即値データの上位 24 ビットをゼロ拡張し , Ri に格納します。 ■ LDI:8(Load Immediate 8bit Data to Destination Register) アセンブラ形式 LDI:8 #i8, Ri オペレーション extu(i8) → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 1 0 0 i8 Ri 実行例 LDI:8 #21H, R3 命令のビットパターン:1100 0010 0001 0011 R3 0 0 0 0 0 0 0 0 実行前 140 R3 0 0 0 0 0 0 2 1 実行後 第 7 章 実行命令細則 7.56 LD(Load Word Data in Memory to Register) メモリの Rj 番地のワードデータを Ri に格納します。 ■ LD(Load Word Data in Memory to Register) アセンブラ形式 LD @Rj, Ri オペレーション (Rj) → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB 0 LSB 0 0 0 0 1 0 0 Rj Ri 実行例 LD @R2, R3 命令のビットパターン:0000 0100 0010 0011 R2 1 2 3 4 5 6 7 8 R2 1 2 3 4 5 6 7 8 R3 0 0 0 0 0 0 0 0 R3 8 7 6 5 4 3 2 1 メモリ 12345678 8 7 6 5 4 3 2 1 実行前 メモリ 12345678 8 7 6 5 4 3 2 1 実行後 141 第 7 章 実行命令細則 7.57 LD(Load Word Data in Memory to Register) メモリの (R13+Rj) 番地のワードデータを Ri に格納します。 ■ LD(Load Word Data in Memory to Register) アセンブラ形式 LD @(R13, Rj), Ri オペレーション (R13+Rj) → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB 0 LSB 0 0 0 0 0 0 0 Rj Ri 実行例 LD @(R13, R2), R3 命令のビットパターン:0000 0000 0010 0011 R2 0 0 0 0 0 0 0 4 R2 0 0 0 0 0 0 0 4 R3 ×××× ×××× R3 8 7 6 5 4 3 2 1 R13 1 2 3 4 R13 1 2 3 4 5 6 7 8 12345678 1234567C 5 6 7 8 メモリ 8 7 6 5 4 3 2 1 実行前 142 12345678 1234567C メモリ 8 7 6 5 4 3 2 1 実行後 第 7 章 実行命令細則 7.58 LD(Load Word Data in Memory to Register) メモリの (R14+o8 × 4) 番地のワードデータを Ri に格納します。 o8 は符号付きで計算します。 ■ LD(Load Word Data in Memory to Register) アセンブラ形式 LD @(R14, disp10), Ri オペレーション (R14+o8 × 4) → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB 0 LSB 0 1 0 o8 Ri 実行例 LD @(R14,4), R3 命令のビットパターン:0010 0000 0001 0011 R3 ×××× ×××× R3 8 7 6 5 4 3 2 1 R14 1 2 3 4 R14 1 2 3 4 5 6 7 8 12345678 1234567C 5 6 7 8 メモリ 8 7 6 5 4 3 2 1 実行前 12345678 1234567C メモリ 8 7 6 5 4 3 2 1 実行後 143 第 7 章 実行命令細則 7.59 LD(Load Word Data in Memory to Register) メモリの (R15+u4 × 4) 番地のワードデータを Ri に格納します。 u4 は符号なしで計算します。 ■ LD(Load Word Data in Memory to Register) アセンブラ形式 LD @(R15, udisp6), Ri オペレーション (R15+u4 × 4) → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB 0 LSB 0 0 0 0 0 1 1 u4 Ri 実行例 LD @(R15,4), R3 命令のビットパターン:0000 0011 0001 0011 R3 ×××× ×××× R3 8 7 6 5 4 3 2 1 R15 1 2 3 4 R15 1 2 3 4 5 6 7 8 12345678 1234567C 5 6 7 8 メモリ 8 7 6 5 4 3 2 1 実行前 144 12345678 1234567C メモリ 8 7 6 5 4 3 2 1 実行後 第 7 章 実行命令細則 7.60 LD(Load Word Data in Memory to Register) メモリの R15 番地のワードデータを Rj に格納し , R15 に 4 を加算します。 Ri として R15 を指定したときは , メモリから読み出した値が R15 に格納されます。 ■ LD(Load Word Data in Memory to Register) アセンブラ形式 LD @R15+, Ri オペレーション (R15) → Ri R15 + 4 → R15 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB 0 LSB 0 0 0 0 1 1 1 0 0 0 0 Ri 実行例 LD @R15+, R3 命令のビットパターン:0000 0111 0000 0011 R3 ×××× ×××× R3 8 7 6 5 4 3 2 1 R15 1 2 3 4 R15 1 2 3 4 5 6 7 C 5 6 7 8 メモリ 12345678 8 7 6 5 4 3 2 1 1234567C メモリ 12345678 8 7 6 5 4 3 2 1 1234567C 実行前 実行後 145 第 7 章 実行命令細則 7.61 LD(Load Word Data in Memory to Register) メモリの R15 番地のワードデータを専用レジスタ Rs に格納し , R15 に 4 を加算し ます。 Rs として専用レジスタの存在しない番号を指定した場合は , 読み出した Ri の値は 無視されます。 Rs としてシステムスタックポインタ (SSP) またはユーザスタックポインタ (USP) を指定して , それが R15 になっている場合〔コンディションコードレジスタ (CCR) の S フラグ =0 のとき SSP 指定 , もしくは S フラグ =1 のとき USP 指定〕, 最終的 に R15 として残るのはメモリから読み出した値になります。 ■ LD(Load Word Data in Memory to Register) アセンブラ形式 LD @R15+, Rs オペレーション (R15) → Rs R15 + 4 → R15 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB 0 146 LSB 0 0 0 0 1 1 1 1 0 0 0 Rs 第 7 章 実行命令細則 実行例 LD @R15+, MDH 命令のビットパターン:0000 0111 1000 0100 R15 1 2 3 4 5 6 7 4 R15 1 2 3 4 5 6 7 8 MDH ×××× ×××× MDH 8 7 6 5 4 3 2 1 12345670 12345674 メモリ 8 7 6 5 4 3 2 1 実行前 12345670 12345674 メモリ 8 7 6 5 4 3 2 1 実行後 147 第 7 章 実行命令細則 7.62 LD(Load Word Data in Memory to Program Status Register) メモリの R15 番地のワードデータをプログラムステータス (PS) に格納し , R15 に 4 を加算します。 命令実行時のインタラプトレベルマスクレジスタ (ILM) の値が 16 ∼ 31 のとき , ILM に新たな値として設定できるのは 16 ∼ 31 です。0 ∼ 15 を設定するデータがメモリ に入っていた場合 , 指定した値に 16 を加算した値が ILM に転送されます。元の値が 0 ∼ 15 のときは , 0 ∼ 31 の任意の値を ILM に転送できます。 ■ LD(Load Word Data in Memory to Program Status Register) アセンブラ形式 LD @R15+, PS オペレーション (R15) → PS R15 + 4 → R15 フラグ変化 N Z V C C C C C N, Z, V, C:(R15) のデータが転送されます。 実行サイクル数 1+a+c サイクル c は通常 1 サイクルです。しかし , 直後の命令が R15, システムスタックポインタ (SSP) またはユーザスタックポインタ (USP) に対して , 読出しまたは書込みを行う命 令のときは , インターロックがかかり 2 サイクルになります。 命令フォーマット MSB 0 148 LSB 0 0 0 0 1 1 1 1 0 0 1 0 0 0 0 第 7 章 実行命令細則 実行例 LD @R15+, PS 命令のビットパターン:0000 0111 1001 0000 R15 1 2 3 4 5 6 7 4 R15 1 2 3 4 5 6 7 8 PS F F F F F 8 D 5 PS F F F 8 F 8 C 0 12345670 12345674 メモリ F F F 8 F 8 C 0 実行前 12345670 12345674 メモリ F F F 8 F 8 C 0 実行後 149 第 7 章 実行命令細則 7.63 LDUH(Load Halfword Data in Memory to Register) メモリの Rj 番地のハーフワードデータをゼロ拡張し , Ri に格納します。 ■ LDUH(Load Halfword Data in Memory to Register) アセンブラ形式 LDUH @Rj, Ri オペレーション extu((Rj)) → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB 0 LSB 0 0 0 0 1 0 1 Rj Ri 実行例 LDUH @R2, R3 命令のビットパターン:0000 0101 0010 0011 R2 1 2 3 4 5 6 7 8 R2 1 2 3 4 5 6 7 8 R3 ×××× ×××× R3 0 0 0 0 4 3 2 1 メモリ 12345678 4 3 2 1 実行前 150 メモリ 12345678 4 3 2 1 実行後 第 7 章 実行命令細則 7.64 LDUH(Load Halfword Data in Memory to Register) メモリの (R13+Rj) 番地のハーフワードデータをゼロ拡張し , Ri に格納します。 ■ LDUH(Load Halfword Data in Memory to Register) アセンブラ形式 LDUH @(R13, Rj), Ri オペレーション extu((R13+Rj)) → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB 0 LSB 0 0 0 0 0 0 1 Rj Ri 実行例 LDUH @(R13, R2), R3 命令のビットパターン:0000 0001 0010 0011 R2 0 0 0 0 0 0 0 4 R2 0 0 0 0 0 0 0 4 R3 ×××× ×××× R3 0 0 0 0 4 3 2 1 R13 1 2 3 4 R13 1 2 3 4 5 6 7 8 5 6 7 8 12345678 メモリ 12345678 メモリ 1234567C 4 3 2 1 1234567C 4 3 2 1 実行前 実行後 151 第 7 章 実行命令細則 7.65 LDUH(Load Halfword Data in Memory to Register) メモリの (R14+o8 × 2) 番地のハーフワードデータをゼロ拡張し , Ri に格納します。 o8 は符号付きで計算します。 ■ LDUH(Load Halfword Data in Memory to Register) アセンブラ形式 LDUH @(R14, disp9), Ri オペレーション extu((R14+o8 × 2)) → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB 0 LSB 1 0 0 o8 Ri 実行例 LDUH @(R14,2), R3 命令のビットパターン:0100 0000 0001 0011 R3 ×××× ×××× R3 0 0 0 0 4 3 2 1 R14 1 2 3 4 R14 1 2 3 4 5 6 7 8 5 6 7 8 12345678 メモリ 12345678 メモリ 1234567A 4 3 2 1 1234567A 4 3 2 1 実行前 152 実行後 第 7 章 実行命令細則 7.66 LDUB(Load Byte Data in Memory to Register) メモリの Rj 番地のバイトデータをゼロ拡張し , Ri に格納します。 ■ LDUB(Load Byte Data in Memory to Register) アセンブラ形式 LDUB @Rj, Ri オペレーション extu((Rj)) → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB 0 LSB 0 0 0 0 1 1 0 Rj Ri 実行例 LDUB @R2, R3 命令のビットパターン:0000 0110 0010 0011 R2 1 2 3 4 5 6 7 8 R2 1 2 3 4 5 6 7 8 R3 ×××× ×××× R3 0 0 0 0 0 0 2 1 メモリ 12345678 2 1 実行前 メモリ 12345678 2 1 実行後 153 第 7 章 実行命令細則 7.67 LDUB(Load Byte Data in Memory to Register) メモリの (R13+Rj) 番地のバイトデータをゼロ拡張し , Ri に格納します。 ■ LDUB(Load Byte Data in Memory to Register) アセンブラ形式 LDUB @(R13, Rj), Ri オペレーション extu((R13+Rj)) → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB 0 LSB 0 0 0 0 0 1 0 Rj Ri 実行例 LDUB @(R13, R2), R3 命令のビットパターン:0000 0010 0010 0011 R2 0 0 0 0 0 0 0 4 R2 0 0 0 0 0 0 0 4 R3 ×××× ×××× R3 0 0 0 0 0 0 2 1 R13 1 2 3 4 R13 1 2 3 4 5 6 7 8 5 6 7 8 12345678 メモリ 12345678 メモリ 1234567C 2 1 1234567C 2 1 実行前 154 実行後 第 7 章 実行命令細則 7.68 LDUB(Load Byte Data in Memory to Register) メモリの (R14+o8) 番地のバイトデータをゼロ拡張し , Ri に格納します。 o8 は符号付きで計算します。 ■ LDUB(Load Byte Data in Memory to Register) アセンブラ形式 LDUB @(R14, disp8), Ri オペレーション extu((R14+o8)) → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB 0 LSB 1 1 0 o8 Ri 実行例 LDUB @(R14,1), R3 命令のビットパターン:0110 0000 0001 0011 R3 ×××× ×××× R3 0 0 0 0 0 0 2 1 R14 1 2 3 4 R14 1 2 3 4 5 6 7 8 5 6 7 8 12345678 メモリ 12345678 メモリ 12345679 2 1 12345679 2 1 実行前 実行後 155 第 7 章 実行命令細則 7.69 ST(Store Word Data in Register to Memory) Ri のワードデータをメモリの Rj 番地に格納します。 ■ ST(Store Word Data in Register to Memory) アセンブラ形式 ST Ri,@Rj オペレーション Ri → (Rj) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 0 LSB 0 0 1 0 1 0 0 Rj Ri 実行例 ST R3,@R2 命令のビットパターン:0001 0100 0010 0011 R2 1 2 3 4 5 6 7 8 R2 1 2 3 4 5 6 7 8 R3 8 7 6 5 4 3 2 1 R3 8 7 6 5 4 3 2 1 メモリ 12345678 ×××× ×××× 実行前 156 メモリ 12345678 8 7 6 5 4 3 2 1 実行後 第 7 章 実行命令細則 7.70 ST(Store Word Data in Register to Memory) Ri のワードデータをメモリの (R13+Rj) 番地に格納します。 ■ ST(Store Word Data in Register to Memory) アセンブラ形式 ST Ri,@(R13, Rj) オペレーション Ri → (R13+Rj) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 0 LSB 0 0 1 0 0 0 0 Rj Ri 実行例 ST R3,@(R13, R2) 命令のビットパターン:0001 0000 0010 0011 R2 0 0 0 0 0 0 0 4 R2 0 0 0 0 0 0 0 4 R3 8 7 6 5 4 3 2 1 R3 8 7 6 5 4 3 2 1 R13 1 2 3 4 5 6 7 8 R13 1 2 3 4 5 6 7 8 12345678 1234567C メモリ ×××× ×××× 実行前 12345678 1234567C メモリ 8 7 6 5 4 3 2 1 実行後 157 第 7 章 実行命令細則 7.71 ST(Store Word Data in Register to Memory) Ri のワードデータをメモリの (R14+o8 × 4) 番地に格納します。 o8 は符号付きで計算します。 ■ ST(Store Word Data in Register to Memory) アセンブラ形式 ST Ri,@(R14, disp10) オペレーション Ri → (R14+o8 × 4) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 0 LSB 0 1 1 o8 Ri 実行例 ST R3,@(R14,4) 命令のビットパターン:0011 0000 0001 0011 R3 8 7 6 5 4 3 2 1 R3 8 7 6 5 4 3 2 1 R14 1 2 3 4 5 6 7 8 R14 1 2 3 4 5 6 7 8 12345678 メモリ 12345678 1234567C ×××× ×××× 1234567C 実行前 158 メモリ 8 7 6 5 4 3 2 1 実行後 第 7 章 実行命令細則 7.72 ST(Store Word Data in Register to Memory) Ri のワードデータをメモリの (R15+u4 × 4) 番地に格納します。 u4 は符号なしで計算します。 ■ ST(Store Word Data in Register to Memory) アセンブラ形式 ST Ri,@(R15, udisp6) オペレーション Ri → (R15+u4 × 4) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 0 LSB 0 0 1 0 0 1 1 u4 Ri 実行例 ST R3,@(R15,4) 命令のビットパターン:0001 0011 0001 0011 R3 8 7 6 5 4 3 2 1 R3 8 7 6 5 4 3 2 1 R15 1 2 3 4 5 6 7 8 R15 1 2 3 4 5 6 7 8 12345678 メモリ 12345678 1234567C ×××× ×××× 1234567C 実行前 メモリ 8 7 6 5 4 3 2 1 実行後 159 第 7 章 実行命令細則 7.73 ST(Store Word Data in Register to Memory) R15 から 4 を減算し , Ri のワードデータをメモリの新しい R15 が示す番地に格納し ます。 Ri として R15 を指定した場合は , 減算前の R15 の値を転送します。 ■ ST(Store Word Data in Register to Memory) アセンブラ形式 ST Ri,@-R15 オペレーション R15 - 4 → R15 Ri → (R15) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 0 LSB 0 0 1 0 1 1 1 0 0 0 0 Ri 実行例 ST R3,@-R15 命令のビットパターン:0001 0111 0000 0011 R3 8 7 6 5 4 3 2 1 R3 8 7 6 5 4 3 2 1 R15 1 2 3 4 5 6 7 8 R15 1 2 3 4 5 6 7 4 メモリ 12345674 ×××× ×××× 12345678 12345674 8 7 6 5 4 3 2 1 12345678 実行前 160 メモリ 実行後 第 7 章 実行命令細則 7.74 ST(Store Word Data in Register to Memory) R15 から 4 を減算し , 専用レジスタ Rs のワードデータをメモリの R15 が示す番地 に格納します。 Rs として専用レジスタの存在しない番号を指定した場合 , 不定値が転送されます。 ■ ST(Store Word Data in Register to Memory) アセンブラ形式 ST Rs,@-R15 オペレーション R15 - 4 → R15 Rs → (R15) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 0 LSB 0 0 1 0 1 1 1 1 0 0 0 Rs 実行例 ST MDH,@-R15 命令のビットパターン:0001 0111 1000 0100 R15 1 2 3 4 5 6 7 8 R15 1 2 3 4 5 6 7 4 MDH 8 7 6 5 4 3 2 1 MDH 8 7 6 5 4 3 2 1 12345670 メモリ 12345670 12345674 ×××× ×××× 12345674 実行前 メモリ 8 7 6 5 4 3 2 1 実行後 161 第 7 章 実行命令細則 7.75 ST(Store Word Data in Program Status Register to Memory) R15 から 4 を減算し , プログラムステータス (PS) のワードデータをメモリの R15 の 示す番地に格納します。 ■ ST(Store Word Data in Program Status Register to Memory) アセンブラ形式 ST PS,@-R15 オペレーション R15 - 4 → R15 PS → (R15) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 0 LSB 0 0 1 0 1 1 1 1 0 0 1 0 0 0 0 実行例 ST PS,@-R15 命令のビットパターン:0001 0111 1001 0000 R15 1 2 3 4 5 6 7 8 R15 1 2 3 4 5 6 7 4 PS F F F 8 F 8 C 0 PS F F F 8 F 8 C 0 12345670 メモリ 12345670 12345674 ×××× ×××× 12345674 実行前 162 メモリ F F F 8 F 8 C 0 実行後 第 7 章 実行命令細則 7.76 STH(Store Halfword Data in Register to Memory) Ri のハーフワードデータをメモリの Rj 番地に格納します。 ■ STH(Store Halfword Data in Register to Memory) アセンブラ形式 STH Ri,@Rj オペレーション Ri → (Rj) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 0 LSB 0 0 1 0 1 0 1 Rj Ri 実行例 STH R3,@R2 命令のビットパターン:0001 0101 0010 0011 R2 1 2 3 4 5 6 7 8 R2 1 2 3 4 5 6 7 8 R3 0 0 0 0 4 3 2 1 R3 0 0 0 0 4 3 2 1 メモリ 12345678 ×××× 実行前 メモリ 12345678 4 3 2 1 実行後 163 第 7 章 実行命令細則 7.77 STH(Store Halfword Data in Register to Memory) Ri のハーフワードデータをメモリの (R13+Rj) 番地に格納します。 ■ STH(Store Halfword Data in Register to Memory) アセンブラ形式 STH Ri,@(R13, Rj) オペレーション Ri → (R13+Rj) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 0 LSB 0 0 1 0 0 0 1 Rj Ri 実行例 STH R3,@(R13, R2) 命令のビットパターン:0001 0001 0010 0011 R2 0 0 0 0 0 0 0 4 R2 0 0 0 0 0 0 0 4 R3 0 0 0 0 4 3 2 1 R3 0 0 0 0 4 3 2 1 R13 1 2 3 4 5 6 7 8 R13 1 2 3 4 5 6 7 8 1234567A メモリ 1234567A メモリ 1234567C ×××× 1234567C 4 3 2 1 実行前 164 実行後 第 7 章 実行命令細則 7.78 STH(Store Halfword Data in Register to Memory) Ri のハーフワードデータをメモリの (R14+o8 × 2) 番地に格納します。 o8 は符号付きで計算します。 ■ STH(Store Halfword Data in Register to Memory) アセンブラ形式 STH Ri,@(R14, disp9) オペレーション Ri → (R14+o8 × 2) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 0 LSB 1 0 1 o8 Ri 実行例 STH R3,@(R14,2) 命令のビットパターン:0101 0000 0001 0011 R3 0 0 0 0 4 3 2 1 R3 0 0 0 0 4 3 2 1 R14 1 2 3 4 5 6 7 8 R14 1 2 3 4 5 6 7 8 12345678 メモリ 12345678 メモリ 1234567A ×××× 1234567A 4 3 2 1 実行前 実行後 165 第 7 章 実行命令細則 7.79 STB(Store Byte Data in Register to Memory) Ri のバイトデータをメモリの Rj 番地に格納します。 ■ STB(Store Byte Data in Register to Memory) アセンブラ形式 STB Ri,@Rj オペレーション Ri → (Rj) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 0 LSB 0 0 1 0 1 1 0 Rj Ri 実行例 STB R3,@R2 命令のビットパターン:0001 0110 0010 0011 R2 1 2 3 4 5 6 7 8 R2 1 2 3 4 5 6 7 8 R3 0 0 0 0 0 0 2 1 R3 0 0 0 0 0 0 2 1 メモリ 12345678 ×× 実行前 166 メモリ 12345678 2 1 実行後 第 7 章 実行命令細則 7.80 STB(Store Byte Data in Register to Memory) Ri のバイトデータをメモリの (R13+Rj) 番地に格納します。 ■ STB(Store Byte Data in Register to Memory) アセンブラ形式 STB Ri,@(R13, Rj) オペレーション Ri → (R13+Rj) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 0 LSB 0 0 1 0 0 1 0 Rj Ri 実行例 STB R3,@(R13, R2) 命令のビットパターン:0001 0010 0010 0011 R2 0 0 0 0 0 0 0 4 R2 0 0 0 0 0 0 0 4 R3 0 0 0 0 0 0 2 1 R3 0 0 0 0 0 0 2 1 R13 1 2 3 4 5 6 7 8 R13 1 2 3 4 5 6 7 8 1234567B メモリ 1234567B メモリ 1234567C ×× 1234567C 2 1 実行前 実行後 167 第 7 章 実行命令細則 7.81 STB(Store Byte Data in Register to Memory) Ri のバイトデータをメモリの (R14+o8) 番地に格納します。 o8 は符号付きで計算します。 ■ STB(Store Byte Data in Register to Memory) アセンブラ形式 STB Ri,@(R14, disp8) オペレーション Ri → (R14+o8) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 0 LSB 1 1 1 o8 Ri 実行例 STB R3,@(R14,1) 命令のビットパターン:0111 0000 0001 0011 R3 0 0 0 0 0 0 2 1 R3 0 0 0 0 0 0 2 1 R14 1 2 3 4 5 6 7 8 R14 1 2 3 4 5 6 7 8 12345678 メモリ 12345678 メモリ 12345679 ×× 12345679 2 1 実行前 168 実行後 第 7 章 実行命令細則 7.82 MOV(Move Word Data in Source Register to Destination Register) Rj のワードデータを Ri に格納します。 ■ MOV(Move Word Data in Source Register to Destination Register) アセンブラ形式 MOV Rj, Ri オペレーション Rj → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 0 1 0 1 1 Rj Ri 実行例 MOV R2, R3 命令のビットパターン:1000 1011 0010 0011 R2 R3 4 3 2 1 R2 8 7 6 5 4 3 2 1 ×××× ×××× R3 8 7 6 5 4 3 2 1 8 7 6 5 実行前 実行後 169 第 7 章 実行命令細則 7.83 MOV(Move Word Data in Source Register to Destination Register) 専用レジスタ Rs のワードデータを汎用レジスタ Ri に格納します。 Rs として専用レジスタの存在しない番号を指定した場合 , 不定値が転送されます。 ■ MOV(Move Word Data in Source Register to Destination Register) アセンブラ形式 MOV Rs, Ri オペレーション Rs → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 1 0 1 1 1 Rs Ri 実行例 MOV MDL, R3 命令のビットパターン:1011 0111 0101 0011 R3 ×××× ×××× R3 8 7 6 5 4 3 2 1 MDL 8 7 6 5 MDL 8 7 6 5 4 3 2 1 4 3 2 1 実行前 170 実行後 第 7 章 実行命令細則 7.84 MOV(Move Word Data in Program Status Register to Destination Register) プログラムステータス (PS) のワードデータを汎用レジスタ Ri に格納します。 ■ MOV(Move Word Data in Program Status Register to Destination Register) アセンブラ形式 MOV PS, Ri オペレーション PS → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 0 LSB 0 0 1 0 1 1 1 0 0 0 1 Ri 実行例 MOV PS, R3 命令のビットパターン:0001 0111 0001 0011 R3 ×××× ×××× R3 F F F 8 F 8 C 0 PS F F F 8 PS F F F 8 F 8 C 0 F 8 C 0 実行前 実行後 171 第 7 章 実行命令細則 7.85 MOV(Move Word Data in Source Register to Destination Register) 汎用レジスタ Ri のワードデータを専用レジスタ Rs に格納します。 Rs として専用レジスタの存在しない番号を指定した場合 , 読み出した Ri の値は無 視されます。 ■ MOV(Move Word Data in Source Register to Destination Register) アセンブラ形式 MOV Ri, Rs オペレーション Ri → Rs フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 1 0 0 1 1 Rs Ri 実行例 MOV R3, MDL 命令のビットパターン:1011 0011 0101 0011 R3 8 7 6 5 MDL ×××× ×××× 4 3 2 1 実行前 172 R3 8 7 6 5 4 3 2 1 MDL 8 7 6 5 4 3 2 1 実行後 第 7 章 実行命令細則 7.86 MOV(Move Word Data in Source Register to Program Status Register) 汎用レジスタ Ri のワードデータをプログラムステータス (PS) に格納します。 命令実行時のインタラプトレベルマスクレジスタ (ILM) の値が 16 ∼ 31 のとき , ILM に新たな値として設定できるのは 16 ∼ 31 です。0 ∼ 15 を設定するデータが Ri に 入っていた場合 , 指定した値 +16 という値が ILM に転送されます。元の値が 0 ∼ 15 のときは , 0 ∼ 31 の任意の値を ILM に転送できます。 ■ MOV(Move Word Data in Source Register to Program Status Register) アセンブラ形式 MOV Ri, PS オペレーション Ri → PS フラグ変化 N Z V C C C C C N, Z, V, C:Ri のデータが転送されます。 実行サイクル数 c サイクル 実行サイクル数は通常 1 サイクルです。しかし , 直後の命令が R15, システムスタッ クポインタ (SSP) またはユーザスタックポインタ (USP) に対して , 読出しまたは書 込みを行う命令のときは , インターロックがかかり 2 サイクルになります。 命令フォーマット MSB 0 LSB 0 0 0 0 1 1 1 0 0 0 1 Ri 実行例 MOV R3, PS 命令のビットパターン:0000 0111 0001 0011 R3 F F F 3 PS ×××× ×××× F 8 D 5 実行前 R3 F F F 3 F 8 D 5 PS F F F 3 F 8 D 5 実行後 173 第 7 章 実行命令細則 7.87 JMP(Jump) 遅延スロットのない分岐命令です。 Ri の示すアドレスへ分岐します。 ■ JMP(Jump) アセンブラ形式 JMP @Ri オペレーション Ri → PC フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 2 サイクル 命令フォーマット MSB 1 LSB 0 0 1 0 1 1 1 0 0 0 0 Ri 実行例 JMP @R1 命令のビットパターン:1001 0111 0000 0001 R1 C 0 0 0 8 0 0 0 R1 0 0 0 0 0 0 F F PC F F 8 0 0 0 0 0 PC C 0 0 0 8 0 0 0 実行前 174 実行後 第 7 章 実行命令細則 7.88 CALL(Call Subroutine) 遅延スロットのない分岐命令です。 次の命令のアドレスをリターンポインタ (RP) に格納した後に , label12 で指定された アドレスへプログラムカウンタ (PC) 相対の分岐を行います。アドレス計算の際に , rel11 の値は 2 倍され , 符号拡張されます。 ■ CALL(Call Subroutine) アセンブラ形式 CALL label12 オペレーション PC + 2 → RP PC + 2 + exts(rel11 × 2) → PC フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 2 サイクル 命令フォーマット MSB 1 LSB 1 0 1 0 rel11 実行例 CALL label ・・・ label: ; CALL 命令のアドレス+ 122H 命令のビットパターン:1101 0000 1001 0000 PC F F 8 0 RP ×××× ×××× 0 0 0 0 実行前 PC F F 8 0 0 1 2 2 RP F F 8 0 0 0 0 4 実行後 175 第 7 章 実行命令細則 7.89 CALL(Call Subroutine) 遅延スロットのない分岐命令です。 次の命令のアドレスをリターンポインタ (RP) に格納した後に , Ri で指定されたアド レスへ分岐します。 ■ CALL(Call Subroutine) アセンブラ形式 CALL @Ri オペレーション PC + 2 → RP Ri → PC フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 2 サイクル 命令フォーマット MSB 1 LSB 0 0 1 0 1 1 1 0 0 0 1 Ri 実行例 CALL @R1 命令のビットパターン:1001 0111 0001 0001 R1 F F F F F 8 0 0 R1 F F F F F 8 0 0 PC 8 0 0 0 F F F E PC F F F F F 8 0 0 RP ×××× ×××× RP 8 0 0 1 0 0 0 0 実行前 176 実行後 第 7 章 実行命令細則 7.90 RET(Return from Subroutine) 遅延スロットのない分岐命令です。 リターンポインタ (RP) の示すアドレスへ分岐します。 ■ RET(Return from Subroutine) アセンブラ形式 RET オペレーション RP → PC フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 2 サイクル 命令フォーマット MSB 1 LSB 0 0 1 0 1 1 1 0 0 1 0 0 0 0 0 実行例 RET 命令のビットパターン:1001 0111 0010 0000 PC F F F 0 8 8 2 0 PC 8 0 0 0 A E 8 6 RP 8 0 0 0 A E 8 6 RP 8 0 0 0 A E 8 6 実行前 実行後 177 第 7 章 実行命令細則 7.91 INT(Software Interrupt) プログラムカウンタ (PC) とプログラムステータス (PS) を割込み用のシステムス タックポインタ (SSP) の示すスタックへ格納します。コンディションコードレジス タ (CCR) の S フラグに "0" を書き込み , 以降に使用するスタックポインタを SSP と します。CCR の割込み許可の I フラグに "0" を書き込み , 外部割込みを禁止状態に します。指定された割込みベクタ番号 u8 に応じた分岐先アドレスをベクタテーブル から読み出して分岐します。 この命令には遅延スロットはありません。 ベクタ番号 9 ∼ 13, 64, 65 はデバッグ用の割込みでエミュレータが使用しますので , ユーザプログラムでは INT#9 ∼ INT#13, INT#64, INT#65 命令を使用しないでくださ い。 ■ INT(Software Interrupt) アセンブラ形式 INT #u8 オペレーション SSP-4 → SSP PS → (SSP) SSP-4 → SSP PC+2 → (SSP) "0" → I フラグ "0" → S フラグ (TBR+3FCH-u8 × 4) → PC フラグ変化 S I N Z V C 0 0 - - - - N, Z, V, C: 変化しません。 S, I: "0" にクリアされます。 実行サイクル数 3+3a サイクル 命令フォーマット MSB 0 178 LSB 0 0 1 1 1 1 1 u8 第 7 章 実行命令細則 実行例 INT #20H 命令のビットパターン:0001 1111 0010 0000 R15 4 0 0 0 0 0 0 0 R15 7 F F F F F F 8 SSP 8 0 0 0 0 0 0 0 SSP 7 F F F F F F 8 TBR 0 0 0 F F C 0 0 TBR 0 0 0 F F C 0 0 USP 4 0 0 0 0 0 0 0 USP 4 0 0 0 0 0 0 0 PC 8 0 8 8 8 0 8 6 PC 6 8 0 9 6 8 0 0 PS F F F F F 8 F 0 PS F F F F F 8 C 0 S I N Z V C CCR 1 1 0 0 0 0 S I N Z V C CCR メモリ 0 0 0 0 0 0 メモリ 000FFF7C 6 8 0 9 6 8 0 0 ×××× ×××× 7FFFFFF8 8 0 8 8 8 0 8 8 7FFFFFFC ×××× ×××× 7FFFFFFC F F F F F 8 F 0 80000000 ×××× ×××× 80000000 ×××× ×××× 000FFF7C 6 8 0 9 7FFFFFF8 6 8 0 0 実行前 実行後 179 第 7 章 実行命令細則 7.92 INTE(Software Interrupt for Emulator) デバッグ用のソフトウェアインタラプト命令です。プログラムカウンタ (PC) とプロ グラムステータス (PS) を割込み用のシステムスタックポインタ (SSP) の示すスタッ クへ格納します。コンディションコードレジスタ (CCR) の S フラグに "0" を書き込 み , 以降に使用するスタックポインタを SSP とします。ベクタテーブルを参照して ベクタ番号 #9 の先頭アドレスへ分岐します。 コンディションコードレジスタ (CCR) の I フラグは変化しません。 プログラムステータス (PS) のインタラプトレベルマスクレジスタ (ILM) のレベルを 4 に設定します。 この命令はデバッグ用のソフトウェアインタラプト命令です。 ステップ実行中は INTE 命令による EIT の発生はありません。 この命令には遅延スロットはありません。 ■ INTE(Software Interrupt for Emulator) アセンブラ形式 INTE オペレーション SSP-4 → SSP PS → (SSP) SSP-4 → SSP PC+2 → (SSP) 4 → ILM "0" → S フラグ (TBR+3D8H) → PC フラグ変化 S I N Z V C 0 - - - - - I, N, Z, V, C: 変化しません。 S: "0" にクリアされます。 実行サイクル数 3+3a サイクル 命令フォーマット MSB 1 180 LSB 0 0 1 1 1 1 1 0 0 1 1 0 0 0 0 第 7 章 実行命令細則 実行例 INTE 命令のビットパターン:1001 1111 0011 0000 R15 4 0 0 0 0 0 0 0 R15 7 F F F F F F 8 SSP 8 0 0 0 0 0 0 0 SSP 7 F F F F F F 8 USP 4 0 0 0 0 0 0 0 USP 4 0 0 0 0 0 0 0 TBR 0 0 0 F F C 0 0 TBR 0 0 0 F F C 0 0 PC 8 0 8 8 8 0 8 6 PC 6 8 0 9 6 8 0 0 PS F F F 5 F 8 F 0 PS F F E 4 F 8 D 0 1 0 1 0 1 ILM S I N Z V C CCR 1 1 0 0 0 0 0 0 1 0 0 ILM S I N Z V C CCR メモリ 0 1 0 0 0 0 メモリ 000FFFD8 6 8 0 9 6 8 0 0 ×××× ×××× 7FFFFFF8 8 0 8 8 8 0 8 8 7FFFFFFC ×××× ×××× 7FFFFFFC F F F F F 8 F 0 80000000 ×××× ×××× 80000000 ×××× ×××× 000FFFD8 6 8 0 9 7FFFFFF8 6 8 0 0 実行前 実行後 181 第 7 章 実行命令細則 7.93 RETI(Return from Interrupt) R15 の示すスタックからプログラムカウンタ (PC) およびプログラムステータス (PS) にデータを格納し , 割込みハンドラから復帰します。 この命令はコンディションコードレジスタ (CCR) の S フラグが "0" の状態で実行さ れる必要があるので , 通常の割込みハンドラ内では , S フラグを操作せず "0" のまま 使用してください。 この命令には遅延スロットはありません。 命令実行時に PS のインタラプトレベルマスクレジスタ (ILM) の値が 16 ∼ 31 のと き , ILM に新たな値として設定できるのは 16 ∼ 31 です。0 ∼ 15 を設定するデータ がメモリに入っていた場合は , 指定した値に 16 を加算した値が ILM に転送されま す。元の値が 0 ∼ 15 の場合は , 0 ∼ 31 の任意の値を ILM に転送できます。 ■ RETI(Return from Interrupt) アセンブラ形式 RETI オペレーション (R15) → PC R15+4 → R15 (R15) → PS R15+4 → R15 フラグ変化 S I N Z V C C C C C C C S, I, N, Z, V, C: スタックから取り出した値に応じて変化します。 実行サイクル数 2+2a サイクル 命令フォーマット MSB 1 182 LSB 0 0 1 0 1 1 1 0 0 1 1 0 0 0 0 第 7 章 実行命令細則 実行例 RETI 命令のビットパターン:1001 0111 0011 0000 R15 7 F F F F F F 8 R15 4 0 0 0 0 0 0 0 SSP 7 F F F F F F 8 SSP 8 0 0 0 0 0 0 0 USP 4 0 0 0 0 0 0 0 USP 4 0 0 0 0 0 0 0 PC F F 0 0 9 0 B C PC 8 0 8 8 8 0 8 8 PS F F F 0 F 8 D 4 PS F F F 3 F 8 F 1 1 0 0 0 0 ILM S I N Z V C CCR 0 1 0 1 0 0 1 0 0 1 1 ILM S I N Z V C CCR 1 1 0 0 0 1 メモリ メモリ 7FFFFFF8 8 0 8 8 8 0 8 8 7FFFFFF8 8 0 8 8 8 0 8 8 7FFFFFFC F F F 3 F 8 F 1 7FFFFFFC F F F 3 F 8 F 1 ×××× ×××× 80000000 ×××× ×××× 80000000 実行前 実行後 183 第 7 章 実行命令細則 7.94 Bcc(Branch relative if Condition satisfied) 遅延スロットのない分岐命令です。 命令ごとに指定された条件が成立すると , label9 で示されたアドレスへプログラム カウンタ (PC) 相対の分岐を行います。アドレス計算の際に , rel8 の値は 2 倍されて 符号拡張されます。 条件が成立しないときは分岐されません。 各命令の条件を , 表 7.94-1 に示します。 ■ Bcc(Branch relative if Condition satisfied) アセンブラ形式 BRA label9 BV label9 BNO label9 BNV label9 BEQ label9 BLT label9 BNE label9 BGE label9 BC label9 BLE label9 BNC label9 BGT label9 BN label9 BLS label9 BP label9 BHI label9 オペレーション if( 条件成立 ){ PC + 2 + exts(rel8 × 2) → PC } 表 7.94-1 分岐条件 (1 / 2) 184 ニーモニック cc BRA 0000 常に成立 BNO 0001 常に非成立 BEQ 0010 Z=1 BNE 0011 Z=0 BC 0100 C=1 BNC 0101 C=0 BN 0110 N=1 BP 0111 N=0 BV 1000 V=1 BNV 1001 V=0 BLT 1010 V xor N = 1 条件 第 7 章 実行命令細則 表 7.94-1 分岐条件 (2 / 2) ニーモニック cc BGE 1011 V xor N = 0 BLE 1100 (V xor N) or Z = 1 BGT 1101 (V xor N) or Z = 0 BLS 1110 C or Z = 1 BHI 1111 C or Z = 0 条件 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 分岐するとき : 2 サイクル 分岐しないとき : 1 サイクル 命令フォーマット MSB 1 LSB 1 1 0 cc rel8 実行例 BHI label ・・・ label: ; BHI 命令のアドレス+ 50H 命令のビットパターン:1110 1111 0010 1000 PC F F 8 0 0 0 0 0 PC N Z V C CCR 1 0 1 0 F F 8 0 0 0 5 2 N Z V C CCR 1 0 1 0 Z or C = 0(条件成立) 実行前 実行後 185 第 7 章 実行命令細則 7.95 JMP:D(Jump) 遅延スロット付きの分岐命令です。 Ri が示すアドレスへ分岐します。 ■ JMP:D(Jump) アセンブラ形式 JMP:D @Ri オペレーション Ri → PC フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB LSB 1 0 0 1 1 1 1 1 0 0 0 0 Ri 実行例 JMP:D @R1 LDI:8 #0FFH, R1 ; 遅延スロットに置かれた命令 … 命令のビットパターン:1001 1111 0000 0001 R1 C 0 0 0 8 0 0 0 R1 0 0 0 0 0 0 F F PC F F 8 0 0 0 0 0 PC C 0 0 0 8 0 0 0 JMP命令実行前 分岐後 分岐先の命令の実行前に , 遅延スロットに置かれた命令が実行されます。 上記の R1 は , 遅延スロットに置かれた LDI:8 命令により変化します。 186 第 7 章 実行命令細則 7.96 CALL:D(Call Subroutine) 遅延スロット付きの分岐命令です。 遅延スロットの次の命令のアドレスを RP に格納した後に , label12 で指定されたア ドレスへ PC 相対の分岐を行います。 アドレス計算の際に , rel11 の値は 2 倍され , 符号拡張されます。 ■ CALL:D(Call Subroutine) アセンブラ形式 CALL:D label オペレーション PC + 4 → RP PC + 2 + exts(rel11 × 2) → PC フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 1 0 1 1 rel11 実行例 CALL:D label LDI:8 #0, R2 ; 遅延スロットに置かれた命令 ・・・ label: ; CALL:D 命令のアドレス+ 122H 命令のビットパターン:1101 1000 1001 0000 R2 ×××× ×××× R2 0 0 0 0 0 0 0 0 PC F F 8 0 0 0 0 0 PC F F 8 0 0 1 2 2 RP ×××× ×××× RP F F 8 0 0 0 0 4 CALL命令実行前 分岐後 分岐先の命令の実行前に , 遅延スロットに置かれた命令が実行されます。 上記の R2 は , 遅延スロットに置かれた LDI:8 命令により変化します。 187 第 7 章 実行命令細則 7.97 CALL:D(Call Subroutine) 遅延スロット付きの分岐命令です。 遅延スロットの次の命令のアドレスを RP に格納した後に , Ri で指定されたアドレ スへ分岐します。 ■ CALL:D(Call Subroutine) アセンブラ形式 CALL:D @Ri オペレーション PC + 4 → RP Ri → PC フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 1 1 1 1 1 0 0 0 1 Ri 実行例 CALL:D @R1 LDI:8 #1, R1 ; 遅延スロットに置かれた命令 … 命令のビットパターン:1001 1111 0001 0001 R1 F F F F F 8 0 0 R1 0 0 0 0 0 0 0 1 PC 8 0 0 0 F F F E PC F F F F F 8 0 0 RP ×××× ×××× RP 8 0 0 1 0 0 0 2 CALL命令実行前 分岐後 分岐先の命令の実行前に , 遅延スロットに置かれた命令が実行されます。 上記の R1 は , 遅延スロットに置かれた LDI:8 命令により変化します。 188 第 7 章 実行命令細則 7.98 RET:D(Return from Subroutine) 遅延スロット付きの分岐命令です。 RP の示すアドレスへ分岐します。 ■ RET:D(Return from Subroutine) アセンブラ形式 RET:D オペレーション RP → PC フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 1 1 1 1 1 0 0 1 0 0 0 0 0 実行例 RET:D MOV R0, R1 ; 遅延スロットに置かれた命令 … 命令のビットパターン:1001 1111 0010 0000 R0 0 0 1 1 2 2 3 3 R0 0 0 1 1 2 2 3 3 R1 ×××× ×××× R1 0 0 1 1 2 2 3 3 PC F F F 0 8 8 2 0 PC 8 0 0 0 A E 8 6 RP 8 0 0 0 A E 8 6 RP 8 0 0 0 A E 8 6 RET命令実行前 分岐後 分岐先の命令の実行前に , 遅延スロットに置かれた命令が実行されます。 上記の R1 は , 遅延スロットに置かれた MOV 命令により変化します。 189 第 7 章 実行命令細則 7.99 Bcc:D(Branch relative if Condition satisfied) 遅延スロット付きの分岐命令です。 命令ごとに指定された条件が成立すると , label9 で示されたアドレスへプログラム カウンタ (PC) 相対の分岐を行います。アドレス計算の際に , rel8 の値は 2 倍されて 符号拡張されます。 条件が成立しないときは分岐されません。 各命令の条件を , 表 7.99-1 に示します。 ■ Bcc:D(Branch relative if Condition satisfied) アセンブラ形式 BRA:D label9 BV:D label9 BNO:D label9 BNV:D label9 BEQ:D label9 BLT:D label9 BNE:D label9 BGE:D label9 BC:D label9 BLE:D label9 BNC:D label9 BGT:D label9 BN:D label9 BLS:D label9 BP:D label9 BHI:D label9 オペレーション if( 条件成立 ){ PC + 2 + exts(rel8 × 2) → PC } 表 7.99-1 分岐条件 (1 / 2) 190 ニーモニック cc BRA:D 0000B 常に成立 BNO:D 0001B 常に非成立 BEQ:D 0010B Z=1 BNE:D 0011B Z=0 BC:D 0100B C=1 BNC:D 0101B C=0 BN:D 0110B N=1 BP:D 0111B N=0 BV:D 1000B V=1 BNV:D 1001B V=0 BLT:D 1010B V xor N = 1 条件 第 7 章 実行命令細則 表 7.99-1 分岐条件 (2 / 2) ニーモニック cc BGE:D 1011B V xor N = 0 BLE:D 1100B (V xor N) or Z = 1 BGT:D 1101B (V xor N) or Z = 0 BLS:D 1110B C or Z = 1 BHI:D 1111B C or Z = 0 条件 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 1 1 1 cc rel8 実行例 BHI:D label LDI:8 #255, R1 ; 遅延スロットに置かれた命令 ・・・ label: ; BHI:D 命令のアドレス+ 50H 命令のビットパターン:1111 1111 0010 1000 R1 8 9 4 7 9 7 A F R1 0 0 0 0 0 0 F F PC F F 8 0 0 0 0 0 PC F F 8 0 0 0 5 2 N Z V C CCR 1 0 1 0 N Z V C CCR 1 0 1 0 Z or C = 0, 条件成立 実行前 実行後 分岐先の命令の実行前に , 遅延スロットに置かれた命令が実行されます。 上記の R1 は , 遅延スロットに置かれた LDI:8 命令により変化しています。 191 第 7 章 実行命令細則 7.100 DMOV(Move Word Data from Direct Address to Register) dir8 の値を 4 倍したダイレクトアドレスに置かれたワードデータを R13 に転送しま す。 ■ DMOV(Move Word Data from Direct Address to Register) アセンブラ形式 DMOV @dir10, R13 オペレーション (dir8 × 4) → R13 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB 0 LSB 0 0 0 1 0 0 0 dir8 実行例 DMOV @88H, R13 命令のビットパターン:0000 1000 0010 0010 R13 ×××× ×××× R13 4 5 6 7 メモリ メモリ 84H ×××× ×××× 84H ×××× ×××× 88H 0 1 2 3 4 5 6 7 88H 0 1 2 3 8CH ×××× ×××× 8CH ×××× ×××× 実行前 192 0 1 2 3 4 5 6 7 実行後 第 7 章 実行命令細則 7.101 DMOV(Move Word Data from Register to Direct Address) R13 のワードデータを , dir8 の値を 4 倍したダイレクトアドレスに転送します。 ■ DMOV(Move Word Data from Register to Direct Address) アセンブラ形式 DMOV R13,@dir10 オペレーション R13 → (dir8 × 4) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 0 LSB 0 0 1 1 0 0 0 dir8 実行例 DMOV R13,@54H 命令のビットパターン:0001 1000 0001 0101 R13 8 9 A B C D E F R13 8 9 A B C D E F メモリ メモリ 50H ×××× ×××× 50H ×××× ×××× 54H ×××× ×××× 54H 8 9 A B 58H ×××× ×××× 58H ×××× ×××× 実行前 C D E F 実行後 193 第 7 章 実行命令細則 7.102 DMOV(Move Word Data from Direct Address to Post Increment Register Indirect Address) dir8 の値を 4 倍したダイレクトアドレスに置かれたワードデータを R13 の示すアド レスへ転送します。データ転送の後 , R13 に 4 を加算します。 ■ DMOV(Move Word Data from Direct Address to Post Increment Register Indirect Address) アセンブラ形式 DMOV @dir10,@R13+ オペレーション (dir8 × 4) → (R13) R13 + 4 → R13 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 2a サイクル 命令フォーマット MSB 0 LSB 0 0 0 1 1 0 0 dir8 実行例 DMOV @88H,@R13+ 命令のビットパターン:0000 1100 0010 0010 R13 F F F F 1 2 4 8 R13 メモリ 00000088 1 4 1 4 FFFF1248 FFFF124C 1 2 4 C メモリ 00000088 1 4 1 4 2 1 3 5 ×××× ×××× FFFF1248 1 4 1 4 2 1 3 5 ×××× ×××× FFFF124C ×××× ×××× 2 1 3 5 実行前 194 F F F F 実行後 第 7 章 実行命令細則 7.103 DMOV(Move Word Data from Post Increment Register Indirect Address to Direct Address) R13 が示すアドレスに置かれたワードデータを dir8 の値を 4 倍したダイレクトアド レスに転送します。データ転送の後 , R13 に 4 を加算します。 ■ DMOV(Move Word Data from Post Increment Register Indirect Address to Direct Address) アセンブラ形式 DMOV @R13+,@dir10 オペレーション (R13) → (dir8 × 4) R13 + 4 → R13 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 2a サイクル 命令フォーマット MSB 0 LSB 0 0 1 1 1 0 0 dir8 実行例 DMOV @R13+,@54H 命令のビットパターン:0001 1100 0001 0101 R13 F F F F 1 2 4 8 R13 メモリ F F F F 1 2 4 C メモリ 00000054 ×××× ×××× 00000054 8 9 4 7 9 1 A F FFFF1248 8 9 4 7 FFFF1248 8 9 4 7 9 1 A F FFFF124C ×××× ×××× FFFF124C ×××× ×××× 9 1 A F 実行前 実行後 195 第 7 章 実行命令細則 7.104 DMOV(Move Word Data from Direct Address to Pre Decrement Register Indirect Address) R15 から 4 を減算した後に , dir8 の値を 4 倍したダイレクトアドレスに置かれた ワードデータを R15 が示すアドレスへ転送します。 ■ DMOV(Move Word Data from Direct Address to Pre Decrement Register Indirect Address) アセンブラ形式 DMOV @dir10,@-R15 オペレーション R15 - 4 → R15 (dir8 × 4) → (R15) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 2a サイクル 命令フォーマット MSB 0 LSB 0 0 0 1 0 1 1 dir8 実行例 DMOV @2CH,@-R15 命令のビットパターン:0000 1011 0000 1011 R15 7 F F F F F 8 8 R15 メモリ 0000002C 8 2 A 2 7FFFFF84 7FFFFF88 F F 8 4 メモリ 0000002C 8 2 A 2 8 2 A 9 ×××× ×××× 7FFFFF84 8 2 A 2 8 2 A 9 ×××× ×××× 7FFFFF88 ×××× ×××× 8 2 A 9 実行前 196 7 F F F 実行後 第 7 章 実行命令細則 7.105 DMOV(Move Word Data from Post Increment Register Indirect Address to Direct Address) R15 が示すアドレスに置かれたワードデータを dir8 の値を 4 倍したダイレクトアド レスに転送します。データ転送の後 , R15 に 4 を加算します。 ■ DMOV(Move Word Data from Post Increment Register Indirect Address to Direct Address) アセンブラ形式 DMOV @R15+,@dir10 オペレーション (R15) → (dir8 × 4) R15 + 4 → R15 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 2a サイクル 命令フォーマット MSB 0 LSB 0 0 1 1 0 1 1 dir8 実行例 DMOV @R15+,@38H 命令のビットパターン:0001 1011 0000 1110 R15 7 F F E E E 8 0 R15 メモリ 7 F F E E E 8 4 メモリ 00000038 ×××× ×××× 00000038 8 3 4 3 8 3 4 A 7FFEEE80 8 3 4 3 7FFEEE80 8 3 4 3 8 3 4 A 7FFEEE84 ×××× ×××× 7FFEEE84 ×××× ×××× 8 3 4 A 実行前 実行後 197 第 7 章 実行命令細則 7.106 DMOVH(Move Halfword Data from Direct Address to Register) dir8 の値を 2 倍したダイレクトアドレスに置かれたハーフワードデータを R13 に転 送します。データの上位 16 ビットはゼロに拡張されます。 ■ DMOVH(Move Halfword Data from Direct Address to Register) アセンブラ形式 DMOVH @dir9, R13 オペレーション (dir8 × 2) → R13 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB LSB 0 0 0 0 1 0 0 1 dir8 実行例 DMOVH @88H, R13 命令のビットパターン:0000 1001 0100 0100 R13 ×××× ×××× R13 0 0 0 0 メモリ メモリ 86 ×××× 86 ×××× 88 B 2 B 6 88 B 2 B 6 8A ×××× 8A ×××× 実行前 198 B 2 B 6 実行後 第 7 章 実行命令細則 7.107 DMOVH(Move Halfword Data from Register to Direct Address) R13 のハーフワードデータを dir8 の値を 2 倍したダイレクトアドレスに転送しま す。 ■ DMOVH(Move Halfword Data from Register to Direct Address) アセンブラ形式 DMOVH R13,@dir9 オペレーション R13 → (dir8 × 2) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB LSB 0 0 0 1 1 0 0 1 dir8 実行例 DMOVH R13,@52H 命令のビットパターン:0001 1001 0010 1001 R13 F F F F A E 8 6 R13 F F F F メモリ A E 8 6 メモリ 50 ×××× 50 ×××× 52 ×××× 52 A E 8 6 54 ×××× 54 ×××× 実行前 実行後 199 第 7 章 実行命令細則 7.108 DMOVH(Move Halfword Data from Direct Address to Post Increment Register Indirect Address) dir8 の値を 2 倍したダイレクトアドレスに置かれたハーフワードデータを R13 が示 すアドレスへ転送します。データ転送の後 , R13 に 2 を加算します。 ■ DMOVH(Move Halfword Data from Direct Address to Post Increment Register Indirect Address) アセンブラ形式 DMOVH @dir9,@R13+ オペレーション (dir8 × 2) → (R13) R13 + 2 → R13 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 2a サイクル 命令フォーマット MSB 0 LSB 0 0 0 1 1 0 1 dir8 実行例 DMOVH @88H,@R13+ 命令のビットパターン:0000 1101 0100 0100 R13 F F 0 0 0 0 5 2 R13 F F 0 0 メモリ メモリ 00000088 1 3 7 4 00000088 1 3 7 4 FF000052 ×××× FF000052 1 3 7 4 FF000054 ×××× FF000054 ×××× 実行前 200 0 0 5 4 実行後 第 7 章 実行命令細則 7.109 DMOVH(Move Halfword Data from Post Increment Register Indirect Address to Direct Address) R13 が示すアドレスに置かれたハーフワードデータを dir8 の値を 2 倍したダイレク トアドレスに転送します。データ転送の後 , R13 に 2 を加算します。 ■ DMOVH(Move Halfword Data from Post Increment Register Indirect Address to Direct Address) アセンブラ形式 DMOVH @R13+,@dir9 オペレーション (R13) → (dir8 × 2) R13 + 2 → R13 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 2a サイクル 命令フォーマット MSB 0 LSB 0 0 1 1 1 0 1 dir8 実行例 DMOVH @R13+,@52H 命令のビットパターン:0001 1101 0010 1001 R13 F F 8 0 1 2 2 0 R13 F F 8 0 1 2 2 2 メモリ メモリ 00000052 ×××× 00000052 8 9 3 3 FF801220 8 9 3 3 FF801220 8 9 3 3 FF801222 ×××× FF801222 ×××× 実行前 実行後 201 第 7 章 実行命令細則 7.110 DMOVB(Move Byte Data from Direct Address to Register) dir8 で示されるダイレクトアドレスに置かれたバイトデータを R13 に転送します。 データの上位 24 ビットはゼロに拡張されます。 ■ DMOVB(Move Byte Data from Direct Address to Register) アセンブラ形式 DMOVB @dir8, R13 オペレーション (dir8) → R13 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB LSB 0 0 0 0 1 0 1 0 dir8 実行例 DMOVB @91H, R13 命令のビットパターン:0000 1010 1001 0001 R13 ×××× ×××× R13 0 0 0 0 メモリ メモリ 90 ×× 90 ×× 91 3 2 91 3 2 92 ×× 92 ×× 実行前 202 0 0 3 2 実行後 第 7 章 実行命令細則 7.111 DMOVB(Move Byte Data from Register to Direct Address) R13 のハーフワードデータを dir8 で示されるダイレクトアドレスに転送します。 ■ DMOVB(Move Byte Data from Register to Direct Address) アセンブラ形式 DMOVB R13,@dir8 オペレーション R13 → (dir8) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB LSB 0 0 0 1 1 0 1 0 dir8 実行例 DMOVB R13,@53H 命令のビットパターン:0001 1010 0101 0011 R13 F F F F F F F E R13 F F F F メモリ F F F E メモリ 52 ×× 52 ×× 53 ×× 53 F E 54 ×× 54 ×× 実行前 実行後 203 第 7 章 実行命令細則 7.112 DMOVB(Move Byte Data from Direct Address to Post Increment Register Indirect Address) dir8 で示されるダイレクトアドレスに置かれたハーフワードデータを R13 が示すア ドレスへ転送します。データ転送の後 , R13 に 1 を加算します。 ■ DMOVB(Move Byte Data from Direct Address to Post Increment Register Indirect Address) アセンブラ形式 DMOVB @dir8,@R13+ オペレーション (dir8) → (R13) R13 + 1 → R13 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 2a サイクル 命令フォーマット MSB 0 LSB 0 0 0 1 1 1 0 dir8 実行例 DMOVB @71H,@R13+ 命令のビットパターン:0000 1110 0111 0001 R13 8 8 0 0 1 2 3 4 R13 8 8 0 0 メモリ メモリ 00000071 9 9 00000071 9 9 88001234 ×× 88001234 9 9 88001235 ×× 88001235 ×× 実行前 204 1 2 3 5 実行後 第 7 章 実行命令細則 7.113 DMOVB(Move Byte Data from Post Increment Register Indirect Address to Direct Address) R13 が示すアドレスに置かれたバイトデータを dir8 で示されるダイレクトアドレス へ転送します。データ転送の後 , R13 に 1 を加算します。 ■ DMOVB(Move Byte Data from Post Increment Register Indirect Address to Direct Address) アセンブラ形式 DMOVB @R13+,@dir8 オペレーション (R13) → (dir8) R13 + 1 → R13 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 2a サイクル 命令フォーマット MSB 0 LSB 0 0 1 1 1 1 0 dir8 実行例 DMOVB @R13+,@57H 命令のビットパターン:0001 1110 0101 0111 R13 F F 8 0 1 2 2 0 R13 F F 8 0 メモリ 1 2 2 1 メモリ 00000057 ×× 00000057 5 5 FF801220 5 5 FF801220 5 5 FF801221 ×× FF801221 ×× 実行前 実行後 205 第 7 章 実行命令細則 7.114 LDRES(Load Word Data in Memory to Resource) Ri が示すアドレスに置かれたワードデータを u4 チャネルのリソースに転送します。 Ri に 4 を加算します。 ■ LDRES(Load Word Data in Memory to Resource) アセンブラ形式 LDRES @Ri+, #u4 オペレーション (Ri) → u4 チャネルのリソース Ri + 4 → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 1 LSB 0 1 1 1 1 0 0 u4 Ri 実行例 LDRES @R2+, #8 命令のビットパターン:1011 1100 1000 0010 R2 1 2 3 4 5 6 7 8 R2 メモリ ch.8 Resource 12345678 ×××× ×××× 8 7 6 5 4 3 2 1 1234567C 5 6 7 C メモリ ch.8 Resource 8 7 6 5 4 3 2 1 12345678 8 7 6 5 4 3 2 1 1234567C 実行前 206 1 2 3 4 実行後 第 7 章 実行命令細則 7.115 STRES(Store Word Data in Resource to Memory) u4 チャネルのリソースのワードデータを Ri が示すアドレスに転送します。 Ri に 4 を加算します。 ■ STRES(Store Word Data in Resource to Memory) アセンブラ形式 STRES #u4,@Ri+ オペレーション u4 チャネルのリソース → (Ri) Ri + 4 → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 a サイクル 命令フォーマット MSB 1 LSB 0 1 1 1 1 0 1 u4 Ri 実行例 STRES #8,@R2+ 命令のビットパターン:1011 1101 1000 0010 R2 1 2 3 4 5 6 7 8 R2 メモリ ch.8 Resource 12345678 8 7 6 5 4 3 2 1 ×××× ×××× 1234567C 1 2 3 4 5 6 7 C メモリ ch.8 Resource 8 7 6 5 4 3 2 1 12345678 8 7 6 5 4 3 2 1 1234567C 実行前 実行後 207 第 7 章 実行命令細則 7.116 COPOP(Co-Processor Opetation) CC, CRj, CRi で構成される 16 ビットデータを u4 のチャネル番号で示されるコプロ セッサに対して転送します。 基本的には , コプロセッサ内のレジスタ間演算を行います。CC で指定される演算処 理をコプロセッサ内レジスタ CRj と CRi の間で行います。ただし , CC, CRj, CRi 各 フィールドの解釈はコプロセッサが行うため , 実際の動作内容はコプロセッサの仕様 により決まります。 u4 で指定されるコプロセッサが実装されていない場合 , コプロセッサ不在トラップ が発生します。 u4 で指定されたコプロセッサが以前の動作によりエラーを起こしていた場合 , コプ ロセッサエラートラップが発生します。 ■ COPOP(Co-Processor Opetation) アセンブラ形式 COPOP #u4, #CC, CRj, CRi オペレーション CC, CRj, CRi → ch u4 のコプロセッサ フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 2+a サイクル 命令フォーマット MSB (n+0) (n+2) 208 1 LSB 0 0 1 CC 1 1 1 1 1 1 0 CRj 0 u4 CRi 第 7 章 実行命令細則 実行例 COPOP #15, #1, CR3, CR4 16 ビット長データをチャネル番号 15 で指定されるコプロセッサにバスを通じて転 送します。 MSB 0 LSB 0 0 0 0 0 0 1 0 0 1 1 0 1 0 0 例えば , チャネル番号 15 で指定されるコプロセッサが単精度浮動小数点演算ユニッ トだとします。コプロセッサコマンド CC が , 表 7.116-1 のように割り当てられてい るとすると , コプロセッサは下記のように動作します。 表 7.116-1 コプロセッサコマンド CC の条件 (COPOP) CC 演算 00 加算 CRi+CRj → CRi 01 減算 CRi-CRj → CRi 02 乗算 CRi × CRj → CRi 03 除算 CRi ÷ CRj → CRi その他 何もしない (コプロセッサ内レジスタ) (コプロセッサ内レジスタ) CR3 C 0 0 0 0 0 0 0 CR3 C 0 0 0 0 0 0 0 CR4 4 0 C 0 0 0 0 0 (-1×20) CR4 4 0 8 0 0 0 0 0 (2×20) (3×20) 実行前 実行後 209 第 7 章 実行命令細則 7.117 COPLD(Load 32bit Data from Register to Co-processor Register) CC, Rj, CRi で構成される 16 ビットデータを u4 のチャネル番号で示されるコプロ セッサに対して転送し , その次のサイクルに CPU 内汎用レジスタ Rj の内容を同コ プロセッサへ転送します。 基本的には , コプロセッサ内レジスタへのデータ転送を行います。CPU 内汎用レジ スタ Rj の保持する 32 ビットデータをコプロセッサ内レジスタ CRi へ転送します。 ただし , CC, Rj, CRi 各フィールドの解釈はコプロセッサが行うため , 実際の動作内 容はコプロセッサの仕様により決まります。 u4 で指定されるコプロセッサが実装されていない場合 , コプロセッサ不在トラップ が発生します。 u4 で指定されたコプロセッサが以前の動作によりエラーを起こしていた場合 , コプ ロセッサエラートラップが発生します。 ■ COPLD(Load 32bit Data from Register fo Co-processor Register) アセンブラ形式 COPLD #u4, #CC, Rj, CRi オペレーション CC, Rj, CRi → ch u4 のコプロセッサ Rj → CRi フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB (n+0) (n+2) 210 1 LSB 0 0 1 CC 1 1 1 1 1 1 0 Rj 1 u4 CRi 第 7 章 実行命令細則 実行例 COPLD #15, #4, R8, CR1 16 ビット長データをチャネル番号 15 で指定されるコプロセッサにバスを通じて転 送します。次に , 汎用レジスタ R8 の内容を同コプロセッサにバスを通じて転送し ます。 MSB 0 LSB 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 例えば , チャネル番号 15 で指定されるコプロセッサが単精度浮動小数点演算ユニッ トだとします。コプロセッサコマンド CC が , 表 7.117-1 のように割り当てられてい るとすると , コプロセッサは下記のように動作します。 表 7.117-1 コプロセッサコマンド CC の条件 (COPLD) CC 演算 00 加算 CRi+CRj → CRi 01 減算 CRi-CRj → CRi 02 乗算 CRi × CRj → CRi 03 除算 CRi ÷ CRj → CRi その他 演算は何もしない (CPU内レジスタ) R8 3 F 8 0 0 0 0 0 (CPU内レジスタ) R8 (コプロセッサ内レジスタ) CR1 ×××× ×××× 実行前 3 F 8 0 0 0 0 0 (コプロセッサ内レジスタ) CR1 3 F 8 0 0 0 0 0 実行後 211 第 7 章 実行命令細則 7.118 COPST(Store 32bit Data from Co-processor Register to Register) CC, CRj, Ri で構成される 16 ビットデータを u4 のチャネル番号で示されるコプロ セッサに対して転送し , その次のサイクルにコプロセッサの出力するデータを CPU 内汎用レジスタ Ri に取り込みます。 基本的には , コプロセッサ内レジスタからのデータ転送を行います。コプロセッサ内 レジスタ CRj の保持する 32 ビットデータを CPU 内汎用レジスタ Ri へ転送します。 ただし , CC, CRj, Ri 各フィールドの解釈はコプロセッサが行うため , 実際の動作内 容はコプロセッサの仕様により決まります。 u4 で指定されるコプロセッサが実装されていない場合 , コプロセッサ不在トラップ が発生します。 u4 で指定されたコプロセッサが以前の動作によりエラーを起こしていた場合 , コプ ロセッサエラートラップが発生します。 ■ COPST(Store 32bit Data from Co-processor Register to Register) アセンブラ形式 COPST #u4, #CC, CRj, Ri オペレーション CC, CRj, Ri → ch u4 のコプロセッサ CRj → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB (n+0) (n+2) 212 1 LSB 0 0 1 CC 1 1 1 1 1 1 1 CRj 0 u4 Ri 第 7 章 実行命令細則 実行例 COPST #15, #4, CR2, R4 16 ビット長データをチャネル番号 15 で指定されるコプロセッサにバスを通じて転 送します。次に , コプロセッサの出力するデータがバスを通じて CPU に取り込まれ ます。 MSB 0 LSB 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 例えば , チャネル番号 15 で指定されるコプロセッサが単精度浮動小数点演算ユニッ トだとします。コプロセッサコマンド CC が , 表 7.118-1 のように割り当てられてい るとすると , コプロセッサは下記のように動作します。 表 7.118-1 コプロセッサコマンド CC の条件 (COPST) CC 演算 00 加算 CRi+CRj → CRi 01 減算 CRi-CRj → CRi 02 乗算 CRi × CRj → CRi 03 除算 CRi ÷ CRj → CRi その他 演算は何もしない (CPU内レジスタ) R4 ×××× ×××× (CPU内レジスタ) R4 (コプロセッサ内レジスタ) CR2 B F 8 0 0 0 0 0 実行前 B F 8 0 0 0 0 0 (コプロセッサ内レジスタ) CR2 B F 8 0 0 0 0 0 実行後 213 第 7 章 実行命令細則 7.119 COPSV(Save 32bit Data from Co-processor Register to Register) CC, CRj, Ri で構成される 16 ビットデータを u4 のチャネル番号で示されるコプロ セッサに対して転送し , その次のサイクルにコプロセッサの出力するデータを CPU 内汎用レジスタ Ri に取り込みます。 基本的には , コプロセッサ内レジスタからのデータ転送を行います。コプロセッサ内 レジスタ CRj の保持する 32 ビットデータを CPU 内汎用レジスタ Ri へ転送します。 ただし , CC, CRj, Ri 各フィールドの解釈はコプロセッサが行うため , 実際の動作内 容はコプロセッサの仕様により決まります。 u4 で指定されるコプロセッサが実装されていない場合 , コプロセッサ不在トラップ が発生します。 u4 で指定されたコプロセッサが以前の動作によりエラーを起こしていた場合でも , コプロセッサエラートラップは発生しません。 この命令の基本的な動作は COPST 命令と同じですが , 上記エラートラップに関する 動作だけが異なります。 ■ COPSV(Save 32bit Data from Co-processor Register to Register) アセンブラ形式 COPSV #u4, #CC, CRj, Ri オペレーション CC, CRj, Ri → ch u4 のコプロセッサ CRj → Ri フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1+2a サイクル 命令フォーマット MSB (n+0) (n+2) 214 1 LSB 0 0 1 CC 1 1 1 1 1 1 1 CRj 1 u4 Ri 第 7 章 実行命令細則 実行例 COPSV #15, #4, CR2, R4 16 ビット長データをチャネル番号 15 で指定されるコプロセッサにバスを通じて転 送します。次に , コプロセッサの出力するデータがバスを通じて CPU に取り込まれ ます。ただし , コプロセッサにエラーが発生していても , この命令実行時はコプロ セッサエラートラップを発生しません。 MSB 0 LSB 0 0 0 0 1 0 0 0 0 1 0 0 1 0 0 例えば , チャネル番号 15 で指定されるコプロセッサが単精度浮動小数点演算ユニッ トだとします。コプロセッサコマンド CC が , 表 7.119-1 のように割り当てられてい るとすると , コプロセッサは下記のように動作します。 表 7.119-1 コプロセッサコマンド CC の条件 (COPSV) CC 演算 00 加算 CRi+CRj → CRi 01 減算 CRi-CRj → CRi 02 乗算 CRi × CRj → CRi 03 除算 CRi ÷ CRj → CRi その他 演算は何もしない (CPU内レジスタ) R4 ×××× ×××× (CPU内レジスタ) R4 (コプロセッサ内レジスタ) CR2 4 0 0 0 0 0 0 0 実行前 4 0 0 0 0 0 0 0 (コプロセッサ内レジスタ) CR2 4 0 0 0 0 0 0 0 実行後 215 第 7 章 実行命令細則 7.120 NOP(No Operation) 何も動作しません。 ■ NOP(No Operation) アセンブラ形式 NOP オペレーション 何も動作しません。 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 1 1 1 1 1 1 0 1 0 0 0 0 0 実行例 NOP 命令のビットパターン:1001 1111 1010 0000 PC 8 3 4 3 8 3 4 A 実行前 216 PC 8 3 4 3 8 3 4 C 実行後 第 7 章 実行命令細則 7.121 ANDCCR(And Condition Code Register and Immediate Data) コンディションコードレジスタ (CCR) のバイトデータと即値データとで論理積演算 を行い , 結果を CCR に戻します。 ■ ANDCCR(And Condition Code Register and Immediate Data) アセンブラ形式 ANDCCR #u8 オペレーション CCR and u8 → CCR フラグ変化 S I N Z V C C C C C C C S, I, N, Z, V, C: 演算結果に従い変化します。 実行サイクル数 c サイクル 実行サイクル数は通常 1 サイクルです。しかし , 直後の命令が R15, システムスタッ クポインタ (SSP) またはユーザスタックポインタ (USP) に対して読出しまたは書込 みを行う命令のときは , インターロックがかかり 2 サイクルになります。 命令フォーマット MSB 1 LSB 0 0 0 0 0 1 1 u8 実行例 ANDCCR #0FEH 命令のビットパターン:1000 0011 1111 1110 S I N Z V C CCR 0 1 0 1 0 1 実行前 S I N Z V C CCR 0 1 0 1 0 0 実行後 217 第 7 章 実行命令細則 7.122 ORCCR(Or Condition Code Register and Immediate Data) コンディションコードレジスタ (CCR) のバイトデータと即値データとで論理和演算 を行い , 結果を CCR に戻します。 ■ ORCCR(Or Condition Code Register and Immediate Data) アセンブラ形式 ORCCR #u8 オペレーション CCR or u8 → CCR フラグ変化 S I N Z V C C C C C C C S, I, N, Z, V, C: 演算結果に従い変化します。 実行サイクル数 c サイクル 実行サイクル数は通常 1 サイクルです。しかし , 直後の命令が R15, システムスタッ クポインタ (SSP) または USP に対して読出しまたは書込みを行う命令のときは , イ ンターロックがかかり 2 サイクルになります。 命令フォーマット MSB 1 LSB 0 0 1 0 0 1 1 u8 実行例 ORCCR #10H 命令のビットパターン:1001 0011 0001 0000 S I N Z V C CCR 0 0 0 1 0 1 実行前 218 S I N Z V C CCR 0 1 0 1 0 1 実行後 第 7 章 実行命令細則 7.123 STILM(Set Immediate Data to Interrupt Level Mask Register) 即値データをプログラムステータス (PS) のインタラプトレベルマスクレジスタ (ILM) に転送します。 即値データは , 下位 5 ビット (bit4 ∼ bit0) だけが有効です。 命令実行時の ILM の値が 16 ∼ 31 のとき , ILM に新たな値として設定できるのは 16 ∼ 31 です。u8 が 0 ∼ 15 の場合は , 指定した値に 16 加算した値が ILM に転送されます。 元の値が 0 ∼ 15 のときは , 0 ∼ 31 の任意の値を ILM に転送できます。 ■ STILM(Set Immediate Data to Interrupt Level Mask Register) アセンブラ形式 STILM #u8 オペレーション u8 → ILM フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB LSB 1 0 0 0 0 1 1 1 u8 実行例 STILM #14H 命令のビットパターン:1000 0111 0001 0100 ILM 1 1 1 1 1 実行前 ILM 1 0 1 0 0 実行後 219 第 7 章 実行命令細則 7.124 ADDSP(Add Stack Pointer and Immediate Data) 4 倍して符号拡張した即値データを R15 に加算します。 ■ ADDSP(Add Stack Pointer and Immediate Data) アセンブラ形式 ADDSP #s10 オペレーション R15 + exts(s8 × 4) → R15 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 1 0 0 0 1 1 s8 実行例 ADDSP #-4 命令のビットパターン:1010 0011 1111 1111 R15 8 0 0 0 0 0 0 0 実行前 220 R15 7 F F F F F F C 実行後 第 7 章 実行命令細則 7.125 EXTSB(Sign Extend from Byte Data to Word Data) Ri のバイトデータを符号付き 2 進数としてワードデータに拡張します。 ■ EXTSB(Sign Extend from Byte Data to Word Data) アセンブラ形式 EXTSB Ri オペレーション exts(Ri) → Ri ( バイト → ワード ) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 1 0 1 1 1 1 0 0 0 Ri 実行例 EXTSB R1 命令のビットパターン:1001 0111 1000 0001 R1 0 0 0 0 0 0 A B 実行前 R1 F F F F F F A B 実行後 221 第 7 章 実行命令細則 7.126 EXTUB(Unsign Extend from Byte Data to Word Data) Ri のバイトデータを符号なし 2 進数としてワードデータに拡張します。 ■ EXTUB(Unsign Extend from Byte Data to Word Data) アセンブラ形式 EXTUB Ri オペレーション extu(Ri) → Ri ( バイト → ワード ) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 1 0 1 1 1 1 0 0 1 Ri 実行例 EXTUB R1 命令のビットパターン:1001 0111 1001 0001 R1 F F F F F F F F 実行前 222 R1 0 0 0 0 0 0 F F 実行後 第 7 章 実行命令細則 7.127 EXTSH(Sign Extend from Byte Data to Word Data) Ri のハーフワードデータを符号付き 2 進数としてワードデータに拡張します。 ■ EXTSH(Sign Extend from Byte Data to Word Data) アセンブラ形式 EXTSH Ri オペレーション exts(Ri) → Ri ( ハーフワード → ワード ) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 1 0 1 1 1 1 0 1 0 Ri 実行例 EXTSH R1 命令のビットパターン:1001 0111 1010 0001 R1 0 0 0 0 A B C D 実行前 R1 F F F F A B C D 実行後 223 第 7 章 実行命令細則 7.128 EXTUH(Unsign Extend from Byte Data to Word Data) Ri のハーフワードデータを符号なし 2 進数としてワードデータに拡張します。 ■ EXTUH(Unsign Extend from Byte Data to Word Data) アセンブラ形式 EXTUH Ri オペレーション extu(Ri) → Ri ( ハーフワード → ワード ) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1 サイクル 命令フォーマット MSB 1 LSB 0 0 1 0 1 1 1 1 0 1 1 Ri 実行例 EXTUH R1 命令のビットパターン:1001 0111 1011 0001 R1 F F F F F F F F 実行前 224 R1 0 0 0 0 F F F F 実行後 第 7 章 実行命令細則 7.129 LDM0(Load Multiple Registers) LDM0 命令では , reglist に指定可能なレジスタは R0 ∼ R7 です ( 表 7.129-1 を参照 )。 処理の順番はレジスタ番号の昇順です。 ■ LDM0(Load Multiple Registers) アセンブラ形式 LDM0 (reglist) オペレーション 以下の動作を reglist で示されたレジスタの数だけ繰り返します。 (R15) → Ri R15+4 → R15 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 reglist で指定したレジスタの数を n とすると , 実行サイクル数は以下のようになり ます。 n=0 のとき :1 サイクル それ以外のとき :a(n-1)+b+1 サイクル 命令フォーマット MSB 1 LSB 0 0 0 1 1 0 0 reglist 225 第 7 章 実行命令細則 表 7.129-1 reglist のビットとレジスタの対応 (LDM0) bit レジスタ 7 R7 6 R6 5 R5 4 R4 3 R3 2 R2 1 R1 0 R0 実行例 LDM0 (R3, R4) 命令のビットパターン:1000 1100 0001 1000 R3 ×××× ×××× R3 9 0 B C 9 3 6 3 R4 ×××× ×××× R4 8 3 4 3 8 3 4 A R15 7 F F F R15 7 F F F F F C 8 F F C 0 メモリ 7FFFFFC0 9 0 B C 9 3 6 3 7FFFFFC0 9 0 B C 9 3 6 3 7FFFFFC4 8 3 4 3 8 3 4 A 7FFFFFC4 8 3 4 3 8 3 4 A ×××× ×××× 7FFFFFC8 7FFFFFC8 実行前 226 メモリ ×××× ×××× 実行後 第 7 章 実行命令細則 7.130 LDM1(Load Multiple Registers) LDM1 命令では , reglist に指定可能なレジスタは R8 ∼ R15 です ( 表 7.130-1 を参照 )。 処理の順番は , レジスタ番号の昇順です。 reglist で R15 を指定した場合 , メモリから読み出した値が最終的に R15 に入りま す。 ■ LDM1(Load Multiple Registers) アセンブラ形式 LDM1 (reglist) オペレーション 以下の動作を reglist で示されたレジスタの数だけ繰り返します。 (R15) → Ri R15+4 → R15 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 reglist で指定したレジスタの数を n とすると , 実行サイクル数は以下のようになり ます。 n=0 のとき :1 サイクル それ以外のとき :a(n-1)+b+1 サイクル 命令フォーマット MSB 1 LSB 0 0 0 1 1 0 1 reglist 227 第 7 章 実行命令細則 表 7.130-1 reglist のビットとレジスタの対応 (LDM1) bit レジスタ 7 R15 6 R14 5 R13 4 R12 3 R11 2 R10 1 R9 0 R8 実行例 LDM1 (R10, R11, R12) 命令のビットパターン:1000 1101 0001 1100 R10 ×××× ×××× R10 8 F E 3 9 E 8 A R11 ×××× ×××× R11 9 0 B C 9 3 6 3 R12 ×××× ×××× R12 8 D F 7 8 8 E 4 R15 7 F F F R15 7 F F F F F C C F F C 0 メモリ 7FFFFFC0 8 F E 3 9 E 8 A 7FFFFFC0 8 F E 3 9 E 8 A 7FFFFFC4 9 0 B C 9 3 6 3 7FFFFFC4 9 0 B C 9 3 6 3 7FFFFFC8 8 D F 7 8 8 E 4 7FFFFFC8 8 D F 7 8 8 E 4 ×××× ×××× 7FFFFFCC 7FFFFFCC 実行前 228 メモリ ×××× ×××× 実行後 第 7 章 実行命令細則 7.131 STM0(Store Multiple Registers) STM0 命令では , reglist に指定可能なレジスタは R0 ∼ R7 です ( 表 7.131-1 を参照 )。 処理の順番はレジスタ番号の降順です。 ■ STM0(Store Multiple Registers) アセンブラ形式 STM0 (reglist) オペレーション 以下の動作を reglist で示されたレジスタの数だけ繰り返します。 R15-4 → R15 Ri → (R15) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 reglist で指定したレジスタの数を n とすると , 実行サイクル数は以下のようになり ます。 a × n+1 サイクル 命令フォーマット MSB 1 LSB 0 0 0 1 1 1 0 reglist 表 7.131-1 reglist のビットとレジスタの対応 (STM0) bit レジスタ 7 R0 6 R1 5 R2 4 R3 3 R4 2 R5 1 R6 0 R7 229 第 7 章 実行命令細則 実行例 STM0 (R2, R3) 命令のビットパターン:1000 1110 0011 0000 R2 9 0 B C 9 3 6 3 R2 9 0 B C 9 3 6 3 R3 8 3 4 3 8 3 4 A R3 8 3 4 3 8 3 4 A R15 7 F F F F F C 8 R15 7 F F F F F C 0 メモリ 7FFFFFC0 ×××× ×××× 7FFFFFC0 9 0 B C 9 3 6 3 7FFFFFC4 ×××× ×××× 7FFFFFC4 8 3 4 3 8 3 4 A 7FFFFFC8 ×××× ×××× 7FFFFFC8 実行前 230 メモリ ×××× ×××× 実行後 第 7 章 実行命令細則 7.132 STM1(Store Multiple Registers) STM1 命令では , reglist に指定可能なレジスタは R8 ∼ R15 です ( 表 7.132-1 を参照 )。 処理の順番はレジスタ番号の降順です。 reglist で R15 を指定した場合 , 命令実行前に R15 が保持していた値がメモリに書き 込まれます。 ■ STM1(Store Multiple Registers) アセンブラ形式 STM1 (reglist) オペレーション 以下の動作を reglist で示されたレジスタの数だけ繰り返します。 R15-4 → R15 Ri → (R15) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 reglist で指定したレジスタの数を n とすると , 実行サイクル数は以下のようになり ます。 a × n+1 サイクル 命令フォーマット MSB 1 LSB 0 0 0 1 1 1 1 reglist 231 第 7 章 実行命令細則 表 7.132-1 reglist のビットとレジスタの対応 (STM1) bit レジスタ 7 R8 6 R9 5 R10 4 R11 3 R12 2 R13 1 R14 0 R15 実行例 STM1 (R10, R11, R12) 命令のビットパターン:1000 1111 0011 1000 R10 8 F E 3 9 E 8 A R10 8 F E 3 9 E 8 A R11 9 0 B C 9 3 6 3 R11 9 0 B C 9 3 6 3 R12 8 D F 7 8 8 E 4 R12 8 D F 7 8 8 E 4 R15 7 F F F F F C C R15 7 F F F F F C 0 メモリ 7FFFFFC0 ×××× ×××× 7FFFFFC0 8 F E 3 9 E 8 A 7FFFFFC4 ×××× ×××× 7FFFFFC4 9 0 B C 9 3 6 3 7FFFFFC8 ×××× ×××× 7FFFFFC8 8 D F 7 8 8 E 4 7FFFFFCC ×××× ×××× 7FFFFFCC 実行前 232 メモリ ×××× ×××× 実行後 第 7 章 実行命令細則 7.133 ENTER(Enter Function) 高級言語用のスタックフレーム生成処理を行います。 u8 は符号なしで計算します。 ■ ENTER(Enter Function) アセンブラ形式 ENTER #u10 オペレーション R14 → (R15-4) R15 - 4 → R14 R15 - extu(u8 × 4) → R15 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 1+a サイクル 233 第 7 章 実行命令細則 命令フォーマット MSB 0 LSB 0 0 0 1 1 1 1 u8 実行例 ENTER #0CH 命令のビットパターン:0000 1111 0000 0011 R14 8 0 0 0 0 0 0 0 R14 7 F F F F F F 4 R15 7 F F F F F F 8 R15 7 F F F F F E C メモリ 7FFFFFEC ×××× ×××× 7FFFFFEC ×××× ×××× 7FFFFFF0 ×××× ×××× 7FFFFFF0 ×××× ×××× 7FFFFFF4 ×××× ×××× 7FFFFFF4 8 0 0 0 7FFFFFF8 ×××× ×××× 7FFFFFF8 ×××× ×××× 7FFFFFFC ×××× ×××× 7FFFFFFC ×××× ×××× 80000000 ×××× ×××× 80000000 ×××× ×××× 実行前 234 メモリ 0 0 0 0 実行後 第 7 章 実行命令細則 7.134 LEAVE(Leave Function) 高級言語用のスタックフレーム開放処理を行います。 ■ LEAVE(Leave Function) アセンブラ形式 LEAVE オペレーション R14+4 → R15 (R15-4) → R14 フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 b サイクル 命令フォーマット MSB 1 LSB 0 0 1 1 1 1 1 1 0 0 1 0 0 0 0 実行例 LEAVE 命令のビットパターン:1001 1111 1001 0000 R14 7 F F F F F F 4 R14 8 0 0 0 0 0 0 0 R15 7 F F F F F E C R15 7 F F F F F F 8 メモリ メモリ 7FFFFFEC ×××× ×××× 7FFFFFEC ×××× ×××× 7FFFFFF0 ×××× ×××× 7FFFFFF0 ×××× ×××× 7FFFFFF4 8 0 0 0 7FFFFFF4 8 0 0 0 7FFFFFF8 ×××× ×××× 7FFFFFF8 ×××× ×××× 7FFFFFFC ×××× ×××× 7FFFFFFC ×××× ×××× 80000000 ×××× ×××× 80000000 ×××× ×××× 0 0 0 0 実行前 0 0 0 0 実行後 235 第 7 章 実行命令細則 7.135 XCHB(Exchange Byte Data) Rj が示すバイトアドレスの内容と Ri の内容を交換します。 Rj が示すバイトアドレスへは , 元の Ri の下位 8 ビットのデータが転送され , Ri には Rj が示すアドレスの元のデータがゼロ拡張して転送されます。 この命令におけるメモリリード動作とメモリライト動作の間では , CPU はホールド 要求を受け付けません。 ■ XCHB(Exchange Byte Data) アセンブラ形式 XCHB @Rj, Ri オペレーション Ri → TEMP extu((Rj)) → Ri TEMP → (Rj) フラグ変化 N Z V C - - - - N, Z, V, C: 変化しません。 実行サイクル数 2a サイクル 命令フォーマット MSB 1 LSB 0 0 0 1 0 1 0 Rj Ri 実行例 XCHB @R1, R0 命令のビットパターン:1000 1010 0001 0000 R0 0 0 0 0 0 0 7 8 R0 0 0 0 0 0 0 F D R1 8 0 0 0 0 0 0 2 R1 8 0 0 0 0 0 0 2 メモリ 80000001 ×× 80000001 ×× 80000002 F D 80000002 7 8 80000003 ×× 80000003 ×× 実行前 236 メモリ 実行後 付録 FR ファミリ CPU の命令一覧と命令マップを示し ます。 付録 A 命令一覧 付録 B 命令マップ 237 付録 付録 A 命令一覧 FR ファミリ CPU の命令一覧の記号の意味と命令一覧表を示します。 A.1 命令一覧表の記号の意味 A.2 命令一覧表 238 付録 A 命令一覧 A.1 命令一覧表の記号の意味 命令一覧表に用いている記号の意味を説明します。 ■ 命令一覧表に用いている記号の意味 ● ニーモニック欄および動作欄 i4 4 ビット即値を示し , ゼロ拡張の場合は 0 ∼ 15, マイナス拡張の場合は -16 ∼ -1 の 指定になります。 i8 符号なし 8 ビット即値を示し , 0 ∼ 255 まで指定できます。 i20 符号なし 20 ビット即値を示し , 00000H ∼ FFFFFH まで指定できます。 i32 符号なし 32 ビット即値を示し , 00000000H ∼ FFFFFFFFH まで指定できます。 s8 符号付き 8 ビット即値を示し , -128 ∼ 127 まで指定できます。 s10 符号付き 10 ビット即値を示し , -512 ∼ 508 まで指定できます (4 の倍数 )。 u4 符号なし 4 ビット即値を示し , 0 ∼ 15 まで指定できます。 u8 符号なし 8 ビット即値を示し , 0 ∼ 255 まで指定できます。 u10 符号なし 10 ビット即値を示し , 0 ∼ 1020 まで指定できます (4 の倍数 )。 udisp6 符号なし 6 ビットアドレス値を示し , 0 ∼ 60 まで指定できます (4 の倍数 )。 disp8 符号付き 8 ビットアドレス値を示し , -0x80 ∼ 0x7F まで指定できます。 disp9 符号付き 9 ビットアドレス値を示し , -0x100 ∼ 0xFE まで指定できます (2 の倍数 )。 disp10 符号付き 10ビットアドレス値を示し, -0x200 ∼ 0x1FC まで指定できます (4の倍数)。 dir8 符号なし 8 ビットアドレス値を示し , 0 ∼ 0xFF まで指定できます。 dir9 符号なし 9 ビットアドレス値を示し , 0 ∼ 0x1FE まで指定できます (2 の倍数 )。 239 付録 dir10 符号なし 10 ビットアドレス値を示し , 0 ∼ 0x3FC まで指定できます (4 の倍数 )。 label9 符号付き 9 ビット分岐アドレスを示し , PC の値に対して -0x100 ∼ 0xFE まで指定で きます (2 の倍数 )。 label12 符号付き 12 ビット分岐アドレスを示し , PC の値に対して -0x800 ∼ 0x7FE まで指定 できます (2 の倍数 )。 Ri, Rj 汎用レジスタ (R00 ∼ R15) を示します。 Rs 専用レジスタ (TBR, RP, USP, SSP, MDH, MDL) を示します。 ● 動作欄 extu( ) ゼロ拡張操作を示し , 上位ビットの欠けている部分に "0" を補います。 extn( ) マイナス拡張操作を示し , 上位ビットの欠けている部分に "1" を補います。 exts( ) 符号拡張操作を示し , () のデータの MSB が "0" ならばゼロ拡張操作をし , MSB が "1" ならばマイナス拡張操作をします。 () 間接アドレッシングを示します。( ) 内のレジスタまたは式の示すアドレスのメモリ 読出し・書込み値です。 {} 演算の優先順位を明示するための括弧になります。( ) を間接アドレス指定に使用し ているため , { } を使用します。 ● 型欄 A ∼ F は「6.1 命令フォーマット」の TYPE-A ∼ TYPE-F に対応します。 ● OP 欄 オペコードの表記は型欄の内容により , 以下のように分かれます。 型欄が A, C, D OP の 8 ビットを 16 進数 2 桁で示します。 型欄が B OP の上位 4 ビットを上位 , 下位は "0" とした 16 進数 2 桁で示します。 型欄が E OP の上位 8 ビットを上位 2 桁 , SUB-OP の 4 ビットを次の 1 桁 , 残りを "0" とした 16 進数 4 桁で示します。 型欄が F OP の上位 5 ビットを上位 , 不足分は "0" を詰めた 16 進数 2 桁で示します。 240 付録 A 命令一覧 ● CYC 欄 数値はマシンサイクルで , a ∼ d の最小は 1 サイクルです。 a メモリアクセスサイクルで , レディ機能により延びる可能性があります。 b メモリアクセスサイクルで , レディ機能により延びる可能性があります。ただし , LD動作の対象となるレジスタを直後の命令が参照する場合には,インターロックが かかり , 実行サイクル数が 1 サイクル増えて 2 サイクルになります。 c 直後の命令が R15, SSP または USP に対して読出しや書込みを行う命令のとき , ま たは命令フォーマットが TYPE-A の命令のときにインターロックがかかり実行サイ クル数が 1 サイクル増えて 2 サイクルになります。 d 直後の命令が MDH/MDL を参照するときにインターロックがかかり , 実行サイクル 数が 1 サイクル増えて 2 サイクルになります。ただし , DIV1 命令の直後に , 専用レ ジスタ (TBR, RP, USP, SSP, MDH, MDL) を ST Rs,@-R15 命令でアクセスすると , 常 にインターロックがかかり , 実行サイクル数が 1 サイクル増えて 2 サイクルになり ます。 ● FLAG 欄 C 操作の結果で変化します。 変化しません。 0 "0" になります。 1 "1" になります。 241 付録 A.2 命令一覧表 FR ファミリ CPU の命令数は全部で 165 あり , 以下の 16 種類に分類しています。 この命令を表 A.2-1 ∼表 A.2-16 に示します。 • 加減算命令 (10 命令 ) • 比較演算命令 (3 命令 ) • 論理演算命令 (12 命令 ) • ビット操作演算命令 (8 命令 ) • 乗除算命令 (10 命令 ) • シフト演算命令 (9 命令 ) • 即値データ転送命令 (3 命令 ) • メモリロード命令 (13 命令 ) • メモリストア命令 (13 命令 ) • レジスタ間転送命令 / 専用レジスタ転送命令 (5 命令 ) • 遅延なし分岐命令 (23 命令 ) • 遅延分岐命令 (20 命令 ) • ダイレクトアドレス指定命令 (14 命令 ) • リソース命令 (2 命令 ) • コプロセッサ命令 (4 命令 ) • その他の命令 (16 命令 ) 242 付録 A 命令一覧 ■ 命令一覧表 表 A.2-1 加減算命令 (10 命令 ) 型 OP CYC FLAG NZVC ADD Rj, Ri ADD #i4, Ri ADD2 #i4, Ri A C C A6 A4 A5 1 1 1 CCCC CCCC CCCC Ri+Rj → Ri Ri+extu (i4) → Ri Ri+extn (i4) → Ri ゼロ拡張 マイナス拡張 ADD CRj, Ri A A7 1 CCCC Ri+Rj+c → Ri キャリ付き加算 ADDN Rj, Ri ADDN #i4, Ri ADDN2 #i4, Ri A C C A2 A0 A1 1 1 1 ---------- Ri+Rj → Ri Ri+extu (i4) → Ri Ri+extn (i4) → Ri ゼロ拡張 マイナス拡張 SUB Rj, Ri A AC 1 CCCC Ri-Rj → Ri SUB CRj, Ri A AD 1 CCCC Ri-Rj-c → Ri SUBN Rj, Ri A AE 1 ---- 型 OP CYC FLAG NZVC A C C AA A8 A9 1 1 1 CCCC CCCC CCCC Ri-Rj Ri-extu (i4) Ri-extn (i4) 型 OP CYC FLAG NZVC 動作 AND Rj, Ri AND Rj, @Ri ANDH Rj, @Ri ANDB Rj, @Ri A A A A 82 84 85 86 1 1+2a 1+2a 1+2a CC-CC-CC-CC-- Ri &=Rj (Ri) &=Rj (Ri) &=Rj (Ri) &=Rj − ○ ○ ○ ワード ワード ハーフワード バイト OR Rj, Ri OR Rj, @Ri ORH Rj, @Ri ORB Rj, @Ri A A A A 92 94 95 96 1 1+2a 1+2a 1+2a CC-CC-CC-CC-- Ri|=Rj (Ri)|=Rj (Ri)|=Rj (Ri)|=Rj − ○ ○ ○ ワード ワード ハーフワード バイト EOR Rj, Ri EOR Rj, @Ri EORH Rj, @Ri EORB Rj, @Ri A A A A 9A 9C 9D 9E 1 1+2a 1+2a 1+2a CC-CC-CC-CC-- Ri^=Rj (Ri)^=Rj (Ri)^=Rj (Ri)^=Rj − ○ ○ ○ ワード ワード ハーフワード バイト ニーモニック 動作 備考 キャリ付き減算 Ri-Rj → Ri 表 A.2-2 比較演算命令 (3 命令 ) ニーモニック CMP Rj, Ri CMP #i4, Ri CMP2 #i4, Ri 動作 備考 ゼロ拡張 マイナス拡張 表 A.2-3 論理演算命令 (12 命令 ) ニーモニック RMW 備考 243 付録 表 A.2-4 ビット操作演算命令 (8 命令 ) ニーモニック FLAG NZVC OP CYC 型 80 81 1+2a 1+2a ------- RMW 備考 (Ri) &= {F0 H+u4} ○ 下位4ビットを操作 (Ri) &={ {u4 << 4} +F H} ○ 上位4ビットを操作 動作 BANDL #u4, @Ri (u4:0 ∼ 0F H) BANDH #u4, @Ri (u4:0 ∼ 0F H) C C BORL #u4, @Ri (u4:0 ∼ 0F H) BORH #u4, @Ri (u4:0 ∼ 0F H) C C 90 91 1+2a 1+2a ------- (Ri)|=u4 (Ri)|= {u4 << 4} ○ ○ 下位4ビットを操作 上位4ビットを操作 BEORL #u4, @Ri (u4:0 ∼ 0F H) BEORH #u4, @Ri (u4:0 ∼ 0F H) C C 98 99 1+2a 1+2a ------- (Ri)^=u4 (Ri)^ {u4 << 4} ○ ○ 下位4ビットを操作 上位4ビットを操作 BTSTL #u4, @Ri (u4:0 ∼ 0F H) BTSTH #u4, @Ri (u4:0 ∼ 0F H) C C 88 89 2+a 2+a − − 下位4ビットテスト 上位4ビットテスト 0C-- (Ri) &u4 CC-- (Ri) & {u4 << 4} 表 A.2-5 乗除算命令 (10 命令 ) 型 OP CYC FLAG NZVC 動作 MUL Rj, Ri MULU Rj, Ri MULH Rj, Ri MULUH Rj, Ri A A A A AF AB BF BB 5 5 3 3 CCCCCCCC-CC-- Rj × Ri → MDH, MDL Rj × Ri → MDH, MDL Rj × Ri → MDL Rj × Ri → MDL DIV0S Ri DIV0U Ri DIV1 Ri DIV2 Ri DIV3 DIV4S E E E E E E 97-4 97-5 97-6 97-7 9F-6 9F-7 1 1 d 1 1 1 -------C-C -C-C ------- ニーモニック 備考 32 × 32 ビット =64 ビット 符号なし 16 × 16 ビット =32 ビット 符号なし ステップ演算 32/32 ビット =32 ビット 表 A.2-6 シフト演算命令 (9 命令 ) 型 OP CYC FLAG NZVC LSL Rj, Ri LSL #u4, Ri LSL2 #u4, Ri A C C B6 B4 B5 1 1 1 CC-C CC-C CC-C Ri << Rj → Ri Ri << u4 → Ri Ri << {u4+16} → Ri 論理シフト LSR Rj, Ri LSR #u4, Ri LSR2 #u4, Ri A C C B2 B0 B1 1 1 1 CC-C CC-C CC-C Ri >> Rj → Ri Ri >> u4 → Ri Ri >> {u4+16} → Ri 論理シフト ASR Rj, Ri ASR #u4, Ri ASR2 #u4, Ri A C C BA B8 B9 1 1 1 CC-C CC-C CC-C Ri >> Rj → Ri Ri >> u4 → Ri Ri >> {u4+16} → Ri 算術シフト ニーモニック 244 動作 備考 付録 A 命令一覧 表 A.2-7 即値データ転送命令 ( 即値セット /16 ビット /32 ビット即値転送命令 )(3 命令 ) ニーモニック LDI:32 #i32, Ri LDI:20 #i20, Ri LDI:8 #i8, Ri 型 OP CYC FLAG NZVC E C B 9F-8 9B C0 3 2 1 ---------- 動作 備考 i32 → Ri i20 → Ri i8 → Ri 上位 12 ビットはゼロ 上位 24 ビットはゼロ 表 A.2-8 メモリロード命令 (13 命令 ) 型 OP CYC FLAG NZVC LD @Rj, Ri LD @(R13, Rj), Ri LD @(R14, disp10), Ri LD @(R15, udisp6), Ri LD @R15+, Ri LD @R15+, Rs LD @R15+, PS A A B C E E E 04 00 20 03 07-0 07-8 07-9 b b b b b b 1+a+b ------------------CCCC LDUH @Rj, Ri LDUH @(R13, Rj), Ri LDUH @(R14, disp9), Ri A A B 05 01 40 b b b ---------- (Rj) → Ri (R13+Rj) → Ri (R14+disp9) → Rj ゼロ拡張 ゼロ拡張 ゼロ拡張 LDUB @Rj, Ri LDUB @(R13, Rj), Ri LDUB @(R14, disp8), Ri A A B 06 02 60 b b b ---------- (Rj) → Ri (R13+Rj) → Ri (R14+disp8) → Ri ゼロ拡張 ゼロ拡張 ゼロ拡張 ニーモニック 動作 (Rj) → Ri (R13+Rj) → Ri (R14+disp10) → Ri (R15+udisp6) → Ri (R15) → Ri, R15+=4 (R15) → Rs, R15+=4 (R15) → PS, R15+=4 備考 Rs: 専用レジスタ <注意事項> 命令フォーマット中の TYPE-B の o8 および TYPE-C の u4 フィールドと , アセンブラ記 述の disp8 ∼ disp10 の関係は以下のようになっています。 disp8 → o8=disp8 disp9 → o8=disp9 >>1 disp10 → o8=disp10 >>2 udisp6 → u4=udisp6 >>2 245 付録 表 A.2-9 メモリストア命令 (13 命令 ) 型 OP CYC FLAG NZVC ST Ri, @Rj ST Ri, @(R13, Rj) ST Ri, @(R14, disp10) ST Ri, @(R15, udisp6) ST Ri, @-R15 ST Rs, @-R15 ST PS, @-R15 A A B C E E E 14 10 30 13 17-0 17-8 17-9 a a a a a a a ---------------------- Ri → (Rj) Ri → (R13+Rj) Ri → (R14+disp10) Ri → (R15+udisp6) R15-=4, Ri → (R15) R15-=4, Rs → (R15) R15-=4, PS → (R15) ワード ワード ワード STH Ri, @Rj STH Ri, @(R13, Rj) STH Ri, @(R14, disp9) A A B 15 11 50 a a a ---------- Ri → (Rj) Ri → (R13+Rj) Ri → (R14+disp9) ハーフワード ハーフワード ハーフワード STB Ri, @Rj STB Ri, @(R13, Rj) STB Ri, @(R14, disp8) A A B 16 12 70 a a a ---------- Ri → (Rj) Ri → (R13+Rj) Ri → (R14+disp8) バイト バイト バイト ニーモニック 動作 備考 Rs: 専用レジスタ <注意事項> 命令フォーマット中の TYPE-B の o8 および TYPE-C の u4 フィールドと , アセンブラ記 述の disp8 ∼ disp10 の関係は以下のようになっています。 disp8 → o8=disp8 disp9 → o8=disp9 >>1 disp10 → o8=disp10 >>2 udisp6 → u4=udisp6 >>2 表 A.2-10 レジスタ間転送命令 / 専用レジスタ転送命令 (5 命令 ) ニーモニック MOV Rj, Ri MOV Rs, Ri MOV Ri, Rs MOV PS, Ri MOV Ri, PS 246 型 OP CYC FLAG NZVC A A A E E 8B B7 B3 17-1 07-1 1 1 1 1 c ------------CCCC 動作 Rj → Ri Rs → Ri Ri → Rs PS → Ri Ri → PS 備考 汎用レジスタ間転送 Rs: 専用レジスタ Rs: 専用レジスタ 付録 A 命令一覧 表 A.2-11 遅延なし分岐命令 (23 命令 ) 型 OP CYC FLAG NZVC JMP @Ri E 97-0 2 ---- Ri → PC CALL label12 CALL @Ri F E D0 97-1 2 2 ------- PC+2 → RP, PC+2+rel11 × 2 → PC PC+2 → RP, Ri → PC RET E 97-2 2 ---- RP → PC INT #u8 D 1F 3+3a ---- SSP-=4, PS→ (SSP) , SSP-=4, PC+2→ (SSP) , 0 → I フラグ , 0 → S フラグ , (TBR+3FC-u8 × 4) → PC INTE E 9F-3 3+3a ---- SSP-=4, PS→ (SSP) , SSP-=4, PC+2→ (SSP) , 0 → S フラグ , 4 → ILM, (TBR+3D8-u8 × 4) → PC RETI E 97-3 2+2a CCCC (R15) → PC, R15+=4, (R15) → PS, R15+=4 BNO label9 BRA label9 BEQ label9 BNE label9 BC label9 BNC label9 BN label9 BP label9 BV label9 BNV label9 BLT label9 BGE label9 BLE label9 BGT label9 BLS label9 BHI label9 D D D D D D D D D D D D D D D D E1 E0 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF 1 2 2/1 2/1 2/1 2/1 2/1 2/1 2/1 2/1 2/1 2/1 2/1 2/1 2/1 2/1 ------------------------------------------------- 非分岐 PC+2+rel8 × 2 → PC PC+2+rel8 × 2 → PC if Z==1 PC+2+rel8 × 2 → PC if Z==0 PC+2+rel8 × 2 → PC if C==1 PC+2+rel8 × 2 → PC if C==0 PC+2+rel8 × 2 → PC if N==1 PC+2+rel8 × 2 → PC if N==0 PC+2+rel8 × 2 → PC if V==1 PC+2+rel8 × 2 → PC if V==0 PC+2+rel8 × 2 → PC if V xor N==1 PC+2+rel8 × 2 → PC if V xor N==0 PC+2+rel8 × 2 → PC if (V xor N) or Z==1 PC+2+rel8 × 2 → PC if (V xor N) or Z==0 PC+2+rel8 × 2 → PC if C or Z==1 PC+2+rel8 × 2 → PC if C or Z==0 ニーモニック 動作 備考 リターン <注意事項> • 命令フォーマット中の TYPE-D の rel8 および TYPE-F の rel11 フィールドと , アセンブ ラ記述の label9, label12 の関係は以下のようになっています。 label9 → rel8=(label9-PC-2)/2 label12 → rel11=(label12-PC-2)/2 • CYC 欄の "2/1" は , 分岐するときは 2, 分岐しないときは 1 を示します。 • RETI を実行するときは S フラグが "0" である必要があります。 247 付録 表 A.2-12 遅延分岐命令 (20 命令 ) 型 OP CYC FLAG NZVC JMP:D @Ri E 9F-0 1 ---- Ri → PC CALL:D label12 CALL:D @Ri F E D8 9F-1 1 1 ------- PC+4 → RP, PC+2+rel11 × 2 → PC PC+4 → RP, Ri → PC RET:D E 9F-2 1 ---- RP → PC BNO:D label9 BRA:D label9 BEQ:D label9 BNE:D label9 BC:D label9 BNC:D label9 BN:D label9 BP:D label9 BV:D label9 BNV:D label9 BLT:D label9 BGE:D label9 BLE:D label9 BGT:D label9 BLS:D label9 BHI:D label9 D D D D D D D D D D D D D D D D F1 F0 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ------------------------------------------------- 非分岐 PC+2+rel8 × 2 → PC PC+2+rel8 × 2 → PC if Z==1 PC+2+rel8 × 2 → PC if Z==0 PC+2+rel8 × 2 → PC if C==1 PC+2+rel8 × 2 → PC if C==0 PC+2+rel8 × 2 → PC if N==1 PC+2+rel8 × 2 → PC if N==0 PC+2+rel8 × 2 → PC if V==1 PC+2+rel8 × 2 → PC if V==0 PC+2+rel8 × 2 → PC if V xor N==1 PC+2+rel8 × 2 → PC if V xor N==0 PC+2+rel8 × 2 → PC if (V xor N) or Z==1 PC+2+rel8 × 2 → PC if (V xor N) or Z==0 PC+2+rel8 × 2 → PC if C or Z==1 PC+2+rel8 × 2 → PC if C or Z==0 ニーモニック 動作 備考 リターン <注意事項> • 命令フォーマット中の TYPE-D の rel8 および TYPE-F の rel11 フィールドと , アセンブ ラ記述の label9, label12 の関係は以下のようになっています。 label9 → rel8=(label9-PC-2)/2 label12 → rel11=(label12-PC-2)/2 • 遅延分岐命令は必ず次の命令 ( 遅延スロット ) を実行してから分岐します。 • 遅延スロットに置くことができる命令は,以下の条件のいずれかに一致する必要があり ます。 これ以外の命令を置くと , 置いた命令の定義動作以外の動作を行うことがあります。 - 分岐命令以外の , CYC 欄に 1 と記述された命令 - CYC 欄に a, b, c, d と記述された命令 248 付録 A 命令一覧 表 A.2-13 ダイレクトアドレス指定命令 (14 命令 ) 型 OP CYC FLAG NZVC 動作 DMOV @dir10, R13 DMOV R13, @dir10 DMOV @dir10, @R13+ DMOV @R13+, @dir10 DMOV @dir10, @-R15 DMOV @R15+, @dir10 D D D D D D 08 18 0C 1C 0B 1B b a 2a 2a 2a 2a ------------------- (dir10) → R13 R13 → (dir10) (dir10) → (R13) , R13+=4 (R13) → (dir10) , R13+=4 R15-=4, (dir10) → (R15) (R15) → (dir10) , R15+=4 ワード ワード ワード ワード ワード ワード DMOVH @dir9, R13 DMOVH R13, @dir9 DMOVH @dir9, @R13+ DMOVH @R13+, @dir9 D D D D 09 19 0D 1D b a 2a 2a ------------- (dir9) → R13 R13 → (dir9) (dir9) → (R13) , R13+=2 (R13) → (dir9) , R13+=2 ハーフワード ハーフワード ハーフワード ハーフワード DMOVB @dir8, R13 DMOVB R13, @dir8 DMOVB @dir8, @R13+ DMOVB @R13+, @dir8 D D D D 0A 1A 0E 1E b a 2a 2a ------------- (dir8) → R13 R13 → (dir8) (dir8) → (R13) , R13++ (R13) → (dir8) , R13++ バイト バイト バイト バイト ニーモニック 備考 <注意事項> 命令フォーマット中の TYPE-D の dir フィールドとアセンブラ記述の dir8 ∼ dir10 の関係 は以下のようになっています。 dir8 → dir=dir8 dir9 → dir=dir9 >>1 dir10 → dir=dir10 >>2 表 A.2-14 リソース命令 (2 命令 ) 型 OP CYC FLAG NZVC LDRES @Ri+, #u4 C BC a ---- (Ri) → u4 のリソース Ri+=4 u4: チャネル番号 STRES #u4, @Ri+ C BD a ---- u4 のリソース→ (Ri) Ri+=4 u4: チャネル番号 ニーモニック 動作 備考 249 付録 表 A.2-15 コプロセッサ命令 (4 命令 ) ニーモニック COPOP #u4, #CC, CRj, CRi COPLD #u4, #CC, Rj, CRi COPST #u4, #CC, CRj, Ri COPSV #u4, #CC, CRj, Ri 型 OP CYC FLAG NZVC E E E E 9F-C 9F-D 9F-E 9F-F 2+a 1+2a 1+2a 1+2a ------------- 動作 演算指示 Rj → CRi CRj → Ri CRj → Ri 備考 エラートラップなし 表 A.2-16 その他の命令 (16 命令 ) ニーモニック 型 OP CYC FLAG NZVC NOP E 9F-A 1 ---- ANDCCR #u8 ORCCR #u8 D D 83 93 c c STILM #u8 D 87 1 ---- u8 → ILM − ILM 即値セット ADDSP #s10 D A3 1 ---- R15+=s10 − ADDSP 命令 EXTSB Ri EXTUB Ri EXTSH Ri EXTUH Ri E E E E 97-8 97-9 97-A 97-B 1 1 1 1 ------------- 符号拡張 8 → 32 ビット ゼロ拡張 8 → 32 ビット 符号拡張 16 → 32 ビット ゼロ拡張 16 → 32 ビット − − − − LDM0 (reglist) D 8C 注意事項 を参照 ------- − ロードマルチ R0 ∼ R7 LDM1 (reglist) D 8D (R15) → reglist, R15 インクリメント (R15) → reglist, R15 インクリメント − ロードマルチ R8 ∼ R15 STM0 (reglist) D 8E − ストアマルチ R0 ∼ R7 STM1 (reglist) D 8F R15 ディクリメント , reglist → (R15) R15 ディクリメント , reglist → (R15) − ストアマルチ R8 ∼ R15 ENTER #u10 D 0F 1+a ---- R14 → (R15-4) , R15-4 → R14, R15-u10 → R15 − 関数の入口処理 LEAVE E 9F-9 b ---- R14+4 → R15, (R15-4) → R14 − 関数の出口処理 XCHB @Rj, Ri A 8A 2a ---- Ri → TEMP (Rj) → Ri TEMP → (Rj) ○ セマフォ管理用 バイトデータ 250 注意事項 を参照 動作 何も変化しない CCCC CCRandu8 → CCR CCCC CCRoru8 → CCR ------- RMW 備考 − − − 付録 A 命令一覧 <注意事項> • ADDSP 命令において , 命令フォーマット中の TYPE-D の s8 とアセンブラ記述の s10 の関係は以下のようになっています。 s10 → s8 = s10 >> 2 • ENTER 命令において , 命令フォーマット中の TYPE-D の u8 とアセンブラ記述の u10 の関係は以下のようになっています。 u10 → u8 = u10 >> 2 • LDM0(reglist), LDM1(reglist) の実行サイクル数は , 指定されたレジスタ数が n のとき , a × (n-1)+b+1 サイクルとなります。 • STM0(reglist), STM1(reglist) の実行サイクル数は , 指定されたレジスタ数が n のとき , a × n+1 サイクルとなります。 251 付録 付録 B 命令マップ FR ファミリ CPU の命令マップと E フォーマットを示します。 B.1 命令マップ B.2 E フォーマット 252 ANDB Rj, @Ri LDUB @Rj, STB Ri, Ri @Rj 6 MOV Rj, Ri LDM0 (reglist) LDM1 (reglist) STM0 (reglist) STM1 (reglist) DMOVH R13, @d9 DMOVB R13, @d8 DMOVH @d9, R13 DMOVB @d8, R13 DMOV @d10, DMOV @-R15 @R15+, @d10 DMOV @d10, DMOV @R13+ @R13+, @d10 DMOVH DMOVH @d9, @R13+ @R13+, @d9 DMOVB DMOVB @d8, @R13+ @R13+, @d8 ENTER #u10 9 A B C D E F MOV Rs, Ri CALL:D label12 BNV label9 BV label9 BP label9 E format EORB Rj, @Ri EORH Rj, @Ri EOR Rj, @Ri MUL Rj, Ri SUBN Rj, Ri SUBC Rj, Ri SUB Rj, Ri MULH Rj, Ri STRES #u4, @Ri+ LDRES @Ri+,#u4 MULUH Rj, Ri BHI label9 BLS label9 BGT label9 BLE label9 BGE label9 ASR2 #u4, Ri LDI:8 #i8, Ri BN label9 BNC label9 BC label9 BNE label9 BEQ label9 BNO label9 BRA label9 E LD:20 #i20, MULU Rj, Ri Ri CMP2 #i4, Ri CMP #i4, Ri ASR #u4, Ri ADDC Rj, Ri CALL label12 D BLT label9 BEORH #u4, @Ri LSL2 #u4, Ri MOV Ri, Rs ADD Rj, Ri LSL Rj, Ri ADD2 #i4, Ri ADDSP #s10 C XCHB @Rj, EOR Rj, Ri CMP Rj, Ri ASR Rj, Ri Ri BTSTH #u4, @Ri BTSTL #u4, BEORL @Ri #u4, @Ri DMOV DMOV @d10, R13 R13, @d10 8 INT #u8 ORB Rj, @Ri ORH Rj, @Ri STILM #u8 E format E format 7 STRi, @(R LDUH@(R14 STHRi, @(R LDUB@(R1 STBRi, 4, disp8), Ri @(R14, disp8) 14, disp10) , disp9), Ri 14, disp9) ANDH Rj, @Ri STH Ri, @Rj LDUH @ Rj, Ri 5 LD@(R14, disp10), Ri OR Rj, @Ri ADD #i4, Ri LSL #u4, Ri AND Rj, @Ri LD @Rj, Ri ST Ri, @Rj 4 E format ORCCR #u8 LSR Rj, Ri LSR2 #u4, Ri ANDCCR #u8 ADDN Rj, Ri BORH #u4, ADDN2 @Ri #i4, Ri LD @ (R15, ST Ri, udisp6), Ri @(R15, ud6) B 3 A BORL #u4, ADDN #i4, LSR #u4, Ri @Ri Ri 9 AND Rj, Ri OR Rj, Ri 8 LDUB @ STB Ri, R13, Rj), Ri @(R13, Rj) 7 2 6 BANDH #u4, @Ri 5 LDUH @(R13, STH Ri, Rj), Ri @(R13, Rj) 4 1 3 BANDL #u4, @Ri 2 LD @ (R13, ST Ri, Rj), Ri @(R13, Rj) 1 0 0 BHI:D label9 BLS:D label9 BGT:D label9 BLE:D label9 BGE:D label9 BLT:D label9 BNV:D label9 BV:D label9 BP:D label9 BN:D label9 BNC:D label9 BC:D label9 BNE:D label9 BEQ:D label9 BNO:D label9 BRA:D label9 F B.1 下位 4 ビット 上位 4 ビット 付録 B 命令マップ 命令マップ FR ファミリ CPU の命令マップを示します。 ■ 命令マップ 図 B.1-1 命令マップ 253 付録 E フォーマット B.2 FR ファミリ CPU の E フォーマットを示します。 ■ E フォーマット 表 B.2-1 E フォーマット 上位 8 ビット 下位 4 ビット 07 97 9F 0 LD @R15+,Ri ST Ri,@-R15 JMP @Ri JMP:D @Ri 1 MOV Ri,PS MOV PS,Ri CALL @Ri CALL:D @Ri 2 − − RET RET:D 3 − − RETI INTE 4 − − DIV0S Ri − 5 − − DIV0U Ri − 6 − − DIV1 Ri DIV3 7 − − DIV2 Ri DIV4S 8 LD @R15+,Rs ST Rs,@-R15 EXTSB Ri LDI:32 #i32,Ri 9 LD @R15+,PS ST PS,@-R15 EXTUB Ri LEAVE NOP A − − EXTSH Ri B − − EXTUH Ri C − − − COPOP #u4, #CC,CRj,CRi D − − − COPLD #u4, #CC,Rj,CRi E − − − COPST #u4, #CC,CRj,Ri F − − − COPSV #u4, #CC,CRj,Ri −:未定義 254 17 − 索引 索引 A ADD ADD (Add 4bit Immediate Data to Destination Register) ..............................................................75 ADD (Add Word Data of Source Register to Destination Register) ..........................................74 ADD2 ADD2 (Add 4bit Immediate Data to Destination Register) ..............................................................76 ADDC ADDC(Add Word Data of Source Register and Carry Bit to Destination Register) ................................77 ADDN ADDN (Add Immediate Data to Destination Register) ..............................................................79 ADDN (Add Word Data of Source Register to Destination Register) ..........................................78 ADDN2 ADDN2 (Add Immediate Data to Destination Register) ..............................................................80 ADDSP ADDSP (Add Stack Pointer and Immediate Data) ...............................................220 AND AND (And Word Data of Source Register to Data in Memory) .............................................................88 AND (And Word Data of Source Register to Destination Register) ..........................................87 ANDB ANDB (And Byte Data of Source Register to Data in Memory) .............................................................91 ANDCCR ANDCCR (And Condition Code Register and Immediate Data) ...............................................217 ANDH ANDH (And Halfword Data of Source Register to Data in Memory) .........................................................89 ASR ASR (Arithmetic shift to the Right Direction) ..................................................135, 136 ASR2 ASR2 (Arithmetic shift to the Right Direction) ..........................................................................137 B BANDH BANDH (And 4bit Immediate Data to Higher 4bit of Byte Data in Memory) ......................................108 BANDL BANDL (And 4bit Immediate Data to Lower 4bit of Byte Data in Memory) ......................................107 Bcc Bcc (Branch relative if Condition satisfied) ...........184 Bcc:D Bcc:D (Branch relative if Condition satisfied) ....... 190 BEORH BEORH (Eor 4bit Immediate Data to Higher 4bit of Byte Data in Memory) ...................................... 112 BEORL BEORL (Eor 4bit Immediate Data to Lower 4bit of Byte Data in Memory) ...................................... 111 BORH BORH (Or 4bit Immediate Data to Higher 4bit of Byte Data in Memory) .............................................. 110 BORL BORL (Or 4bit Immediate Data to Lower 4bit of Byte Data in Memory) .............................................. 109 BTSTH BTSTH (Test Higher 4bit of Byte Data in Memory) ....................................................... 114 BTSTL BTSTL (Test Lower 4bit of Byte Data in Memory) ....................................................... 113 C CALL CALL (Call Subroutine) .................................175, 176 CALL:D CALL:D (Call Subroutine) .............................187, 188 CCR コンディションコードレジスタ (CCR: bit07 ∼ bit00) .........................................21 CMP CMP (Compare Immediate Data of Source Register and Destination Register) .......................................... 85 CMP (Compare Word Data in Source Register and Destination Register) .......................................... 84 CMP2 CMP2 (Compare Immediate Data and Destination Register) .............................................................86 COPLD COPLD (Load 32bit Data from Register fo Coprocessor Register) ...........................................210 COPOP COPOP (Co-Processor Opetation) .......................... 208 COPST COPST (Store 32bit Data from Co-processor Register to Register) ....................................................... 212 COPST/COPSV COPST/COPSV 命令実行時の汎用レジスタ .......48 COPSV COPSV (Save 32bit Data from Co-processor Register to Register) ....................................................... 214 CPU FR ファミリ CPU コアの特長 ................................. 2 FR ファミリ CPU の構成例 ..................................... 4 リセットによる CPU 内レジスタの 初期化値 ............................................................ 32 255 索引 D Direct DMOV(Move Word Data from Post Increment Register Indirect Address to Direct Address) .........195, 197 DMOVB(Move Byte Data from Post Increment Register Indirect Address to Direct Address) ..........................................................................205 DIV0S DIV0S (Initial Setting Up for Signed Division) .........................................119 DIV0U DIV0U (Initial Setting Up for Unsigned Division) .....................................121 DIV1 DIV1 (Main Process of Division) ...........................123 DIV2 DIV2 (Correction When Remain is 0) ....................125 DIV3 DIV3 (Correction When Remain is 0) ....................127 DIV4S DIV4S (Correction Answer for Signed Division) .........................................128 DMOV DMOV (Move Word Data from Direct Address to Register) ............................................................192 DMOV (Move Word Data from Register to Direct Address) ............................................................193 DMOV(Move Word Data from Direct Address to Post Increment Register Indirect Address) ...............194 DMOV(Move Word Data from Direct Address to Pre Decrement Register Indirect Address) ..............196 DMOV(Move Word Data from Post Increment Register Indirect Address to Direct Address) .........195, 197 DMOVB DMOVB (Move Byte Data from Direct Address to Register) ............................................................202 DMOVB (Move Byte Data from Register to Direct Address) ............................................................203 DMOVB(Move Byte Data from Direct Address to Post Increment Register Indirect Address) ...............204 DMOVB(Move Byte Data from Post Increment Register Indirect Address to Direct Address) ..........................................................................205 DMOVH DMOVH (Move Halfword Data from Direct Address to Register) ............................................................198 DMOVH (Move Halfword Data from Register to Direct Address) ............................................................199 DMOVH(Move Halfword Data from Direct Address to Post Increment Register Indirect Address) .......200 DMOVH(Move Halfword Data from Post Increment Register Indirect Address to Direct Address) ..........................................................................201 E EIT EIT 処理の基本動作 ...............................................33 EIT ハンドラからの復帰 .................................28, 35 ENTER ENTER (Enter Function) ........................................233 256 EOR EOR (Exclusive Or Word Data of Source Register to Data in Memory) .............................................. 101 EOR (Exclusive Or Word Data of Source Register to Destination Register) ........................................ 100 EORB EORB (Exclusive Or Byte Data of Source Register to Data in Memory) .............................................. 105 EORH EORH (Exclusive Or Halfword Data of Source Register to Data in Memory) .......................................... 103 EXTSB EXTSB (Sign Extend from Byte Data to Word Data) ................................................... 221 EXTSH EXTSH (Sign Extend from Byte Data to Word Data) ................................................... 223 EXTUB EXTUB (Unsign Extend from Byte Data to Word Data) ................................................... 222 EXTUH EXTUH (Unsign Extend from Byte Data to Word Data) ................................................... 224 E フォーマット E フォーマット ..................................................... 254 F FR ファミリ FR ファミリ CPU コアの特長 ................................. 2 FR ファミリ CPU の構成例 ..................................... 4 FR ファミリの構成例 .............................................. 3 FR ファミリのレジスタ構成 ................................14 I ILM インタラプトレベルマスクレジスタ (ILM: bit20 ∼ bit16) .......................................... 19 Indirect DMOV(Move Word Data from Direct Address to Post Increment Register Indirect Address) ............... 194 DMOV(Move Word Data from Direct Address to Pre Decrement Register Indirect Address) ............. 196 DMOVB(Move Byte Data from Direct Address to Post Increment Register Indirect Address) ............... 204 DMOVH(Move Halfword Data from Direct Address to Post Increment Register Indirect Address) ....... 200 INT INT (Software Interrupt) .........................................178 INT 命令実行時に退避する PC の値 .................... 44 INT 命令実行時の動作 ...........................................44 INT 命令使用上の注意事項 ................................... 44 INT 命令の概要 ....................................................... 44 INT 命令のトラップ処理を起動するまでの 時間 .................................................................... 44 INTE INTE (Software Interrupt for Emulator) ................. 180 INTE 命令実行時に退避する PC の値 ................. 45 INTE 命令実行時の動作 ........................................ 45 INTE 命令使用上の注意事項 ................................45 INTE 命令の概要 ....................................................45 索引 INTE 命令のトラップ処理を起動するまでの 時間 ....................................................................45 J JMP JMP (Jump) .............................................................174 JMP:D JMP:D (Jump) .........................................................186 L LD LD (Load Word Data in Memory to Program Status Register) ............................................................148 LD (Load Word Data in Memory to Register) ..................................141, 142, 143, 144, 145, 146 LDI:20 LDI:20 (Load Immediate 20bit Data to Destination Register) ............................................................139 LDI:32 LDI:32 (Load Immediate 32 bit Data to Destination Register) ............................................................138 LDI:8 LDI:8 (Load Immediate 8bit Data to Destination Register) ............................................................140 LDM0 LDM0 (Load Multiple Registers) ...........................225 LDM1 LDM1 (Load Multiple Registers) ...........................227 LDRES LDRES (Load Word Data in Memory to Resource) ......................................................206 LDUB LDUB (Load Byte Data in Memory to Register) ........................................153, 154, 155 LDUH LDUH (Load Halfword Data in Memory to Register) ........................................150, 151, 152 LEAVE LEAVE (Leave Function) .......................................235 LSL LSL (Logical Shift to the Left Direction) .......129, 130 LSL2 LSL2 (Logical Shift to the Left Direction) .............131 LSR LSR (Logical Shift to the Right Direction) ..............................132, 133 LSR2 LSR2 (Logical Shift to the Right Direction) ...........134 MUL MUL (Multiply Word Data) ................................... 115 MULH MULH (Multiply Halfword Data) .......................... 117 MULU MULU (Multiply Unsigned Word Data) ................ 116 MULUH MULUH (Multiply Unsigned Halfword Data) ....... 118 N NMI ステップトレーストラップと NMI および ユーザ割込みの関係 ........................................ 46 NOP NOP (No Operation) ............................................... 216 O OR OR (Or Word Data of Source Register to Data in Memory) .............................................................94 OR (Or Word Data of Source Register to Destination Register) .............................................................93 ORB ORB (Or Byte Data of Source Register to Data in Memory) .............................................................98 ORCCR ORCCR (Or Condition Code Register and Immediate Data) ................................................................. 218 ORH ORH (Or Halfword Data of Source Register to Data in Memory) .............................................................96 P PC INTE 命令実行時に退避する PC の値 ................. 45 INT 命令実行時に退避する PC の値 .................... 44 コプロセッサエラートラップ時に退避する PC の値 .............................................................. 49 コプロセッサ不在トラップ発生時に退避する PC の値 .............................................................. 48 ステップトレーストラップ発生時に退避する PC の値 .............................................................. 46 ノンマスカブルインタラプト発生時に退避する PC の値 .............................................................. 40 未定義命令例外発生時に退避する PC の値 .......42 割込み発生時に退避する PC の値 .......................38 PS PS レジスタに関する注意事項 ............................. 22 M MOV MOV (Move Word Data in Program Status Register to Destination Register) ........................................171 MOV (Move Word Data in Source Register to Destination Register) ........................169, 170, 172 MOV (Move Word Data in Source Register to Program Status Register) .................................................173 R R15 R15 とスタックポインタの関係 ...........................16 S フラグ書換え後の R15 および汎用レジスタの 参照によるインターロックの発生 ................57 Register ADDC(Add Word Data of Source Register and Carry Bit to Destination Register) ................................77 257 索引 SUBC(Subtract Word Data in Source Register and Carry bit from Destination Register) ..................82 RET RET (Return from Subroutine) ...............................177 RET:D RET:D (Return from Subroutine) ...........................189 RETI RETI (Return from Interrupt) .................................182 Ri および Rj と数値の関係 Ri および Rj と数値の関係 ....................................65 Rs と数値の関係 Rs と数値の関係 .....................................................66 S SCR システムコンディションコードレジスタ (SCR: bit10 ∼ bit08) ..........................................20 ST ST (Store Word Data in Program Status Register to Memory) ...........................................................162 ST (Store Word Data in Register to Memory) ...............156, 157, 158, 159, 160, 161 STB STB (Store Byte Data in Register to Memory) .......................................166, 167, 168 STH STH (Store Halfword Data in Register to Memory) .......................................163, 164, 165 STILM STILM (Set Immediate Data to Interrupt Level Mask Register) ............................................................219 STM0 STM0 (Store Multiple Registers) ............................229 STM1 STM1 (Store Multiple Registers) ............................231 STRES STRES (Store Word Data in Resource to Memory) .......................................................207 SUB SUB (Subtract Word Data in Source Register from Destination Register) ..........................................81 SUBC SUBC(Subtract Word Data in Source Register and Carry bit from Destination Register) ..................82 SUBN SUBN (Subtract Word Data in Source Register from Destination Register) ..........................................83 S フラグ S フラグ書換え後の R15 および汎用レジスタの 参照によるインターロックの発生 ................57 X XCHB XCHB (Exchange Byte Data) .................................236 258 あ 空きビット プログラムステータスの空きビット .................. 19 アドレス ダイレクトアドレス領域 ........................................ 7 い インターロック インターロック ......................................................57 S フラグ書換え後の R15 および汎用レジスタの 参照によるインターロックの発生 ................57 インタラプトレベルマスクレジスタ インタラプトレベルマスクレジスタ (ILM: bit20 ∼ bit16) .......................................... 19 え エラー コプロセッサエラー情報の退避と復帰 ..............50 コプロセッサエラートラップ時に退避する PC の値 .............................................................. 49 コプロセッサエラートラップの概要 .................. 49 コプロセッサエラートラップ発生時の コプロセッサ命令の動作結果 ........................ 49 コプロセッサエラートラップ発生時の 動作 .................................................................... 49 コプロセッサエラートラップ発生の条件 ..........49 お オペランド 命令中のオペランド情報の使い方 ........................ 7 か 回避方法 前後不一致の回避方法 .......................................... 55 概要 INTE 命令の概要 ....................................................45 INT 命令の概要 ....................................................... 44 コプロセッサエラートラップの概要 .................. 49 コプロセッサ不在トラップの概要 ...................... 48 システムスタックポインタ , ユーザスタック ポインタの概要 ................................................ 27 乗除算レジスタの概要 .......................................... 29 ステップトレーストラップの概要 ...................... 46 遅延なし分岐命令の概要 ...................................... 58 遅延分岐命令の概要 .............................................. 58 テーブルベースレジスタの概要 .......................... 23 トラップの概要 ......................................................43 ノンマスカブルインタラプトの概要 .................. 39 パイプライン動作の概要 ...................................... 54 汎用レジスタの概要 .............................................. 15 プログラムカウンタの概要 ..................................18 プログラムステータスの概要 ..............................19 ベクタテーブル領域の概要 ....................................8 未定義命令例外の概要 .......................................... 42 ユーザ割込みの概要 .............................................. 37 リターンポインタの概要 ...................................... 25 索引 例外処理の概要 .......................................................41 レジスタハザードの概要 .......................................56 割込みの概要 ...........................................................36 関係 R15 とスタックポインタの関係 ...........................16 Ri および Rj と数値の関係 ....................................65 Rs と数値の関係 .....................................................66 ステップトレーストラップと NMI および ユーザ割込みの関係 ........................................46 き 記号 命令一覧表に用いている記号の意味 .................239 記述形式 命令記述形式 ...........................................................67 起動 INTE 命令のトラップ処理を起動するまでの 時間 ....................................................................45 INT 命令のトラップ処理を起動するまでの 時間 ....................................................................44 ノンマスカブルインタラプト処理を起動するまで の時間 ................................................................39 未定義命令例外処理が起動するまでの 時間 ....................................................................42 割込み処理を起動するまでの時間 .......................38 機能 システムスタックポインタとユーザスタック ポインタの機能 ................................................28 乗除算レジスタの機能 ...........................................30 テーブルベースレジスタの機能 ...........................24 プログラムカウンタの機能 ...................................18 リターンポインタの機能 .......................................26 こ 構成 FR ファミリのレジスタ構成 .................................14 乗除算レジスタの構成 ...........................................30 スタックポインタの構成 .......................................28 テーブルベースレジスタの構成 ...........................24 プログラムステータスの構成 ...............................19 リターンポインタの構成 .......................................26 FR ファミリ CPU の構成例 .....................................4 FR ファミリの構成例 ...............................................3 構造 ベクタテーブルの構造 ...........................................34 コプロセッサ コプロセッサ不在トラップの概要 .......................48 コプロセッサ不在トラップ発生時に退避する PC の値 ..............................................................48 コプロセッサ不在トラップ発生時の動作 ...........48 コプロセッサ不在トラップ発生の条件 ...............48 コプロセッサエラー情報 コプロセッサエラー情報の退避と復帰 ...............50 コプロセッサエラートラップ コプロセッサエラートラップ時に退避する PC の値 ..............................................................49 コプロセッサエラートラップの概要 ...................49 コプロセッサエラートラップ発生時の コプロセッサ命令の動作結果 ........................49 コプロセッサエラートラップ発生時の 動作 .................................................................... 49 コプロセッサエラートラップ発生の条件 ..........49 コンディションコードレジスタ コンディションコードレジスタ (CCR: bit07 ∼ bit00) .........................................21 し システムコンディションコードレジスタ システムコンディションコードレジスタ (SCR: bit10 ∼ bit08) .........................................20 システムスタックポインタ システムスタックポインタ , ユーザスタック ポインタの概要 ................................................ 27 システムスタックポインタとユーザスタック ポインタの機能 ................................................ 28 実際に発生する条件 実際に発生する条件 .............................................. 55 順序 ビットの順序とバイトの順序 ..............................10 条件 コプロセッサエラートラップ発生の条件 ..........49 コプロセッサ不在トラップ発生の条件 ..............48 実際に発生する条件 .............................................. 55 ステップトレーストラップ発生の条件 ..............46 ノンマスカブルインタラプト要求 受付け条件 ........................................................39 ユーザ割込み要求受付け条件 ..............................37 使用上の注意事項 INTE 命令使用上の注意事項 ................................45 INT 命令使用上の注意事項 ................................... 44 ステップトレーストラップの使用上の 注意事項 ............................................................ 47 乗除算レジスタ 乗除算レジスタの概要 .......................................... 29 乗除算レジスタの機能 .......................................... 30 乗除算レジスタの構成 .......................................... 30 初期化値 リセットによる CPU 内レジスタの 初期化値 ............................................................ 32 初期値 汎用レジスタの初期値 .......................................... 16 ベクタテーブル領域の初期値 ................................9 す スタックポインタ R15 とスタックポインタの関係 ...........................16 スタックポインタの構成 ...................................... 28 ステップ除算プログラム ステップ除算プログラム中の割込みの 発生 .................................................................... 36 ステップトレーストラップ ステップトレーストラップと NMI および ユーザ割込みの関係 ........................................ 46 ステップトレーストラップの概要 ...................... 46 ステップトレーストラップの使用上の 注意事項 ............................................................ 47 ステップトレーストラップ発生時に退避する PC の値 .............................................................. 46 ステップトレーストラップ発生時の動作 ..........46 259 索引 ステップトレーストラップ発生の条件 ...............46 せ 制限 遅延分岐命令実行中の割込みに関する 制限 ....................................................................59 制約 データにおけるワードアライメントに対する 制約 ....................................................................11 プログラムにおけるワードアライメントに対する 制約 ....................................................................11 前後不一致 前後不一致の回避方法 ...........................................55 専用レジスタ 専用レジスタ ...........................................................17 た 退避 INTE 命令実行時に退避する PC の値 ..................45 INT 命令実行時に退避する PC の値 ....................44 コプロセッサエラー情報の退避と復帰 ...............50 コプロセッサエラートラップ時に退避する PC の値 ..............................................................49 コプロセッサ不在トラップ発生時に退避する PC の値 ..............................................................48 ステップトレーストラップ発生時に退避する PC の値 ..............................................................46 退避するレジスタ ...................................................35 ノンマスカブルインタラプト発生時に退避する PC の値 ..............................................................40 未定義命令例外発生時に退避する PC の値 ........42 割込み発生時に退避する PC の値 ........................38 ダイレクト ダイレクトアドレス領域 .........................................7 多重処理 多重処理の優先順位 ...............................................52 ち 遅延スロット 遅延スロットで使用できない命令 .......................58 遅延スロットに置かれた未定義命令 ...................42 遅延なし分岐命令 遅延なし分岐命令の概要 .......................................58 遅延なし分岐命令の処理例 ...................................60 遅延分岐命令 遅延分岐命令実行中の割込みに関する 制限 ....................................................................59 遅延分岐命令の概要 ...............................................58 遅延分岐命令の処理例 ...........................................61 遅延分岐命令のプログラム例 ...............................62 注意事項 INTE 命令使用上の注意事項 ................................45 INT 命令使用上の注意事項 ...................................44 PS レジスタに関する注意事項 .............................22 ステップトレーストラップの使用上の 注意事項 ............................................................47 テーブルベースレジスタの注意事項 ...................24 260 パイプライン動作と割込み処理に関する 注意事項 ............................................................ 55 て データ データにおけるワードアライメントに対する 制約 .................................................................... 11 テーブルベースレジスタ テーブルベースレジスタの概要 .......................... 23 テーブルベースレジスタの機能 .......................... 24 テーブルベースレジスタの構成 .......................... 24 テーブルベースレジスタの注意事項 .................. 24 と 動作 INTE 命令実行時の動作 ........................................ 45 INT 命令実行時の動作 ...........................................44 コプロセッサエラートラップ発生時の 動作 .................................................................... 49 コプロセッサ不在トラップ発生時の動作 ..........48 ステップトレーストラップ発生時の動作 ..........46 ノンマスカブルインタラプト受付け時の 動作 .................................................................... 39 パイプライン動作と割込み処理に関する 注意事項 ............................................................ 55 パイプライン動作の概要 ...................................... 54 未定義命令例外の動作 .......................................... 42 ユーザ割込み受付け時の動作 ..............................37 リセットの動作 ......................................................32 同時発生 同時発生の優先順位 .............................................. 51 特長 FR ファミリ CPU コアの特長 ................................. 2 トラップ INTE 命令のトラップ処理を起動するまでの 時間 .................................................................... 45 INT 命令のトラップ処理を起動するまでの 時間 .................................................................... 44 コプロセッサエラートラップ時に退避する PC の値 .............................................................. 49 コプロセッサエラートラップの概要 .................. 49 コプロセッサエラートラップ発生時の コプロセッサ命令の動作結果 ........................ 49 コプロセッサエラートラップ発生時の 動作 .................................................................... 49 コプロセッサエラートラップ発生の条件 ..........49 コプロセッサ不在トラップの概要 ...................... 48 コプロセッサ不在トラップ発生時に退避する PC の値 .............................................................. 48 コプロセッサ不在トラップ発生時の動作 ..........48 コプロセッサ不在トラップ発生の条件 ..............48 トラップの概要 ......................................................43 トラップを発生する要因 ...................................... 43 の ノンマスカブルインタラプト ノンマスカブルインタラプト受付け時の 動作 .................................................................... 39 索引 ノンマスカブルインタラプト処理を起動するまで の時間 ................................................................39 ノンマスカブルインタラプトの概要 ...................39 ノンマスカブルインタラプトの使い方 ...............40 ノンマスカブルインタラプト発生時に退避する PC の値 ..............................................................40 ノンマスカブルインタラプト要求 受付け条件 ........................................................39 は バイト ビットの順序とバイトの順序 ...............................10 パイプライン動作 パイプライン動作と割込み処理に関する 注意事項 ............................................................55 パイプライン動作の概要 .......................................54 汎用レジスタ COPST/COPSV 命令実行時の汎用レジスタ .......48 S フラグ書換え後の R15 および汎用レジスタの 参照によるインターロックの発生 ................57 汎用レジスタの概要 ...............................................15 汎用レジスタの初期値 ...........................................16 汎用レジスタの特殊な使い方 ...............................16 ひ ビット ビットの順序とバイトの順序 ...............................10 ふ フォーマット E フォーマット .....................................................254 命令フォーマット ...................................................64 復帰 EIT ハンドラからの復帰 .................................28, 35 コプロセッサエラー情報の退避と復帰 ...............50 フラグ S フラグ書換え後の R15 および汎用レジスタの 参照によるインターロックの発生 ................57 プログラム ステップ除算プログラム中の割込みの 発生 ....................................................................36 遅延分岐命令のプログラム例 ...............................62 プログラムにおけるワードアライメントに対する 制約 ....................................................................11 プログラムカウンタ プログラムカウンタの概要 ...................................18 プログラムカウンタの機能 ...................................18 プログラムステータス プログラムステータスの空きビット ...................19 プログラムステータスの概要 ...............................19 プログラムステータスの構成 ...............................19 分岐命令 遅延なし分岐命令の概要 .......................................58 遅延なし分岐命令の処理例 ...................................60 遅延分岐命令実行中の割込みに関する 制限 ....................................................................59 遅延分岐命令の概要 ...............................................58 遅延分岐命令の処理例 ...........................................61 遅延分岐命令のプログラム例 ..............................62 へ ベクタテーブル ベクタテーブルの構造 .......................................... 34 ベクタテーブル領域の概要 ....................................8 ベクタテーブル領域の初期値 ................................9 ベクタテーブル領域の内容 ....................................8 未使用ベクタテーブル領域 ....................................6 み 未使用 未使用ベクタテーブル領域 ....................................6 未定義命令 遅延スロットに置かれた未定義命令 .................. 42 未定義命令例外処理が起動するまでの 時間 .................................................................... 42 未定義命令例外の概要 .......................................... 42 未定義命令例外の使い方 ...................................... 42 未定義命令例外の動作 .......................................... 42 未定義命令例外発生時に退避する PC の値 .......42 め 命令 COPST/COPSV 命令実行時の汎用レジスタ .......48 INTE 命令実行時に退避する PC の値 ................. 45 INTE 命令実行時の動作 ........................................ 45 INTE 命令使用上の注意事項 ................................45 INTE 命令の概要 ....................................................45 INTE 命令のトラップ処理を起動するまでの 時間 .................................................................... 45 INT 命令実行時に退避する PC の値 .................... 44 INT 命令実行時の動作 ...........................................44 INT 命令使用上の注意事項 ................................... 44 INT 命令の概要 ....................................................... 44 INT 命令のトラップ処理を起動するまでの 時間 .................................................................... 44 コプロセッサエラートラップ発生時の コプロセッサ命令の動作結果 ........................ 49 遅延スロットで使用できない命令 ...................... 58 遅延スロットに置かれた未定義命令 .................. 42 遅延なし分岐命令の概要 ...................................... 58 遅延なし分岐命令の処理例 ..................................60 遅延分岐命令実行中の割込みに関する 制限 .................................................................... 59 遅延分岐命令の概要 .............................................. 58 遅延分岐命令の処理例 .......................................... 61 遅延分岐命令のプログラム例 ..............................62 未定義命令例外処理が起動するまでの 時間 .................................................................... 42 未定義命令例外の概要 .......................................... 42 未定義命令例外の使い方 ...................................... 42 未定義命令例外の動作 .......................................... 42 未定義命令例外発生時に退避する PC の値 .......42 命令一覧表 ............................................................ 243 命令一覧表に用いている記号の意味 ................ 239 命令記述形式 .......................................................... 67 命令中のオペランド情報の使い方 ........................ 7 261 索引 命令フォーマット ...................................................64 命令マップ .............................................................253 メモリ空間 メモリ空間 .................................................................6 ゆ ユーザスタックポインタ システムスタックポインタ , ユーザスタック ポインタの概要 ................................................27 システムスタックポインタとユーザスタック ポインタの機能 ................................................28 ユーザ割込み ステップトレーストラップと NMI および ユーザ割込みの関係 ........................................46 ユーザ割込み受付け時の動作 ...............................37 ユーザ割込みの概要 ...............................................37 ユーザ割込みの使い方 ...........................................38 ユーザ割込み要求受付け条件 ...............................37 優先順位 多重処理の優先順位 ...............................................52 同時発生の優先順位 ...............................................51 リセットの優先順位 ...............................................32 よ 要因 トラップを発生する要因 .......................................43 例外処理を発生する要因 .......................................41 割込みを発生する要因 ...........................................36 り リセット リセットによる CPU 内レジスタの 初期化値 ............................................................32 リセットの動作 .......................................................32 リセットの優先順位 ...............................................32 リターンポインタ リターンポインタの概要 .......................................25 リターンポインタの機能 .......................................26 リターンポインタの構成 .......................................26 れ 例外 未定義命令例外の概要 ...........................................42 未定義命令例外の使い方 .......................................42 未定義命令例外の動作 ...........................................42 例外処理 例外処理の概要 .......................................................41 例外処理を発生する要因 .......................................41 レジスタ COPST/COPSV 命令実行時の汎用レジスタ .......48 FR ファミリのレジスタ構成 .................................14 PS レジスタに関する注意事項 .............................22 S フラグ書換え後の R15 および汎用レジスタの 参照によるインターロックの発生 ................57 インタラプトレベルマスクレジスタ (ILM: bit20 ∼ bit16) ..........................................19 262 コンディションコードレジスタ (CCR: bit07 ∼ bit00) .........................................21 システムコンディションコードレジスタ (SCR: bit10 ∼ bit08) .........................................20 乗除算レジスタの概要 .......................................... 29 乗除算レジスタの機能 .......................................... 30 乗除算レジスタの構成 .......................................... 30 専用レジスタ .......................................................... 17 退避するレジスタ ..................................................35 テーブルベースレジスタの概要 .......................... 23 テーブルベースレジスタの機能 .......................... 24 テーブルベースレジスタの構成 .......................... 24 テーブルベースレジスタの注意事項 .................. 24 汎用レジスタの概要 .............................................. 15 汎用レジスタの初期値 .......................................... 16 汎用レジスタの特殊な使い方 ..............................16 リセットによる CPU 内レジスタの 初期化値 ............................................................ 32 レジスタバイパス ..................................................56 レジスタハザードの概要 ...................................... 56 レジスタバイパス レジスタバイパス ..................................................56 レジスタハザード レジスタハザードの概要 ...................................... 56 わ ワードアライメント データにおけるワードアライメントに対する 制約 .................................................................... 11 プログラムにおけるワードアライメントに対する 制約 .................................................................... 11 割込み ステップ除算プログラム中の割込みの 発生 .................................................................... 36 ステップトレーストラップと NMI および ユーザ割込みの関係 ........................................ 46 遅延分岐命令実行中の割込みに関する 制限 .................................................................... 59 パイプライン動作と割込み処理に関する 注意事項 ............................................................ 55 ユーザ割込み受付け時の動作 ..............................37 ユーザ割込みの概要 .............................................. 37 ユーザ割込みの使い方 .......................................... 38 ユーザ割込み要求受付け条件 ..............................37 割込み処理を起動するまでの時間 ...................... 38 割込みの概要 .......................................................... 36 割込み発生時に退避する PC の値 .......................38 割込みを発生する要因 .......................................... 36 CM71-00101-5 富士通半導体デバイス • CONTROLLER MANUAL FR ファミリ 32 ビット・マイクロコントローラ インストラクションマニュアル 2007 年 12 月 第 5 版発行 発行 富士通株式会社 編集 マーケティング統括部 販売戦略部 電子デバイス事業本部