JP2984463B2 - マイクロコンピュータ - Google Patents

マイクロコンピュータ

Info

Publication number
JP2984463B2
JP2984463B2 JP4154525A JP15452592A JP2984463B2 JP 2984463 B2 JP2984463 B2 JP 2984463B2 JP 4154525 A JP4154525 A JP 4154525A JP 15452592 A JP15452592 A JP 15452592A JP 2984463 B2 JP2984463 B2 JP 2984463B2
Authority
JP
Japan
Prior art keywords
instruction
bit
address
register
processing unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP4154525A
Other languages
English (en)
Other versions
JPH05197546A (ja
Inventor
俊平 河崎
康宏 田原
馨 深田
尊永 山崎
栄二 榊原
桂一 倉員
泰 赤尾
志朗 馬場
利昌 木原
有吾 柏木
秀哉 藤田
克彦 石田
典子 澤
陽一 浅野
英明 茶木
正彦 菅原
正博 海永
孝樹 野口
満 渡部
卓 塚元
茂樹 増村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Hitachi Solutions Technology Ltd
Original Assignee
Hitachi Ltd
Hitachi ULSI Systems Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=26482784&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=JP2984463(B2) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by Hitachi Ltd, Hitachi ULSI Systems Co Ltd filed Critical Hitachi Ltd
Priority to JP4154525A priority Critical patent/JP2984463B2/ja
Priority to DE69233412T priority patent/DE69233412T2/de
Priority to DE69233361T priority patent/DE69233361T2/de
Priority to EP92110517A priority patent/EP0525375B1/en
Priority to DE69232232T priority patent/DE69232232T2/de
Priority to EP98120015A priority patent/EP0902361B1/en
Priority to EP01110865A priority patent/EP1122638B1/en
Priority to EP98120014A priority patent/EP0902358A3/en
Priority to KR1019920010873A priority patent/KR100294559B1/ko
Publication of JPH05197546A publication Critical patent/JPH05197546A/ja
Priority to US08/478,730 priority patent/US5991545A/en
Priority to US08/475,459 priority patent/US5682545A/en
Priority to KR1019970026158A priority patent/KR100268635B1/ko
Priority to KR1019970026157A priority patent/KR100294560B1/ko
Priority to US08/898,994 priority patent/US6131154A/en
Priority to US08/948,793 priority patent/US5969976A/en
Priority to US09/053,638 priority patent/US6253308B1/en
Priority to HK98111668A priority patent/HK1011101A1/xx
Priority to US09/250,922 priority patent/US6122724A/en
Application granted granted Critical
Publication of JP2984463B2 publication Critical patent/JP2984463B2/ja
Priority to US09/543,387 priority patent/US6272620B1/en
Priority to US09/632,332 priority patent/US6343357B1/en
Priority to US10/011,807 priority patent/US6996700B2/en
Priority to HK02100791.9A priority patent/HK1039661B/zh
Priority to US11/120,105 priority patent/US20050251651A1/en
Priority to US12/195,856 priority patent/US20080313444A1/en
Priority to US12/726,694 priority patent/US20100191934A1/en
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • G06F9/28Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/535Dividing only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30163Decoding the operand specifier, e.g. specifier format with implied specifier, e.g. top of stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/324Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • G06F9/3557Indexed addressing using program counter as base address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/535Indexing scheme relating to groups G06F7/535 - G06F7/5375
    • G06F2207/5352Non-restoring division not covered by G06F7/5375

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Executing Machine-Instructions (AREA)
  • Microcomputers (AREA)
  • Advance Control (AREA)
  • Communication Control (AREA)
  • Complex Calculations (AREA)
  • Digital Transmission Methods That Use Modulated Carrier Waves (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明はマイクロコンピュータ特
にRISC(Reduced Instruction
Set Computer:縮小命令セット型コンピ
ュータ)系マイクロコンピュータのアーキテクチャに関
し、例えば機器に組み込まれてこれを制御するマイクロ
コンピュータに適用して有効な技術に関するものであ
る。更に本明細書では、符号付き除算のための回路、例
えば、任意長多精度の符号付き2進数の除算回路に関
し、特にRISC系マイクロコンピュータのステップ除
算に適合して有効な技術を開示する。
【0002】
【従来の技術】1命令を実行するのに必要なマシンサイ
クル数を低減する際の一番の隘路は命令のデコード処理
であることが知られている。デコード処理を高速化する
ためには、命令の境界がどこに存在するかを前の命令の
解釈が済む前にわかるように、固定長の命令フォーマッ
トを採用することが効果的であるということが知られて
いる。いわゆるRISC系コンピュータでは、固定長の
命令フォーマットと多段のパイプラインを採用すること
で殆どの命令を1サイクルで実行している。これまでの
RISC系コンピュータでは例外無く32ビット命令フ
ォーマットを使用してきた。32ビット固定長命令フォ
ーマットの長所は、ソースレジスタとデスティネーショ
ンレジスタの命令フォーマット中のフィールドを固定し
てしまう事により、オペコード(オペレーションコー
ド)部分のデコードをしなくとも、どのレジスタを読め
ばよいかを決められる点と、イミディエート値をデコー
ドする際にアライメントの調整が不要な点である。その
反面32ビット固定長命令フォーマットでは、どんなに
処理内容の単純な命令を記述する場合にも32ビットを
要するので、1連の処理を機械語で書いた場合に命令コ
ードの占有バイト数が大きくなってしまい、プログラム
全体がメモリ領域に占める割合が増える点が問題であ
る。プログラムのメモリ占有領域が増えると、より容量
の大きなメモリを実装することを余儀なくされるため、
マイクロコンピュータシステムのコストが上がり、コス
ト性能比の良いシステムを構成する事が困難になる。特
にRISCプロセッサは命令数を少なくすることにより
命令の実行を高速化しようとするアーキテクチャである
ため、命令セットに対して未定義オペレーションコード
が比較的多くなるという傾向を持つ。未定義オペレーシ
ョンコードが多いということは、オブジェクトプログラ
ムのコード効率を悪化させ、即ちメモリの利用効率を一
層低下させる。
【0003】斯るメモリの利用効率もしくはコード効率
向上という点についての先の出願としては、特願平2−
222203号がある。この出願内容は命令フォーマッ
トをデータ語長よりも短いビット数とするものである。
しかしながらその場合には、データ語長よりも短いビッ
ト数の固定長命令フォーマットを採用することに付随し
て種々の問題点を解決すべきことを本発明者は見い出し
た。例えば、データ語長に匹敵するビット数のイミディ
エートデータを必要とする場合の方策、さらには肥大化
するプログラムやシステム構成に対して分岐先アドレス
のような絶対アドレスの指定の仕方などの、データ処理
上において新たな方策の検討が必要である。また、前記
先願は、データ語長と命令語長とに2のべき乗の関係を
持たせることについては一切考慮されていない。このこ
とにより、メモリの1ワード境界を越えて1命令が存在
するようなミスアライメントを積極的に防止するには至
らず、メモリの利用効率さらにはソフトウェアプログラ
ムの簡素化並びに処理速度という点においても新たに検
討すべき事柄が残されている。
【0004】また、マイクロコンピュータ等で行われる
除算の技術として、被除数の符号と除数の符号とから商
と剰余の符号を決定し、被除数の絶対値との除算を回復
法や被回復法などで実行し、最後に商と剰余との符号補
正を行う除算方式が公知である。近年、符号付き除算に
於いて、被除数および除数の絶対値をとらず、符号付き
の状態で除算を実行する回路および方式が幾つか公開さ
れている。被除数と除数とを符号付きの状態で除算を行
う場合、いずれの方式でも、基本的には、次の手順を採
用している。すなわち、被除数あるいは部分剰余の符号
と除数の符号とが等しい場合は被除数あるいは部分剰余
から除数を減算した結果を新たな部分剰余とし、被除数
あるいは部分剰余の符号と除数の符号とが異なる場合は
被除数あるいは部分剰余に除数を加算した結果を新たな
部分剰余とするようにして、その減算又は加算を順次繰
返して商を求めていく。このとき、被除数が正の場合ま
たは被除数が除数で割り切れない場合はこの手順に基づ
き、若干の商または剰余補正を実行することにより、正
しい答えを得ることができる。しかし、被除数が負で且
つ被除数が除数で割り切れる場合、これによって求めら
れる商は、正しい商よりも絶対値の小さい方へLSBの
重みを持つ”1”だけ小さくなる。この誤りは、負の被
除数あるいは部分剰余に対して上記加算又は減算を行っ
て部分剰余が0となった場合にこの部分剰余の符号を正
しいとみなしてしまうことにより生じる。
【0005】この誤りを解決するために、部分剰余が0
になったことを検出し、商を補正する手段を備えた除算
回路が幾つか考案されている。例えば、特開平2−16
5326号には、非回復型の除算手段に、各行での演算
結果(部分剰余のこと)が0のときにセットされ、被除
数の各行での最下位ビットに1が入ってきたときにリセ
ットされるレジスタを持ち、このレジスタの結果を用い
て、商および余の補正を行う技術が記載されている。こ
れによれば、上記のセットおよびリセットされるレジス
タを用いて部分剰余が0になった場合を検出し補正する
ことにより正しい符号付き除算を実現している。また、
特開平2−171828号には、部分剰余が0であるか
どうかを商ビットを決定するステップ毎に検出すること
により、被除数が負の場合に、誤った商ビットが出力さ
れるのを防止する技術が記載されている。さらに特開昭
59−160235には、被除数が負であって除算の途
中で部分剰余が0になったら、その最上位ビットを1と
考えるようにするために、部分剰余が0になつた場合を
検出するハードウエアを設けた技術が記載されている。
【0006】このように、被除数と除数を符号付きの状
態で除算する従来の技術は、部分剰余が0になったこと
を検出して商ビットの補正を行っている。斯る技術で
は、部分剰余を求める度にそれが0であるかを判定しな
ければならず、除数がnビットであればその様な判定動
作をn回行うことが必要になり、除算処理全体の動作ス
テップ数を増大させる。更に部分剰余が0か否かはその
全ビットを見なければならず、1回の判定処理を高速化
しようとすれば専用ハードウェアも必要になることが予
想される。
【0007】
【発明が解決しようとする課題】本発明の目的は、デー
タ語長よりも少ないビット数の固定長命令フォーマット
を採用することに付随する種々の問題点を解決すること
にある。さらに詳しくは、固定長命令フォーマットのビ
ット数がデータ語長よりも少なくてもイミディエートデ
ータの利用や絶対アドレス指定に制限を及ぼさないこ
と、限られたビット数の固定長命令フォーマットの中で
必要なディスプレースメントなどの記述が可能であるこ
と、メモリ上におけるプログラム配置のミスアライメン
トの防止に寄与すること、並びにサポートする命令の内
容という点からコード効率もしくはメモリ利用効率を一
層向上させることなどから選ばれた単数もしくは複数の
事柄を達成することができるマイクロコンピュータを提
供することを目的とする。
【0008】本発明の別の目的は、被除数が負の場合に
も商ビットを求める除算のステップ毎に部分剰余が0で
あるか否かの検出を行うことなく簡単に正しい商を求め
ることができる除算回路を提供することにある。本発明
の更に別の目的は、被除数が正であるのか負であるのか
を考慮することなく除算プログラムの開発を可能にする
除算回路を提供することにある。本発明のその他の目的
は、回路構成が簡単であって、しかも除算効率を向上さ
せることができる除算回路を提供することにある。
【0009】本発明の前記並びにその他の目的と新規な
特徴は本明細書の記述及び添付図面から明らかになるで
あろう。
【0010】
【課題を解決するための手段】本願において開示される
発明のうち代表的なものの概要を簡単に説明すれば下記
の通りである。
【0011】(1)汎用レジスタ方式を採用するマイク
ロコンピュータにおいて、命令実行手段に供給される最
大のデータ語長よりもビット数の少ない固定長命令フォ
ーマットを採用するものである。 (2)前記固定長命令フォーマットに設定されるビット
数がメモリ上におけるプログラムのミスアライメントの
防止に役立つようにするには、前記固定長命令フォーマ
ット及び前記最大データ語長はそれぞれ2のべき乗のビ
ット数を設定するとよい。例えば最大データ語長が32
ビットのとき命令フォーマットは16ビットに固定す
る。 (3)データの最大語長と命令フォーマットのビット数
との間に前記関係がある場合、前記最大データ語長に等
しいビット数の内部バスを利用して能率的に命令をフェ
ッチするには、若しくは命令フェッチのためのバスアク
セス回数を減らすには、バス幅全体を使って複数命令を
同一サイクルでプリフェッチするようにすればよい。 (4)内部バスがデータ転送と命令フェッチに共用され
る場合に、データフェッチと命令フェッチが競合したと
きの処理若しくはそれに起因する後処理を簡単化するに
は、データフェッチを優先し、このデータフェッチに競
合する命令フェッチを含む命令実行スケジュールを全体
的に遅延させるパイプ制御を行うようにするとよい。 (5)汎用レジスタ方式を採る性質上、パイプライン的
に実行される前後の命令による前記汎用レジスタの利用
が競合する状態に簡単に対処するには、パイプライン的
に実行される複数の命令による前記汎用レジスタの利用
が競合する状態を命令フォーマット中に含まれるレジス
タ指定領域の情報に基づいて検出し、検出されたレジス
タ競合状態とレジスタ競合状態にある相対的に先に実行
される命令の実行サイクル数とに基づいてレジスタ競合
状態の相対的に後の命令の実行を遅延させるようにパイ
プ制御を行えばよい。 (6)固定長命令フォーマットのビット数の制限がイミ
ディエートデータの利用に制限を与えないようにするに
は、特定のレジスタの値に対してディスプレースメント
の値をオフセットとするレジスタ相対でイミディエート
データを指定させる記述を含む命令をサポートするとよ
い。 (7)ビット数が制限された固定長命令フォーマットで
あっても、データ処理上必要なディスプレースメント若
しくはイミディエートデータのビット数を極力多くする
方策とし、命令中にレジスタ指定フィールドがないのに
も拘らずオペランドとして固定された特定の汎用レジス
タを暗黙的に指定させる命令をサポートするとよい。 (8)同様に、ビット数が制限された固定長命令フォー
マットであっても、処理上必要なディスプレースメント
若しくはイミディエートデータのビット数を極力多くす
る方策とし、指定条件に対する演算結果の真偽を所定の
状態フラグに反映させる記述を含む命令をサポートする
とよい。 (9)分岐命令の種類に応じて適切な分岐先指定用ディ
スプレースメント長を固定的に割り当てる。16ビット
固定長命令フォーマットのとき、条件分岐命令のディス
プレースメントを8ビットに固定し、サブルーチン分岐
命令及び無条件分岐命令のディスプレースメントを12
ビットに固定する。
【0012】(10)符号付き除算において、被除数が
負である場合にその被除数から該被除数のLSBの重み
を持つ”1”を引く操作を除算の前処理として行う。被
除数のLSBの重みが1であればその被除数は整数であ
る。被除数が固定小数点数の場合にはこれを整数と見な
して除算の処理を行っても実質的な影響はない。後から
小数点位置の桁合せを行えば済むからである。したがっ
て、被除数のLSBの重みを1と見なすことによって被
除数を整数と見なして途中の演算を行っても実害はな
く、以下の説明において特にことわらない限り被除数を
整数と見なすものとする。 (11)被除数が負のときの符号ビットは1で、正また
は0のときの符号ビットが0であることに着目すると、
被除数からその符号ビット(被除数のMSB)を差引け
ば、負の被除数から1を引いたことになる。これは、2
の補数表現の負の整数から1の補数表現への変換とみな
すことができる。このようにすれば、被除数が正か負か
を考慮しなくても被除数に対する前処理を行うことがで
きる。図35には例えば、4ビットの負の整数から1を
引いた変換状態が示される。有限ビット数の2の補数の
最小値を1の補数に変換するには1ビット余分に必要で
あるので、必要な場合は1ビット拡張する。また、部分
剰余は正になることもあるので、負の整数に対して行っ
た上記の変換を整数全体に拡張し、新しい整数の表現を
導入する。例えば、4ビット符号付き整数の範囲では図
36に示されるような表現が採用される。尚、任意の整
数をその数から1を引いた数で表現したものをZZとす
ると、2の補数を用いた整数に対し1を引く変換を行っ
たZZの表現は0以下の整数では1の補数と同一視で
き、0以上の整数では本来の値より1だけ小さい数で表
現される。このとき、0の符号ビットは負の数と同じ1
となる。 (12)符号付き除算の過程において、商と部分剰余
(若しくは余り)の保持という点において、演算され或
は演算に供されるべき商ビットや部分剰余をレジスタ等
に転送するための処理ステップ数を少なくするには、商
(商ビット)と余り(部分剰余)とを1本のレジスタの
ような単一の記憶手段に保持させるようにするとよい。
【0013】
【作用】(1)上記した手段によれば、例えば32ビッ
トのデータ語長に対して16ビット固定長命令フォーマ
ットを採用することは、命令フォーマットが固定長であ
るという点において従来の32ビット固定長命令フォー
マットを持つRISCマシンと同様に命令境界がどこに
存在するかの判定を前の命令が完了する前に把握するこ
とができて命令デコード処理の単純化などの利点を保証
するように作用する。 (2)32ビット固定長命令フォーマットを採用する場
合に比べてプログラム容量が小さくなる。即ち、命令の
種類を少なくすることにより命令の実行を高速化しよう
とするRISCアーキテクチャにおいては命令セットの
中に未定義オペレーションコードが多くなる傾向があ
り、このとき命令長が従来とは半減すればプログラムメ
モリの利用効率が向上する。 (3)固定長命令フォーマットのビット数がデータ語長
よりも少なくてもイミディエートデータの利用や絶対ア
ドレス指定に制限を及ぼさないこと、限られたビット数
の固定長命令フォーマットの中で必要なディスプレース
メントなどの記述が可能であること、メモリ上における
プログラム配置のミスアライメントの防止に寄与するこ
と、並びにサポートする命令の内容という点からコード
効率もしくはメモリ利用効率を一層向上させることなど
は、データ語長よりも少ないビット数の固定長命令フォ
ーマットを採用することに付随する固有の各種問題点を
解決する。
【0014】(4)上記した符号付き除算のための手段
によれば、被除数が負の場合に被除数から被除数のLS
Bの重みを持つ1を引く前補が行われ、次いで商の符号
が予測され、更に被除数または部分剰余の符号と除数の
符号との排他的論理和が0か1かに基づいて、被除数ま
たは部分剰余に除数が加減算され、部分剰余の符号と除
数の符号との排他的論理和を商ビットとし、且つ商が負
の場合に1の補数の商を2の補数に補正し、このように
して商が求められる。 (5)上記被除数が負の場合、被除数のLSBの重みを
持つ1を該被除数から引くことは、0の表現を全てのビ
ットに1が立ち符号ビットも1であるような表現にする
前処理と等価とされる。このような前処理は、被除数が
負の場合に部分剰余が0になったことを検出しなくても
済むようにする。その結果、最初の被除数の符号ビット
と、部分剰余の符号ビットと、除数の符号ビットと、商
の符号ビットとの情報に基づいて、オーバーフローチェ
ックや剰余の補正を含めた除算の制御が可能になる。こ
のことが、除算のハードウェア並びにソフトウェアを単
純化し、更に、任意長任意精度の符号付き除算への適用
も可能にし、その上、部分剰余を格納するレジスタを1
ビット上位にシフトすると同時に商ビットをシフトイン
する手段を適用した処理の高速化にも対応可能とする。
【0015】
【実施例】以下本発明の実施例を最大のデータ語長より
もビット数の少ない固定長命令フォーマットを採用した
マイクロコンピュータと、その様なマイクロコンピュー
タによって実現される符号付き除算とに大別して、以下
項目順に説明していく。前者の内容は項目〔1〕〜〔1
7〕に記載され、後者の内容は項目〔18〕〜〔24〕
に記載される。
【0016】 〔1〕マイクロコンピュータの応用システム
【0017】図1には本発明の一実施例に係るマイクロ
コンピュータMCUを利用したシステムの一例が示され
る。マイクロコンピュータMCUは、外部コントロール
バスECB、外部データバスEDB、及び外部アドレス
バスEABを介して、外部メモリEMRYとユーザが定
義する外部入出力装置EI/Oに結合され、また、ポー
ト入出力バスPIOBを介して外部装置EEQに接続さ
れる。外部装置EEQはマイクロコンピュータシステム
が組み込まれる所定の機器である。
【0018】 〔2〕マイクロコンピュータのブロック構成
【0019】図2には本発明の一実施例に係るマイクロ
コンピュータMCUが示される。同図に示されるマイク
ロコンピュータMCUは、公知の半導体集積回路製造技
術によってシリコン基板のような1個の半導体基板に形
成される。図においてCPUはマイクロコンピュータM
CU全体の制御を司る中央処理装置である。Port/
I/Oは入出力ポートであり、外部に対してCPUが信
号を入出力したり、外部の表示機器をドライブしたり、
外部のスイッチの状態を調べたりするのに使用される。
CPUはあるアドレスに割り当てられたレジスタを読み
書きすることで入出力を行う。Port/Contはバ
ス制御線の出入口とされるポートである。Port/D
ataはデータバスの出入口とされるポートである。P
ort/Addressはアドレスバスの出入口とされ
るポートである。I/OはマイクロコンピュータMCU
のオンチップ上の周辺機器である。SCIはシリアル通
信用インタフェースであり、TIMERはタイマであ
り、DMACはダイレクト・メモリ・アクセス(DM
A)コントローラである。ROMはオンチップで実装さ
れた読出し専用メモリ(リード・オンリ・メモリ)であ
り、CPUの動作プログラムや定数テーブルなどを保有
する。RAMはオンチップで実装されたランダムアクセ
スメモリであり、中央処理装置CPUの作業領域やデー
タの一次記憶領域などとして利用される。BSCはバス
ステートコントローラであり、マイクロコンピュータM
CUの内部及び外部に対するバスアクセス制御を行う。
CACHEはキャッシュメモリであり、中央処理装置C
PUによる命令のアクセスパタンを認識して最も頻繁に
使用されることが予想される命令を保持して、アクセス
速度の遅い外部メモリからアプリケーションプログラム
等を読みにいくアクセス回数を減らして処理の高速化を
図るための記憶装置である。BURST/REFRES
Hは連続データ転送などに対するバースト制御やダイナ
ミック・ランダム・アクセス・メモリ(DRAM)など
に対するリフレッシュ制御を行うバースト/リフレッシ
ュ装置であり、DRAMを外付けメモリとして使用する
際の高速ページモードアクセスとDRAMのリフレッシ
ュなどに適用される。EDBは外部データバス、EAB
は外部アドレスバス、IDB31−0は32ビットの内
部データバス、IAB23−0は24ビットの内部アド
レスバスである。
【0020】 〔3〕マイクロコンピュータのパッケージのピン配置
【0021】図3には前記マイクロコンピュータMCU
のパッケージのピン配置が概念的に示される。同図にお
いてフリーランニングタイマFRT0,FRT1、アナ
ログ・ディジタル変換器A/D、及びシリアル通信用イ
ンタフェースSCI0,SCI1は図2の周辺機器I/
Oの一例とされ、これに対応して図3に示されるポート
PORT1乃至PORT4は夫々の周辺機器に対応する
入出力ポートであって図2のポートPort/I/Oに
対応される。マイクロコンピュータMCUは、特に制限
されないが、112ピンのQFP型のパッケージに封入
されている。24ビットのアドレスバス(A0−23)
は前記アドレスバスEABに接続し、32ビットのデー
タバス(D0−31)は前記データバスEDBに接続す
る。これらバスA0−23,D0−31は、中央処理装
置CPU、ダイレクト・メモリ・アクセス・コントロー
ラDMAC、又はバースト/リフレッシュ制御装置BU
RST/REFRESHが外部メモリEMRYをアクセ
スするときに使用される。クロック関連信号は中央処理
装置CPU内部と外部のシステムとが同期して動作する
際の時間の基本タイミングを規定するクロックの関連信
号である。例えば端子EXTALと端子XTALの両端
に図示しない水晶振動子を結合すると、マイクロコンピ
ュータMCUのチップ内部の電気回路と共鳴して発振す
る。当該チップはこの発振電圧を拾うことにより、後で
説明する内部同期用クロックφ1、φ2を生成する。こ
れらのクロックφ1,φ2は、特に制限されないが、ハ
イ期間が互いに重なることがないノンオーバラップクロ
ック信号とされる。同時に外部のシステムとLSI内部
の同期をとるために、φ1と殆ど同じ波形と位相を持っ
た外部クロックCLKを出力する。制御関連信号は、リ
セット信号(RES)スタンバイ信号(STBY)など
の動作モード設定用の信号、割り込み入力用の信号、リ
ードストローブ(RD)やライトストローブ(WRH
H、etc)などのデータバスの制御信号、DRAMリ
フレッシュ制御、バスアービトレーション用の信号など
を含む。Vss,Vccはグランド端子,電源端子であ
る。ポートPORT1からはダイレクト・メモリ・アク
セス・コントローラDMACに関する制御信号が2チャ
ンネル分入出力される。ポートPORT2にはフリーラ
ンニングタイマFRT0,FRT1に対する外部からの
制御と読出しをするための信号がある。ポートPORT
3はアナログ・ディジタル変換器A/Dの関連信号とし
て外部からのアナログ信号を入力する。アナログ・ディ
ジタル変換器A/Dのレファレンス電位は端子AVc
c,AVssから与えられる。ポートPORT4はシリ
アル通信インタフェース用の信号を入出力し、それら信
号はクロック用、データ送信用、データ受信用の3系統
とされ、2チャンネル分ある。
【0022】〔4〕命令語長とデータ語長
【0023】図4には本実施例のマイクロコンピュータ
MCUにおけるバス幅(バスの並列ビット数)に対する
データ語長と命令語長との一例関係が示される。本実施
例のマイクロコンピュータMCUは、RISC型のアー
キテクチャを有し、固定長の命令フォーマットを有す
る。データや命令が転送されるバス例えば内部データバ
スID31−0は32ビットとされる。このとき後述す
る各種レジスタのビット数は32ビットである。メモリ
上のデータもバイト(8ビット)、ワード(16ビッ
ト)、ロングワード(32ビット)を単位として、32
ビットの幅を有するメモリ領域に配置されている。メモ
リにはバイト単位で番地が割り当てられる。したがっ
て、バイトデータはn番地(nは整数)、ワードデータ
は2n番地、ロングワードデータは4n番地単位でアク
セスされる。これ以外のメモリアクセスはアドレスエラ
ーとされる。一方、命令は16ビット固定長命令フォー
マットとされる。
【0024】前記16ビット固定長命令フォーマットの
数例を示す図4において、rrrrの4ビットはソース
レジスタ指定フィールド、RRRRの4ビットはデステ
ィネーションレジスタの指定フィールド、d…ddはデ
ィスプレースメント、ii…iはイミディエートデータ
を意味する。16ビットの命令フォーマットにおいて、
デスティネーションレジスタ指定フィールドRRRRは
当該フォーマット左側を基準に第4ビット目から第8ビ
ット目とされ、ソースレジスタ指定フィールドrrrr
は第9ビット目から第12ビット目とされる。命令フォ
ーマットの左側4ビットは少なくともオペレーションコ
ード指定フィールドとされる。マイクロコンピュータM
CUの命令体系においては、デスティネーションレジス
タ指定フィールドRRRRをオペレーションコード指定
フィールドの一部として利用し、また、ソースレジスタ
指定フィールドrrrrをディスプレースメント又はイ
ミディエートデータの一部として利用することを許容す
る。
【0025】32ビットのデータ語長に対して16ビッ
ト固定長命令フォーマットを採用することにより、命令
フォーマットが固定長であるという点において従来の3
2ビット固定長命令フォーマットを持つRISCマシン
と同様に命令境界がどこに存在するかの判定を前の命令
が完了する前に把握することができて命令デコード処理
の単純化などの利点を保証する事ができる。その上、3
2ビット固定長命令フォーマットを採用する場合に比べ
てプログラム容量を小さくすることができる。即ち、命
令の種類を少なくすることにより命令の実行を高速化し
ようとするRISCアーキテクチャにおいては命令セッ
トの中に未定義オペレーションコードが多くなる傾向が
あり、このとき命令長が従来とは半減すればプログラム
メモリの利用効率が向上する。また、データ語長に比べ
て命令語長を短くすることは、双方の語長が等しくされ
る場合に比べて、固定長命令フォーマットのビット列に
おいて実質的に無駄なビット配列を減少させ、これが、
プログラムメモリの利用効率を高くする。したがって、
プログラムを格納するためのメモリの利用効率が向上
し、ボード上の限られた記憶容量のメモリやプロセッサ
にオンチップされたプログラムメモリを用いる応用分野
などでは、システム構成時にプログラムメモリの記憶容
量が不足したり、メモリの回路規模を大きくせざるを得
ないというような問題点の発生を回避して、システムコ
ストを低減することができる。
【0026】更に、16ビット固定長命令フォーマット
は32ビットのデータ語長並びにバス幅のちょうど半分
であるから、命令語長をバス幅やデータ語長に対して半
端なビット数(例えば2のべき乗以外のビット数)に設
定して命令語長を短くする場合に比べて、メモリのバウ
ンダリー境界(ワード境界)を越えて単一フォーマット
の命令が配置されるというようなプログラムメモリに対
する命令のミスアライメントを生じ難い。
【0027】〔5〕CPUの命令制御系
【0028】図5には前記中央処理装置CPUの内部ブ
ロック、特にその命令制御系の一例が示される。IRH
とIRLはそれぞれ16ビットの命令バッファ(命令キ
ュー)であり、命令を1つずつ格納する。これらのレジ
スタIRH,IRLには1回の命令フェッチサイクルで
夫々に命令がロードされる。命令は内部データバスID
B31ー0を介して32ビット単位で転送されてくるか
らである。これらはマルチプレクサMPXを介して命令
レジスタIR1にロードされる。命令レジスタIR1は
16ビットである。この命令レジスタIR1は命令デコ
ード段に存在する命令を保持する。命令レジスタIR1
中では、16ビット固定長命令フォーマットにしたがっ
てRRRRとして示される左端を基準に第5ビット目乃
至第7ビット目がデスティネーションレジスタフィール
ド、rrrrとして示されている第8ビット目乃至第1
2ビット目がソースレジスタフィールドとされる。これ
らのフィールドは命令フィールドの中で固定されてい
る。このとき、前述のようにソースレジスタフィールド
は必ずソースオペランドを指定するのに使用され、デス
ティネーションレジスタフィールドは2つ目のソースオ
ペランド又はデスティネーションオペランドを指定する
のに使用される。各レジスタフィールドの意味はオペレ
ーションコードの一部になる場合とレジスタの番号にな
る場合とがある。レジスタ指定フィールドRRRR及び
rrrrの内容がレジスタを指定する情報であるか否か
は前記固定長命令フォーマットの左端基準で第1ビット
目乃至第4ビット目のオペレーションコードの内容によ
って決定される。これに拘らずレジスタフィールドRR
RR、rrrrの値は、インストラクションレジスタI
R2を介してソースレジスタデコーダSRDとデスティ
ネーションレジスタデコーダDRDに入力されてデコー
ドされる。
【0029】前記ソースレジスタデコーダSRDとデス
ティネーションレジスタデコーダDRDとによるデコー
ド結果は、実行部EXECに含まれる汎用レジスタR0
H,R0L,…,R15H,R15Lの中からどれを選
択するかの指定に利用される。また、前記インストラク
ションレジスタIR2から出力されるレジスタフィール
ドRRRR、rrrrの値は、一時ラッチWBR0及び
WBR1を介してライトバックレジスタデコーダWBR
Dに供給され、そのデコード結果は、命令実行によって
得られる演算結果などをライトバックすべき汎用レジス
タの指定に利用される。さらに前記一時ラッチWBR1
に格納されたレジスタ番号すなわちレジスタフィールド
RRRR、rrrrの値はレジスタコンテントチェック
(Register Content Check)ブ
ロックRCCBに供給され、インストラクションレジス
タIR1、IR2の出力と比較され、次々にフェッチさ
れた命令がパイプライン的に実行されるときに夫々の命
令が同一のレジスタをアクセスする事象(レジスタの競
合)を割出す。レジスタ競合状態は信号S1によってフ
ラグ操作及びパイプ制御デコーダFO&PCDに供給さ
れる。アサート状態の信号S1がフラグ操作及びパイプ
制御デコーダFO&PCDに供給されると、現在実行中
の命令実行サイクル数に応じてスキップ(Skip)制
御が行われ、競合状態のレジスタを利用する命令の実行
サイクルをキャンセル若しくは遅延させる。これによ
り、先の命令の実行によって競合レジスタの書き込みが
完了される後のタイミングを以て後続する命令の実行サ
イクルが開始される。
【0030】前記インストラクションレジスタIR1が
保持する命令はマッピングコントロール(Mappin
g Control)ブロックMCBに供給され、これ
により高速制御リードオンリメモリ(Hardware
Sequence ROM)HSCーROMのアドレ
スが割出される。マッピングコントロールブロックMC
Bの役割は、命令をデコードしてその内容に応じて適切
な高速制御リードオンリメモリMHSC−ROMのエン
トリアドレスを算出することである。高速制御リードオ
ンリメモリHSC−ROMの出力はマイクロ命令フィー
ルド(Micro Code Field)MCFとパ
イプ制御フィールド(Pupe Contorl)PC
Fの2つの部分から成り、マイクロインストラクション
レジスタのようなハードウェア・シーケンス・コントロ
ール・インストラクション・レジスタHIRにラッチさ
れる。マイクロ命令フィールドにおける前者は浅いデコ
ード論理即ちインストラクションデコーダIDを介して
実行ユニットEXECに制御信号を供給する。後者はフ
ラッグ操作およびパイプ制御デコーダFO&PCDを介
して2サイクル以上のシーケンスを持つ命令のシーケン
スを生成したり、パイプラインの制御を行う。フラッグ
操作およびパイプ制御デコーダFO&PCDは8つのフ
ラッグC、W、B、L、M、I、S、Sを持っており、
これによりパイプラインの制御を行う。更に、このフラ
グ操作及びパイプ制御デコーダFO&PCDはステータ
スレジスタSRを有し、同レジスタSRは、条件分岐な
どに利用されるトゥルービットT(以下Tビットとも記
す)を有する。このTビットは、後で説明するように命
令に記述されている指定条件に対する演算結果の真偽が
設定される。
【0031】前記インストラクションレジスタIR1の
内容は演算実行フェーズ(EX)の前にインストラクシ
ョンレジスタIR2に移され、後のメモリアクセスフェ
ーズ(MA)とライトバックフェーズ(WB)のパイプ
ラインステートにある命令との間でコンフリクトを起こ
さないかが前記レジスタコンテントチェックブロックR
CCBを介してチェックされ、その結果が信号S1とし
て出力される。この時、インストラクションレジスタI
R2に格納されるのはレジスタフィールドの値のみであ
る。前述のようにインストラクションレジスタIR1、
IR2が保持するレジスタフィールドRRRR,rrr
rの値は前記ソースレジスタデコーダSRD、デスティ
ネーションレジスタデコーダDRD、ライトバックレジ
スタデコーダWBRDに供給される。ソースレジスタデ
コーダSRD、デスティネーションレジスタデコーダD
RD、ライトバックレジスタデコーダWBRDは、16
本の汎用レジスタR0H,R0L、…、R15H,R1
5Lの内の1つのレジスタペアを選択する選択信号を生
成して、実行ユニットEXECに供給する。
【0032】メモリインタフェースMIFは中央処理装
置CPUがメモリをアクセスする必要があるか無いか、
それがリードかライトかなどを検出してメモリのアクセ
スに必要な信号を出する。また命令フェッチ/命令レジ
スタ制御(Instruction Fetch&IR
Control)ブロックIF&IRCはメモリから
の命令フェッチが必要か否か、インストラクションレジ
スタIR0,IR1をいつアップデートするかなどを決
定して必要な信号を出力する機能を有する。この命令フ
ェッチ/命令レジスタ制御ブロックIF&IRCの機能
はパイプラインの状態、メモリのウエイト状態、命令キ
ュー(IRH,IRL)の状態などを参考に、命令キュ
ーや命令フェッチの制御を行う。本実施例で特徴的なの
は命令フェッチが32ビット単位で行われるのでその中
には16ビットの命令長の命令が2つ詰まるということ
である。このため、前回の命令をフェッチするときに同
時にフェッチした命令は別フェーズで改めてフェッチす
る必要がない。この様な事象を総合して命令フェッチを
いつ行うかが制御される。命令フェッチ/命令レジスタ
制御ブロックIF&IRCは有限状態ステートマシンと
して構成され、その構成については公知であるため詳細
な説明を省略する。
【0033】尚、図5においてIMBは命令に含まれる
イミディエートデータなどを実行ユニットEXECに送
るためのバッファである。また、命令キューIRH,I
RL、インストラクションレジスタIR1のラッチタイ
ミングは前記クロック信号φ1に同期される。インスト
ラクションレジスタIR2、マイクロインストラクショ
ンレジスタMIR、及びレジスタWBR0,WBR1の
ラッチタイミング、並びに前記レジスタコンテントチェ
ックブロックRCCBによる信号S1出力タイミングは
前記クロック信号φ2に同期される。
【0034】〔6〕CPUの実行ユニット
【0035】図6及び図7には中央処理装置CPUの実
行ユニットEXECの一例が示される。双方の図面にお
いて夫々A,B,C,Dで示されるバスは共通接続され
ている。実行ユニットEXECは、特に制限されない
が、命令のフェッチやプログラムカウンタの更新をする
命令フェッチ部IFB、汎用レジスタ部GRB、加減算
シフト演算などを行う演算部OPB、メモリのアクセス
およびデータのアライメント処理をするメモリアクセス
部MAB、及び乗算部MULTを含む。前記夫々のブロ
ックは4本の32ビット幅のデータバスA,B,C,D
により結合されている。
【0036】前記命令フェッチ部IFBの一部である前
記命令バッファ(命令キュー)IRH,IRLは図5の
ブロック構成では実行ユニットEXECとは別に記載さ
ているが、実際には図6のように配置されている。イミ
ディエートバッファ(Immediate Buffu
r)IMBは即値データ(イミディエートデータ)を切
り出して必要ならビットシフトを行うための論理であ
る。PCH,PCLは、命令フェッチを行うためのアド
レスを格納しておくプログラムカウンタである。AUH
(Arithmetic Unit High)、AU
L(Arithmetic Unit Low)はプロ
グラムカウンタの更新をするための加算器であり32ビ
ットの加算をすることができる。PRH(Proced
ure Address Register Hig
f),PRL(ProcedureAddress R
egister Low)は関数コールをするときに戻
りアドレスを格納するためのプロシージャアドレスレジ
スタである。VBRH(Vector Base Re
gister High),VBRL(VectorB
ase Register Low)は、割り込みベク
タ領域のベースアドレスの格納領域として使用される。
GBRH(Global Base Register
Low)は、I/Oのベースアドレスの格納レジスタ
として利用される。BRH(Break Regist
er High),BRL(Break Regist
er Low)は、ブレークルーチンからの戻り先アド
レスの格納レジスタとして利用される。
【0037】前記汎用レジスタ部GRBにはR0H,R
0L〜R15H,R15Lで示される32ビット長の汎
用レジスタが16本含まれる。前記演算部OPBにおい
てSFTH(Shifter High),SHTL
(Shifter Low)はビットシフトやロテート
などを行うためのハードウェアである。ALUH(Ar
ithmetic Logic Unit Hig
h),ALUL(Arithmetic Logic
Unit Low)は算術論理演算を行う演算器であ
る。SWP&EXTは、スワップ命令を実行したり符号
拡張(サイン拡張)やゼロ拡張を実行するためのハード
ウェアである。ALN(Aligner)は、バイトや
ワードでメモリやI/Oからアクセスされたデータをア
ライメントするためのハードウェアである。MRBH
(Memory Read BufferHigh),
MRBL(Memory Read Buffer L
ow)はメモリから読まれたデータを入れるためのテン
ポラリレジスタである。MWBH(Memory Wr
ite Buffer High),MWBL(Mem
ory Write Buffer Low)はメモリ
に書込むデータを入れるためのテンポラリレジスタであ
る。MABH(Memory Address Buf
fer High),MABL(Memory Add
ress Buffer Low)はメモリアクセスの
際のアドレスを入れておくテンポラリレジスタである。
MLTB(MULT Buffer)は、乗算部MUL
Tへ乗数と被乗数を転送するためのテンポラリレジスタ
である。
【0038】中央処理装置CPU内外のバスとの接続関
係は次の通りとされる。即ち、MTBL,MTBHは乗
算部MULTと接続するための双方向専用バスである。
図6及び図7においてIDBH,IDBLは図2のデー
タバスIDB31−0に対応され、また、IABH,I
ABLは図2のアドレスバスIAB23−0に対応され
る。前記プログラムカウンタPCH,PCLの値はアド
レスバスIABH,IABLに出力され、命令バッファ
IRH,IRLはデータバスIDBH,IDBLからデ
ータを受取り、テンポラリレジスタMWBH,MWBL
の出力はデータバスIDBH,IDBLに与えられる。
テンポラリレジスタMRBH,MRBLにはデーバスI
DBH,IDBLおよび専用バスMTBH,MTBLか
らデータが入力可能にされる。テンポラリレジスタMA
BH,MABLが保持するアドレス情報はアドレスバス
IABH,IABLに出力される。乗算用のテンポラリ
レジスタMLTBは専用バスMTBH,MTBLに出力
される。
【0039】 〔7〕CPUによるパイプラインステージ
【0040】図8には中央処理装置CPUによるパイプ
ライン処理のステージの一例が示される。この中央処理
装置CPUの基本的なパイプライン構成は5段ステージ
とされ、基本的なステージのフェーズは、 IF:(Instruction Fetch) 命
令フェッチ、 ID:(Instruction Decode) 命
令デコード、 EX:(Execute) 実
行、 MA:(Memory Access) メ
モリアクセス、 WB:(Write−Back) ラ
イトバック、 とされる。各パイプステージの実行内容の一例を示す図
8において、AddressBusは図2のアドレスバ
スIAB23−0に対応され、DataBusは同じく
IDB31−0に対応される。図8のIRは図6及び図
5の命令バッファIRH,IRLに対応される。図8に
おいて、A−Bus、B−Bus、C−Bus、D−B
us、は夫々図7におけるAバス、Bバス、Cバス、D
バスである。同様に図8におけるMAB、MRBは図7
におけるMABH,MABL、MRBH,MRBLであ
る。
【0041】〔8〕レジスタ競合状態におけるパイプラ
インシーケンス
【0042】図9を参照しながら前記レジスタ競合状態
におけるパイプラインシーケンスを説明する。まず最初
に同図に示される信号の意味を説明する。動作基準クロ
ック信号としての前記ノンオーバラップ2相クロック信
号φ1とφ2の波形が図9の一番上に示される。1つの
マシンサイクルとはクロック信号φ1の立上りに始ま
り、次のφ1の立上りに終わる1周期である。続いてア
ドレスバスとデータバスの状態を示す。次のIRLat
chは命令バッファ(IR(32bit)またはIRH
とIRL)のラッチ信号を示している。IRLatch
はIR1レジスタの入力ラッチ信号波形を示している。
IR1(16bit)は命令デコード段に存在する命令
を保持する。前記ハードウェア・シーケンス・コントロ
ール・インストラクション・レジスタ(Hardwar
e Sequence Control Instru
ction Register)HIRは、部分デコー
ドされたマイクロコードとシーケンス情報やパイプライ
ンのコントロール情報を保持するレジスタである。図9
においてReg.Content FlagはLOAD
命令と実行ユニットEXECを使用する命令との間での
レジスタの競合をチェックする必要があることを示すフ
ラッグである。サイクル4でこれが検出されてCont
ent Flag(Cフラッグ)がセットされる。同時
にオペランドをロードする必要があることを示すLOA
D Flag(Lフラッグ)がセットされた。また同様
にしてバスオペレーションが必要になることを示すBu
s Cycle Flag(Bフラッグ)も4サイクル
目でセットされる。このフラッグはバスサイクルが現在
行われているかを示すフラッグである。命令フェッチ抑
止フラッグ(IF Inhibit Flag:Iフラ
ッグ)は命令フェッチを取りやめてその代わりにデータ
アクセスを行うことを示すフラッグである。スキップ信
号(Skip Sig.)はそのサイクルに実行ユニッ
トEXECで行われる処理をキャンセルする意味のフラ
ッグである。Executionは実行ユニットEXE
Cで行われる処理を示している。Reg.Writeは
レジスタへの書込み信号である。通常演算時のReg.
Writeにより、C−Busを介して、命令で指定さ
れたデスティネーションレジスタへの書き込みが行われ
る。LOAD命令およびMULT命令実行時は、D−B
usを介して、命令で指定されたデスティネーションレ
ジスタへ書き込みが行われる。その意味でタイミングチ
ャートには信号Reg.WriteをC−Bus用とD
−Bus用に分かち書きしてあり、両信号Reg.Wr
iteが同じレジスタに重なった場合にはC−Bus優
先で書き込みが行われる。即ち、C−Busからの書き
込みのみが実行される。5サイクル目に書かれている点
線の山はSkip Sig.により抑止されたレジスタ
への書き込みを示している。MABはメモリアドレスバ
スの意味であり、データアクセスが行われた際のアドレ
スを出力する。MRB Latchはメモリリードバッ
ファの意味であり、データをラッチする信号である。P
Cはプログラムカウンタの値を示している。
【0043】図9はLOAD命令(LOAD @R1,
R2)とADD命令(ADD R2,R3)とのシーケ
ンスを一例として示したタイミングチャートである。L
OAD命令がデータを格納するレジスタR2とADD命
令が使用するレジスタR2は共通であり、通常のパイプ
ラインフローで命令実行が行われるとレジスタR2の値
が決定される前に当該レジスタR2の値が演算に使用さ
れるという事態を生じる。この例では斯るレジスタR2
の使用が競合したときに、パイプラインの制御がどのよ
うなタイミングで行われるかを7サイクルにわたって示
している。最下段にパイプラインの実行状況を示す。L
OAD命令のデスティネーションとなったレジスタR2
とADD命令のソースレジスタR2が衝突するので、網
掛けで表示した5サイクル目にストール(遅延)が生じ
ている。この遅延を生じさせるには、先ず、レジスタ競
合状態が生ずるか否かの検出と、レジスタ競合状態を回
避するには実行サイクル(EX)を何サイクル遅延させ
ればよいかの認識が必要になる。前者に関しては、前記
レジスタWBR1が出力する先の命令に含まれるレジス
タ指定情報(この例に従えばLOAD命令に含まれるレ
ジスタR2を指定する情報)と、後の命令に含まれるレ
ジスタ指定情報(この例に従えばADD命令に含まれる
レジスタR2を指定する情報)とを比較する前記レジス
タコンテントチェックブロックRCCBが出力する信号
S1がアサートされることによって検出される。後者に
関しては、オペレーションコードのデコード結果から認
識することができる。図の例ではLOAD命令の実行サ
イクル(EX)数は1であるから、第5サイクル目だけ
に遅延が生じている。
【0044】図10にはレジスタ競合状態におけるパイ
プラインシーケンスの別の例が示される。図10は乗算
命令としてのMULT命令(MUL R1,R2)とA
DD命令(ADD R4,R3)とSUB命令(SUB
R3,R2)とのシーケンスを例として示したタイミ
ングチャートである。MUL命令がデータを格納するレ
ジスタR2とSUB命令が使用するレジスタR2が共通
である。レジスタ競合状態をパイプラインシーケンスに
反映しなければ、命令実行が行われるとレジスタR2の
値が決定される前に別の演算に使用されるという事態を
生じる。本例ではこのようにレジスタの使用が競合した
ときに、パイプラインの制御がどのようなタイミングで
行われるかを7サイクルにわたって示している。本図の
表記形式は前記図9の場合と同様であり、詳細な説明は
省略するが、乗算が4サイクルで実行できる様子を示
す。MULT命令ではEX,ML,ML,MLの4ステ
ージで命令実行を行う。乗算器は16b*16bの結果
を32bに格納する乗算を4サイクルで実行することが
できる。これは16b*4bの部分積と累積和を求める
ことを各サイクルに行うことで実行できる。この例の場
合には、MULT命令に対してSUB命令は2サイクル
遅れてレジスタR1にフェッチされ、MULT命令はE
X,ML,ML,MLの4サイクルで乗算演算を実行す
るから、SUB命令の実行サイクル(EX)が2サイク
ル分遅延されている。
【0045】
〔9〕メモリアクセス競合時のパイプラインシーケンス
【0046】図11にはメモリからのデータフェッチと
命令フェッチが競合した場合の一例パイプ制御シーケン
スが示される。この場合にはデータフェッチが優先さ
れ、これに競合する命令フェッチを含む命令実行スケジ
ュールは全体的にずらされる。この制御を行うために、
ロード・フラグ(LOAD Flag)とバス・サイク
ル・フラグ(Bus Cycle Flag)とが競合
する状態においてインストラクション・フェッチ・ウェ
イト・フラグ(IF Wait Flag)がセットさ
れ、命令フェッチサイクルの開始が遅延される。
【0047】 〔10〕複数サイクル命令実行のシーケンス
【0048】図12には複数サイクル命令を実行すると
きの一例タイミングチャートが示される。ここではAN
D(論理積)命令の一種である命令”AND.B #i
mm,@R1”を一例として説明する。この命令はレジ
スタR1相対で指定されるメモリの8ビットデータと8
ビットイミディエートデータとの論理積を演算する命令
である。このAND.B命令はマクロ命令1、マイクロ
命令1、マイクロ命令2によって実行される複数サイク
ル命令とされる。前記マクロ命令1は、レジスタR1の
内容により指定されるメモリの領域からバイトオペラン
ドをフェッチする命令である。前記マイクロ命令1は、
前記バイトオペランドにイミディエートデータをAND
する命令である。前記マイクロ命令2は、レジスタR1
の内容により指定されるメモリの領域にバイトオペラン
ドをライトする命令である。
【0049】前記AND.B命令の実行内容をC言語で
記述すると、 ANDM(int i)/*AND.B#imm:8,@R1*/ { long temp; tenp=(long)Read_Byte(R〔1〕); tenp&=(long)i; Write_Byte(R〔1〕,tenp); PC+=2; } となる。この記載を参照すると、マイクロ命令1のID
(命令デコード)段とEX(演算実行)段との間、およ
びマイクロ命令2のμ−IF(マイクロ命令フェッチ)
段とID段との間に空きサイクルがある。これは、マク
ロ命令1のMA(メモリアクセス)段でフェッチしたオ
ペランドをマイクロ命令1のEX(演算実行段)段で使
用しなくてはならないからである。
【0050】〔11〕CPUの命令割り付け
【0051】中央処理装置CPUに割り付け可能とされ
る命令は、図13及び図14に示されるデータ転送命
令、図15に示される論理演算命令、図16及び図17
に示される算術演算命令、図18に示されるシフト命
令、図19に示される分岐命令、図20及び図21に示
されるシステム制御命令とされる。図22は図13乃至
図21の記載形式を説明するものである。これに従え
ば、図13乃至図21の記載において、命令の項目はニ
モニックで表示される。このニモニック表示中における
アドレシングモードの一覧は図23に示される。各種命
令コードから明かなように、16ビット固定長命令フォ
ーマットで表現できる65536通りの組み合わせだけ
で汎用レジスタ方式の整数演算、分岐方式、制御命令等
が全て割付けられる。デコードもビットの割り付けを工
夫して類似の機能の命令をグルーピングしたことによっ
て、比較的少ない論理表現で実現できる。オペレーショ
ンコードが”1111”で始まる命令列は全てリザーブ
されており、これを使うことにより、IEEE浮動小数
点規格に準拠した単精度、倍精度演算を割り付けること
もできる。
【0052】 〔12〕ブランチ命令のディスプレースメント長
【0053】図24、図25、図26、及び図27に
は、サンプルとして抽出した各種プログラムにおけるブ
ランチ命令及びジャンプ命令のディスプレースメント長
とそのディスプレースメント長を有する命令の出現頻度
との関係が示される。図24及び図25は条件分岐命令
(ブランチ命令)及び無条件分岐命令(ブランチオール
ウエイズ命令)に関し、図26はサブルーチン呼出命令
に関し、図27はジャンプ命令若しくはジャンプサブル
ーチン命令に関する。ここでブランチとは計算機プログ
ラムの実行において多数の選択し得る命令集合のうちの
一つを選ぶことである。ジャンプとは計算機プログラム
の実行における現に実行されている命令の暗示的又は指
定されている実行順序からの脱出を意味する。ディスプ
レースメントは飛び先番地の指定に利用される。従って
ディスプレースメント長のビット数が多いほど遠くのア
ドレスに飛ぶことができる。
【0054】図24乃至図26に示される分岐命令に対
するディスプレースメントの頻度分布は、株式会社日立
製作所のマイクロコンピュータH8/500の各種プロ
グラムを解析して得られたデータである。使用している
分岐命令の各種類についての、ディスプレースメント値
の分布を表している。横軸は使用されたディスプレース
メント値のlog2をとった値であり、0を中心として
右方向にはディスプレースメントの値が正の場合を正の
整数(1,3,5,7,・・・)でlog2{disp
lacement}を表し、左方向には、負の値を持つ
ディスプレースメントについて負の数で−log2{−
displacement}を表す。縦軸は%を単位と
してその出現頻度を示す。データは9個の異なるプログ
ラムについて採集した。
【0055】図24及び図25から明かなようにブラン
チ命令及びブランチオールウエイズ命令において、出現
頻度の高いものは比較的中心より分布しており、8ビッ
トのディスプレースメントがあれば分布のほとんどをカ
バーできる。また、図26のサブルーチン呼出命令で
は、かなり遠くまでとんでいるが、12〜13ビットの
ディスプレースメントフィールドがあれば全てカバーで
きることがわかる。さらに図27に示されるジャンプ命
令若しくはジャンプサブルーチン命令の場合、横軸の値
はジャンプ命令が存在した番地とジャンプ飛び先の番地
の差をディスプレースメントとした。これもとび先が遠
いことが判る。
【0056】本実施例のマイクロコンピュータMCUに
おいては、条件分岐命令のディスプレースメントを8ビ
ット、サブルーチン分岐命令及び無条件分岐命令のディ
スプレースメントを12ビットに固定して、それら命令
を16ビット固定長命令フォーマットに収めるようにし
てある。例えば図19に示される各種分岐命令におい
て、BC,BT,BFの夫々が条件分岐命令とされ、同
図におけるBSRがサブルーチン分岐命令、そしてBR
Aが無条件分岐命令とされる。夫々の命令の詳細な内容
については後述する命令の説明の項目を参照されたい。
【0057】プログラムを比較的小さなサブルーチン
(関数)の集合として作成するモジュラープログラミン
グ手法において、条件分岐命令は関数の中にしか飛ばな
い。多くの関数は数百バイト程度の大きさしかないため
8ビットのディスプレースメントでほとんどカバーする
ことができる。反面サブルーチン分岐は関数自身の外に
飛ぶので近い場所には飛ばない傾向があり、条件分岐命
令よりも多くのビット数のディスプレースメントを必要
とする。無条件分岐は、プログラムの高速化のために関
数の最後で別の関数を呼ぶときに使用される場合もあ
り、プログラム作成時にサブルーチン分岐命令と同一の
扱い方をすることが得策と考えられるため、ディスプレ
ースメントのビット数はサブルーチン分岐と同一にして
ある。このように分岐命令の種類に応じて適切なディス
プレースメント長を固定的に割り当てることにより、実
質的な弊害なく、16ビット固定長命令フォーマットの
実現に寄与する。
【0058】〔13〕イミディエートデータの処理
【0059】16ビット固定長命令フォーマットを採用
したとき、データ語長が32ビットであることに鑑みれ
ば全てのイミディエート値(即値)を16ビット以下に
制限することは現実的ではない。本実施例では16ビッ
ト以上のイミディエート値の指定を一つの命令フォーマ
ット中で行えるようにするために、プログラムカウンタ
PCなどのレジスタの値と相対アドレスを使用する手法
を採用する。
【0060】この即値処理を行う命令としては例えば図
13に示されるロード命令としてのMOV.W@(di
sp,PC)RnやMOV.L@(disp,PC)R
nなどがある。これらの命令は、汎用レジスタRnにイ
ミディエートデータを格納するための命令である。デー
タは32ビットに符号拡張される。データがワード/ロ
ングワードのときは、プログラムカウンタPCにディス
プレースメントを加えたアドレスに格納されたテーブル
内のデータを参照する。データがワードのとき、ディス
プレースメントは1ビット左シフトされ9ビットとさ
れ、テーブルとの相対距離は−256から+254バイ
トになる。プログラムカウンタPCは本命令の2命令後
の先頭アドレスである。従って、ワード・データは2バ
イト境界に配置する必要が有る。データがロングワード
のとき、ディスプレースメントは2ビット左シフトされ
10ビットとされ、オペランドとの相対距離は−512
から+508バイトになる。プログラムカウンタPCは
本命令の2命令後の先頭アドレスであるが、プログラム
カウンタPCの下位2ビットはB,00に補正される。
従って、ロングワード・データは4バイト境界に配置す
る必要がある。
【0061】〔14〕暗黙のレジスタ指定
【0062】暗黙のレジスタ指定とは、命令中にレジス
タ指定フィールドがないのにも拘らず、オペランドとし
て固定された汎用レジスタを選ぶことを言う。ここで言
う汎用レジスタは、例えばメモリアドレスを決定するた
めに利用され、或いはメモリからフェッチしたデータの
格納に利用される。この暗黙のレジスタ指定を行う命令
としては、例えば図14に従えば、MOV @(dis
p,R1),R0やMOV R0,@(disp,R
1)を挙げることができる。同図の当該命令に対応する
コードからも明らかなように、レジスタ指定フィールド
はなく、オペレーションコードと8ビットのディスプレ
ースメントddddddddを含むだけである。このデ
ィスプレースメントは暗黙に指定されているレジスタR
1の値と共にメモリアドレスを決定するために利用され
る。この暗黙のレジスタ指定によって、レジスタの値と
ディスプレースメントとを必要とする命令において、デ
ィスプレースメントとして必要とされるビット数を減ら
さなくても、命令語長を16ビットに収めることが可能
になる。
【0063】〔15〕機能複合命令
【0064】機能複合命令として例えば図15に記載の
AND.B #imm,@R1のようなビット操作命令
を挙げることができる。この命令は前記同様の暗黙に指
定されるレジスタR1相対で指定されるメモリの8ビッ
トデータと8ビットのイミディエートデータとの論理積
(AND処理)を行う命令であり、メモリのリード、A
ND処理、AND処理結果の当該メモリへの書き込み戻
しを行う、3命令を複合した命令である。この種の処理
は組み込み機器制御用途においては極めて出現頻度が高
く、このような複合機能的な命令を16ビット固定長命
令フォーマットとして採用することはコード効率向上に
寄与する。
【0065】〔16〕指定条件に対する真偽設定命令
【0066】指定条件に対して演算結果の真偽設定を行
う命令として、例えば図16に示される8種類のCMP
命令を挙げることができる。これら命令はオペランドの
比較を行う命令であり、比較結果を前記ステータスレジ
スタSRのT(True)ビットに設定する。例えば、
COMP/EQ Rm,RnFFで示される命令は、レ
ジスタRmとRnの値が等しいか否かを比較し、等しい
ときはTビットに1セットし、不一致の時は0にクリア
する。このようにステータスレジスタにTビットを設
け、比較結果に対する真偽をTビットに設定する操作を
16ビット固定長命令フォーマットの1命令で行うこと
により、その結果の真偽に基づく処理を行うような次命
令例えば前記条件分岐命令(BT命令)においては直接
Tビットを参照すればよく、当該BT命令それ自体に前
の命令による演算結果に対して必要な条件(Condi
tion)の記述は不要となり、限られた固定長命令フ
ォーマット中においてその分だけBT命令に必要なディ
スプレースメントの領域を大きく採ることが可能にな
り、結局において、16ビット固定長命令フォーマット
の実現に寄与する。
【0067】〔17〕命令一覧
【0068】ここまでの説明において、16ビット固定
長フォーマットの命令のうち特徴的な命令を代表的に説
明してきたが、更に、16ビット固定長命令フォーマッ
トの全貌を明らかにするため、本実施例のマイクロコン
ピュータの全ての命令をアルファベット順に逐次説明し
ていく。夫々の命令の説明は、命令の名称、アセンブラ
の入力書式で表示された書式(imm、dispは数
値、またはシンボル)、命令の説明、命令使用上の注意
事項、C言語で表示された動作説明、アセンブラニモニ
ックで例示された動作例(命令の実行前後の状態を表
示)、及びコードを含む。ここで夫々の命令を説明する
前に、プログラムを行う場合に着目すべきプログラマー
ズモデルとしてのレジスタ構成を図28を参照しながら
説明する。プログラマーズモデルとされるレジスタは、
前記汎用レジスタR0(R0H,R0L)乃至R15
(R15H,R15L)の他に、ステータスレジスタS
R、プロシージャ・レジスタPR(PRH,PRL)、
グローバル・ベース・レジスタGBR(GBRH,GB
RL)、プログラムカウンタPC(PCH,PCL)、
ベクタ・ベース・レジスタVBR(VBRH,VBR
L)、ブレーク・レジスタBR(BRH,BRL)など
のコントロールレジスタとされる。図28の例ではレジ
スタR0はアキュムレータ、レジスタR1はインデック
ス・レジスタ、レジスタR15はスタックポインタとさ
れる。図28のステータスレジスタSRにおいて、M/
QビットはDIV命令で参照され、Iビットは割り込み
マスクビットとされ、−は予約ビットとされ、Dビット
はPASS命令で参照され、Cビットはキャリ/ボロー
/オーバーフロー/アンダーフロー/シフトアウトを反
映するビットとされ、Tビットは前記したように真
(1),偽(0)を表すビットとされる。
【0069】Cで動作内容を示した動作説明は、特に制
限されないが、以下の資源の使用を仮定している。 unsigned char Read_Byte(unsigned long Addr); unsigned short Read_Word(unsigned long Addr); unsigned long Read_Long(unsigned long Addr); アドレスAddrのそれぞれのサイズの内容を返す。 (2n)番地以外からのワード、(4n)番地以外から
のロング ワードのリードはアドレスエラーとして検出される unsigned char Write_Byte(unsigned long Addr, unsi
gned long Data); unsigned short Write_Word(unsigned long Addr, unsi
gned long Data); unsigned long Write_Long(unsigned long Addr, unsi
gned long Data); アドレスAddrにデータDataをそれぞれのサイズで書き込
む。(2n)番地以外からのワード、(4n)番地以外
へのロングワードのライトはアドレスエラーとして検出
される。 Delay_Slot(unsigned long Addr);アドレス(Addr-4)
のスロット命令に実行を移す。これはDelay_Slot(4)の
とき、4番地ではなく0番地の命令に実行が移ることを
意味する。また、この関数から以下の命令に実行が移さ
れようとすると、その直前にスロット不当命令として検
出される。BC,BF,BT,BRA,BSR,JM
P,JSR,RTSBRK,PASS,RTB,RT
E,TRAPunsigned long R[16]; unsigned long CR[3]; unsigned long PC; unsigned long BR; unsigned long VBR; 各レジスタ本体である #define SR (CR[0]) #define PR (CR[1]) #define GBR (CR[2]) レジスタの固有名とCRn形式表示の対応 struct SR0 { unsigned long dummy0:22; unsigned long M0:1; unsigned long Q0:1; unsigned long I0:4; unsigned long dummy2:1; unsigned long D0:1; unsigned long C0:1; unsigned long T0:1; }; SRの構造の定義 #define M ((*(struct SR0 *)(&CR[0])).M0) #define Q ((*(struct SR0 *)(&CR[0])).Q0) #define D ((*(struct SR0 *)(&CR[0])).D0) #define C ((*(struct SR0 *)(&CR[0])).C0) #define T ((*(struct SR0 *)(&CR[0])).T0) SR内ビットの定義 #define BRKVEC 0x0000001C #define PASSVEC 0x00000014 ベクタアドレスの定義 #define SHAL() SHLL() 異名同一命令の定義 Error( char *er ); エラー表示関数 これ以外に、PCは現在実行中の命令の4バイト(2命
令)先を示しているものと仮定する。これは、(PC=
4;)は4番地ではなく0番地の命令に実行が移ること
を意味する。
【0070】アセンブラニモニックの形式で記載される
使用例において、コードはバイナリコードを表示し、 ニモニック中 rは コードの rrrr Rは RRRR immは iiiiiiii dispは dddd または dddddddd または dddddddddddd に展開される。MOV命令コード中のSSはオペランド
サイズによって 01=バイト 10=ワード 11=ロングワード に展開される。
【0071】 ADD(加算)命令 書式 ADD Rm,Rn ADD #imm,Rn 説明 汎用レジスタRnの内容とRmとを加算し、結果をRnに格納する。 汎用レジスタRnと8ビット・イミディエート・データとの加算も可 能である。8ビット・イミディエート・データは32ビットに符号拡 張されるので減算と兼用する。 動作 ADD(long m, long n) /* ADD Rm,Rn */ { R[n]+=R[m]; PC+=2; } ADDI(long i, long n) /* ADD #imm,Rn */ { if ((i&0x80)==0) R[n]+=(0x000000FF & (long)i); else R[n]+=(0xFFFFFF00 | (long)i); PC+=2; } 使用例 ADD R0,R1 ;実行前 R0=H'7FFFFFFF,R1=H'00000001 ;実行後 R1=H'80000000 ADD #H'01,R2 ;実行前 R2=H'00000000 ;実行後 R2=H'00000001 ADD #H'FE,R3 ;実行前 R3=H'00000001 ;実行後 R3=H'FFFFFFFF コード MSB LSB ADD r,R 0010RRRRrrrr0000 ADD #imm,R 0101RRRRiiiiiiii
【0072】ADDC(キャリ付き加算)命令 書式 ADDC Rm,Rn 説明 汎用レジスタRnの内容とRmとCビットを加
算し、結果をRnに格納する。演算の結果によりキャリ
がCビットに反映される。 動作 ADDC(long m, long n) /* ADDC Rm,Rn */ { unsigned long temp; temp=R[n]; R[n]+=(R[m]+C); if (temp>R[n]) C=1; else C=0; PC+=2; } 使用例 ADDC R0,R1 ;実行前 C=1,R0=H'00000001,R1=H'00000001 ;実行後 C=0,R1=H'00000003 ADDC R2,R3 ;実行前 C=0,R2=H'00000002,R3=H'FFFFFFFF ;実行後 C=1,R3=H'00000001 ADDC R4,R5 ;実行前 C=1,R4=H'00000001,R5=H'FFFFFFFE ;実行後 C=1,R5=H'00000001 コード MSB LSB ADDC r,R 0010RRRRrrrr0010
【0073】ADDS(飽和機能付き加算)命令 書式 ADDS Rm,Rn 説明 汎用レジスタRnの内容とRmとを加算し、結
果をRnに格納する。オーバーフローが発生しても、結
果はH'7FFFFFFF〜H'80000000の範囲
に制限される。このとき、Cビットがセットされる。 動作 ADDS(long m, long n) /* ADDS Rm,Rn */ { long dest,src,ans; if ((long)R[n]>=0) dest=0; else dest=1; if ((long)R[m]>=0) src=0; else src=1; src+=dest; R[n]+=R[m]; if ((long)R[n]>=0) ans=0; else ans=1; ans+=dest; if (ans==1) { if (src==0) { R[n]=0x7FFFFFFF; C=1; } else C=0; if (src==2) { R[n]=0x80000000; C=1; } else C=0; } else C=0; PC+=2; } 使用例 ADDS R0,R1 ;実行前 R0=H'00000001,R1=H'7FFFFFFE,C=0 ;実行後 R1=H'7FFFFFFF, C=0 ADDS R0,R1 ;実行前 R0=H'00000002,R1=H'7FFFFFFE,C=0 ;実行後 R1=H'7FFFFFFF, C=1 コード MSB LSB ADDS r,R 0010RRRRrrrr0011
【0074】ADDV(オーバーフロー付き加算)命令 書式 ADDV Rm,Rn 説明 汎用レジスタRnの内容とRmとを加算し、結
果をRnに格納する。オーバーフローが発生した場合、
Cビットがセットされる。 動作 ADDV(long m, long n) /* ADDV Rm,Rn */ { long dest,src,ans; if ((long)R[n]>=0) dest=0; else dest=1; if ((long)R[m]>=0) src=0; else src=1; src+=dest; R[n]+=R[m]; if ((long)R[n]>=0) ans=0; else ans=1; ans+=dest; if (src==0 || src==2) { if (ans==1) C=1; else C=0; } else C=0; PC+=2; } 使用例 ADDV R0,R1 ;実行前 R0=H'00000001,R1=H'7FFFFFFE,C=0 ;実行後 R1=H'7FFFFFFF, C=0 ADDV R0,R1 ;実行前 R0=H'00000002,R1=H'7FFFFFFE,C=0 ;実行後 R1=H'80000000, C=1 コード MSB LSB ADDV r,R 0010RRRRrrrr0001
【0075】 説明 汎用レジスタRnの内容とRmの論理積をと
り、結果をRnに格納する。特殊形として汎用レジスタ
R0とゼロ拡張した8ビット・イミディエイト・データ
との論理積、もしくはR1相対で8ビット・メモリと8
ビット・イミディエート・データとの論理積が可能であ
る。 注意 AND #imm,R0では演算の結果、R0
の上位24ビットは常にクリアされる。 使用例 AND R0,R1 ;実行前 R0=H'AAAAAAAA,R1=H'55555555 ;実行後 R1=H'00000000 AND #H'0F,R0 ;実行前 R0=H'FFFFFFFF ;実行後 R0=H'0000000F AND.B #H'80,@R1 ;実行前 @R1=H'A5 ;実行後 @R1=H'80コード
MSB LSB AND r,R 0001RRRRrrrr1001 AND #imm,R0 10001001iiiiiiii AND.B #imm,@R1 10000001iiiiiiii
【0076】BC/BF/BT(条件付分岐)命令 書式 BC disp BF disp BT disp 説明 T/Cビットを参照する条件付き分岐命令であ
る。T=1のとき、BTは分岐するが、BFは次の命令
を実行する。逆にT=0のとき、BFは分岐するが、B
Tは次の命令を実行する。BCはC=1のとき分岐する
が、C=0のときは次の命令を実行する。分岐先はPC
にディスプレースメントを加えたアドレスである。PC
は、本命令の2命令後の先頭アドレスである。ディスプ
レースメントは1ビット左シフトされ9ビットであるの
で、分岐先との相対距離は−256から+254バイト
になる。分岐先に届かないときはBRA命令、もしくは
JMP命令との組み合わせで対応する。 動作 BC(long d) /* BC disp */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); if (C==1) PC=PC+(disp<<1)+4; else PC+=2; } BF(long d) /* BF disp */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); if (T==0) PC=PC+(disp<<1)+4; else PC+=2; } BT(long d) /* BT disp */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); if (T==1) PC=PC+(disp<<1)+4; else PC+=2; } 使用例 CLRT ;常にT=0 BT TRGET_T ;T=0のため分岐しない BF TRGET_F ;T=0のためTRGET_Fへ分岐する。 NOP NOP ;BF命令で分岐先アト゛レス計算に用いるPCの位置 TRGET_F: ;BF命令の分岐先 コード MSB LSB BC disp 11001100dddddddd BF disp 11001010dddddddd BT disp 11001000dddddddd
【0077】BRA(無条件分岐)命令 書式 BRA disp 説明 無条件の遅延分岐命令である。分岐先はPCに
ディスプレースメントを加えたアドレスである。PC
は、本命令の2命令後の先頭アドレスである。ディスプ
レースメントは1ビット左シフトされ13ビットである
ので、分岐先との相対距離は−4096から+4094
バイトになる。分岐先に届かないときはJMP命令への
変更が必要である。このとき、分岐先アドレスをMOV
命令でレジスタに転送しておく必要が有る。 注意 遅延分岐命令であるので、本命令の直後の命令
が分岐に先立ち実行される。本命令と直後の命令との間
に割り込みは受け付けられない。直後の命令が分岐命令
のとき、不当命令として認識される。 動作 BRA(long d) /* BRA disp */ { unsigned long temp; long disp; if ((d&0x800)==0) disp=(0x00000FFF & d); else disp=(0xFFFFF000 | d); temp=PC; PC=PC+(disp<<1)+4; Delay_Slot(temp+2); } 使用例 BRA TRGET ;TRGETへ分岐する。 ADD R0,R1 ;分岐に先立ち実行される。 NOP ;BRA命令で分岐先アト゛レス計算に用いるPCの位置 TRGET: ;BRA命令の分岐先 コード MSB LSB BRA disp 1010dddddddddddd
【0078】BRK(ソフトウェアブレイク)命令 書式 BRK 説明 ブレーク例外処理を開始する。すなわち、外部
デバイスにアクノリッジ信号を返した後、PCをBRに
退避し、所定のベクタに従いブレーク割り込みルーチン
へ分岐する。PCは本命令の先頭アドレスである。ベク
タアドレスの計算に、VBRの内容は無関係である。R
TBと組み合わせて、ブレークルーチン・コールに使用
する。 注意 本命令は割り込みを受け付けない。BRはブレ
イク端子によるハードウェアブレイクと共用される。従
って、ブレイク処理中のブレイク再要求は避けるべきで
ある。PCはBRに保護されるが、SRは保護されな
い。必要であればSTC命令でレジスタ、あるいはメモ
リに退避しなければならない。 使用例 CMP/EQ R0,R1 ; BT _TRUE ;R0≠R1のときブレークする。 BRK ;ブレークルーチンからの戻り先である ・・・・・・・ BREAK: ;ブレークルーチンの入り口 MOV R0,R0 ; RTB ;上記BRK命令に戻る。 コード MSB LSB BRK 0000000000000000
【0079】BSR(プロシージャコール)命令 書式 BSR disp 説明 指定されたアドレスのプロシージャに分岐す
る。PCの内容をPRに退避し、PCにディスプレース
メントを加えたアドレスへ分岐する。PCは、本命令の
2命令後の先頭アドレスである。ディスプレースメント
は1ビット左シフトされ13ビットであるので、分岐先
との相対距離は−4096から+4094バイトにな
る。分岐先に届かない場合にはJSR命令への変更が必
要である。このとき、分岐先アドレスをMOV命令でレ
ジスタに転送しておく必要がある。RTSと組み合わせ
て、プロシージャ・コールに使用する。 注意 遅延分岐命令であるので、本命令の直後の命令
が分岐に先立ち実行される。本命令と直後の命令との間
に割り込みは受け付けられない。直後の命令が分岐命令
のとき、不当命令として認識される。 動作 BSR(long d) /* BSR disp */ { long disp; if ((d&0x800)==0) disp=(0x00000FFF & d); else disp=(0xFFFFF000 | d); PR=PC; PC=PC+(disp<<1)+4; Delay_Slot(PR+2); } 使用例 BSR TRGET ;TRGETへ分岐する。 MOV R3,R4 ;分岐に先立ち実行される。 ADD R0,R1 ;BSR命令で分岐先アト゛レス計算に用いるPCの位置 ・・・・・・・ プロシージャからの戻り先である ・・・・・・・ TRGET: ;プロシージャの入り口 MOV R2,R3 ; RTS ;上記ADD命令に戻る。 MOV #1,R0 ;分岐に先立ち実行される。 コード MSB LSB BSR disp 1110dddddddddddd
【0080】CLRC(Cビットクリア)命令 書式 CLRC 説明 SRのCビットをクリアする。 動作 CLRC() /* CLRC */ { C=0; PC+=2; } 使用例 CLRC ;実行前 C=1 ;実行後 C=0 コード MSB LSB CLRC 0000000000101001
【0081】CLRT(Tビットクリア)命令 書式 CLRT 説明 SRのTビットをクリアする。 動作 CLRT() /* CLRT */ { T=0; PC+=2; } 使用例 CLRT ;実行前 T=1 ;実行後 T=0 コード MSB LSB CLRT 0000000000101000
【0082】 CMP/cond(オペランド比較)命令 書式 CMP/cond Rm,Rn 説明 汎用レジスタRnとRmとを比較し、その結
果、指定された条件(cond)が成立しているとSR
のTビットをセットする。条件が不成立のときはTビッ
トはクリアされる。Rnの内容は変化しない。8条件が
指定できる。PZとPLの2条件についてはRnと0と
の比較になる。 ニーモニック 説明 CMP/EQ Rm,Rn Rn=RmのときT=1 CMP/GE Rm,Rn 有符号値としてRn≧RmのときT
=1 CMP/GT Rm,Rn 有符号値としてRn>RmのときT
=1 CMP/HI Rm,Rn 無符号値としてRn>RmのときT
=1 CMP/HS Rm,Rn 無符号値としてRn≧RmのときT
=1 CMP/PL Rn Rn>0のときT=1 CMP/PZ Rn Rn≧0のときT=1 CMP/STR Rm,Rn いずれかのバイトが等しいときT=
1 動作 CMPEQ(long m, long n) /* CMP_EQ Rm,Rn */ { if (R[n]==R[m]) T=1; else T=0; PC+=2; } CMPGE(long m, long n) /* CMP_GE Rm,Rn */ { if ((long)R[n]>=(long)R[m]) T=1; else T=0; PC+=2; } CMPGT(long m, long n) /* CMP_GT Rm,Rn */ { if ((long)R[n]>(long)R[m]) T=1; else T=0; PC+=2; } CMPHI(long m, long n) /* CMP_HI Rm,Rn */ { if ((unsigned long)R[n]>(unsigned long)R[m])T=1; else T=0; PC+=2; } CMPHS(long m, long n) /* CMP_HS Rm,Rn */ { if((unsigned long)R[n]>=(unsigned long)R[m])T=1; else T=0; PC+=2; } CMPPL(long n) /* CMP_PL Rn */ { if ((long)R[n]>0) T=1; else T=0; PC+=2; } CMPPZ(long n) /* CMP_PZ Rn */ { if ((long)R[n]>=0) T=1; else T=0; PC+=2; } CMPSTR(long m, long n) /* CMP_STR Rm,Rn */ { unsigned long temp; long HH,HL,LH,LL; temp=R[n]∧R[m]; HH=(temp&0xFF000000)>>12; HL=(temp&0x00FF0000)>>8; LH=(temp&0x0000FF00)>>4; LL=temp&0x000000FF; HH=HH&&HL&&LH&&LL; if (HH==0) T=1; else T=0; PC+=2; } 使用例 CMP/GE R0,R1 ;R0=H'7FFFFFFF,R1=H'80000000 BT TRGET_T ;T=0なので分岐しない CMP/HS R0,R1 ;R0=H'7FFFFFFF,R1=H'80000000 BT TRGET_T ;T=1なので分岐する CMP/STR R2,R3 ;R2="ABCD",R3="XYCZ" BT TRGET_T ;T=1なので分岐する コード MSB LSB CMP/EQ r,R 0001RRRRrrrr0000 CMP/GE r,R 0001RRRRrrrr0011 CMP/GT r,R 0001RRRRrrrr0111 CMP/HI r,R 0001RRRRrrrr0110 CMP/HS r,R 0001RRRRrrrr0010 CMP/PL R 0100RRRR00011101 CMP/PZ R 0100RRRR00011001 CMP/STR r,R 0010RRRRrrrr1100
【0083】DIV0S/DIV0U/DIV1(ステ
ップ除算)命令 書式 DIV1 Rm,Rn DIV0S Rm,Rn DIV0U 説明 汎用レジスタRnの内容32ビットをRmの内
容で1ステップ除算し、結果の1ビットをSRのCビッ
トに格納する。DIV0Sは符号付き除算用の初期化命
令で被除数(Rn)のMSBをQビットに、除数(R
m)のMSBをMビットに、MビットとQビットのEO
RをCビットに格納する。DIV0Uは符号無し除算用
の初期化命令で、M/Q/Cビットを0にクリアする。
DIV1を(必要であればROTCLと組みで)除数の
ビット数分繰り返すことによって、商を得る。この繰り
返し中は、指定したレジスタとSRのM/Q/Cビット
に中間結果が格納される。これらを不必要にソフトウェ
アで書き替えると演算結果は保証されない。除算のシー
ケンスは下記使用例を参考にする事ができる。ゼロ除算
とオーバーフローの検出、および剰余の演算は用意され
ていない。 動作 DIV0U() /* DIV0U */ { M=Q=C=0; PC+=2; } DIV0S(long m, long n) /* DIV0S Rm,Rn */ { if ((R[n] & 0x80000000)==0) Q=0; else Q=1; if ((R[m] & 0x80000000)==0) M=0; else M=1; C=!(M==Q); PC+=2; } DIV1(long m, long n) /* DIV1 Rm,Rn */ { unsigned long tmp0; unsigned char old_q, tmp1; old_q=Q; Q=(unsigned char)((0x80000000 & R[n])!=0); R[n]<<=1; R[n]|=(unsigned long)C; switch(old_q){ case 0: switch(M){ case 0: tmp0=R[n]; R[n]-=R[m]; tmp1=(R[n]>tmp0); switch(Q){ case 0: Q=tmp1; break; case 1: Q=(unsigned char)(tmp1==0); break; } break; case 1: tmp0=R[n]; R[n]+=R[m]; tmp1=(R[n]<tmp0); switch(Q){ case 0: Q=(unsigned char)(tmp1==0); break; case 1: Q=tmp1; break; } break; } break; case 1: switch(M){ case 0: tmp0=R[n]; R[n]+=R[m]; tmp1=(R[n]<tmp0); switch(Q){ case 0: Q=tmp1; break; case 1: Q=(unsigned char)(tmp1==0); break; } break; case 1: tmp0=R[n]; R[n]-=R[m]; tmp1=(R[n]>tmp0); switch(Q){ case 0: Q=(unsigned char)(tmp1==0); break; case 1: Q=tmp1; break; } break; } break; } C=(Q==M); PC+=2; } 使用例1 R1(32bit)÷R0(16bit)=R1(16bit):
符号無し SL16 R0 ;除数を上位16bit、下位16bitを0に設
定 TEST R0,R0 ;ゼロ除算チェック BT ZERO_DIV ; CMP/HS R0,R1 ;オーバーフローチェック BT OVER_DIV ; DIV0U ;フラグの初期化 .arepeat 16 ; DIV1 R0,R1 ;16回繰り返し .aendr ; ROTCL R1 ; EXTU.W R1,R1 ;R1=商 使用例2 R1:R2(64bit)÷R0(32bit)=R2(32b
it):符号無し TEST R0,R0 ;ゼロ除算チェック BT ZERO_DIV ; CMP/HS R0,R1 ;オーバーフローチェック BT OVER_DIV ; DIV0U ;フラグの初期化 .arepeat 32 ; ROTCL R2 ; 32回繰り返し DIV1 R0,R1 ; .aendr ; ROTCL R2 ;R2=商 使用例3 R1(16bit)÷R0(16bit)=R1(16bit):
符号付き SL16 R0 ;除数を上位16bit、下位16bitを0に設
定 EXTS.W R1,R1 ;被除数は符号拡張して32bit EOR R2,R2 ;R2=0 MOV R1,R3 ; ROTCL R3 ; SUBC R2,R1 ;被除数が負のとき、−1する DIV0S R0,R1 ;フラグの初期化 .arepeat 16 ; DIV1 R0,R1 ;16回繰り返し .aendr ; EXTS.W R1,R1 ;R1=商(1の補数表現) ROTCL R1 ; ADDC R2,R1 ;商のMSBが1のとき、+1して2の補
数表現に変換 EXTS.W R1,R1 ;R1=商(2の補数表現) 使用例4 R2(32bit)÷R0(32bit)=R2(32bit):
符号付き EOR R3,R3 ; MOV R2,R4 ; ROTCL R4 ; SUBC R1,R1 ;被除数は符号拡張して64bit(R
1:R2) SUBC R3,R2 ;被除数が負のとき、−1する DIV0S R0,R1 ;フラグの初期化 .arepeat 32 ; ROTCL R2 ; 32回繰り返し DIV1 R0,R1 ; .aendr ; ROTCL R2 ;R2=商(1の補数表現) ADDC R3,R2 ;商のMSBが1のとき、+1して2の補
数表現に変換 ;R2=商(2の補数表現) コード MSB LSB DIV1 r,R 0001RRRRrrrr1100 DIV0S r,R 0001RRRRrrrr1101 DIV0U 0000000000101010
【0084】EOR(排他的論理和)命令 書式 EOR Rm,Rn EOR #imm,R0 EOR.B #imm,@R1 説明 汎用レジスタRnの内容とRmの排他的論理和
をとり、結果をRnに格納する。特殊形として汎用レジ
スタR0とゼロ拡張した8ビット・イミディエート・デ
ータとの排他的論理和、もしくはR1相対で8ビット・
メモリと8ビット・イミディエート・データとの排他的
論理和が可能である。 使用例 EOR R0,R1 ;実行前 R0=H'AAAAAAAA,R1=H'55555555 ;実行後 R1=H'FFFFFFFF EOR #H'F0,R0 ;実行前 R0=H'FFFFFFFF ;実行後 R0=H'FFFFFF0F EOR.B #H'A5,@R1 ;実行前 @R1=H'A5 ;実行後 @R1=H'00 コード MSB LSB EOR r,R 0001RRRRrrrr1010 EOR #imm,R0 10001010iiiiiiii EOR.B #imm,@R1 10000010iiiiiiii
【0085】EXTS(符号拡張)命令 書式 EXTS.B Rm,Rn EXTS.W Rm,Rn 説明 汎用レジスタRmの内容を符号拡張して、結果
をRnに格納する。バイト指定のとき、Rmのビット7
の内容をビット8からビット31にコピーする。ワード
指定のとき、Rmのビット15の内容をビット16から
ビット31にコピーする。 動作 EXTSB(long m, long n) /* EXTS.B Rm,Rn */ { R[n]=R[m]; if ((R[m]&0x00000080)==0) R[n]&=0x000000FF; else R[n]|=0xFFFFFF00; PC+=2; } EXTSW(long m, long n) /* EXTS.W Rm,Rn */ { R[n]=R[m]; if ((R[m]&0x00008000)==0) R[n]&=0x0000FFFF; else R[n]|=0xFFFF0000; PC+=2; } 使用例 EXTS.B R0,R1 ;実行前 R0=H'00000080 ;実行後 R1=H'FFFFFF80 EXTS.W R0,R1 ;実行前 R0=H'00008000 ;実行後 R1=H'FFFF8000 コード MSB LSB EXTS.B r,R 0110RRRRrrrr0010 EXTS.W r,R 0110RRRRrrrr0011
【0086】EXTU(ゼロ拡張)命令 書式 EXTU.B Rm,Rn EXTU.W Rm,Rn 説明 汎用レジスタRmの内容をゼロ拡張して、結果
をRnに格納する。バイト指定のとき、Rnのビット8
からビット31に0が入る。ワード指定とき、Rnのビ
ット16からビット31に0が入る。 動作 EXTUB(long m, long n) /* EXTU.B Rm,Rn */ { R[n]=R[m]; R[n]&=0x000000FF; PC+=2; } EXTUW(long m, long n) /* EXTU.W Rm,Rn */ { R[n]=R[m]; R[n]&=0x0000FFFF; PC+=2; } 使用例 EXTU.B R0,R1 ;実行前 R0=H'FFFFFF80 ;実行後 R1=H'00000080 EXTU.W R0,R1 ;実行前 R0=H'FFFF8000 ;実行後 R1=H'00008000 コード MSB LSB EXTU.B r,R 0110RRRRrrrr0000 EXTU.W r,R 0110RRRRrrrr0001
【0087】JMP(無条件ジャンプ)命令 書式 JMP @Rn 説明 指定されたアドレスに無条件に遅延分岐する。
分岐先は汎用レジスタRnの内容の32ビットデータで
表わされるアドレスである。 注意 遅延分岐命令であるので、本命令の直後の命令
が分岐に先立ち実行される。本命令と直後の命令との間
に割り込みは受け付けられない。直後の命令が分岐命令
のとき、不当命令として認識される。 使用例 .align 4 JMP_TABLE: .data.l TRGET ;ジャンプテーブル MOV JMP_TABLE,R0 ;R0=TRGETのアドレス JMP @R0 ;TRGETへ分岐する MOV R0,R1 ;分岐に先立ち実行される ・・・・・・・・・・・ TRGET: ADD #1,R1 ;分岐先 コード MSB LSB JMP @R 0100RRRR00001010
【0088】JSR(プロシージャコール)命令 書式 JSR @Rn 説明 指定されたアドレスのプロシージャに分岐す
る。PCの内容をPRに退避し、汎用レジスタRnの内
容の32ビットデータで表わされるアドレスへ分岐す
る。PCは、本命令の2命令後の先頭アドレスである。
RTSと組み合わせて、プロシージャ・コールに使用す
る。 注意 遅延分岐命令であるので、本命令の直後の命令
が分岐に先立ち実行される。本命令と直後の命令との間
に割り込みは受け付けられない。直後の命令が分岐命令
のとき、不当命令として認識される。 使用例 .align 4 JSR_TABLE: .data.l TRGET ;ジャンプテーブル MOV JSR_TABLE,R0 ;R0=TRGETのアドレス JSR @R0 ;TRGETへ分岐する EOR R1,R1 ;分岐に先立ち実行される ADD R0,R1 ;プロシージャからの戻り先である ・・・・・・・ TRGET: NOP ;プロシージャの入り口 MOV R2,R3 ; RTS ;上記ADD命令に戻る MOV #70,R1 ;分岐に先立ち実行される コード MSB LSB JSR @R 0100RRRR00001011
【0089】LDC(CR転送)命令 書式 LDC Rm,CRn LDC.L @Rm+,CRn 説明 ソース・オペランドをコントロールレジスタC
Rnに格納する。 注意 本命令は割り込みを受け付けない。 動作 LDC(long m, long n) /* LDC Rm,CRn */ { switch (n) { case 0: SR=R[m]; PC+=2; break; case 1: PR=R[m]; PC+=2; break; case 2: GBR=R[m]; PC+=2; break; default:Error("Illegal CR number."); break; } } LDCM(long m, long n) /* LDC.L @Rm+,CRn */ { switch (n) { case 0: SR=Read_Long(R[m]); R[m]+=4; PC+=2; break; case 1: PR=Read_Long(R[m]); R[m]+=4; PC+=2; break; case 2: GBR=Read_Long(R[m]); R[m]+=4; PC+=2; break; default:Error("Illegal CR number."); break; } } 使用例 LDC R0,SR ;実行前 R0=H'FFFFFFFF,SR=H'00000000 ;実行後 SR=H'000003F7 LDC.L @R15+,PR ;実行前 R15=H'10000000 ;実行後 R15=H'10000004,PR=@H'10000000 コード MSB LSB LDC R,cr 0100RRRRrrrr0010 LDC.L @R+,cr 0100RRRRrrrr0001
【0090】LDBR(BR転送)命令 書式 LDBR 説明 汎用レジスタR0の内容をコントロールレジス
タBRに格納する。 注意 本命令は割り込みを受け付けない。 使用例 LDBR ;実行前 R0=H'12345678,BR=H'00000000 ;実行後 BR=H'12345678 コード MSB LSB LDBR 0000000000100001
【0091】LDVR(VBR転送)命令 書式 LDVR 説明 汎用レジスタR0の内容をコントロールレジス
タVBRに格納する。 注意 本命令は割り込みを受け付けない。 使用例 LDVR ;実行前 R0=H'FFFFFFFF,VBR=H'00000000 ;実行後 VBR=H'FFFFFFFF コード MSB LSB LDVR 0000000000001011
【0092】 MOV(イミディエート・データ転送)命令 書式 MOV #imm,Rn MOV.W @(disp,PC),Rn MOV.L @(disp,PC),Rn 説明 汎用レジスタRnにイミディエート・データを
格納する。データは32ビットに符号拡張される。デー
タがワード/ロングワードのときは、PCにディスプレ
ースメントを加えたアドレスに格納されたテーブル内の
データを参照する。データがワードのとき、ディスプレ
ースメントは1ビット左シフトされ9ビットであるの
で、テーブルとの相対距離は−256から+254バイ
トになる。PCは本命令の2命令後の先頭アドレスであ
る。従って、ワード・データは2バイト境界に配置する
必要がある。データがロングワードのとき、ディスプレ
ースメントは2ビット左シフトされ10ビットであるの
で、オペランドとの相対距離は−512から+508バ
イトになる。PCは本命令の2命令後の先頭アドレスで
あるが、PCの下位2ビットはB,00に補正される。
従って、ロングワード・データは4バイト境界に配置す
る必要がある。 注意 テーブルは自動的にスキップされないので、何
も対策しないと命令と解釈される。これを避けるためモ
ジュール先頭、あるいは無条件分岐命令の後などに配置
することが必要である。ただし不注意にBSR/JSR
/TRAPの直後に配置すると、単純にリターンしたと
きテーブルに衝突することになる。本命令が遅延分岐命
令の直後に配置されているとき、PCは分岐先の先頭ア
ドレス+2になる。本命令のテーブル・アクセスはイン
ストラクション・キャッシュの対象となる。 動作 MOVI(long i, long n) /* MOV #imm,Rn */ { if ((i&0x80)==0) R[n]=(0x000000FF & (long)i); else R[n]=(0xFFFFFF00 | (long)i); PC+=2; } MOVWI(long d, long n) /* MOV.W @(disp,PC),Rn */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); R[n]=(long)Read_Word(PC+(disp<<1)); if ((R[n]&0x8000)==0) R[n]&=0x0000FFFF; else R[n]|=0xFFFF0000; PC+=2; } MOVLI(long d, long n) /* MOV.L @(disp,PC),Rn */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); R[n]=Read_Long((PC&0xFFFFFFFC)+(disp<<2)); PC+=2; } 使用例 アト゛レス 1000 MOV #H'80,R1 ;R1=H'FFFFFF80 1002 MOV.W IMM+4,R2 ;R2=H'FFFF9ABC 1004 MOV.L IMM,R3 ;R3=H'12345678 1006 NOP ;←MOV.W命令でアト゛レス計算に用いるPCの位置 1008 ADD #1,R0 ;←MOV.L命令でアト゛レス計算に用いるPCの位置 .align 4 ; 100C IMM: .data.l H'12345678 1010 .data.w H'9ABC コード MSB LSB MOV #imm,R 1101RRRRiiiiiiii MOV.W @(disp,PC),R 1001RRRRdddddddd MOV.L @(disp,PC),R 1011RRRRdddddddd
【0093】MOV(スタックデータ転送)命令 書式 MOV.L @(disp,Rm),Rn MOV.L Rm,@(disp,Rn) 説明 ソース・オペランドをデスティネーションへ転
送する。メモリオペランドはスタック・フレームに存在
するのでデータ・サイズはロングワードに限定される。
従ってディスプレースメントは2ビット左シフトされ6
ビットであるので、−32から+28バイトが指定でき
る。メモリオペランドに届かないときは一般のMOV命
令を使う。ただし使用するレジスタが固定されているな
どの制限がある。 動作 MOVL4(long m, long d, long n) /* MOV.L @(disp,Rm),Rn */ { long disp; if ((d&0x8)==0) disp=(0x0000000F & (long)d); else disp=(0xFFFFFFF0 | (long)d); R[n]=Read_Long(R[m]+(disp<<2)); PC+=2; } MOVS4(long m, long d, long n) /* MOV.L Rm,@(disp,Rn) */ { long disp; if ((d&0x8)==0) disp=(0x0000000F & (long)d); else disp=(0xFFFFFFF0 | (long)d); Write_Long(R[n]+(disp<<2),R[m]); PC+=2; } 使用例 MOV.L @(2,R0),R1 ;実行前 @(R0+8)=H'12345670 ;実行後 R1=@H'12345670 MOV.L R0,@(-1,R1) ;実行前 R0=H'FFFF7F80 ;実行後 @(R1-4)=H'FFFF7F80 コード MSB LSB MOV.L @(disp,r),R 0111RRRRrrrrdddd MOV.L r,@(disp,R) 0011RRRRrrrrdddd
【0094】MOV(I/Oデータ転送)命令 書式 MOV @(disp,GBR),R0 MOV R0,@(disp,GBR) 説明 ソース・オペランドをデスティネーションへ転
送する。メモリオペランドのデータ・サイズをバイト/
ワード/ロングワードの範囲で指定できる。I/Oのベ
ースアドレスをGBRに設定する。I/Oのデータがバ
イト・サイズのときディスプレースメントは8ビットで
あるので、−128から+127バイトが指定できる。
ワード・サイズのときディスプレースメントは1ビット
左シフトされ9ビットであるので、−256から+25
4バイトが指定できる。ロングワード・サイズのときデ
ィスプレースメントは2ビット左シフトされ10ビット
であるので、−512から+508バイトが指定でき
る。メモリオペランドに届かないときは一般のMOV命
令を使う。ソース・オペランドがメモリのとき、ロード
されたデータは32ビットに符号拡張されてレジスタに
格納される。 注意 ロードするときデスティネーション・レジスタ
がR0固定である。従って、直後の命令でR0を参照し
ようとしてもロード命令の実行完了まで待たされる。下
記ので対応されるように命令の順序変えによる最適
化が必要である。 MOV.B @(12,GBR),R0 MOV.B @(12,GBR),R0 AND #80,R0 → → ADD #20,R1 ADD #20,R1 → → AND #80,R0 動作 MOVBLG(long d) /* MOV.B @(disp,GBR),R0 */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); R[0]=(long)Read_Byte(GBR+disp); if ((R[0]&0x80)==0) R[0]&=0x000000FF; else R[0]|=0xFFFFFF00; PC+=2; } MOVWLG(long d) /* MOV.W @(disp,GBR),R0 */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); R[0]=(long)Read_Word(GBR+(disp<<1)); if ((R[0]&0x8000)==0) R[0]&=0x0000FFFF; else R[0]|=0xFFFF0000; PC+=2; } MOVLLG(long d) /* MOV.L @(disp,GBR),R0 */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); R[0]=Read_Long(GBR+(disp<<2)); PC+=2; } MOVBSG(long d) /* MOV.B R0,@(disp,GBR) */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); Write_Byte(GBR+disp,R[0]); PC+=2; } MOVWSG(long d) /* MOV.W R0,@(disp,GBR) */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); Write_Word(GBR+(disp<<1),R[0]); PC+=2; } MOVLSG(long d) /* MOV.L R0,@(disp,GBR) */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); Write_Long(GBR+(disp<<2),R[0]); PC+=2; } 使用例 MOV.L @(2,GBR),R0 ;実行前 @(GBR+8)=H'12345670 ;実行後 R0=@H'12345670 MOV.B R0,@(-1,GBR) ;実行前 R0=H'FFFF7F80 ;実行後 @(GBR-1)=H'FFFF7F80 コード MSB LSB MOV @(disp,GBR),R0 110011SSdddddddd MOV R0,@(disp,GBR) 100011SSdddddddd サイズ 01=バイト、10=ワード、11=ロングワード
【0095】MOV(転送)命令 書式 MOV Rm,Rn MOV @Rm,Rn MOV Rm,@Rn MOV @Rm+,Rn MOV Rm,@−Rn MOV @(disp,R1),R0 MOV R0,@(disp,R1) MOV @(Rm,R1),Rn MOV Rm,@(Rn,R1) 説明 ソース・オペランドをデスティネーションへ転
送する。オペランドがメモリのときは転送するデータ・
サイズをバイト/ワード/ロングワードの範囲で指定で
きる。ソース・オペランドがメモリのとき、ロードされ
たデータは32ビットに符号拡張されてレジスタに格納
される。@(disp,R1)モードのときメモリのデ
ータがバイト・サイズのときディスプレースメントは8
ビットであるので、−128から+127バイトが指定
できる。ワード・サイズのときディスプレースメントは
1ビット左シフトされ9ビットであるので、−256か
ら+254バイトが指定できる。ロングワード・サイズ
のときディスプレースメントは2ビット左シフトされ1
0ビットであるので、−512から+508バイトが指
定できる。 注意 @(disp,R1)モードのとき、他方のオ
ペランドがR0固定である。従って、ロード命令のとき
は前項のI/Oデータ転送命令と同様に下記ので対
応されるように命令の順序変えによって最適化が可能で
ある。 MOV.B @(12,R1),R0 MOV.B @(12,R1),R0 AND #80,R0 → → ADD #20,R1 ADD #20,R1 → → AND #80,R0 動作 MOV(long m, long n) /* MOV Rm,Rn */ { R[n]=R[m]; PC+=2; } MOVBL(long m, long n) /* MOV.B @Rm,Rn */ { R[n]=(long)Read_Byte(R[m]); if ((R[n]&0x80)==0) R[n]&=0x000000FF; else R[n]|=0xFFFFFF00; PC+=2; } MOVWL(long m, long n) /* MOV.W @Rm,Rn */ { R[n]=(long)Read_Word(R[m]); if ((R[n]&0x8000)==0) R[n]&=0x0000FFFF; else R[n]|=0xFFFF0000; PC+=2; } MOVLL(long m, long n) /* MOV.L @Rm,Rn */ { R[n]=Read_Long(R[m]); PC+=2; } MOVBS(long m, long n) /* MOV.B Rm,@Rn */ { Write_Byte(R[n],R[m]); PC+=2; } MOVWS(long m, long n) /* MOV.W Rm,@Rn */ { Write_Word(R[n],R[m]); PC+=2; } MOVLS(long m, long n) /* MOV.L Rm,@Rn */ { Write_Long(R[n],R[m]); PC+=2; } MOVBP(long m, long n) /* MOV.B @Rm+,Rn */ { R[n]=(long)Read_Byte(R[m]); if ((R[n]&0x80)==0) R[n]&=0x000000FF; else R[n]|=0xFFFFFF00; if (n!=m) R[m]+=1; PC+=2; } MOVWP(long m, long n) /* MOV.W @Rm+,Rn */ { R[n]=(long)Read_Word(R[m]); if ((R[n]&0x8000)==0) R[n]&=0x0000FFFF; else R[n]|=0xFFFF0000; if (n!=m) R[m]+=2; PC+=2; } MOVLP(long m, long n) /* MOV.L @Rm+,Rn */ { R[n]=Read_Long(R[m]); if (n!=m) R[m]+=4; PC+=2; } MOVBM(long m, long n) /* MOV.B Rm,@-Rn */ { Write_Byte(R[n]-1,R[m]); R[n]-=1; PC+=2; } MOVWM(long m, long n) /* MOV.W Rm,@-Rn */ { Write_Word(R[n]-2,R[m]); R[n]-=2; PC+=2; } MOVLM(long m, long n) /* MOV.L Rm,@-Rn */ { Write_Long(R[n]-4,R[m]); R[n]-=4; PC+=2; } MOVBL8(long d) /* MOV.B @(disp,R1),R0 */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); R[0]=(long)Read_Byte(R[1]+disp); if ((R[0]&0x80)==0) R[0]&=0x000000FF; else R[0]|=0xFFFFFF00; PC+=2; } MOVWL8(long d) /* MOV.W @(disp,R1),R0 */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); R[0]=(long)Read_Word(R[1]+(disp<<1)); if ((R[0]&0x8000)==0) R[0]&=0x0000FFFF; else R[0]|=0xFFFF0000; PC+=2; } MOVLL8(long d) /* MOV.L @(disp,R1),R0 */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); R[0]=Read_Long(R[1]+(disp<<2)); PC+=2; } MOVBS8(long d) /* MOV.B R0,@(disp,R1) */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); Write_Byte(R[1]+disp,R[0]); PC+=2; } MOVWS8(long d) /* MOV.W R0,@(disp,R1) */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); Write_Word(R[1]+(disp<<1),R[0]); PC+=2; } MOVLS8(long d) /* MOV.L R0,@(disp,R1) */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); Write_Long(R[1]+(disp<<2),R[0]); PC+=2; } MOVBL1(long m, long n) /* MOV.B @(Rm,R1),Rn */ { R[n]=(long)Read_Byte(R[m]+R[1]); if ((R[n]&0x80)==0) R[n]&=0x000000FF; else R[n]|=0xFFFFFF00; PC+=2; } MOVWL1(long m, long n) /* MOV.W @(Rm,R1),Rn */ { R[n]=(long)Read_Word(R[m]+R[1]); if ((R[n]&0x8000)==0) R[n]&=0x0000FFFF; else R[n]|=0xFFFF0000; PC+=2; } MOVLL1(long m, long n) /* MOV.L @(Rm,R1),Rn */ { R[n]=Read_Long(R[m]+R[1]); PC+=2; } MOVBS1(long m, long n) /* MOV.B Rm,@(Rn,R1) */ { Write_Byte(R[n]+R[1],R[m]); PC+=2; } MOVWS1(long m, long n) /* MOV.W Rm,@(Rn,R1) */ { Write_Word(R[n]+R[1],R[m]); PC+=2; } MOVLS1(long m, long n) /* MOV.L Rm,@(Rn,R1) */ { Write_Long(R[n]+R[1],R[m]); PC+=2; } 使用例 MOV R0,R1 ;実行前 R0=H'FFFFFFFF,R1=H'00000000 ;実行後 R1=H'FFFFFFFF MOV.B @R0,R1 ;実行前 @R0=H'80,R1=H'00000000 ;実行後 R1=H'FFFFFF80 MOV.W R0,@R1 ;実行前 R0=H'FFFF7F80 ;実行後 @R1=H'7F80 MOV.L @R0+,R1 ;実行前 R0=H'12345670 ;実行後 R0=H'12345674,R1=@H'12345670 MOV.W R0,@-R1 ;実行前 R0=H'AAAAAAAA,R1=H'FFFF7F80 ;実行後 R1=H'FFFF7F7E,@R1=H'AAAA MOV.W @(R2,R1),R0 ;実行前 R2=H'00000004,R1=H'10000000 ;実行後 R0=@H'10000004 MOV.W @(H'04,R1),R0 ;実行前 R1=H'10000000 ;実行後 R0=@H'10000004 コード MSB LSB MOV r,R 0110RRRRrrrr1000 MOV @r,R 0110RRRRrrrr10SS MOV r,@R 0010RRRRrrrr10SS MOV @r+,R 0110RRRRrrrr11SS MOV r,@-R 0010RRRRrrrr11SS MOV @(r,R1),R 0000RRRRrrrr01SS MOV r,@(R,R1) 0000RRRRrrrr11SS MOV @(disp,R1),R0 110001SSdddddddd MOV R0,@(disp,R1) 100001SSdddddddd 但し、SSはサイズであり、01=バイト、 10=ワード、 11=ロングワードである。
【0096】MOVA(実効アドレス・データ転送)命
令 書式 MOVA @(disp,PC),R1 説明 汎用レジスタR1にソース・オペランドの実効
アドレスを格納する。ディスプレースメントは2ビット
左シフトされ10ビットであるので、オペランドとの相
対距離は−512から+508バイトになる。PCは本
命令の2命令後の先頭アドレスであるが、PCの下位2
ビットはB’00に補正される。従って、ソース・オペ
ランドは4バイト境界に配置する必要がある。 注意 本命令が遅延分岐命令の直後に配置されている
とき、PCは分岐先の先頭アドレス+2になる。 動作 MOVA(long d) /* MOVA @(disp,PC),R1 */ { long disp; if ((d&0x80)==0) disp=(0x000000FF & (long)d); else disp=(0xFFFFFF00 | (long)d); R[1]=(PC&0xFFFFFFFC)+(disp<<2); PC+=2; } 使用例 アト゛レス .align 4 1000 STR:.sdata "XYZP12" 1006 MOVA STR,R1 ;STRのアドレス→R1 1008 MOV.B @R1,R0 ;R0="X" ←PC下位2ヒ゛ット補正後の位置 100A ADD R4,R5 ;←MOVA命令のアト゛レス計算時、PCの本来の位 置 ・・・・・・・・・・・ 2002 BRA TRGET ;遅延分岐命令 2004 MOVA @(-2,PC),R1 ;TRGETのアドレス→R1 2006 NOP ;←本来R1に格納されるべきアドレス コード MSB LSB MOVA @(disp,PC),R1 11001011dddddddd
【0097】MULS(符号付き乗算)命令 書式 MULS Rm,Rn 説明 汎用レジスタRnの内容とRmを16ビットで
乗算し、結果の32ビットをRnに格納する。演算は符
号付き算術演算で行なう。 動作 MULS(long m, long n) /* MULS Rm,Rn */ { R[n]=((long)(short)R[n]*(long)(short)R[m]); PC+=2; } 使用例 MULS R0,R1 ;実行前 R0=H'FFFFFFFE,R1=H'00005555 ;実行後 R1=H'FFFF5556 コード MSB LSB MULS r,R 0001RRRRrrrr1111
【0098】MULU(符号なし乗算)命令 書式 MULU Rm,Rn 説明 汎用レジスタRnの内容とRmを16ビットで
乗算し、結果の32ビットをRnに格納する。演算は符
号なし算術演算で行なう。 動作 MULU(long m, long n) /* MULU Rm,Rn */ { R[n]=((unsigned long)(unsigned short)R[n]* (unsigned long)(unsigned short)R[m]); PC+=2; } 使用例 MULU R0,R1 ;実行前 R0=H'00000002,R1=H'FFFFAAAA ;実行後 R1=H'00015554 コード MSB LSB MULU r,R 0001RRRRrrrr1110
【0099】NEG(符号反転)命令 書式 NEG Rm,Rn 説明 汎用レジスタRmの内容の2の補数をとり、結
果をRnに格納する。0からRmを減算し、結果をRn
に格納する。 使用例 NEG R0,R1 ;実行前 R0=H'00000001 ;実行後 R1=H'FFFFFFFF コード MSB LSB NEG r,R 0110RRRRrrrr0110
【0100】NEGC(キャリ付き符号反転)命令 書式 NEGC Rm,Rn 説明 0から汎用レジスタRmの内容とCビットを減
算し、結果をRnに格納する。演算の結果によりボロー
がCビットに反映される。 使用例 NEGC R0,R1 ;実行前 R0=H'00000001,C=0 ;実行後 R1=H'FFFFFFFF,C=1 NEGC R2,R3 ;実行前 R2=H'00000000,C=1 ;実行後 R3=H'FFFFFFFF,C=1 コード MSB LSB NEGC r,R 0110RRRRrrrr0111
【0101】NOP(無操作)命令 書式 NOP 説明 PCのインクリメントのみを行ない、次の命令
に実行が移る。 動作 NOP() /* NOP */ { PC+=2; } 使用例 NOP ;1サイクルの時間が過ぎる コード MSB LSB NOP 0000000000000010
【0102】NOT(論理否定)命令 書式 NOT Rm,Rn 説明 汎用レジスタRmの内容の1の補数をとり、結
果をRnに格納する。 使用例 NOT R0,R1 ;実行前 R0=H'AAAAAAAA ;実行後 R1=H'55555555 コード MSB LSB NOT r,R 0110RRRRrrrr1100
【0103】OR(論理和)命令 書式 OR Rm,Rn OR #imm,R0 OR.B #imm,@R1 説明 汎用レジスタRnの内容とRmの論理和をと
り、結果をRnに格納する。特殊形として汎用レジスタ
R0とゼロ拡張した8ビット・イミディエイト・データ
との論理和、もしくはR1相対で8ビット・メモリと8
ビット・イミディエート・データとの論理和も可能であ
る。 使用例 OR R0,R1 ;実行前 R0=H'AAAA5555,R1=H'55550000 ;実行後 R1=H'FFFF5555 OR #H'F0,R0 ;実行前 R0=H'00000008 ;実行後 R0=H'000000F8 OR.B #H'50,@R1 ;実行前 @R1=H'A5 ;実行後 @R1=H'F5 コード MSB LSB OR r,R 0001RRRRrrrr1011 OR #imm,R0 10001011iiiiiiii OR.B #imm,@R1 10000011iiiiiiii
【0104】PASS(通過確認)命令 書式 PASS #imm 説明 Dビットを参照する条件付きのソフトウェア割
り込み命令である。D=1のときデバッグ割り込みを発
生する。逆にD=0のとき、PCのインクリメントだけ
を行なう。デバッグ割り込みが発生すると、PCとSR
をスタックに退避し所定のベクタアドレスの内容で表わ
されるアドレスへ分岐する。PCは本命令の次命令の先
頭アドレスである。プログラム作成時にルーチンの先頭
に本命令を埋め込んでおき、必要な時にD=1にするこ
とによってデバッグ割り込みで通過確認を行なうことが
可能である。また予め定義するデバッグ割り込みルーチ
ンでimmコードを参照することによって、デバッグ対
象ルーチンの判別が可能である。immコードはスタッ
ク上のPCを(−1)したアドレスのバイトデータであ
る。 注意 本命令を分岐命令の直後に配置すると、Dビッ
トの値に関係無く不当命令として認識される。 使用例 _TASK1 .equ H'01 ・・・・・・・・・・ LDC SR,R0 OR.B #H'04,R0 STC R0,SR ;実行後 D=1 ・・・・・・・・・・ TASK1 PASS #_TASK1 ;D=1のため_PASSに分岐する SUB #1,R5 ;デバッグルーチンの戻り先 ・・・・・・・・・・ _PASS MOV.L @R15,R1 ;デバッグルーチンの入り口 ADD #-1,R1 ;R1=(スタック上のPC)−1 MOV.B @R1,R0 ;R0=#_TASK1 RTE ;上記SUB命令に戻る NOP ;RTEに先立ち実行される コード MSB LSB PASS #imm 11001001iiiiiiii
【0105】ROTL/ROTR(ローテート) 書式 ROTL Rn ROTR Rn 説明 汎用レジスタRnの内容を左/右方向に1ビッ
ト・ローテート(回転)し、結果をRnに格納する。ロ
ーテートしてオペランドの外に出てしまったビットは、
Cビットに転送される。 動作 ROTL(long n) /* ROTL Rn */ { if ((R[n]&0x80000000)==0) C=0; else C=1; R[n]<<=1; if (C==1) R[n]|=0x00000001; else R[n]&=0xFFFFFFFE; PC+=2; } ROTR(long n) /* ROTR Rn */ { if ((R[n]&0x00000001)==0) C=0; else C=1; R[n]>>=1; if (C==1) R[n]|=0x80000000; else R[n]&=0x7FFFFFFF; PC+=2; } 使用例 ROTL R0 ;実行前 R0=H'80000000,C=0 ;実行後 R0=H'00000001,C=1 ROTR R0 ;実行前 R0=H'00000001,C=0 ;実行後 R0=H'80000000,C=1 コード MSB LSB ROTL R 0100RRRR00101001 ROTR R 0100RRRR00101000
【0106】ROTCL/ROTCR(キャリ・ビット
付きローテート)命令 書式 ROTCL Rn ROTCR Rn 説明 汎用レジスタRnの内容を左/右方向にCビッ
トを含めて1ビット・ローテート(回転)し、結果をR
nに格納する。ローテートしてオペランドの外に出てし
まったビットは、Cビットに転送される。 動作 ROTCL(long n) /* ROTCL Rn */ { long temp; if ((R[n]&0x80000000)==0) temp=0; else temp=1; R[n]<<=1; if (C==1) R[n]|=0x00000001; else R[n]&=0xFFFFFFFE; if (temp==1) C=1; else C=0; PC+=2; } ROTCR(long n) /* ROTCR Rn */ { long temp; if ((R[n]&0x00000001)==0) temp=0; else temp=1; R[n]>>=1; if (C==1) R[n]|=0x80000000; else R[n]&=0x7FFFFFFF; if (temp==1) C=1; else C=0; PC+=2; } 使用例 ROTCL R0 ;実行前 R0=H'80000000,C=0 ;実行後 R0=H'00000000,C=1 ROTCR R0 ;実行前 R0=H'00000001,C=1 ;実行後 R0=H'80000000,C=1 コード MSB LSB ROTCL R 0100RRRR00101011 ROTCR R 0100RRRR00101010
【0107】RTB(ブレークからのリターン)命令 書式 RTB 説明 ブレーク例外処理ルーチンから復帰する。すな
わち、PCをBRから復帰した後、外部デバイスにアク
ノリッジ信号を返し、復帰したPCの示すアドレスから
処理が続行される。 注意 本命令と分岐先命令との間の割り込みは受け付
けは、RTBMSK信号で制御できる。RTBMSK信
号が入力されていると、NMI/IRQ等の外部割り込
みは受け付けられない。(アドレスエラー等は受け付け
られる。) 使用例 MOV R0,R9 ; ADD #-1,R1 ;←RTBの分岐先(BRに退避されたPC) TEST R1,R1 ; ・・・・・・・・ NOP ; RTB ;RTBMSKが入力されていると、必ず上記 ADDを ;実行する。入力されていないと割り込みを 受け付け、 ;このとき上記ADDは実行されない。 コード MSB LSB RTB 0000000000000001
【0108】RTE(例外処理からのリターン)命令 書式 RTE 説明 割り込みルーチンから復帰する。すなわち、P
CとSRをスタックから復帰する。復帰したPCの示す
アドレスから処理が続行される。 注意 遅延分岐命令であるので、本命令の直後の命令
が分岐に先立ち実行される。本命令と直後の命令との間
に割り込みは受け付けられない。直後の命令が分岐命令
のとき、不当命令として認識される。メモリからR15
へのロード命令の直後に連続して配置しないことが必要
である。ロード前の古いR15を誤って参照することに
なる。下記ので対応されるように命令の順序変えが
必要である。 MOV #0,R0 → → MOV.L @R15+,R15 MOV.L @R15+,R15 → → MOV #0,R0 RTE RTE ADD #8,R15 ADD #8,R15 使用例 RTE ;基のルーチンへ復帰する ADD #8,R15 ;分岐に先立ち実行される。 コード MSB LSB RTE 0000000000010000
【0109】 RTS(プロシージャからのリターン)命令 書式 RTS 説明 プロシージャから復帰する。すなわち、PCを
PRから復帰する。復帰したPCの示すアドレスから処
理が続行される。本命令によって、BSRおよびJSR
命令でコールされたプロシージャからコール元へ戻るこ
とができる。 注意 遅延分岐命令であるので、本命令の直後の命令
が分岐に先立ち実行される。本命令と直後の命令との間
に割り込みは受け付けられない。直後の命令が分岐命令
のとき、不当命令として認識される。 使用例 TABEL: .data.l TRGET ;ジャンプテーブル MOV.L TABLE,R3 ;R3=TRGETのアドレス JSR @R3 ;TRGETへ分岐する NOP ;分岐に先立ち実行される ADD R0,R1 ;PRの保持しているアドレス ・・・・・・・・ プロシージャからの戻り先である ・・・・・・・・ TRGET: MOV R1,R0 ;プロシージャの入り口 RTS ;PRの内容−>PC MOV #12,R0 ;分岐に先立ち実行される コード MSB LSB RTS 0000000000010001
【0110】SETC(Cビットセット)命令 書式 SETC 説明 SRのCビットをセットする。 使用例 SETC ;実行前 C=0 ;実行後 C=1 コード MSB LSB SETC 0000000000011001
【0111】SETT(Tビットセット)命令 書式 SETT 説明 SRのTビットをセットする。 使用例 SETT ;実行前 T=0 ;実行後 T=1 コード MSB LSB SETT 0000000000011000
【0112】SHAL/SHAR(算術シフト)命令 書式 SHAL Rn SHAR Rn 説明 汎用レジスタRnの内容を左/右方向に算術的
に1ビット・シフトし、結果をRnに格納する。シフト
してオペランドの外に出てしまったビットは、Cビット
に転送される。 動作 SHAL(long n) /* Same as SHLL */ SHAR(long n) /* SHAR Rn */ { long temp; if ((R[n]&0x00000001)==0) C=0; else C=1; if ((R[n]&0x80000000)==0) temp=0; else temp=1; R[n]>>=1; if (temp==1) R[n]|=0x80000000; else R[n]&=0x7FFFFFFF; PC+=2; } 使用例 SHAL R0 ;実行前 R0=H'80000001,C=0 ;実行後 R0=H'00000002,C=1 SHAR R0 ;実行前 R0=H'80000001,C=0 ;実行後 R0=H'C0000000,C=1 コード MSB LSB SHAL R 0100RRRR00011011 SHAR R 0100RRRR00011000
【0113】SHLL/SHLR(論理シフト)命令 書式 SHLL Rn SHLR Rn 説明 汎用レジスタRnの内容を左/右方向に論理的
に1ビット・シフトし、結果をRnに格納する。シフト
してオペランドの外に出てしまったビットは、Cビット
に転送される。 動作 SHLL(long n) /* SHLL Rn (Same as SHAL) */ { if ((R[n]&0x80000000)==0) C=0; else C=1; R[n]<<=1; PC+=2; } SHLR(long n) /* SHLR Rn */ { if ((R[n]&0x00000001)==0) C=0; else C=1; R[n]>>=1; R[n]&=0x7FFFFFFF; PC+=2; } 使用例 SHLL R0 ;実行前 R0=H'80000001,C=0 ;実行後 R0=H'00000002,C=1 SHLR R0 ;実行前 R0=H'80000001,C=0 ;実行後 R0=H'40000000,C=1 コード MSB LSB SHLL R 0100RRRR00011011 SHLR R 0100RRRR00011010
【0114】 SLn/SRn(マルチビットシフト)命令 書式 SL2 Rn SR2 Rn SL8 Rn SR8 Rn SL16 Rn SR16 Rn 説明 汎用レジスタRnの内容を左/右方向に論理的
に2/8/16ビット・シフトし、結果をRnに格納す
る。シフトしてオペランドの外に出てしまったビット
は、捨てられる。 使用例 SL2 R0 ;実行前 R0=H'12345678 ;実行後 R0=H'48D159E0 SR2 R0 ;実行前 R0=H'12345678 ;実行後 R0=H'048D159E SL8 R0 ;実行前 R0=H'12345678 ;実行後 R0=H'34567800 SR8 R0 ;実行前 R0=H'12345678 ;実行後 R0=H'00123456 SL16 R0 ;実行前 R0=H'12345678 ;実行後 R0=H'56780000 SR16 R0 ;実行前 R0=H'12345678 ;実行後 R0=H'00001234 コード MSB LSB SL2 R 0100RRRR00001111 SR2 R 0100RRRR00001110 SL8 R 0100RRRR00011111 SR8 R 0100RRRR00011110 SL16 R 0100RRRR00101111 SR16 R 0100RRRR00101110
【0115】SLP(スリープ)命令 書式 SLP 説明 CPUを低消費電力モードにする。低消費電力
モードでは、CPUの内部状態は保持され、直後の命令
の実行を停止し、割り込み要求の発生を待つ。要求が発
生すると、低消費電力モードから抜けて例外処理を開始
する。すなわち、SRとPCをスタックに退避し、所定
のベクタに従い割り込みルーチンへ分岐する。PCは本
命令の直後の命令の先頭アドレスである。 使用例 SLP ;低消費電力モードへの遷移 コード MSB LSB SLP 0000000000001000
【0116】STC(CR転送)命令 書式 STC CRm,Rn STC.L CRm,@−Rn 説明 コントロールレジスタCRmをデスティネーシ
ョンに格納する。 注意 本命令は割り込みを受け付けない。 動作 STC(long m, long n) /* STC CRm,Rn */ { switch (m) { case 0: R[n]=SR; PC+=2; break; case 1: R[n]=PR; PC+=2; break; case 2: R[n]=GBR; PC+=2; break; default:Error("Illegal CR number."); break; } } STCM(long m, long n) /* STC.L CRm,@-Rn */ { switch (m) { case 0: R[n]-=4; Write_Long(R[n],SR); PC+=2; break; case 1: R[n]-=4; Write_Long(R[n],PR); PC+=2; break; case 2: R[n]-=4; Write_Long(R[n],GBR); PC+=2; break; default:Error("Illegal CR number."); break; } } 使用例 STC SR,R0 ;実行前 R0=H'FFFFFFFF,SR=H'00000000 ;実行後 R0=H'00000000 STC.L PR,@-R15 ;実行前 R15=H'10000004 ;実行後 R15=H'10000000,@R15=PR コード MSB LSB STC cr,R 0000RRRRrrrr0011 STC.L cr,@-R 0100RRRRrrrr0000
【0117】STBR(BR転送)命令 書式 STBR 説明 コントロールレジスタBRの内容を汎用レジス
タR0に格納する。 注意 本命令は割り込みを受け付けない。 使用例 STBR ;実行前 R0=H'FFFFFFFF,BR=H'12345678 ;実行後 R0=H'12345678 コード MSB LSB STBR 0000000000100000
【0118】STVR(VBR転送)命令 書式 STVR 説明 コントロールレジスタVBRの内容を汎用レジ
スタR0に格納する。 注意 本命令は割り込みを受け付けない。 使用例 STVR ;実行前 R0=H'FFFFFFFF,VBR=H'00000000 ;実行後 R0=H'00000000 コード MSB LSB STVR 0000000000001010
【0119】SUB(減算)命令 書式 SUB Rm,Rn 説明 汎用レジスタRnの内容からRmを減算し、結
果をRnに格納する。イミディエート・データとの減算
はADD #imm,Rnで代用する。 使用例 SUB R0,R1 ;実行前 R0=H'00000001,R1=H'80000000 ;実行後 R1=H'7FFFFFFF コード MSB LSB SUB r,R 0010RRRRrrrr0100
【0120】SUBC(キャリ付き減算)命令 書式 SUBC Rm,Rn 説明 汎用レジスタRnの内容からRmとCビットを
減算し、結果をRnに格納する。演算の結果によりボロ
ーがCビットに反映される。 使用例 SUBC R0,R1 ;実行前 C=1,R0=H'00000001,R1=H'00000001 ;実行後 C=1,R1=H'FFFFFFFF SUBC R2,R3 ;実行前 C=0,R2=H'00000002,R3=H'00000001 ;実行後 C=1,R3=H'FFFFFFFF コード MSB LSB SUBC r,R 0010RRRRrrrr0110
【0121】SUBS(飽和機能付き減算)命令 書式 SUBS Rm,Rn 説明 汎用レジスタRnの内容からRmを減算し、結
果をRnに格納する。アンダーフローが発生しても、結
果はH'7FFFFFFF〜H'80000000の範囲
に制限される。このとき、Cビットがセットされる。 動作 SUBS(long m, long n) /* SUBS Rm,Rn */ { long dest,src,ans; if ((long)R[n]>=0) dest=0; else dest=1; if ((long)R[m]>=0) src=0; else src=1; src+=dest; R[n]-=R[m]; if ((long)R[n]>=0) ans=0; else ans=1; ans+=dest; if ((src==1)&&(ans==1)) { if (dest==0) { R[n]=0x7FFFFFFF; C=1; } else C=0; if (dest==1) { R[n]=0x80000000; C=1; } else C=0; } else C=0; PC+=2; } 使用例 SUBS R0,R1 ;実行前 R0=H'00000001,R1=H'80000001 ;実行後 R1=H'80000000,C=0 SUBS R2,R3 ;実行前 R2=H'00000002,R3=H'80000001 ;実行後 R3=H'80000000,C=1 コード MSB LSB SUBS r,R 0010RRRRrrrr0111
【0122】SUBV(アンダーフロー付き減算)命令 書式 SUBV Rm,Rn 説明 汎用レジスタRnの内容からRmを減算し、結
果をRnに格納する。アンダーフローが発生した場合、
Cビットがセットされる。 動作 SUBV(long m, long n) /* SUBV Rm,Rn */ { long dest,src,ans; if ((long)R[n]>=0) dest=0; else dest=1; if ((long)R[m]>=0) src=0; else src=1; src+=dest; R[n]-=R[m]; if ((long)R[n]>=0) ans=0; else ans=1; ans+=dest; if (src==1) { if (ans==1) C=1; else C=0; } else C=0; PC+=2; } 使用例 SUBV R0,R1 ;実行前 R0=H'00000002,R1=H'80000001 ;実行後 R1=H'7FFFFFFF,C=1 SUBV R2,R3 ;実行前 R2=H'FFFFFFFE,R3=H'7FFFFFFE ;実行後 R3=H'80000000,C=1 コード MSB LSB SUBV r,R 0010RRRRrrrr0101
【0123】SWAP(交換)命令 書式 SWAP.B Rm,Rn SWAP.W Rm,Rn 説明 汎用レジスタRmの内容の上位と下位を交換し
て、結果をRnに格納する。バイト指定のとき、Rmの
ビット0からビット7の8ビットと、ビット8からビッ
ト15の8ビットが交換される。Rnに格納されるとき
はRmの上位16ビットはそのままRnの上位16ビッ
トに転送される。ワード指定のとき、Rmのビット0か
らビット15の16ビットと、ビット16からビット3
1の16ビットが交換される。 動作 SWAPB(long m, long n) /* SWAP.B Rm,Rn */ { unsigned long temp0,temp1; temp0=R[m]&0xffff0000; temp1=(R[m]&0x000000ff)<<8; R[n]=(R[m]&0x0000ff00)>>8; R[n]=R[n]|temp1|temp0; PC+=2; } SWAPW(long m, long n) /* SWAP.W Rm,Rn */ { unsigned long temp; temp=R[m]>>8; R[n]=R[m]<<8; R[n]|=temp; PC+=2; } 使用例 SWAP.B R0,R1 ;実行前 R0=H'12345678 ;実行後 R1=H'12347856 SWAP.W R0,R1 ;実行前 R0=H'12345678 ;実行後 R1=H'56781234 コード MSB LSB SWAP.B r,R 0110RRRRrrrr0100 SWAP.W r,R 0110RRRRrrrr0101
【0124】 TAS(リード・モディファイ・ライト)命令 書式 TAS.B @Rn 説明 汎用レジスタRnの内容をアドレスとし、その
アドレスの示すバイト・データがゼロのときT=1、ゼ
ロでないときT=0とする。その後、ビット7を1にセ
ットして書き込む。この間、バス権は解放されない。 動作 TAS(long n) /* TAS.B @Rn */ { long temp; temp=(long)Read_Byte(R[n]); /* Bus Lock enable */ if (temp==0) T=1; else T=0; temp|=0x00000080; Write_Byte(R[n],temp); /* Bus Lock disable */ PC+=2; } 使用例 _LOOP TAS.B @R7 ;R7=1000 BF _LOOP ;1000番地がゼロになるまでループする。 コード MSB LSB TAS.B @R 0100RRRR00001000
【0125】TEST(テスト)命令 書式 TEST Rm,Rn TEST #imm,R0 TEST.B #imm,@R1 説明 汎用レジスタRnの内容とRmの論理積をと
り、結果がゼロのときTビットをセットする。結果が否
ゼロのときTビットはクリアされる。Rnの内容は変更
されない。特殊形として汎用レジスタR0とゼロ拡張し
た8ビット・イミディエート・データとの論理積、もし
くはR1相対で8ビット・メモリと8ビット・イミディ
エート・データとの論理積も可能である。メモリの内容
は変更されない。 使用例 TEST R0,R0 ;実行前 R0=H'00000000 ;実行後 T=1 TEST #H'80,R0 ;実行前 R0=H'FFFFFF7F ;実行後 T=1 TEST.B #H'A5,@R1 ;実行前 @R1=H'A5 ;実行後 T=0 コード MSB LSB TEST r,R 0001RRRRrrrr1000 TEST #imm,R0 10001000iiiiiiii TEST.B #imm,@R1 10000000iiiiiiii
【0126】TRAP(ソフトウエアトラップ) 書式 TRAP #imm 説明 トラップ例外処理を開始する。すなわちPCと
SRをスタックに退避し、指定ベクタの内容で表わされ
るアドレスへ分岐する。ベクタはイミディエートデータ
を2ビット左シフトし符号拡張したメモリアドレスその
ものである。PCは本命令の2命令後の先頭アドレスで
ある。RTEと組み合わせて、システム・コールに使用
する。 注意 遅延分岐であるので、本命令の直後の命令が分
岐に先立ち実行される。本命令と直後の命令との間に割
り込みは受け付けられない。直後の命令が分岐命令のと
き、不当命令として認識される。メモリからR15への
ロード命令の直後に連続して配置しないことが必要であ
る。ロード前の古いR15を誤って参照することにな
る。下記で対応されるように命令の順序変えが必要
である。 MOV #0,R0 → → MOV.L @R15+,R15 MOV.L @R15+,R15 → → MOV #0,R0 TRAP #15 TRAP #15 使用例 アト゛レス 0010 .data.l 10000000 ; ・・・・・・・ TRAP #H'10 ;H'10番地の内容のアドレスに分岐する ADD R1,R7 ;分岐に先立ち実行される TEST #0,R0 ;トラップルーチンの戻り先 ・・・・・・・ 10000000 MOV R0,R0 ;トラップルーチンの入り口 10000002 RTE ;上記TEST命令に戻る。 10000004 NOP ;RTEに先立ち実行される コード MSB LSB TRAP #imm 11000011iiiiiiii
【0127】XTRCT(切り出し)命令 書式 XTRCT Rm,Rn 説明 汎用レジスタRmとRnとを連結した64ビッ
トの内容から中央の32ビットを切り出し、結果をRn
に格納する。 使用例 XTRCT R0,R1 ;実行前 R0=H'01234567,R1=H'89ABCDEF ;実行後 R1=H'456789AB コード MSB LSB XTRCT r,R 0010RRRRrrrr1000
【0128】次に上記実施例で説明したマイクロコンピ
ュータなどを用いて行うことができる符号付き除算の実
施例について説明していく。
【0129】〔18〕符号付除算における被除数に対す
る前処理の原理
【0130】図29には本実施例に係る符号付き除算に
おける被除数に対する前処理の原理が概念的に示してあ
る。例えばY(商)=X(被除数)÷3(除数)で表さ
れる符号付き除算において、被除数Xが負のときは被除
数Xから1を引いた値(X−1)を被除数とする。概念
的には同図に示されるように商Yの座標軸を左側に1ず
らした状態で除算の処理を行う。これによって、商を求
める演算処理の途上で従来のように部分剰余が0である
か否かをその都度判定しなくても済み、且つ、その判定
のためのハードウェアも不要とされる。正確な余りを求
めるときは、最後に求まった余りを補正する。
【0131】 〔19〕符号付き除算の原理的な一例処理手順
【0132】図30には被除数が負の場合における符号
付き除算処理の原理的な一例処理手順が示される。同図
においては、−9÷−3を一例とする。−9は2の補数
表現で”110111”とされ、−3は”101とされ
る。先ず被除数は負であるから−9から1を引いた値”
110110”が被除数とされる。商の符号は被除数の
符号”1”と除数の符号”1”の排他的論理和から求め
られる(*1)。最初の部分剰余の算出は、被除数”1
10110”と、除数の符号ビットを上位側(左側)に
拡張した”1101”とを符号ビットの桁を合せて加算
又は減算することによって行われる。双方の符号ビット
の排他的論理和が0ならば減算とされ、1ならば加算と
される(*2)。この例の場合には減算とされる。これ
によって最初の部分剰余”000010”が得られる。
第1の部分剰余に対応される商は部分剰余の最上位ビッ
トと除数の符号ビットとの排他的論理和の反転論理値に
よって与えられる(*3)。以下同様にして順次商ビッ
トが求められる。正確な余りが必要な場合には、この例
に従えば最後の剰余に1を足す。同図のした側に示され
るように被除数をそのままの値”110111”にして
除算を行った場合には剰余の全ビットが”0”にされる
ことに起因して正し商ビットをそのまままでは求められ
ない。そのためには、部分剰余の全ビットが”0”であ
るか否かを部分剰余を算出する度に判定し、そうである
場合には当該商ビットの論理値を反転しなければならな
い。尚図31には負÷正の場合における符号付き除算処
理の一例が示され、図32には正÷正の場合および正÷
負の場合における符号付き除算処理のそれぞれ一例が示
される。
【0133】 〔20〕符号付き除算処理の全体的な処理手順
【0134】図33には上記説明から概略が理解された
と考えられる本実施例に係る符号付き除算の基本的な約
束ごと若しくは基本的な処理手順の全体が一般的形式で
示される。
【0135】《1》被除数に対する補正を行う。すなわ
ち、図34の(A)に示されるように被除数が負の場合
には被除数から1を引く。この処理は、被除数の符号を
調べて個別的に行うこともできるが、本実施例では、被
除数の符号ビットを抽出し、被除数からその符号ビット
を引く手法を採用する。すなわち、被除数のMSBであ
る符号ビットを引く操作を除算の前処理として採用す
る。被除数が負のとき被除数のMSBは1であるから被
除数から1が差引かれる。被除数が正のときそのMSB
は0であるから被除数はそのままにされる。このように
被除数からそのMSBを差引く処理を採用することによ
り、被除数が正であるか負であるかを考慮することなく
除算プログラムを作成することができ、しかもその様な
判定動作を要しないため除算処理が高速化し、その上、
被除数が正であるか負であるかにかかわらず同一の回路
を利用して除算を行うことができる。
【0136】ここで、被除数から差引くべき1とは、被
除数のLSBの重みを持った1として理解する。前記1
を差引くべき被除数のビット位置若しくは桁は被除数の
最下位ビット(LSB)である。あえてこのような説明
をするのは、前述のように、被除数が固定小数点数であ
る場合を考慮したものである。また、被除数が負のとき
の符号ビットは1で、正のときの符号ビットは0である
ことに着目すると、被除数からその符号ビット(被除数
のMSB)を差引けば、負の被除数から1を引いたこと
になる。これは、2の補数表現の負の整数から1の補数
表現への変換とみなすことができる。このようにすれ
ば、被除数が正か負かを考慮しなくても被除数に対する
前処理を行うことができる。図35には例えば、4ビッ
トの負の整数から1を引いた変換状態が示される。有限
ビット数の2の補数の最小値を1の補数に変換するには
1ビット余分に必要であるので、必要な場合は1ビット
拡張する。また、部分剰余は正になることもあるので、
負の整数に対して行った上記の変換を整数全体に拡張
し、新しい整数の表現を導入する。例えば、4ビット符
号付き整数の範囲では図36に示されるような表現が採
用される。尚、任意の整数をその数から1を引いた数で
表現したものをZZとすると、2の補数を用いた整数に
対し1を引く変換を行ったZZの表現は0以下の整数で
は1の補数と同一視でき、0以上の整数では本来の値よ
り1だけ小さい数で表現される。このとき、0の符号ビ
ットは負の数と同じ1となる。
【0137】《2》図34の(B)に示されるように被
除数と除数から商の符号を求める。すなわち被除数の符
号と除数の符号との排他的論理和から商の符号を予測す
る。
【0138】《3》順次部分剰余を求めながら商ビット
を立てていく。部分剰余を求めるための加算並びに減算
指令は図37の(A)に従って決定される。すなわち部
分剰余(又は被除数)の符号Qと除数の符号Mの排他的
論理和が0なら減算が指令され、概略的には部分剰余
(又は被除数)から除数が差し引かれる。部分剰余(又
は被除数)の符号Qと除数の符号Mの排他的論理和が1
なら加算が指令され、概略的には部分剰余(又は被除
数)に除数が加算される。商ビットは図37の(B)に
示されるように前記減算または加算後の部分剰余の符号
ビットと除数の符号ビットの排他的論理和の結果を反転
して得られる。
【0139】ここで商ビットの算出方法を更に詳細に説
明する。商ビットの算出手法をまとめた内容は、図37
の(B)に示され、その算出手法は以下のa),b),
c),d)に分類される。 a)A÷B (A≧0、B>0、AとBは2の補数)の
場合 公知のように、部分剰余の符号ビットが0のとき商ビッ
トを1、部分剰余の符号ビットが1のとき商ビットを0
とする。 b)A÷B (A≧0、B<0、AとBは2の補数)の
場合 商が負となるので、(a)の場合と商ビットの立て方を
逆にする。つまり、部分剰余の符号ビットが0のとき商
ビットを0、部分剰余の符号ビットが1のとき商ビット
を1とする。商は1の補数となる。前記の《4》で述べ
られるが、商ビットが全て求まったら最後に2の補数に
変換する。 c)A÷B (A<0、B<0、AとBは2の補数)の
場合 あらかじめ被除数から被除数のLSBの重みをもつ1を
引いておく。被除数と部分剰余の負の表現は1の補数と
なり、正の表現は本来の値よりLSBの重みをもつ1だ
け小さくなる。0以下の場合符号ビットMSBが1とな
り、0より大きい場合符号ビットMSBが0となる。商
は正となるので、部分剰余の符号ビットMSBが1のと
き商ビットを1とし、部分剰余の符号ビットMSBが0
のとき商ビットを0とする。 d)A÷B (A<0、B>0、AとBは2の補数)の
場合 あらかじめ被除数から被除数のLSBの重みをもつ1を
引いておく。被除数と部分剰余の負の表現は1の補数と
なり、正の表現は本来の値よりLSBの重みをもつ1だ
け小さくなる。0以下の場合符号ビットMSBが1とな
り、0より大きい場合符号ビットMSBが0となる。商
は負となるので、(c)の場合と商ビットの立て方を逆
にする。部分剰余の符号ビットMSBが1のとき商ビッ
トを1とし、部分剰余の符号ビットMSBが0のとき商
ビットを0とする。商は1の補数となる。後述の《4》
で述べられるが、商ビットが全て求まったら最後に2の
補数に変換する。
【0140】《4》前記《3》で得られた商は、商の符
号により必ずしも正確な値になっていないことがある。
前記《2》で求めた商の符号が1のときには商は1の補
数になっているからである。したがって、最終的な商
は、前記商の符号と商ビットにしたがって決定される。
図38に示されるように、商が負(商の符号ビットが
1)の場合には商は1の補数で表現されているので、
《3》で得られた商に1を足して2の補数に変換する補
正を行う。これによって正しい商が求まる。更に図38
に示されるように最終部分剰余に対する剰余補正を行
う。
【0141】〔21〕符号付き除算の具体例
【0142】図39及び図40には符号付き除算の上記
基本的な手順を採用した処理の具体的な一例が示され
る。同図に示される例は−8÷−3の符号付き除算であ
り、理解を容易にするために6ビットの汎用レジスタを
使用した説明とする。図40は、図39に示される最後
の処理に引き続いて実行される処理が示され、列方向の
記述の意味は図39に一致されている。各図においてR
0〜R4は夫々6ビットの汎用レジスタを意味し、Q,
M,Tはコントロールレジスタ若しくはステータスレジ
スタ中のビットフラグを意味し、Qは被除数又は部分剰
余の符号を格納するビット、Mは除数の符号を格納する
ビット、Tは商ビットやキャリーを格納するビットであ
る。図中の左端には命令コードとオペランドが記載さ
れ、それに対応する列には汎用レジスタ及びビットフラ
グの内容が示される。この汎用レジスタ及びビットフラ
グの内容を示す記述においてアンダーラインが付された
内容は対応命令の実行によってその内容が更新されたこ
とを意味する。×が書かれたビットは値が確定していな
いビットを意味する。以下この項において符号付き除算
処理を順次説明するが、先ずその説明で使用する記号に
ついての凡例を以下に示す。 ←;格納することを表す。 MSB(Rn);レジスタRnのMSB(最上位ビッ
ト)を表す。 LSB(Rn);レジスタRnのLSB(最下位ビッ
ト)を表す。 ^;排他的論理和を表す演算子である。 Rn<<=1;レジスタRnの値を1ビット左シフトす
ることを表す。 Rn>>=1;レジスタRnの値を1ビット右シフトす
ることを表す。 (Q:Rn);レジスタRnの最上位にQビットを付加
した7ビットの2進数を意味する。 (M:Rn);レジスタRnの最上位にMビットを付加
した7ビットの2進数を意味する。 〜;否定(ビット反転)を意味する演算子である。 (Rn:T)を右回転;TビットをレジスタRnのMS
BにシフトインしながらレジスタRnの値を右シフト
し、シフトアウトされた値のLSBをTビットに格納す
ることを表す。 (Rn:T)を左回転;TビットをレジスタRnのLS
BにシフトインしながらレジスタRnの値を左シフト
し、シフトアウトされた値のMSBをTビットに格納す
ることを表す。
【0143】(1)EOR R0,R0 R0←0。すなわちレジスタR0の値を全ビット0にす
る。 (2)SL3 R1 レジスタR1の下位3ビット(除数)を上位3ビットに
左シフトする。 (3)DIV0S R0,R2 Q←MSB(R2)、M←MSB(R0)=0、T←Q
^M=Q^0=Q。 したがって、Tビットには被除数の符号が格納される。 (4)MOVT R3 R3←T。すなわち、被除数の符号をLSB(R3)に
格納する。この被除数の符号は余りを求めるときに必要
とされる。 (5)SUBC R0,R2 R2←(R2−T)。すなわち、2の補数を1の補数に
変換している。換言すれば、被除数が負の場合にR2が
保持する被除数から1を引いているのと等価である。こ
の処理において実際には、被除数から被除数の符号ビッ
トMSBの値を差引いていることになるので、被除数が
正であるのか負であるを一切検出する必要はなく、何れ
の場合にも同じ命令を実行して対応できる。すなわち、
被除数が負の場合にだけ分岐して1を引く演算を行うよ
うな処理フローは不要とされる。 (6)DIV0S R1,R2 Q←MSB(R2)により、被除数の符号をQビットに
取得し、M←MSB(R1)により、除数の符号をMビ
ットに取得し、T←Q^Mにより、商の符号を取得す
る。 (7)DIV1 R1,R2 ”.arepeat 3”と”.aendr”との間に
ある命令DIV1 R1,R2が3回繰り返される。 命令DIV1の各実行サイクルにおいて、Q^M=0の
ときに減算指令を発行し、Q^M=1のときに加算指令
を発行し、Q←MSB(R2)によりQビットを取得
し、R2<<=1によりR2の被除数を1ビット左シフ
トし、LSB(R2)←TによりR2のLSBにTビッ
ト(この時は商の符号になっている)を格納し、(Q:
R2)←(Q:R2)±(M:R1)によって、加減算
指令にしたがった演算を行い、T←〜(Q^M)によっ
て商ビットをTビットに格納する。命令DIV1を3回
実行することにより、Qビットには最後の部分剰余の符
号が入っており、Tビットには商の最下位ビットが入っ
ており、R2の上位3ビットには最後の部分剰余が入っ
ており、その下位3ビットには商が入っている。下位か
ら3ビット目には(6)DIVOS R1,R2でTビ
ットに取得した商の符号が入っている。 (8)MOV R2,R4 R2をR4にコピーする。R4を利用して余りを求める
ためである。 (9)EXTS.W R2,R2 R2の下位から3ビット目を上位3ビット側に符号拡張
する。この符号は商の符号を表している。 (10)ROTCL R2 (R2:T)を左回転、すなわちTビットをレジスタR
2のLSBにシフトインしながらレジスタR2の値を左
シフトし、シフトアウトされた値のMSBをTビットに
格納する。これにより、R2の下位3ビットには商が格
納されており、Tビットには商の符号が格納される。 (11)ADDC R0,R2 R2←R2+Tにより、1の補数を2の補数に変換す
る。すなわち、この命令を実行する直前に商はR2が保
持し、Tビットには商の符号が格納されている。したが
って、Tビットの値をR2の値に加算することにより、
R2が1の補数を保持しているときにはそれが2の補数
に変換される。商が正のとき、T=0なので、Tを加算
してもR2の値は変化されない。商が負のときはT=1
なので、Tを加算することによって、R2の値は1の補
数から2の補数に変換される。これによって、正しい商
が求められる。 (12)DIV0S R0,R4 Q←MSB(R4)により、R4のMSB(余りの符
号)をQビットに格納し、M←MSB(R0)により、
R0(=0)のMSBをMビットに格納し、T←Q^M
=Q^0=Qにより、QビットとMビットの排他的論理
和すなわちQビット(余りの符号)を、Tビットに格納
して、余りの符号をTビットに得る。 (13)MOVT R0 R0←Tにより、Tビットに保持されている補正前の余
りの符号がR0のLSBに格納される。これは余りの補
正に用いられる。 (14)EOR R3,R0 R0←R3^R0により、被除数の符号と補正前の余り
の符号との排他的論理和の結果がR0のLSBに格納さ
れる。 (15)ROTCR R0 (R0:T)の右回転により、TビットをR0のMSB
にシフトインしながらR0の値を右シフトし、シフトア
ウトされた値のLSBをTビットに格納する。これによ
り、被除数の符号と補正前の余りの符号との排他的論理
和の結果がTビットに入る。 (16)BF L1 Tビットの値が0ならばラベルL1に分岐する。T=0
のときは被除数と余りの符号が同じなので余りを補正す
る必要はないからである。 (17)DIV0S R1,R4 Q←MSB(R4)により、Qビットに補正前の余りの
符号を格納し、M←MSB(R1)により、Mビットに
除数の符号を格納し、T←Q^Mにより、QビットとM
ビットの排他的論理和の結果をTビットに格納する。 (18)ROTCR R4 (R4:T)の右回転により、次のDIV1命令の左シ
フトを打ち消すための処理を行う。 (19)DIV1 R1,R4 Q^M=0のときに減算指令を発行し、Q^M=1のと
きに加算指令を発行し、Q←MSB(R4)によりQビ
ットを取得し、R4<<=1によりR4の値を1ビット
左シフトし、LSB(R4)←TによりR4のLSBに
Tビット(この時は除数の符号と補正前の余りの符号と
の排他的論理和の結果が入っている)を格納し、(Q:
R4)←(Q:R4)±(M:R1)により、Qビット
とR4の値を合せた7ビットからMビットとR1の値を
合せた7ビットを、前記加減算のための判定結果に従っ
て、加算又減算を行い、その結果をQビットとR4に格
納し、T←〜(Q^M)によってその排他的論理和の結
果を反転した値をTビットに格納する。 (20)SR3 R4 R4の上位3ビット(余りに相当)をR4の下位3ビッ
トに右シフトする。 (21)ADD R3,R4 R3は被除数の符号を保持している。R4は補正前の余
りを保持している。上記(5)の命令SUBC R0,
R2によって被除数からその符号が引かれているので、
R4にR3を加算することによって、換言すれば、余り
が1の補数であってもこれを2の補数に変換することに
より、R4の下位3ビットに正しい余りが得られる。 (22)EXTS.W R4,R4 補正された余りを下位3ビットに保持するR4の上位側
を符号拡張して全6ビットで最終的な余りを求める。
【0144】ここで前記図39及び図40の説明では、
3回のDIV1命令の繰返しにおいて、商と余りは共に
R2に保持し、DIV1命令の実行毎にR2の値を1ビ
ットづつ左シフトしている(R2<<=1)。この点に
関し、従来技術の演算手法のように被除数が負の場合に
部分剰余の全ビットが0であるかを判定しなければなら
ないとするなら、R2において判定対象とされる部分剰
余の桁位置を毎回変化させてその判定を行わなければな
らず、その処理は比較的繁雑になる。したがって、従来
技術のように被除数が負の場合に部分剰余の全ビットが
0であるかを判定しなければならないような演算手法に
おいては、商と余りを別々のレジスタに保持すれば、そ
の様に部分剰余の桁位置を毎回変化させて判定を行わな
くてもよくなる。但し、この場合には、商と余りを別々
のレジスタに保持させるために実行しなければならない
転送命令が逆に増えることになる。本実施例の場合に
は、部分剰余の全ビットが0であるか否かをその都度判
定しなくてもよいから、商と余りを共にR2に保持する
ことによって、実行すべき命令数も減らすことができ
て、符号付き除算処理の高速化が更に容易になる。
【0145】尚、図41及び図42には同様に−8÷
3、図43及び図44には同様に−9÷−3、図45及
び図46には同様に−9÷3、図47及び図48には同
様に8÷3、図49及び図50には同様に8÷−3の符
号付き除算処理の具体例がそれぞれ示される。これらの
内容は前記図39及び図40に対して被除数と除数の値
が相違するだけであるから詳細な説明を省略する。
【0146】 〔22〕符号付き除算のための演算ユニット
【0147】図51には前記符号付き除算を行うことが
できる演算ユニットの一実施例が示される。この演算ユ
ニットは、図6及び図7に示される汎用レジスタ部GR
B及び演算部OPBを、符号付き除算処理を説明し易い
ように見方を変えて表現したものとして把握することが
できる。図51において演算ユニットには代表的に5個
の汎用レジスタR0〜R4が示される。レジスタR2は
被除数または部分剰余を格納するのに利用され、レジス
タR1は除数を格納するのに利用される。3は商の符号
ビットや商ビットを一時的に格納するための制御ビット
レジスタ(第三の制御ビット格納手段)である。この制
御ビットレジスタ3を以下単にTビットとも記す。4は
シフト制御信号の指令により、前記Tビットを選択回路
14を介して最下位ビット或は最上位ビットにシフトイ
ンし、最上位ビット或は最下位ビットを選択回路15に
シフトアウトするシフタである。また、このシフタはシ
フト制御信号の指令により32ビット入力の上位16ビ
ットを下位16ビットに論理シフト又は下位16ビット
を上位16ビットに論理シフトし、出力する。5は被除
数または部分剰余の最上位ビットの上位に付加したビッ
トの役割をするための制御ビットレジスタ(第一の制御
ビット格納手段)である。この制御ビットレジスタ5を
以下単にQビットとも記す。6は除数の最上位ビットの
上位に付加したビットの役割をするための制御ビットレ
ジスタ(第二の制御ビット格納手段)である。この制御
ビットレジスタ6を以下単にMビットとも記す。7は算
術論理演算回路8に加減算の指示をする演算制御回路で
ある。8は32ビットの算術論理演算回路でる。この算
術論理演算回路8は、Aポートの入力に対しBポートの
入力を演算制御回路7の指令に従って加減算し、その結
果を被除数レジスタR2などにつながるバスに出力する
ことができ、キャリーまたはボローフラグ付き算術論理
演算を行う。更にこの算術論理演算回路8は、Bポート
の入力のMSB(最上位ビット)をMビットに出力で
き、その他に、加算、キャリー付き減算、キャリー付き
加算、排他的論理和(EOR)、論理積などの演算を行
うことができる。9は制御ビットレジスタ5の値に制御
ビットレジスタ6の値を算術論理演算回路8のキャリー
またはボローを含めて加減算する演算回路である。10
は演算回路9の結果と制御ビットレジスタとの排他的論
理和の否定を計算して、その結果を選択回路12に出力
することと、制御ビットレジスタ5の値と制御ビットレ
ジスタ6の値との排他的論理和を計算し、その結果を選
択回路12に出力することができる演算回路である。1
1は制御ビットレジスタ5の入力を選択するものであ
り、選択回路15を介するシフタ4からの出力と演算回
路9からの出力とのどちらかを選ぶための選択回路であ
る。12は算術論理演算回路8のキャリーまたはボロ
ー、演算回路10の演算結果、或は選択回路15の出力
の何れかを選択して、制御ビットレジスタ3または演算
回路9に出力する選択回路である。13は制御ビットレ
ジスタ5への入力を選択する選択回路11と演算回路9
への入力を選択する選択回路13とのどちらかを選択し
て出力する選択回路である。16は制御レジスタ3の出
力を算術論理演算回路8又は選択回路14に供給する選
択回路である。17は算術論理演算回路8のBポートに
入力が接続された符号拡張回路である。この回路は零拡
張も行うことができる。
【0148】図52には図51に示される算術論理演算
回路8、演算回路9、演算回路10、及び演算制御回路
7の一例が示される。前記演算制御回路7は、同図の
(b)に示されるように2入力型の排他的論理和回路
と、その出力と制御信号とを2入力とする排他的論理和
回路によって構成される。制御信号が0の時、演算回路
10は前者の排他的論理和回路の出力をそのまま出力
し、制御信号が1の時演算回路10は前者の排他的論理
和回路の出力を否定(反転)して出力する。演算回路1
0は、図52の(d)に示されるように2入力型の排他
的論理和回路と、その出力と制御信号とを2入力とする
排他的論理和回路とによって構成される。制御信号が0
のとき演算回路10は前者の排他的論理和回路の出力を
そのまま出力し、制御信号が1のとき演算回路10は前
者の排他的論理和回路の出力を否定(反転)して出力す
る。図52の(a)において算術論理演算回路8は、加
減算のための論理が代表的に示され、32ビットのフル
アダーを備える。B00〜B31はBポート入力、A0
0〜A31はAポート入力、C/Bはキャリ/ボロウで
あり、SUBは演算制御回路7の出力である。
【0149】 〔23〕符号付き除算に際しての演算ユニットの動作例
【0150】図53には符号付き除算のための命令列の
一例が示される。同図に示される記述は図51に示され
る回路を用いて32ビット÷16ビットの符号付き除算
を行って商と剰余(余り)を求めるためのものである。
この除算は、 R2÷R1=R2…R4 によって示されるように、符号付き32ビットの被除数
はレジスタR2が保持し、除数は符号付き16ビットと
されレジスタR1が保持する。商はレジスタR2が保持
し、剰余はレジスタR4が保持する。
【0151】図54〜図74には図53の命令を順次実
行したとき図51の回路の動作が順を追って示され、図
75〜図81にはやはり同様にそのときの動作がレジス
タの状態を中心に順を追って示される。これらの図面に
基づいて、符号付き除算に際して演算ユニットの動作を
順次命令単位で説明していく。なお、以下の説明では、
前述の通り32ビットデータを16ビットデータで除算
するのものとする。被除数および除数は最上位ビットを
符号ビットとした2の補数で与えられており、商も2の
補数で得るものとする。この説明では、商のオーバーフ
ローの検出は行っていない。被除数が2の補数の負の最
小値の場合、処理手順が意図したアルゴリズムと異なる
が、この場合は必ずオーバーフローとなるので、商を保
証しない。オーバーフローの検出が必要な場合はあらか
じめ行っておく。図53の命令列を実行する前提条件と
して、レジスタR1には16ビット符号付き除数が格納
されており、レジスタR2には被除数が格納されてい
る。レジスタR0,R3は作業用レジスタである。商は
レジスタR2に格納する。
【0152】(1)EOR R0,R0 図54及び図75に示されるように、この命令の実行に
よって作業用レジスタR0の値が0にされる。R0の値
が既に0となっている場合はこの命令は必要ない。図5
4においてシフタ4及び符号拡張回路17は動作され
ず、入力をスルーで出力する。算術論理演算回路8はA
ポート入力とBポート入力に対してビット対応で排他的
論理和を採る。これによってレジスタR0の値が全ビッ
ト0にされる。
【0153】(2)SL16 R1 図55及び図75に示されるように、この命令の実行に
よって、除数レジスタR1に格納された除数を16ビッ
ト上位にシフト(左シフト)し、下位16ビットに0を
シフトインする。16ビット左シフトはシフタ4で行
う。算術論理演算回路8はAポート入力をスルーで出力
する。
【0154】(3)DIV0S R0,R2 図56及び図75に示されるように、この命令により、
レジスタR2のMSBをQビットに、レジスタR0のM
SBをMビットに格納し、QビットとMビットの排他的
論理和をTビットに格納する。このとき、レジスタR0
の値は0にされているので、TビットにはレジスタR2
が保持している被除数のMSBが格納されることにな
る。この処理において、シフタ4は入力のMSBを選択
回路15に与える。符号拡張回路17は入力をスルーで
出力する。算術論理演算回路8はBポート入力のMSB
を出力する。QビットとMビットの排他的論理和演算は
演算回路10が行う。
【0155】(4)MOVT R3 図57及び図76に示されるように、この命令により、
Tビットの値すなわち被除数の符号をレジスタR3に格
納する。これは、余りを求めるときのために被除数の符
号ビットを保存するためである。この処理において、算
術論理演算回路8は、各ビット0の32ビットのビット
列にTビットの値を加えて出力する。
【0156】(5)SUBC R0,R2 図58及び図76に示されるように、この命令により、
レジスタR2からレジスタR0をキャリー付で減算す
る。Tビットがキャリービットである。ここでは、レジ
スタR0は0なので、レジスタR2からTビット(被除
数の符号ビット)を引くことにより2の補数を1の補数
に変換している。この処理においてシフタ4及び符号拡
張回路17は入力をスルーで出力する。算術論理演算回
路8は、Aポート入力からBポート入力とC/B入力と
を減算し、その減算結果とC/Bとを出力する。すなわ
ち、SUBC命令で、被除数レジスタであるR2からR
0をキャリー付きで減算している。キャリーは制御ビッ
トレジスタ3と同一視している。R0の値は0なので、
被除数レジスタであるR2から制御ビットレジスタ3の
値を引いたことになる。これで、被除数から被除数の符
号ビットの値を引く処理が終了する。この処理により被
除数が0以上であった場合は被除数がそのままである
が、被除数が負であった場合には、被除数が1の補数で
表現されたことになる。図35には、被除数が負で4ビ
ットの場合に被除数が補正によりどのように表現がかわ
るかを表わす例を示す。4ビットの符号付き2の補数の
最小値”1000”に上記補正を加えると”1011
1”のように5ビット必要になる。本実施例では被除数
は32ビット符号付き2の補数で表現されているので、
32ビット符号付き2の補数の最小値に上記補正を加え
ると33ビット必要になる。制御ビットレジスタ3を最
上位ビットとする33ビットで表現することもできる
が、本実施例ではそこまで実施していない。なぜなら
ば、被除数が32ビット符号付き2の補数の最小値の場
合、必ずオーバーフローが発生し、正しい商が得られな
いが、オーバーフローが発生する場合をあらかじめ検出
して除外すればよいからである。
【0157】(6)DIV0S R1,R2 図59及び図76に示されるように、この命令により、
レジスタR2に格納されている被除数のMSB(符号ビ
ット)をQビットに、レジスタR1に格納されている除
数のMSB(符号ビット)をMビットに格納し、Qビッ
トとMビットの排他的論理和を採り、これを商の符号と
してTビットに格納する。この動作は1つ手前のSUB
C R0,R2の実行でオーバーフローしないときに保
証される。このとき、シフタ4は32ビット入力のMS
Bを出力する。符号拡張回路17は入力をスルーで出力
する。算術論理演算回路8は、Bポート入力のMSBを
出力する。排他的論理和演算は演算回路10が行う。こ
のDIV0S命令により、3つの制御ビットレジスタの
初期化が行われる。DIV0S命令の第一オペランドに
除数レジスタR1を設定し、第二オペランドに被除数レ
ジスタR2であるR2を設定している。DIV0S命令
は第一オペランドを算術論理演算回路8に入力し、第一
オペランドのMSBを制御ビットレジスタ6に格納す
る。その処理と並行してDIV0S命令は第二オペラン
ドのMSBをシフタ4によりシフトアウトし、選択回路
15および選択回路11を経由して、制御ビットレジス
タ5に格納する。制御ビットレジスタ5と制御ビットレ
ジスタ6の値はDIV0S命令終了後も保持しておく。
制御ビットレジスタ5の値は選択回路13を経由して、
演算回路10の入力値となる。制御ビットレジスタ6の
値は演算回路10の入力値となる。演算回路10は上記
2つの入力の排他的論理和を計算し結果を、選択回路1
2を経由して、制御ビットレジスタ3に格納する。制御
ビットレジスタ3の値はDIV0S命令終了後も保持し
ておく。第一オペランドのR1と第二オペランドのR2
は書き替えない。
【0158】このDIV0S命令は被除数の符号ビット
を制御ビットレジスタ5に格納し、除数の符号ビットを
制御ビットレジスタ6に格納し、制御ビットレジスタ5
と制御ビットレジスタ6の排他的論理和を制御ビットレ
ジスタ3に格納している。制御ビットレジスタ5と制御
ビットレジスタ6の値は、次の除算の最初のステップで
加算を行うか減算を行うかの判断に用いる。制御ビット
レジスタ6は次の除算で除数の符号拡張部として利用す
る。制御ビットレジスタ3の値は商の符号を表わしてい
る。商が負の場合、商は一度1の補数で求めてから2の
補数に変換される。16ビット符号付き2の補数の最小
値が商となる場合、1の補数表現では17ビット必要に
なる。その17ビットの1の補数の符号ビットとなるの
が本DIV0S命令終了直後の制御ビットレジスタ3の
値である。
【0159】被除数が32ビット符号付き2の補数の最
小値をとる場合、1を引く上記補正により被除数レジス
タR2は正の最大値になっているため、DIV0S命令
終了直後の制御ビットレジスタ5の値は0となる。本来
ならば制御ビットレジスタ5には被除数の符号ビットが
入るので、制御ビットレジスタ5の値は1となる筈であ
る。このために、被除数が32ビット符号付き2の補数
の最小値をとる場合、制御手順が本来の意図と異なる。
しかし、先ほども注意したように、被除数が32ビット
符号付き2の補数の最小値をとる場合は商が必ずオーバ
ーフローするが、オーバーフローが発生する場合をあら
かじめ検出して除外しておけばよい。以下、被除数が3
2ビット符号付き2の補数の最小値をとる場合について
特別な注意は行わない。
【0160】(7)DIV1 R1,R2 図53の記述において”.arepeat 16”はア
センブラのマクロ命令で、”.arepeat 16”
と”.aendr”との間にある命令を16回展開する
と言う意味である。したがって、DIV1命令は16回
繰り返され、これによって実質的な除算が行われる。D
IV1命令の第一オペランドのR1が除数レジスタ、D
IV1命令の第2オペランドのR2が被除数レジスタで
ある。図60及び図77において、1回のDIV1命令
の実行は、(i),(ii),(iii),(iv)の
処理に大別される。
【0161】(i)初めに制御ビットレジスタ5と制御
ビットレジスタ6の値を演算制御回路7に取り込み、2
つの入力の排他的論理和の否定を計算する。この結果は
算術論理演算回路8に送られ、算術論理演算回路8はそ
の値を演算指令として保持しておく。上記排他的論理和
の結果が1の場合減算指令となり、0の場合加算指令と
なる。 (ii)次に被除数レジスタR2の値がシフタ4に入力
される。シフタ4は入力された32ビットを上位に1ビ
ットシフトする。同時に制御ビットレジスタ3の値をL
SBにシフトインし、シフトアウトされたMSBビット
を選択回路15を経て選択回路11に送り、制御ビット
レジスタ5に格納する。 (iii)次にシフタ4の32ビットの出力の最上位に
制御ビットレジスタ5の値を付加した33ビットに対
し、除数レジスタR1の最上位に制御ビットレジスタを
付加した33ビットを加算または減算する。(i)で加
算指令があった場合は加算、(i)で減算指令があった
場合は減算を行う。シフタ4の32ビットの出力と除数
レジスタR1の値との加減算は算術論理演算回路8で行
う。その結果、算術論理演算回路8で生じたキャリーま
たはボローを選択回路12を経て演算回路9に送る。算
術論理演算回路8で生じた32ビットの演算結果は被除
数レジスタR2に格納する。制御ビットレジスタ5と制
御ビットレジスタ6との加減算は算術論理演算回路8で
先ほど生じたキャリーまたはボロー付きで演算回路9で
行う。演算回路9の結果は部分剰余の符号ビットとな
る。この部分剰余の符号は一方で選択回路11に送られ
制御ビットレジスタ5に格納され、もう一方で、演算回
路10の入力値となる。 (iv)演算回路10は、この部分剰余の符号と制御ビ
ットレジスタ6の値との排他的論理和の否定を計算す
る。その結果は選択回路12に送られ、制御ビットレジ
スタ3に格納される。この時の制御ビットレジスタ3の
値が商ビットとなる。
【0162】DIV1命令を16回繰り返した直後に
は、制御ビットレジスタ5には最後の部分剰余の符号が
入っており、制御ビットレジスタ3には商の最下位ビッ
トが入っており、被除数レジスタR2の上位16ビット
には最後の部分剰余が入っており、下位16ビットには
17ビットの商の上位16ビットが入っている。
【0163】(8)MOV R2,R4 図61に示されるように、この命令により、レジスタR
2の上位16ビットに保持されている最後の部分剰余を
商を求める手段で破壊しないように、当該レジスタR2
の値をレジスタR4に退避する。
【0164】(9)EXTS.W R2,R2 前記DIV0S命令でTビットに出力した商の符号が、
前記DIV1命令を16回繰返すことにより、レジスタ
R2の下位16ビットの符号ビットの位置にきている。
EXTS.W R2,R2は、図62及び図77に示さ
れるように、その下位16ビットの符号ビットを上位1
6ビットに符号拡張する。この処理において、図62の
符号拡張回路17は下位16ビットを32ビットに符号
拡張する。算術論理演算回路8は入力をスルーで出力す
る。すなわち、EXTX.W命令で被除数レジスタR2
の下位16ビットの符号を上位16ビットに拡張してい
る。被除数レジスタR2の下位16ビットの符号ビット
には前記処理(6)DIVOS R1,R2で求めた商
の符号ビットが格納されているので、この商の符号を上
位16ビットに拡張している。
【0165】(10)ROTCL R2 Tビットには前記DIV1命令の16回目で求めた最後
の商ビットが入っている。図63及び図78に示される
ように、このROTCL命令では、シフタ4を用いて、
TビットをレジスタR2のLSBにシフトインすると同
時に、レジスタR2の値を左シフトして、シフトアウト
されたMSB(符号ビット)をTビットに出力する。す
なわち、制御ビットレジスタ3に格納されていた商の最
下位ビットを被除数レジスタR2にシフトインする。シ
フトアウトされた符号ビットは制御ビットレジスタ3に
格納される。このとき、被除数レジスタR2には商が格
納されている。制御ビットレジスタ3の値が0のとき、
つまり、商が正の場合は補正が不要だが、制御ビットレ
ジスタ3の値が1のとき、つまり、商が負の場合は商が
1の補数で表現されているので2の補数に変換する必要
がある。
【0166】(11)ADDC R0,R2 この命令を実行する直前にレジスタR2は商を保持し、
Tビットには商の符号が格納されている。このADDC
命令は、図64及び図78に示されるように、Tビット
の値をレジスタR2の値に加算することにより、レジス
タR2が保持する1の補数を2の補数に変換する。商が
正のとき、T=0なので、Tを加算してもレジスタR2
の値は変化しない。商が負のときはT=1なので、Tを
加算することによって、レジスタR2の値は1の補数か
ら2の補数に変換される。これによって、正しい商が求
められる。この処理において、算術論理演算回路8は、
Aポート入力からBポート入力を引き、更に、Tビット
(キャリー/ボロー)を引き、ボローをTビットに格納
する。すなわち、ADDC命令はキャリー付き加算命令
である。制御ビットレジスタ3はキャリーと同一視して
おり、ADDC命令は被除数レジスタR2に値が0のレ
ジスタR0と制御ビットレジスタ3を加算している。制
御ビットレジスタ3の値が0の場合は被除数レジスタR
2の値はADDC命令実行前と変わらず、制御ビットレ
ジスタ3の値が1の場合は被除数レジスタR2に格納さ
れた商を1の補数から2の補数に変換したことになる。
この結果、正しい商を得ることができる。
【0167】図53において前記命令ADDCの以下に
記述された命令DIV0S〜命令EXTS.Wは余りを
求めるときに必要な処理とされる。
【0168】(12)DIV0S R0,R4 この命令は、レジスタR4のMSB(余りの符号)をT
ビットに格納することを目的とする。すなわち、図65
及び図78に示されるように、レジスタR4のMSBが
Qビットに入り、レジスタR0のMSBがMビットに入
り、QビットとMビットの排他的論理和がTビットに入
れられる。このとき、前述のように、レジスタR0の値
は0であるから、Mビットは0で、TビットにはQビッ
トの値(余りの符号)がそのまま入ることになる。斯る
処理において、シフタ4は入力のMSBをQビットに出
力する。符号拡張回路17は、入力をスルーで出力す
る。算術論理演算回路8はBポート入力のMSB(符号
ビット)をMビットとして出力する。演算回路10は2
入力の排他的論理和を採って出力する。
【0169】(13)MOVT R0 この命令は、図66及び図79に示されるように、Tビ
ットの値(補正前の余りの符号)をレジスタR0に格納
する。斯る処理において、算術論理演算器8は、全ビッ
ト0の32ビットのデータにTビットの値を加算してレ
ジスタR0に向けて出力する。
【0170】(14)EOR R3,R0 この命令は、図67及び図79に示されるようにレジス
タR3の内容とレジスタR0の内容に対して排他的論理
和を採る。この処理において、シフタ4及び符号拡張回
路17は入力をスルーで出力する。算術論理演算回路8
は、Aポート入力とBポート入力とに対してビット毎に
排他的論理和を採ってレジスタR0に向けて出力する。
【0171】(15)ROTCR R0 前記命令EORによりレジスタR0のLSBは、被除数
の符号と余り(補正前)の符号が異なっているときには
1にされ、その符号が一致しているときには0にされて
いる。命令ROTCR R0は、図68及び図79に示
されるように、そのようなレジスタR0のLSBをTビ
ットに格納する処理を行う。この処理において、シフタ
4はMSBにTビットをシフトインしながらレジスタR
0の値を右シフトし、シフトアウトされたLSBをTビ
ットに格納する。算術論理演算器8はAポート入力をス
ルーで出力する。
【0172】(16)BF L1 この命令は、Tビットの値が0のときにラベルL1が付
いた命令に分岐することを指示し、Tビットの値が1の
ときにはこのBF命令の次の命令DIV0Sを実行する
ことを指示する。
【0173】(17)DIV0S R1,R4 この命令は、これに続けて実行される命令ROTCR及
び命令DIV1と共に余りの補正を行う。このとき、レ
ジスタR4の上位16ビットには補正前の余りが格納さ
れており、レジスタR1の上位16ビットには除数が格
納されている。両者の符号が異なるときは加算、一致す
るときには減算を行うことになる。このため当該DIV
0S命令では、図69及び図80に示されるように、Q
ビットに余り(補正前)の符号、Mビットに除数の符号
を格納し、後記命令DIV1における加減算の判定に供
される。TビットにはQビットとMビットの排他的論理
和の結果が格納される。この処理において、シフタ4は
入力のMSBをQビットに出力する。符号拡張回路17
は入力をスルーで出力する。算術論理演算回路8はBポ
ート入力のMSB(符号ビット)を出力する。演算回路
10は2入力の排他的論理和を採って出力する。
【0174】(18)ROTCR R4 後記命令DIV1では左シフトしてから加算又は減算を
行うため、この左シフトを打ち消すためにレジスタR4
の値を右ローテイトしている。この状態は図70及び図
80に示される。この処理において、シフタ4はMSB
にTビットをシフトインしながらレジスタR4の値を右
シフトし、シフトアウトされたLSBをTビットとして
格納する。算術論理演算回路8はAポート入力をスルー
で出力する。
【0175】(19)DIV1 R1,R4 この命令DIV1は、図71及び図80に示されるよう
に、(i),(ii),(iii),(iv)の処理に
大別される。
【0176】(i)初めに制御ビットレジスタ5のQビ
ットと制御ビットレジスタ6のMビットを演算制御回路
7に取り込み、2つの入力の排他的論理和の否定を計算
する。この結果は算術論理演算回路8に送られ、算術論
理演算回路8はその値を演算指令として保持しておく。
上記排他的論理和の結果が1の場合(補正前の余りの符
号と除数の符号が同じ場合)には減算指令とされ、0の
場合(補正前の余りの符号と除数の符号が異なる場合)
加算指令とされる。 (ii)次にレジスタR4の値がシフタ4に入力され
る。シフタ4は、レジスタR4の値のLSBにTビット
をシフトインしながらレジスタR4の値を1ビット左シ
フトし、シフトアウトしたMSBをQビットに格納す
る。 (iii)次に、QビットとレジスタR4の値を合せた
33ビットからMビットとレジスタR1の値を合せた3
3ビットを、前記(i)で取得した判定結果に従って、
加算又減算を行い、その結果をQビットとレジスタR4
に格納する。シフタ4の出力とレジスタR1の値との加
減算は算術論理演算回路8で行う。その結果算術論理演
算回路8で生じたキャリーまたはボローを選択回路12
を経て演算回路9に送る。演算回路9はそのキャリー/
ボローを入力し、これにしたがってQビットとMビット
の加減算を行う。 (iv)演算回路10は、前記演算回路9で演算された
値すなわちQビットとMビットとの排他的論理和の否定
を計算する。この結果は選択回路12を介してTビット
に格納される。
【0177】(20)SR16 R4 この命令は、図72及び図81に示されるように、レジ
スタR4の上位16ビット(余りに相当)をレジスタR
4の下位16ビットに右シフトする。シフト処理はシフ
タ4が行う。
【0178】(21)ADD R3,R4 レジスタR3には、前記命令MOVT R3によって被
除数の符号が格納されている。前記命令(5)SUBC
R0,R2によって被除数からその符号(MSB)が
引かれているので、正しい余りを求めるには、レジスタ
R4に保持されている余りを補正しなければならない場
合がある。命令ADD R3,R4では、補正前の余り
に被除数の符号(R3)を加えている。この処理は図7
3及び図81に示されており、シフタ4と符号拡張回路
17は夫々入力をスルーで出力する。算術論理演算回路
8はAポート入力にBポート入力を加算して、その加算
結果とキャリーを出力する。加算結果はレジスタR4に
格納され、当該レジスタR4の下位16ビットに正しい
余りが保持される。
【0179】(22)EXTS.W R4,R4 この命令は、図74及び図81に示されるように、下位
16ビットに正しい余りが格納されているレジスタR4
の上位側を符号拡張して全32ビットの最終的な余りを
求める。この処理において、符号拡張回路17は、入力
の下位側から第16ビット目の符号を上位16ビットに
符号拡張する。算術論理演算回路8はBポート入力をス
ルーでレジスタR4に向けて出力する。
【0180】図54〜図74に亘って説明した符号付き
除算処理をフローチャートにまとめると、図82の
(A)に示される前処理、除算1、及び後処理に大別さ
れ、前記除算1の処理は図83の(A)に示されるよう
に除算ステップを16回繰返し実行する。前処理の内容
は図82の(B)に示され、除算ステップの処理内容は
図83の(B)に示され、後処理の内容は図85に示さ
れる。後処理の中では商補正,第1の剰余補正手段,第
2の剰余補正手段を行う。商補正の処理は図84の
(B)に示され、第1の剰余補正手段は図85の(A)
に示され、第2の剰余補正手段は図85の(B)に示さ
れる。各フローチャートの内容については更に説明を要
さずともその内容は前記説明から容易に理解されよう。
【0181】図53の命令記述に従った例では、商と余
りは同一のレジスタR2に保持したが、双方を別のレジ
スタに入れるようにしてもよい。例えば商を図示しない
レジスタR5に入れるなら、図53の記述において、命
令EOR R0,R0の次に命令MOV R0,R5を
挿入し、更に、命令DIV1 R1,R2の前に命令R
OTCL R5を挿入して当該命令DIV1 R1,R
2及び命令ROTCLを16回繰返すようにする。そし
て、命令EXTS.W R2,R2を命令EXTS.W
R5,R5に変更し、次の命令ROTCL R2を命
令ROTCLR5に変更し、その次の命令ADDC R
0,R2を命令ADDC R0,R5に変更すればよ
い。
【0182】なお、図86〜図91には符号付き除算の
ための命令記述の他の態様例が示される。これらの態様
は共に余りに関する補正処理の記述が省略されている。
SL8 Rn命令はレジスタRnを8ビット左シフトす
る命令である。この命令実行後のRn下位8ビットの各
ビットは0である。EXTS.B Rn,Rm命令はR
nの下位8ビットを32ビットに符号拡張し、Rmに格
納する命令である。これらの内容については更に詳細に
説明するまでもなくその内容は前記実施例の説明から容
易に理解されよう。
【0183】〔24〕DIVS0/DIV0U/DIV
1(ステップ除算)命令
【0184】ここで、上記説明で使用したDIV0S命
令、及びDIV1命令の動作例と使用例について説明す
る。以下に示す内容は前記項目〔17〕の命令一覧にお
ける前提条件を共通にする。その項目に含まれるDIV
1命令などとはC言語で表記された動作例においてその
細部で相違する。 書式 DIV1 Rm,Rn DIVOS Rm,Rn DIVOU 説明 汎用レジスタRnの内容32ビットをRmの内
容で1ステップ除算し、結果の1ビットをTビットに格
納する。DIVOSは符号付き除算用の初期化命令で被
除数(Rn)のMSBをQビットに、除数(Rm)のM
SBをMビットに、MビットとQビットのEORをTビ
ットに格納する。DIVOUは符号無し除算用の初期化
命令で、M/Q/Tビットを0にクリアする。DIV1
を(必要であればROTCLと組み合わせて)除数のビ
ット数分繰り返すことによって、商を得る。この繰り返
し中は、指定したレジスタとM/Q/Tビットに中間結
果を格納している。これらを不必要にソフトウエアで書
き替えると、演算結果が保証できなくなる。ゼロ除算と
オーバーフローの検出、および剰余の演算は用意してい
ない。除算のシーケンスは下記使用例を参考にできる。 動作 extern unsigned char Q,M,T; extern unsigned long PC,R[16]; DIVOU() /* DIVOU */ { M=Q=T=0; PC+=2; } DIVOS(long m, long n) /* DIVOS Rm,Rn */ { if((R[n] & 0x80000000)==0) Q=0; else Q=1; if((R[m] & 0x80000000)==0) M=0; else M=1; T=!(M==Q); PC+=2; } DIV1(long m, long n) /* DIV1 Rm,Rn */ { unsigned long tmp0; unsigned char old_q, tmp1; old_q=Q; Q=(unsigned char)((0x80000000 & R[n])!=0); R[n]<<=1; R[n]|=(unsigned long)T; switch(old_q){ case 0: switch(M){ case 0: tmp0=R[n]; R[n]-=R[m]; tmp1=(R[n]>tmp0); switch(Q){ case 0: Q=tmp1; break; case 1: Q=(unsigned char)(tmp1==0); break; } break; case 1: tmp0=R[n]; R[n]+=R[m]; tmp1=(R[n]<tmp0); switch(Q){ case 0: Q=(unsigned char)(tmp1==0); break; case 1: Q=tmp1; break; } break; } break; case 1: switch(M){ case 0: tmp0=R[n]; R[n]+=R[m]; tmp1=(R[n]<tmp0); switch(Q){ case 0: Q=tmp1; break; case 1: Q=(unsigned char)(tmp1==0); break; } break; case 1: tmp0=R[n]; R[n]-=R[m]; tmp1=(R[n]>tmp0); switch(Q){ case 0: Q=(unsigned char)(tmp1==0); break; case 1: Q=tmp1; break; } break; } break; } T=(Q==M); PC+=2; } 使用例1 R1(32bit)÷R0(16bit)=R1(16bit):
符号無し SL16 R0 ;除数を上位16bit、下位16b
itを0に設定 TEST R0,R0 ;ゼロ除算チェックを行う。TEST
R0,R0は、R0とR0の論理積が0のときTビッ
トを1とし、1のときTビットを0とする命令である。 BT ZERO_DIV ;T=0のときZERO_DIVに分
岐する。 CMP/HS R0,R1 ;オーバーフローチェックを行う。即
ち符号無しでR0≦R1のときTビットを1とする。 BT OVER_DIV ; DIVOU ;フラグの初期化 .arepeat 16 ; DIV1 R0,R1 ;16回繰り返し .aendr ; ROTCL R1 ; EXTU.W R1,R1 ;R1=商 使用例2 R1:R2(64bit)÷R0(32bit)=R2(32b
it):符号無し TEST R0,R0 ;ゼロ除算チェック BT ZERO_DIV ; CMP/HS R0,R1 ;オーバーフローチェック BT OVER_DIV ; DIVOU ;フラグの初期化 .arepeat 32 ; ROTCL R2 ;32回繰り返し DIV1 R0,R1 ; .aendr ; ROTCL R2 ;R2=商 使用例3 R1(16bit)÷R0(16bit)=R1(16bit):
符号付き SL16 R0 ;除数を上位16bit、下位16b
itを0に設定 EXTS.W R1,R1 ;被除数は符号拡張して32bit EOR R2,R2 ;R2=0 DIVOS R2,R1 ; SUBC R2,R1 ;被除数が負のとき、−1する。 DIVOS R0,R1 ;フラグの初期化 .arepeat 16 ; DIV1 R0,R1 ;16回繰り返し .aendr ; EXTS.W R1,R1 ;R1=商(1の補数表現) ROTCL R1 ; ADDC R2,R1 ;商の符号ビットMSBが1のとき、
+1して2の補数 表現に変
換 EXTS.W R1,R1 ;R1=商(2の補数表現) 使用例4 R2(32bit)÷R0(32bit)=R2(32bit):
符号付き EOR R3,R3 ; DIVOS R3,R2 ; SUBC R1,R1 ;被除数は符号拡張して64bit
(R1:R2) SUBC R3,R2 ;被除数が負のとき、−1する。 DIVOS R0,R1 ;フラグの初期化 .arepeat 32 ; ROTCL R2 ;32回繰り返し DIV1 R0,R1 ; .aendr ; ROTCL R2 ;R2=商(1の補数表現) ADDC R3,R2 ;商の符号ビットMSBが1のとき、
+1して2の補数 表現に変
換 ;R2=商(2の補数表現)
【0185】以上本発明者によってなされた発明を実施
例に基づいて具体的に説明したが、本発明はそれに限定
されるものではなく、その要旨を逸脱しない範囲におい
て種々変更可能であることは言うまでもない。
【0186】例えば、データ語長と固定長命令フォーマ
ットのビット数とは、32ビットのデータ語長と16ビ
ット固定長命令フォーマットとに限定されず、夫々2の
べき乗のビット数を以て変更することができる。符号付
き除算は、32ビット3オペランドRISC用命令など
にも適用できる。符号付き除算のための制御はマイクロ
プログラム方式のほかに、専用の演算回路を構成してワ
イヤードロジックで制御してもよい。また、符号付き除
算において、上記DIV1命令などの専用命令が無い場
合には、同様の処理を他の命令によってサブルーチン化
して対処することも可能である。
【0187】以上の説明では主として本発明者によって
なされた発明をその背景となった利用分野であるプログ
ラムROMを内蔵するマイクロコンピュータに適用した
場合について説明したが本発明はそれに限定されるもの
ではなく、プログラムROMやその多周辺回路を含まな
いマイクロコンピュータにも広く適用することができ
る。また、上記実施例では符号付き除算を非回復法に適
用した場合について説明したが、回復法にも適用できる
ことはいうまでもない。
【0188】
【発明の効果】本願において開示される発明のうち代表
的なものによって得られる効果を簡単に説明すれば下記
の通りである。
【0189】(1)汎用レジスタ方式を採用するマイク
ロコンピュータにおいて、命令実行手段に供給される最
大のデータ語長よりもビット数の少ない固定長命令フォ
ーマットを採用することにより、従来の32ビットのよ
うな固定長命令フォーマットを持つRISCマシンにみ
られる命令デコード処理の単純化などの利益を享受しつ
つ、プログラム容量が小さく若しくはプログラムメモリ
の利用効率が高くしかもシステムコストの小さいマイク
ロプロセッサを得ることができるという効果がある。 (2)前記固定長命令フォーマット及び前記最大データ
語長にそれぞれ2のべき乗のビット数を設定することに
より、例えば、最大データ語長が32ビットのとき命令
フォーマットを16ビットに固定することにより、メモ
リ上におけるプログラムのミスアライメントの防止、並
びに市販されている一般的なメモリなどとの整合性を保
ち、且つ、同一ビット構成のROM/RAM上に命令及
びデータどちらでも展開することができるという効果を
得る。 (3)前記固定長命令フォーマット及び前記最大データ
語長にそれぞれ2のべき乗のビット数を設定するとき、
バス幅全体を使って複数命令を同一サイクルでプリフェ
ッチすることにより、最大データ語長に等しいビット数
の内部バスを利用して能率的に命令をフェッチすること
ができると共に命令フェッチのためのバスアクセス回数
を減らすことができる。 (4)内部バスがデータ転送と命令フェッチに共用され
る場合、メモリに対するデータフェッチと命令フェッチ
が競合したとき、データフェッチを優先し、このデータ
フェッチに競合する命令フェッチを含む命令実行スケジ
ュールを全体的に遅延させるパイプ制御を行うようにす
ることにより、データフェッチと命令フェッチが競合し
たときの処理若しくはそれに起因する後処理を簡単化す
ることができるという効果がある。 (5)特定のレジスタの値に対してディスプレースメン
トの値をオフセットとするレジスタ相対でイミディエー
トデータを指定させる記述を含む命令をサポートするこ
とにより、固定長命令フォーマットのビット数の制限が
イミディエートデータの利用に制限を与えないようにす
ることができるという効果がある。 (6)命令中にレジスタ指定フィールドがないのにも拘
らずオペランドとして固定された特定の汎用レジスタを
暗黙的に指定させる命令をサポートすることにより、ビ
ット数が制限された固定長命令フォーマットであっても
処理上必要なディスプレースメント若しくはイミディエ
ートデータのビット数を極力多くすることができるとい
う効果がある。 (7)指定条件に対する演算結果の真偽を所定の状態フ
ラグに反映させる記述を含む命令をサポートすることに
より、ビット数が制限された固定長命令フォーマットで
あっても、処理上必要なディスプレースメント若しくは
イミディエートデータのビット数を極力多くすることが
できるという効果がある。 (8)これらの効果により、固定長命令フォーマットの
ビット数がデータ語長よりも少なくてもイミディエート
データの利用や絶対アドレス指定に制限を及ぼさないこ
と、限られたビット数の固定長命令フォーマットの中で
必要なディスプレースメントなどの記述が可能であるこ
と、メモリ上におけるプログラム配置のミスアライメン
トの防止に寄与すること、並びにサポートする命令の内
容という点からコード効率もしくはメモリ利用効率を一
層向上させることなど、データ語長よりも少ないビット
数の固定長命令フォーマットを採用することに付随する
種々の問題点を解決することができる。 (9) 汎用レジスタに含まれるレジスタ競合状態を命
令フォーマット中に含まれるレジスタ指定領域の情報に
基づいて検出し、この検出結果と命令実行サイクル数に
基づいて相対的に後の命令の実行を遅延させるパイプ制
御手段とを採用することにより、汎用レジスタ方式を利
用してパイプライン的に実行される前後の命令による前
記汎用レジスタの利用が競合する状態に簡単に対処する
ことができる。 (10)16ビット固定長命令フォーマットのとき、条
件分岐命令のディスプレースメントを8ビットに固定
し、サブルーチン分岐命令及び無条件分岐命令のディス
プレースメントを12ビットに固定することにより、命
令フォーマット長が制限された中で実際の動作に実質的
な悪影響を与えることなく分岐命令の種類に応じた適切
な分岐先を指定することができる。
【0190】(11)被除数が負の場合、被除数のLS
Bの重みを持つ1を該被除数から差引く前処理を行うこ
とにより、従来のように部分剰余が0か否かをその都度
判定しなくても符号付のままで除算を行うことができる
ようになる。これにより、除算を高速に実行することが
できる。換言すれば、従来において部分剰余が0か否か
を短いステップ数で判定するための専用的なハードウェ
アを設けて除算を高速化したのと同様若しくはそれ以上
の効果を、ハードウェア量を増大させることなく実現す
ることができる。 (12)部分剰余が0か否かをその都度判定する従来技
術で多倍長(任意長)符号付き除算を行う場合には部分
剰余のビット数(8ビット、16ビット、32ビット、
64ビットなど)に応じて部分剰余=0の判定を行う必
要があり、そのビット数に比例してソフトウェア量並び
にハードウェア量が増大する。この点において、本発明
では部分剰余=0の判定を要しないから、多倍長(任意
長)符号付き除算若しくは任意長任意精度符号付き除算
においても、ソフトウェア量並びにハードウェア量を増
大させることなく容易に対応することができる。 (13)被除数のMSBである符号ビットを引く操作を
除算の前処理として採用することにより、被除数が正で
あるか負であるかを考慮することなく除算プログラムを
作成することができ、しかもその様な判定動作を要しな
いため除算処理が高速化し、その上、被除数が正である
か負であるかにかかわらず同一の回路を利用して除算を
行うことができるようになる。 (14)部分剰余に対する除数の引きすぎあるいは足し
すぎの判断や商ビット算出を被除数あるいは部分剰余の
MSBと除数のMSBのみから行うことができるので、
除算のハードウェアが更に簡単になる。また、部分剰余
に対する除数の引き過ぎ或は足しすぎの判断や、加減算
の判断や、商ビット算出を、被除数あるいは部分剰余の
MSBと除数のMSBのみから行うことができるので、
この点においても任意長の除算に簡単に応用できる。ま
た、除算ステップにおける加減算の判断、をMSBだけ
できるので、除算の初期化により同一の除算ステップを
符号付きおよび符号無し除算に利用できる。 (15)商と余りをシフトさせながら両者を単一の被除
数レジスタに保持していくとき、従来のように部分剰余
=0の判定をするときに判定対象とされる部分剰余の桁
位置を毎回変化させてその判定を行わなければならない
ということに基づいてその処理が繁雑になってしかも処
理に時間がかかるといった制約を受けず、且つ、商と余
りを別々のレジスタに保持させるならばそのために実行
しなければならない転送命令が増えるというような制約
も受けず、これによって、符号付き除算処理を更に高速
化することが容易になる。
【図面の簡単な説明】
【図1】本発明の一実施例に係るマイクロコンピュータ
MCUを利用したシステムの一例ブロック図である。
【図2】本発明の一実施例に係るマイクロコンピュータ
のブロック図である。
【図3】本実施例に係るマイクロコンピュータのパッケ
ージに対するピン配置の概念的な説明図である。
【図4】本実施例に係るマイクロコンピュータにおける
バス幅に対するデータ語長と命令語長との一例関係説明
図である。
【図5】本実施例のマイクロコンピュータに含まれる中
央処理装置の内部ブロック、特にその命令制御系の一例
を示すブロック図である。
【図6】中央処理装置の実行ユニットの半部の構成を示
すブロック図である。
【図7】中央処理装置の実行ユニットの残り半分の構成
を示すブロック図である。
【図8】中央処理装置によるパイプライン処理のステー
ジの一例説明図である。
【図9】レジスタ競合状態におけるパイプラインシーケ
ンスの一例説明図である。
【図10】レジスタ競合状態におけるパイプラインシー
ケンスの別の例を示す説明図である。
【図11】データフェッチと命令フェッチが競合した場
合のパイプ制御シーケンスの一例説明図である。
【図12】複数サイクル命令を実行するときの一例動作
タイミングチャートである。
【図13】本実施例のマイクロコンピュータで実行され
るデータ転送命令の半分を示す一覧説明図である。
【図14】本実施例のマイクロコンピュータで実行され
るデータ転送命令の残りの半分を示す一覧説明図であ
る。
【図15】本実施例のマイクロコンピュータが実行する
論理演算命令の一覧説明図である。
【図16】本実施例のマイクロコンピュータが実行する
算術演算命令の半分の一覧説明図である。
【図17】本実施例のマイクロコンピュータが実行する
算術演算命令の残り半分の一覧説明図である。
【図18】本実施例のマイクロコンピュータが実行する
命令の一覧説明図である。
【図19】本実施例のマイクロコンピュータが実行する
分岐命令の一覧説明図である。
【図20】本実施例のマイクロコンピュータが実行する
システム制御命令の半分の一覧説明図である。
【図21】本実施例のマイクロコンピュータが実行する
システム制御命令の残り半分の一覧説明図である。
【図22】図13乃至図21の記載形式の説明図であ
る。
【図23】図13乃至図21に記載のニモニック表示中
におけるアドレシングモードの一覧説明図である。
【図24】ブランチ命令のディスプレースメント長とそ
のディスプレースメント長を有する命令の出現頻度との
関係を示す一例説明図である。
【図25】ブランチオールウエイズ命令のディスプレー
スメント長とそのディスプレースメント長を有する命令
の出現頻度との関係を示す一例説明図である。
【図26】サブルーチン呼び出し命令のディスプレース
メント長とそのディスプレースメント長を有する命令の
出現頻度との関係を示す一例説明図である。
【図27】ジャンプ命令若しくはジャンプサブルーチン
命令のディスプレースメント長とそのディスプレースメ
ント長を有する命令の出現頻度との関係を示す一例説明
図である。
【図28】プログラマーズモデルとしての一例レジスタ
構成説明図である。
【図29】本発明に係る符号付き除算における被除数に
対する前処理の原理を示す概念図である。
【図30】負÷負の場合における符号付き除算処理の原
理的な一例説明図である。
【図31】負÷正の場合における符号付き除算処理の原
理的な一例説明図である。
【図32】正÷正の場合における符号付き除算処理の原
理的な一例説明図である。
【図33】本発明に係る符号付き除算の基本的な約束ご
と若しくは基本的な処理手順の全体を一般的形式で示す
説明図である。
【図34】(A)は被除数の前補正のやり方についての
説明、(B)は商の符号予測についての説明図である。
【図35】負の被除数に対する前補正の一例説明図であ
る。
【図36】負の被除数に対する1を差し引く前補正後の
部分剰余の表現例を示す説明図である。
【図37】(A)は符号付き除算過程における加減算指
令の出しかたについての一例説明、(B)は商ビットの
出しかたについての一例説明図である。
【図38】商と剰余に対する補正のしかたについての一
例説明図である。
【図39】−8÷−3の符号付き除算における前補正と
除算処理の具体的な処理手順説明図である。
【図40】図39の処理に継続される後処理の具体的な
処理手順説明図である。
【図41】−8÷3の符号付き除算における前補正と除
算処理の具体的な処理手順説明図である。
【図42】図41の処理に継続される後処理の具体的な
処理手順説明図である。
【図43】−9÷−3の符号付き除算における前補正と
除算処理の具体的な処理手順説明図である。
【図44】図43の処理に継続される後処理の具体的な
処理手順説明図である。
【図45】−9÷3の符号付き除算における前補正と除
算処理の具体的な処理手順説明図である。
【図46】図45の処理に継続される後処理の具体的な
処理手順説明図である。
【図47】8÷3の符号付き除算における前補正と除算
処理の具体的な処理手順説明図である。
【図48】図47の処理に継続される後処理の具体的な
処理手順説明図である。
【図49】8÷−3の符号付き除算における前補正と除
算処理の具体的な処理手順説明図である。
【図50】図49の処理に継続される後処理の具体的な
処理手順説明図である。
【図51】符号付き除算を行うための演算ユニットの一
実施例ブロック図である。
【図52】図51に示される算術論理演算回路、演算回
路、及び演算制御回路の一例論理回路図である。
【図53】符号付き除算のための命令記述の詳細な一例
説明図である。
【図54】図53の命令EOR R0,R0を実行する
ときにおける図51の回路の動作説明図である。
【図55】図53の命令SL16 R1を実行するとき
における図51の回路の動作説明図である。
【図56】図53の命令DIV0S R0,R2を実行
するときにおける図51の回路の動作説明図である。
【図57】図53の命令MOVT R3を実行するとき
における図51の回路の動作説明図である。
【図58】図53の命令SUBC R0,R2を実行す
るときにおける図51の回路の動作説明図である。
【図59】図53の命令DIV0S R1,R2を実行
するときにおける図51の回路の動作説明図である。
【図60】図53の命令DIV1 R1,R2を実行す
るときにおける図51の回路の動作説明図である。
【図61】図53の命令MOV R2,R4を実行する
ときにおける図51の回路の動作説明図である。
【図62】図53の命令EXTS.W R2,R2を実
行するときにおける図51の回路の動作説明図である。
【図63】図53の命令ROTCL R2を実行すると
きにおける図51の回路の動作説明図である。
【図64】図53の命令ADDC R0,R2を実行す
るときにおける図51の回路の動作説明図である。
【図65】図53の命令DIV0S R0,R4を実行
するときにおける図51の回路の動作説明図である。
【図66】図53の命令MOVT R0を実行するとき
における図51の回路の動作説明図である。
【図67】図53の命令EOR R3,R0を実行する
ときにおける図51の回路の動作説明図である。
【図68】図53の命令ROTCR R0を実行すると
きにおける図51の回路の動作説明図である。
【図69】図53の命令DIV0S R1,R4を実行
するときにおける図51の回路の動作説明図である。
【図70】図53の命令ROTCR R4を実行すると
きにおける図51の回路の動作説明図である。
【図71】図53の命令DIV1 R1,R4を実行す
るときにおける図51の回路の動作説明図である。
【図72】図53の命令SR16 R4を実行するとき
における図51の回路の動作説明図である。
【図73】図53の命令ADD R3,R4を実行する
ときにおける図51の回路の動作説明図である。
【図74】図53の命令EXTS.W R4,R4を実
行するときにおける図51の回路の動作説明図である。
【図75】(A)は図54の動作に対応するレジスタの
状態説明、(B)は図55の動作に対応するレジスタの
状態説明、(C)は図56の動作に対応するレジスタの
状態説明図である。
【図76】(D)は図57の動作に対応するレジスタの
状態説明、(E)は図58の動作に対応するレジスタの
状態説明、(F)は図59の動作に対応するレジスタの
状態説明図である。
【図77】(G)は図60の動作に対応するレジスタの
状態説明、(H)は図62の動作に対応するレジスタの
状態説明図である。
【図78】(I)は図63の動作に対応するレジスタの
状態説明、(J)は図64の動作に対応するレジスタの
状態説明、(K)は図65の動作に対応するレジスタの
状態説明図である。
【図79】(L)は図66の動作に対応するレジスタの
状態説明、(M)は図67の動作に対応するレジスタの
状態説明、(N)は図68の動作に対応するレジスタの
状態説明図である。
【図80】(O)は図69の動作に対応するレジスタの
状態説明、(P)は図70の動作に対応するレジスタの
状態説明、(Q)は図71の動作に対応するレジスタの
状態説明図である。
【図81】(R)は図72の動作に対応するレジスタの
状態説明、(S)は図73の動作に対応するレジスタの
状態説明、(T)は図74の動作に対応するレジスタの
状態説明図である。
【図82】図54〜図74に亘って説明した符号付き除
算処理をまとめたフローチャートであり、(A)はその
全体を示し、(B)は前処理の処理を示す。
【図83】図82の除算1の詳細を示すフローチャート
であり、(A)は除算1の処理を示し、(B)は除算ス
テップの処理を示す。
【図84】図82の後処理の詳細を示すフローチャート
であり、(A)は後処理の処理をまとめたフローであ
り、(B)は商補正の処理を示す。
【図85】図84の後処理の詳細を示すフローチャート
であり、(A)は第1の剰余補正手段の処理を示し、
(B)は第2の剰余補正手段の処理を示す。
【図86】8ビット÷8ビットの符号付き除算のための
命令記述の一例説明図である。
【図87】64ビット÷32ビットの符号付き除算のた
めの命令記述の一例説明図である。
【図88】32ビット÷32ビットの符号付き除算のた
めの命令記述の一例説明図である。
【図89】16ビット÷16ビットの符号付き除算のた
めの命令記述の一例説明図である。
【図90】16ビット÷8ビットの符号付き除算のため
の命令記述一例説明図である。
【図91】32ビット÷16ビットの符号付き除算のた
めの命令記述の一例説明図である。
【符号の説明】
MCU マイクロコンピュータ CPU 中央処理装置 IAB23−0 内部アドレスバス IDB31−0 内部データバス IRH,IRL 命令バッファ MPX マルチプレクサ IR1 インストラクションレジスタ IR2 インストラクションレジスタ IF&IRC 命令フェッチ/命令レジスタ制御ブロッ
ク HSC−ROM 高速制御リードオンリメモリ FO&PCD フラグ操作及びパイプ制御デコーダ SR ステータスレジスタ T トゥルービット HIR ハードウェア・シーケンス・コントロール・イ
ンストラクション・レジスタ ID インストラクションデコーダ SRD ソースレジスタデコーダ DRD ディスティネーションレジスタデコーダ WBRD ライトバックレジスタデコーダ WBR0,WBR1 一時ラッチ RCCB レジスタコンテントチェックブロック EXEC 命令実行ユニット R0H,R0L〜R15H,R15L 汎用レジスタ R0 ワークレジスタ R1 除数レジスタ R2 被除数レジスタ R4 剰余レジスタ R3 汎用レジスタ(第4の制御ビット格納手段) 3 Tビット(第3の制御ビット格納手段) 4 シフタ 5 Qビット(第1の制御ビット格納手段) 6 Mビット(第2の制御ビット格納手段) 7 演算制御回路 8 算術論理演算回路 9 演算回路 10 演算回路 11 選択回路 12 選択回路 13 選択回路 14 選択回路 15 選択回路 16 選択回路 17 符号拡張回路
───────────────────────────────────────────────────── フロントページの続き (72)発明者 深田 馨 東京都小平市上水本町5丁目20番1号 株式会社日立製作所 武蔵工場内 (72)発明者 山崎 尊永 東京都小平市上水本町5丁目20番1号 株式会社日立製作所 武蔵工場内 (72)発明者 榊原 栄二 東京都小平市上水本町5丁目20番1号 株式会社日立製作所 武蔵工場内 (72)発明者 倉員 桂一 東京都小平市上水本町5丁目20番1号 株式会社日立製作所 武蔵工場内 (72)発明者 赤尾 泰 東京都小平市上水本町5丁目20番1号 株式会社日立製作所 武蔵工場内 (72)発明者 馬場 志朗 東京都小平市上水本町5丁目20番1号 株式会社日立製作所 武蔵工場内 (72)発明者 木原 利昌 東京都小平市上水本町5丁目20番1号 株式会社日立製作所 武蔵工場内 (72)発明者 柏木 有吾 東京都小平市上水本町5丁目20番1号 株式会社日立製作所 武蔵工場内 (72)発明者 藤田 秀哉 東京都小平市上水本町5丁目20番1号 株式会社日立製作所 武蔵工場内 (72)発明者 石田 克彦 東京都小平市上水本町5丁目20番1号 株式会社日立製作所 武蔵工場内 (72)発明者 澤 典子 東京都小平市上水本町5丁目20番1号 株式会社日立製作所 武蔵工場内 (72)発明者 浅野 陽一 東京都小平市上水本町5丁目20番1号 株式会社日立製作所 武蔵工場内 (72)発明者 茶木 英明 東京都小平市上水本町5丁目20番1号 株式会社日立製作所 武蔵工場内 (72)発明者 菅原 正彦 東京都小平市上水本町5丁目20番1号 株式会社日立製作所 武蔵工場内 (72)発明者 海永 正博 神奈川県川崎市麻生区王禅寺1099 株式 会社日立製作所 システム開発研究所内 (72)発明者 野口 孝樹 東京都国分寺市東恋ケ窪一丁目480番地 株式会社日立製作所 中央研究所内 (72)発明者 渡部 満 茨城県日立市久慈町4026番地 株式会社 日立製作所 日立研究所内 (72)発明者 塚元 卓 東京都小平市上水本町5丁目22番1号 株式会社日立マイコンシステム内 (72)発明者 増村 茂樹 東京都小平市上水本町5丁目20番1号 日立超エル・エス・アイ・エンジニアリ ング株式会社内 (56)参考文献 特開 平3−188526(JP,A) 特開 平3−194621(JP,A) 特開 平4−172533(JP,A) 特開 昭63−192135(JP,A) 特開 平3−75930(JP,A) (58)調査した分野(Int.Cl.6,DB名) G06F 9/30 - 9/42

Claims (58)

    (57)【特許請求の範囲】
  1. 【請求項1】 1つの半導体チップに形成され、 複数の32ビット長の汎用レジスタと、 32ビット長の命令レジスタとを有し、 16ビット固定長命令が処理されるものであることを特
    徴とするRISC型の中央処理装置。
  2. 【請求項2】 前記命令レジスタは、2つの前記16ビ
    ット固定長命令をフェッチするものであることを特徴と
    する請求項1記載の中央処理装置。
  3. 【請求項3】 前記中央処理装置は、更に、前記命令レ
    ジスタから供給された前記16ビット固定長命令をデコ
    ードする16ビット長の命令デコーダを有するものであ
    ることを特徴とする請求項2記載の中央処理装置。
  4. 【請求項4】 前記中央処理装置は、更に、32ビット
    長のプログラムカウンタを有するものであることを特徴
    とする請求項3記載の中央処理装置。
  5. 【請求項5】前記16ビット固定長命令として、前記プ
    ログラムカウンタ内の第1のアドレスに加算して第2の
    アドレスを示すためのディスプレースメントを有する命
    令が含まれることを特徴とする請求項4記載の中央処理
    装置。
  6. 【請求項6】 前記プログラムカウンタは、前記命令レ
    ジスタにフェッチされた命令のアドレスを格納するもの
    であることを特徴とする請求項5記載の中央処理装置。
  7. 【請求項7】 前記中央処理装置は、パイプライン処理
    を行い、更に、前記パイプライン処理において使用され
    る前記汎用レジスタの競合をチェックする回路を有する
    ものであることを特徴とする請求項6記載の中央処理装
    置。
  8. 【請求項8】 1つの半導体チップに形成され、 複数の32ビット長の汎用レジスタと、 32ビット長の命令レジスタとを有し、 16ビット固定長命令フォーマットの命令セットの命令
    を処理するものであることを特徴とする中央処理装置。
  9. 【請求項9】 前記命令レジスタは、2つの16ビット
    固定長命令をフェッチするものであることを特徴とする
    請求項8記載の中央処理装置。
  10. 【請求項10】 前記中央処理装置は、更に、前記命令
    レジスタから供給された前記16ビット固定長命令をデ
    コードする16ビット長の命令デコーダを有するもので
    あることを特徴とする請求項9記載の中央処理装置。
  11. 【請求項11】 前記中央処理装置は、更に、32ビッ
    ト長のプログラムカウンタを有するものであることを特
    徴とする請求項10記載の中央処理装置。
  12. 【請求項12】 前記命令セットには、前記プログラム
    カウンタ内の第1のアドレスに加算して第2のアドレス
    を示すためのディスプレースメントを有する命令が含ま
    れていることを特徴とする請求項11記載の中央処理装
    置。
  13. 【請求項13】 前記プログラムカウンタは、前記命令
    レジスタにフェッチされた命令のアドレスを格納するも
    のであることを特徴とする請求項12記載の中央処理装
    置。
  14. 【請求項14】 前記中央処理装置は、パイプライン処
    理を行い、更に、前記パイプライン処理において使用さ
    れる前記汎用レジスタの競合をチェックする回路を有す
    るものであることを特徴とする請求項13記載の中央処
    理装置。
  15. 【請求項15】 1つの半導体チップ上に形成され、1
    6ビット固定長命令が処理されるRISC型の中央処理
    装置であって、 複数の32ビット長の汎用レジスタと、 32ビット長のプログラムカウンタとを有し、 前記16ビット固定長命令として、前記プログラムカウ
    ンタ内の第1のアドレスに加算して第2のアドレスを示
    すためのディスプレースメントを有する命令が含まれる
    ことを特徴とする中央処理装置。
  16. 【請求項16】 前記プログラムカウンタに格納されて
    いる前記第1のアドレスに前記ディスプレースメントを
    加えた前記第2のアドレスに格納されている即値を用い
    て演算可能なものであることを特徴とする請求項15記
    載の中央処理装置。
  17. 【請求項17】 前記プログラムカウンタに格納されて
    いる前記第1のアドレスに前記ディスプレースメントを
    加えた前記第2のアドレスに格納されているデータは、
    ジャンプ先を指定するアドレスであることを特徴とする
    請求項15記載の中央処理装置。
  18. 【請求項18】 前記中央処理装置は、更に、前記命令
    をフェッチするための32ビット長の命令レジスタを有
    し、 前記プログラムカウンタは、前記命令レジスタにフェッ
    チされた命令のアドレスを格納するものであることを特
    徴とする請求項15記載の中央処理装置。
  19. 【請求項19】 前記命令レジスタには16ビット固定
    長命令が2つフェッチされることを特徴とする請求項1
    8記載の中央処理装置。
  20. 【請求項20】 前記命令レジスタには、32ビットデ
    ータバスを介して2つの16ビット固定長命令が供給さ
    れることを特徴とする請求項19記載の中央処理装置。
  21. 【請求項21】 複数の32ビット長の汎用レジスタ
    と、 32ビット長のプログラムカウンタとを有し、 16ビット固定長命令フォーマットの命令セットの命令
    を処理する、一つの半導体チップ上に形成された中央処
    理装置であって、 前記命令セットには、前記プログラムカウンタ内の第1
    のアドレスに加算して第2のアドレスを示すためのディ
    スプレースメントを有する命令が含まれていることを特
    徴とする中央処理装置。
  22. 【請求項22】 前記プログラムカウンタに格納されて
    いる前記第1のアドレスに前記ディスプレースメントを
    加えた前記第2のアドレスに格納されている即値を用い
    て演算可能なものであることを特徴とする請求項21記
    載の中央処理装置。
  23. 【請求項23】 前記プログラムカウンタに格納されて
    いる前記第1のアドレスに前記ディスプレースメントを
    加えた前記第2のアドレスに格納されているデータは、
    ジャンプ先を指定するアドレスであることを特徴とする
    請求項21記載の中央処理装置。
  24. 【請求項24】 前記中央処理装置は、更に、前記命令
    をフェッチするための32ビット長命令レジスタを有
    し、 前記プログラムカウンタは、前記命令レジスタにフェッ
    チされた命令のアドレスを格納するものであることを特
    徴とする請求項21記載の中央処理装置。
  25. 【請求項25】 前記命令レジスタには16ビット固定
    長命令が2つフェッチされるものであることを特徴とす
    る請求項24記載の中央処理装置。
  26. 【請求項26】 前記命令レジスタには、32ビットの
    データバスを介して2つの16ビット固定長命令が供給
    されるものであることを特徴とする請求項25記載の中
    央処理装置。
  27. 【請求項27】 1つの半導体チップ上に形成され、1
    6ビット固定長命令が処理されるRISC型の中央処理
    装置であって、 複数の32ビット長の汎用レジスタと、 命令をフェッチするための32ビット長の命令レジスタ
    と、 32ビット長のプログラムカウンタとを有し、 前記16ビット固定長命令として、前記プログラムカウ
    ンタ内の第1のアドレスに加算して第2のアドレスを示
    すためのディスプレースメントを有する命令が含まれる
    ことを特徴とする中央処理装置。
  28. 【請求項28】 前記中央処理装置は、更に、前記命令
    レジスタにフェッチされた2つの命令の内の1つをデコ
    ードする16ビット長の命令デコーダを有するものであ
    ることを特徴とする請求項27記載の中央処理装置。
  29. 【請求項29】 前記プログラムカウンタに格納されて
    いる前記第1のアドレスに前記ディスプレースメントを
    加えた前記第2のアドレスに格納されている即値を用い
    て演算可能なものであることを特徴とする請求項27記
    載の中央処理装置。
  30. 【請求項30】 前記プログラムカウンタに格納されて
    いる前記第1のアドレスに前記ディスプレースメントを
    加えた前記第2のアドレスに格納されているデータは、
    ジャンプ先を指定するアドレスであることを特徴とする
    請求項27記載の中央処理装置。
  31. 【請求項31】 複数の32ビット長の汎用レジスタ
    と、 命令をフェッチするための32ビット長の命令レジスタ
    と、 32ビット長のプログラムカウンタとを有し、 16ビット固定長命令フォーマットの命令セットの命令
    を処理する、一つの半導体チップ上に形成された中央処
    理装置であって、 前記命令セットには、前記プログラムカウンタ内の第1
    のアドレスに加算して第2のアドレスを示すためのディ
    スプレースメントを有する命令が含まれることを特徴と
    する中央処理装置。
  32. 【請求項32】 前記中央処理装置は、更に、前記命令
    レジスタにフェッチされた2つの命令の内の1つをデコ
    ードする16ビット長の命令デコーダを有するものであ
    ることを特徴とする請求項31記載の中央処理装置。
  33. 【請求項33】 前記プログラムカウンタに格納されて
    いる前記第1のアドレスに前記ディスプレースメントを
    加えた前記第2のアドレスに格納されている即値を用い
    て演算可能なものであることを特徴とする請求項31記
    載の中央処理装置。
  34. 【請求項34】 前記プログラムカウンタに格納されて
    いる前記第1のアドレスに前記ディスプレースメントを
    加えた前記第2のアドレスに格納されているデータは、
    ジャンプ先を指定するアドレスであることを特徴とする
    請求項31記載の中央処理装置。
  35. 【請求項35】 前記16ビット固定長命令として、 前記ディスプレースメントとデータ長を示す情報とを有
    し、更に、前記データ長を示す情報が16ビットを示す
    とき、前記ディスプレースメントを1ビットシフトさ
    せ、前記プログラムカウンタに格納されているアドレス
    に前記シフトされたディスプレースメントを加えたアド
    レスに格納されているデータを指定する命令が含まれる
    ことを特徴とする請求項31記載の中央処理装置。
  36. 【請求項36】 前記16ビット固定長命令として、 前記ディスプレースメントとデータ長を示す情報とを有
    し、更に、前記データ長を示す情報が32ビットを示す
    とき、前記ディスプレースメントを2ビットシフトさ
    せ、前記プログラムカウンタに格納されているアドレス
    に前記シフトされたディスプレースメントを加えたアド
    レスに格納されているデータを指定する命令が含まれる
    ことを特徴とする請求項31記載の中央処理装置。
  37. 【請求項37】 命令を格納した命令メモリと、 前記命令を処理する中央処理装置と、 前記中央処理装置及び前記命令メモリに結合されたデー
    タバスとを1つの半導体チップに形成し、 前記中央処理装置は、複数の32ビット汎用レジスタ
    と、32ビットの命令レジスタを有し、 前記命令メモリには、16ビット固定長命令が格納され
    て成るものであることを特徴とするRISC型のマイク
    ロコンピュータ。
  38. 【請求項38】 前記命令レジスタは、2つの前記16
    ビット固定長命令をフェッチするものであることを特徴
    とする請求項37記載のマイクロコンピュータ。
  39. 【請求項39】 前記中央処理装置は、更に、前記命令
    レジスタから供給された1つの前記16ビット固定長命
    令をデコードする16ビット長の命令デコーダを有する
    ものであることを特徴とする請求項38記載のマイクロ
    コンピュータ。
  40. 【請求項40】 前記中央処理装置は、更に、32ビッ
    ト長のプログラムカウンタを有するものであることを特
    徴とする請求項38記載のマイクロコンピュータ。
  41. 【請求項41】 前記16ビット固定長命令として、前
    記プログラムカウンタ内の第1のアドレスに加算して第
    2のアドレスを示すためのディスプレースメント有する
    命令が含まれることを特徴とする請求項40記載のマイ
    クロコンピュータ。
  42. 【請求項42】 前記プログラムカウンタに格納されて
    いる前記第1のアドレスに前記ディスプレースメントを
    加えた前記第2のアドレスに格納されている即値を用い
    て演算可能なものであることを特徴とする請求項41記
    載のマイクロコンピュータ。
  43. 【請求項43】 前記プログラムカウンタに格納されて
    いる前記第1のアドレスに前記ディスプレースメントを
    加えた前記第2のアドレスに格納されているデータは、
    ジャンプ先を指定するアドレスであることを特徴とする
    請求項41記載のマイクロコンピュータ。
  44. 【請求項44】 前記16ビット固定長命令として、 前記ディスプレースメントとデータ長を示す情報とを有
    し、更に、前記データ長を示す情報が16ビットを示す
    とき、前記ディスプレースメントを1ビットシフトさ
    せ、前記プログラムカウンタに格納されているアドレス
    に前記シフトされたディスプレースメントを加えたアド
    レスに格納されているデータを指定する命令が含まれる
    ことを特徴とする請求項40記載のマイクロコンピュー
    タ。
  45. 【請求項45】 前記16ビット固定長命令として、 前記ディスプレースメントとデータ長を示す情報とを有
    し、更に、前記データ長を示す情報が32ビットを示す
    とき、前記ディスプレースメントを2ビットシフトさ
    せ、前記プログラムカウンタに格納されているアドレス
    に前記シフトされたディスプレースメントを加えたアド
    レスに格納されているデータを指定する命令が含まれる
    ことを特徴とする請求項40記載のマイクロコンピュー
    タ。
  46. 【請求項46】 前記プログラムカウンタは、前記命令
    レジスタにフェッチされた命令のアドレスを格納するも
    のであることを特徴とする請求項41記載のマイクロコ
    ンピュータ。
  47. 【請求項47】 前記中央処理装置は、パイプライン処
    理を行い、更に、前記パイプライン処理において使用さ
    れる前記汎用レジスタの競合をチェックする回路を有す
    るものであることを特徴とする請求項46記載のマイク
    ロコンピュータ。
  48. 【請求項48】 前記データバスに結合されたキャッシ
    ュメモリを有するものであることを特徴とする請求項3
    8記載のマイクロコンピュータ。
  49. 【請求項49】 前記データバスに結合されたダイレク
    トメモリアクセスコントローラを有するものであること
    を特徴とする請求項48記載のマイクロコンピュータ。
  50. 【請求項50】 前記データバスに結合されたランダム
    アクセスメモリを有するものであることを特徴とする請
    求項49記載のマイクロコンピュータ。
  51. 【請求項51】 前記データバスは32ビット幅である
    ことを特徴とする請求項49記載のマイクロコンピュー
    タ。
  52. 【請求項52】 前記データバスを介して、前記命令メ
    モリに格納された前記16ビット固定長命令が前記命令
    レジスタに供給されるものであることを特徴とする請求
    項51記載のマイクロコンピュータ。
  53. 【請求項53】 前記データバスを介して、前記16ビ
    ット固定長命令の内の2命令が前記命令レジスタに供給
    されるものであることを特徴とする請求項52記載のマ
    イクロコンピュータ。
  54. 【請求項54】 16ビット固定長命令を格納した命令
    メモリと、 前記命令を処理する中央処理装置と、 前記中央処理装置及び前記命令メモリに結合されたデー
    タバスとを1つの半導体チップ上に形成し、 前記中央処理装置は、複数の32ビット長の汎用レジス
    タと、アドレスを格納する32ビット長のプログラムカ
    ウンタとを有し、 前記16ビット固定長命令として、前記プログラムカウ
    ンタ内の第1のアドレスに加算して第2のアドレスを示
    すためのディスプレースメントを有する命令が含まれる
    ことを特徴とするRISC型のマイクロコンピュータ。
  55. 【請求項55】 前記プログラムカウンタに格納されて
    いる前記第1のアドレスに前記ディスプレースメントを
    加えた前記第2のアドレスに格納されている即値を用い
    て演算可能なものであることを特徴とする請求項54記
    載のマイクロコンピュータ。
  56. 【請求項56】 前記プログラムカウンタに格納されて
    いる前記第1のアドレスに前記ディスプレースメントを
    加えた前記第2のアドレスに格納されているデータは、
    ジャンプ先を指定するアドレスであることを特徴とする
    請求項54記載のマイクロコンピュータ。
  57. 【請求項57】 前記16ビット固定長命令として、 前記ディスプレースメントとデータ長を示す情報とを有
    し、更に、前記データ長を示す情報が16ビットを示す
    とき、前記ディスプレースメントを1ビットシフトさ
    せ、前記プログラムカウンタに格納されているアドレス
    に前記シフトされたディスプレースメントを加えたアド
    レスに格納されているデータを指定する命令が含まれる
    ことを特徴とする請求項54記載のマイクロコンピュー
    タ。
  58. 【請求項58】 前記16ビット固定長命令として、 前記ディスプレースメントとデータ長を示す情報とを有
    し、更に、前記データ長を示す情報が32ビットを示す
    とき、前記ディスプレースメントを2ビットシフトさ
    せ、前記プログラムカウンタに格納されているアドレス
    に前記シフトされたディスプレースメントを加えたアド
    レスに格納されているデータを指定する命令が含まれる
    ことを特徴とする請求項54記載のマイクロコンピュー
    タ。
JP4154525A 1991-06-24 1992-05-21 マイクロコンピュータ Expired - Lifetime JP2984463B2 (ja)

Priority Applications (25)

Application Number Priority Date Filing Date Title
JP4154525A JP2984463B2 (ja) 1991-06-24 1992-05-21 マイクロコンピュータ
EP01110865A EP1122638B1 (en) 1991-06-24 1992-06-22 Branch instruction execution device and computer program product
DE69233361T DE69233361T2 (de) 1991-06-24 1992-06-22 Ein-Chip-Mikrocomputer
EP92110517A EP0525375B1 (en) 1991-06-24 1992-06-22 Microcomputer
DE69232232T DE69232232T2 (de) 1991-06-24 1992-06-22 Mikrocomputer
EP98120015A EP0902361B1 (en) 1991-06-24 1992-06-22 Single-chip microcomputer
DE69233412T DE69233412T2 (de) 1991-06-24 1992-06-22 Vorrichtung und Rechnerprogrammprodukt zur Ausführung von Verzweigungsbefehlen
EP98120014A EP0902358A3 (en) 1991-06-24 1992-06-22 Division circuit and method
KR1019920010873A KR100294559B1 (ko) 1991-06-24 1992-06-23 마이크로컴퓨터및제산회로
US08/478,730 US5991545A (en) 1991-06-24 1995-06-07 Microcomputer having variable bit width area for displacement and circuit for handling immediate data larger than instruction word
US08/475,459 US5682545A (en) 1991-06-24 1995-06-07 Microcomputer having 16 bit fixed length instruction format
KR1019970026158A KR100268635B1 (ko) 1991-06-24 1997-06-20 마이크로 컴퓨터 및 제산 회로
KR1019970026157A KR100294560B1 (ko) 1991-06-24 1997-06-20 마이크로컴퓨터및제산회로
US08/898,994 US6131154A (en) 1991-06-24 1997-07-23 Microcomputer having variable bit width area for displacement
US08/948,793 US5969976A (en) 1991-06-24 1997-10-10 Division circuit and the division method thereof
US09/053,638 US6253308B1 (en) 1991-06-24 1998-04-02 Microcomputer having variable bit width area for displacement and circuit for handling immediate data larger than instruction word
HK98111668A HK1011101A1 (en) 1991-06-24 1998-10-30 Microcomputer
US09/250,922 US6122724A (en) 1991-06-24 1999-02-16 Central processing unit having instruction queue of 32-bit length fetching two instructions of 16-bit fixed length in one instruction fetch operation
US09/543,387 US6272620B1 (en) 1991-06-24 2000-04-04 Central processing unit having instruction queue of 32-bit length fetching two instructions of 16-bit fixed length in one instruction fetch operation
US09/632,332 US6343357B1 (en) 1991-06-24 2000-08-03 Microcomputer and dividing circuit
US10/011,807 US6996700B2 (en) 1991-06-24 2001-12-11 Microcomputer and dividing circuit
HK02100791.9A HK1039661B (zh) 1991-06-24 2002-02-01 分支指示執行裝置及電腦程式產品
US11/120,105 US20050251651A1 (en) 1991-06-24 2005-05-03 Microcomputer and dividing circuit
US12/195,856 US20080313444A1 (en) 1991-06-24 2008-08-21 Microcomputer and dividing circuit
US12/726,694 US20100191934A1 (en) 1991-06-24 2010-03-18 Microcomputer and dividing circuit

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP17873991 1991-06-24
JP3-178739 1991-06-24
JP4154525A JP2984463B2 (ja) 1991-06-24 1992-05-21 マイクロコンピュータ

Related Child Applications (2)

Application Number Title Priority Date Filing Date
JP15814298A Division JP3215085B2 (ja) 1991-06-24 1998-06-05 中央処理装置及びマイクロコンピュータ
JP10158143A Division JP3105197B2 (ja) 1991-06-24 1998-06-05 除算回路及び除算方法

Publications (2)

Publication Number Publication Date
JPH05197546A JPH05197546A (ja) 1993-08-06
JP2984463B2 true JP2984463B2 (ja) 1999-11-29

Family

ID=26482784

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4154525A Expired - Lifetime JP2984463B2 (ja) 1991-06-24 1992-05-21 マイクロコンピュータ

Country Status (6)

Country Link
US (12) US5682545A (ja)
EP (4) EP0902358A3 (ja)
JP (1) JP2984463B2 (ja)
KR (3) KR100294559B1 (ja)
DE (3) DE69233412T2 (ja)
HK (2) HK1011101A1 (ja)

Families Citing this family (88)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2984463B2 (ja) 1991-06-24 1999-11-29 株式会社日立製作所 マイクロコンピュータ
JP3105197B2 (ja) * 1991-06-24 2000-10-30 株式会社日立製作所 除算回路及び除算方法
JP3000857B2 (ja) * 1994-08-31 2000-01-17 松下電工株式会社 プログラマブルコントローラ
JP3504355B2 (ja) * 1994-12-06 2004-03-08 松下電器産業株式会社 プロセッサ
AU6677896A (en) * 1995-08-31 1997-03-19 Intel Corporation A set of instructions for operating on packed data
US6366999B1 (en) * 1998-01-28 2002-04-02 Bops, Inc. Methods and apparatus to support conditional execution in a VLIW-based array processor with subword execution
US6502210B1 (en) 1999-10-01 2002-12-31 Stmicroelectronics, Ltd. Microcomputer debug architecture and method
US6434665B1 (en) 1999-10-01 2002-08-13 Stmicroelectronics, Inc. Cache memory store buffer
US6463553B1 (en) 1999-10-01 2002-10-08 Stmicroelectronics, Ltd. Microcomputer debug architecture and method
US6351803B2 (en) 1999-10-01 2002-02-26 Hitachi Ltd. Mechanism for power efficient processing in a pipeline processor
US6928073B2 (en) * 1999-10-01 2005-08-09 Stmicroelectronics Ltd. Integrated circuit implementing packet transmission
US6553460B1 (en) 1999-10-01 2003-04-22 Hitachi, Ltd. Microprocessor having improved memory management unit and cache memory
US6859891B2 (en) 1999-10-01 2005-02-22 Stmicroelectronics Limited Apparatus and method for shadowing processor information
US6826191B1 (en) 1999-10-01 2004-11-30 Stmicroelectronics Ltd. Packets containing transaction attributes
US6918065B1 (en) 1999-10-01 2005-07-12 Hitachi, Ltd. Method for compressing and decompressing trace information
US6693914B1 (en) 1999-10-01 2004-02-17 Stmicroelectronics, Inc. Arbitration mechanism for packet transmission
US6408381B1 (en) 1999-10-01 2002-06-18 Hitachi, Ltd. Mechanism for fast access to control space in a pipeline processor
US6457118B1 (en) 1999-10-01 2002-09-24 Hitachi Ltd Method and system for selecting and using source operands in computer system instructions
US6530047B1 (en) 1999-10-01 2003-03-04 Stmicroelectronics Limited System and method for communicating with an integrated circuit
US6732307B1 (en) 1999-10-01 2004-05-04 Hitachi, Ltd. Apparatus and method for storing trace information
US6590907B1 (en) 1999-10-01 2003-07-08 Stmicroelectronics Ltd. Integrated circuit with additional ports
US6412043B1 (en) 1999-10-01 2002-06-25 Hitachi, Ltd. Microprocessor having improved memory management unit and cache memory
US6598177B1 (en) 1999-10-01 2003-07-22 Stmicroelectronics Ltd. Monitoring error conditions in an integrated circuit
US6449712B1 (en) 1999-10-01 2002-09-10 Hitachi, Ltd. Emulating execution of smaller fixed-length branch/delay slot instructions with a sequence of larger fixed-length instructions
US6591369B1 (en) 1999-10-01 2003-07-08 Stmicroelectronics, Ltd. System and method for communicating with an integrated circuit
US6779145B1 (en) 1999-10-01 2004-08-17 Stmicroelectronics Limited System and method for communicating with an integrated circuit
US6487683B1 (en) 1999-10-01 2002-11-26 Stmicroelectronics Limited Microcomputer debug architecture and method
US7793261B1 (en) 1999-10-01 2010-09-07 Stmicroelectronics Limited Interface for transferring debug information
US6598128B1 (en) 1999-10-01 2003-07-22 Hitachi, Ltd. Microprocessor having improved memory management unit and cache memory
US7266728B1 (en) 1999-10-01 2007-09-04 Stmicroelectronics Ltd. Circuit for monitoring information on an interconnect
US6298394B1 (en) 1999-10-01 2001-10-02 Stmicroelectronics, Ltd. System and method for capturing information on an interconnect in an integrated circuit
US6574651B1 (en) 1999-10-01 2003-06-03 Hitachi, Ltd. Method and apparatus for arithmetic operation on vectored data
JP2001142692A (ja) * 1999-10-01 2001-05-25 Hitachi Ltd 2つの異なる固定長命令セットを実行するマイクロプロセッサ、マイクロコンピュータおよび命令実行方法
US7072817B1 (en) 1999-10-01 2006-07-04 Stmicroelectronics Ltd. Method of designing an initiator in an integrated circuit
US6684348B1 (en) 1999-10-01 2004-01-27 Hitachi, Ltd. Circuit for processing trace information
US6772325B1 (en) * 1999-10-01 2004-08-03 Hitachi, Ltd. Processor architecture and operation for exploiting improved branch control instruction
US6412047B2 (en) 1999-10-01 2002-06-25 Stmicroelectronics, Inc. Coherency protocol
US6615370B1 (en) 1999-10-01 2003-09-02 Hitachi, Ltd. Circuit for storing trace information
US6349371B1 (en) 1999-10-01 2002-02-19 Stmicroelectronics Ltd. Circuit for storing information
US6633971B2 (en) 1999-10-01 2003-10-14 Hitachi, Ltd. Mechanism for forward data in a processor pipeline using a single pipefile connected to the pipeline
US6542983B1 (en) 1999-10-01 2003-04-01 Hitachi, Ltd. Microcomputer/floating point processor interface and method
US6567932B2 (en) 1999-10-01 2003-05-20 Stmicroelectronics Limited System and method for communicating with an integrated circuit
US7000078B1 (en) * 1999-10-01 2006-02-14 Stmicroelectronics Ltd. System and method for maintaining cache coherency in a shared memory system
US6665816B1 (en) 1999-10-01 2003-12-16 Stmicroelectronics Limited Data shift register
US6629207B1 (en) 1999-10-01 2003-09-30 Hitachi, Ltd. Method for loading instructions or data into a locked way of a cache memory
US6820195B1 (en) 1999-10-01 2004-11-16 Hitachi, Ltd. Aligning load/store data with big/little endian determined rotation distance control
US6460174B1 (en) 1999-10-01 2002-10-01 Stmicroelectronics, Ltd. Methods and models for use in designing an integrated circuit
US6601189B1 (en) 1999-10-01 2003-07-29 Stmicroelectronics Limited System and method for communicating with an integrated circuit
US6557119B1 (en) 1999-10-01 2003-04-29 Stmicroelectronics Limited Microcomputer debug architecture and method
US6701405B1 (en) 1999-10-01 2004-03-02 Hitachi, Ltd. DMA handshake protocol
US6546480B1 (en) 1999-10-01 2003-04-08 Hitachi, Ltd. Instructions for arithmetic operations on vectored data
US6629115B1 (en) 1999-10-01 2003-09-30 Hitachi, Ltd. Method and apparatus for manipulating vectored data
US7260745B1 (en) 1999-10-01 2007-08-21 Stmicroelectronics Ltd. Detection of information on an interconnect
US6496905B1 (en) 1999-10-01 2002-12-17 Hitachi, Ltd. Write buffer with burst capability
US7149878B1 (en) * 2000-10-30 2006-12-12 Mips Technologies, Inc. Changing instruction set architecture mode by comparison of current instruction execution address with boundary address register values
DE10055659C1 (de) * 2000-11-10 2002-03-28 Infineon Technologies Ag Berechnungsschaltung zur Division eines Festpunktsignals
US7711926B2 (en) * 2001-04-18 2010-05-04 Mips Technologies, Inc. Mapping system and method for instruction set processing
US6826681B2 (en) * 2001-06-18 2004-11-30 Mips Technologies, Inc. Instruction specified register value saving in allocated caller stack or not yet allocated callee stack
US7167514B2 (en) * 2001-07-18 2007-01-23 Agere Systems Inc. Processing of quinary data
US7107439B2 (en) * 2001-08-10 2006-09-12 Mips Technologies, Inc. System and method of controlling software decompression through exceptions
JP2003186567A (ja) * 2001-12-19 2003-07-04 Matsushita Electric Ind Co Ltd マイクロプロセッサ
US7574585B1 (en) * 2003-01-31 2009-08-11 Zilog, Inc. Implementing software breakpoints and debugger therefor
US7194601B2 (en) * 2003-04-03 2007-03-20 Via-Cyrix, Inc Low-power decode circuitry and method for a processor having multiple decoders
US20070282480A1 (en) * 2003-11-10 2007-12-06 Pannese Patrick D Methods and systems for controlling a semiconductor fabrication process
US10086511B2 (en) 2003-11-10 2018-10-02 Brooks Automation, Inc. Semiconductor manufacturing systems
US7458763B2 (en) 2003-11-10 2008-12-02 Blueshift Technologies, Inc. Mid-entry load lock for semiconductor handling system
US20070269297A1 (en) 2003-11-10 2007-11-22 Meulen Peter V D Semiconductor wafer handling and transport
CN1555005A (zh) * 2003-12-29 2004-12-15 ����ͨѶ�ɷ����޹�˾ 动态循环流水线的交叠式命令提交方法
US7334116B2 (en) * 2004-10-06 2008-02-19 Sony Computer Entertainment Inc. Bit manipulation on data in a bitstream that is stored in a memory having an address boundary length
WO2008030637A2 (en) * 2006-05-01 2008-03-13 Blueshift Technologies, Inc. Methods and systems for controlling a semiconductor fabrication process
US7810073B2 (en) * 2006-09-05 2010-10-05 International Business Machines Corporation Method of translating n to n instructions employing an enhanced extended translation facility
US7908474B2 (en) * 2006-09-22 2011-03-15 International Business Machines Corporation Method for improved key management for ATMs and other remote devices
US7870087B2 (en) * 2006-11-02 2011-01-11 D-Wave Systems Inc. Processing relational database problems using analog processors
US7599901B2 (en) * 2006-12-06 2009-10-06 Microsoft Corporation Processing data-centric business models
US7873591B2 (en) * 2007-02-02 2011-01-18 Microsoft Corporation User-interface architecture for manipulating business models
JP5169760B2 (ja) * 2008-01-28 2013-03-27 富士通株式会社 通信装置、受信データサイズチェック方法、倍数判定回路および倍数判定方法
US9003170B2 (en) 2009-12-22 2015-04-07 Intel Corporation Bit range isolation instructions, methods, and apparatus
RU2469376C1 (ru) * 2011-07-06 2012-12-10 Федеральное государственное унитарное предприятие "Научно-производственное объединение автоматики имени академика Н.А. Семихатова" Вычислительное устройство бинс
US20130042091A1 (en) * 2011-08-12 2013-02-14 Qualcomm Incorporated BIT Splitting Instruction
US10025556B2 (en) * 2014-09-08 2018-07-17 Atmel Corporation Optimized multi-precision division
US10220516B2 (en) 2015-10-06 2019-03-05 Mtm Robotics, Llc System and method for self-contained independently controlled modular manufacturing tools
US10025299B2 (en) 2015-10-06 2018-07-17 Mtm Robotics, Llc System and method for self-contained modular manufacturing device having nested controllers
US10022872B2 (en) 2015-10-06 2018-07-17 Mtm Robotics, Llc Self-contained modular manufacturing tool responsive to locally stored historical data
US10252421B2 (en) 2015-10-06 2019-04-09 Mtm Robotics Llc Self-contained modular manufacturing tool
CN107682114B (zh) * 2017-09-01 2020-08-25 惠州市德赛西威汽车电子股份有限公司 一种提高数据传输效率的方法
US20210096877A1 (en) * 2019-09-26 2021-04-01 Advanced Micro Devices, Inc. Collapsing bubbles in a processing unit pipeline
CN110941211A (zh) * 2019-10-17 2020-03-31 华晟现代电子科技(香港)有限公司 一种基于物联网精简功能的微处理器及控制方法
US11755327B2 (en) * 2020-03-02 2023-09-12 Microsoft Technology Licensing, Llc Delivering immediate values by using program counter (PC)-relative load instructions to fetch literal data in processor-based devices

Family Cites Families (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5447455A (en) 1977-09-22 1979-04-14 Toshiba Corp Data processor
US4240139A (en) * 1977-09-22 1980-12-16 Tokyo Shibaura Denki Kabushiki Kaisha Address generating system
US4296469A (en) * 1978-11-17 1981-10-20 Motorola, Inc. Execution unit for data processor using segmented bus structure
US4325120A (en) * 1978-12-21 1982-04-13 Intel Corporation Data processing system
JPS55127639A (en) 1979-03-23 1980-10-02 Nec Corp Data processor
US4312034A (en) * 1979-05-21 1982-01-19 Motorola, Inc. ALU and Condition code control unit for data processor
US4354228A (en) * 1979-12-20 1982-10-12 International Business Machines Corporation Flexible processor on a single semiconductor substrate using a plurality of arrays
US4402043A (en) 1980-11-24 1983-08-30 Texas Instruments Incorporated Microprocessor with compressed control ROM
US4433378A (en) * 1981-09-28 1984-02-21 Western Digital Chip topography for MOS packet network interface circuit
US4868784A (en) * 1982-02-22 1989-09-19 Texas Instruments Incorporated Microcomputer with a multi-channel serial port having a single port address
JPS58189739A (ja) * 1982-04-30 1983-11-05 Hitachi Ltd デ−タ処理システム
US4569018A (en) * 1982-11-15 1986-02-04 Data General Corp. Digital data processing system having dual-purpose scratchpad and address translation memory
JPS6051948A (ja) * 1983-08-31 1985-03-23 Hitachi Ltd 情報処理装置
US4604722A (en) * 1983-09-30 1986-08-05 Honeywell Information Systems Inc. Decimal arithmetic logic unit for doubling or complementing decimal operand
JPS6260034A (ja) 1985-09-10 1987-03-16 Toshiba Corp ストア−ドプログラム方式制御装置
JPS62143140A (ja) 1985-12-18 1987-06-26 Fujitsu Ltd 条件付分岐命令設定方式
EP0239081B1 (en) * 1986-03-26 1995-09-06 Hitachi, Ltd. Pipelined data processor capable of decoding and executing plural instructions in parallel
JPS635432A (ja) 1986-06-25 1988-01-11 Nec Corp マイクロプロセツサ
US4992934A (en) * 1986-12-15 1991-02-12 United Technologies Corporation Reduced instruction set computing apparatus and methods
JPS6491228A (en) * 1987-09-30 1989-04-10 Takeshi Sakamura Data processor
JPS6481032A (en) 1987-09-24 1989-03-27 Hitachi Ltd Microprocessor
US4947366A (en) * 1987-10-02 1990-08-07 Advanced Micro Devices, Inc. Input/output controller incorporating address mapped input/output windows and read ahead/write behind capabilities
US5019968A (en) * 1988-03-29 1991-05-28 Yulan Wang Three-dimensional vector processor
DE68928113T2 (de) * 1988-04-01 1997-10-09 Nec Corp Reihenfolgesteuersystem zur Behandlung von Befehlen
JPH07120278B2 (ja) * 1988-07-04 1995-12-20 三菱電機株式会社 データ処理装置
JP3098242B2 (ja) * 1988-07-13 2000-10-16 日本電気株式会社 データ処理装置
US5202967A (en) * 1988-08-09 1993-04-13 Matsushita Electric Industrial Co., Ltd. Data processing apparatus for performing parallel decoding and parallel execution of a variable word length instruction
US5023827A (en) * 1988-08-18 1991-06-11 Digital Equipment Corporation Radix-16 divider using overlapped quotient bit selection and concurrent quotient rounding and correction
US5132925A (en) * 1988-08-18 1992-07-21 Digital Equipment Corporation Radix-16 divider using overlapped quotient bit selection and concurrent quotient rounding and correction
US5050068A (en) * 1988-10-03 1991-09-17 Duke University Method and apparatus for using extracted program flow information to prepare for execution multiple instruction streams
JPH0628034B2 (ja) 1988-10-24 1994-04-13 工業技術院長 タグ付計算機
JPH02125333A (ja) 1988-11-04 1990-05-14 Hitachi Micro Comput Eng Ltd プログラムメモリ
JP2810068B2 (ja) * 1988-11-11 1998-10-15 株式会社日立製作所 プロセッサシステム、コンピュータシステム及び命令処理方法
US5097435A (en) * 1988-12-24 1992-03-17 Kabushiki Kaisha Toshiba High speed dividing apparatus
JP2664750B2 (ja) * 1988-12-24 1997-10-22 株式会社東芝 演算装置及び演算処理方法
JPH02308330A (ja) 1989-05-23 1990-12-21 Nec Corp 知識情報処理装置
US5050668A (en) * 1989-09-11 1991-09-24 Allied-Signal Inc. Stress relief for an annular recuperator
JPH03127125A (ja) 1989-10-13 1991-05-30 Hitachi Ltd 学習による多重分岐処理の自動変更方式
JP2816248B2 (ja) * 1989-11-08 1998-10-27 株式会社日立製作所 データプロセッサ
DE8913210U1 (ja) * 1989-11-08 1989-12-14 Howal Gmbh, 7505 Ettlingen, De
US5016210A (en) * 1989-11-15 1991-05-14 United Technologies Corporation Binary division of signed operands
JPH063583B2 (ja) * 1990-01-11 1994-01-12 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン 命令デコード・サイクル中にアドレスを生成するデジタル・コンピュータおよびその方法
US5095526A (en) * 1990-01-26 1992-03-10 Apple Computer, Inc. Microprocessor with improved interrupt response with interrupt data saving dependent upon processor status
EP0463965B1 (en) * 1990-06-29 1998-09-09 Digital Equipment Corporation Branch prediction unit for high-performance processor
US5155843A (en) * 1990-06-29 1992-10-13 Digital Equipment Corporation Error transition mode for multi-processor system
US5193167A (en) * 1990-06-29 1993-03-09 Digital Equipment Corporation Ensuring data integrity by locked-load and conditional-store operations in a multiprocessor system
JPH04104350A (ja) * 1990-08-23 1992-04-06 Hitachi Ltd マイクロプロセッサ
US5317740A (en) * 1991-03-07 1994-05-31 Digital Equipment Corporation Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies
JP2984463B2 (ja) * 1991-06-24 1999-11-29 株式会社日立製作所 マイクロコンピュータ
JP2761688B2 (ja) * 1992-02-07 1998-06-04 三菱電機株式会社 データ処理装置
US5272660A (en) * 1992-06-01 1993-12-21 Motorola, Inc. Method and apparatus for performing integer and floating point division using a single SRT divider in a data processor
JP3127125B2 (ja) 1996-05-29 2001-01-22 株式会社ノダ 内装ドアの製造方法
US6282633B1 (en) * 1998-11-13 2001-08-28 Tensilica, Inc. High data density RISC processor
US6961819B2 (en) * 2002-04-26 2005-11-01 Mips Technologies, Inc. Method and apparatus for redirection of operations between interfaces

Also Published As

Publication number Publication date
US6131154A (en) 2000-10-10
EP0902361A3 (en) 2002-01-02
KR930001056A (ko) 1993-01-16
DE69232232T2 (de) 2002-08-29
HK1039661A1 (en) 2002-05-03
EP0902361B1 (en) 2004-06-02
EP0902361A2 (en) 1999-03-17
HK1011101A1 (en) 1999-07-02
US20080313444A1 (en) 2008-12-18
EP0525375B1 (en) 2001-11-28
US6343357B1 (en) 2002-01-29
US6996700B2 (en) 2006-02-07
EP1122638B1 (en) 2004-09-15
EP0902358A3 (en) 2002-01-02
US20100191934A1 (en) 2010-07-29
EP0902358A2 (en) 1999-03-17
EP0525375A3 (en) 1993-04-21
US6122724A (en) 2000-09-19
KR100294559B1 (ko) 2001-09-17
JPH05197546A (ja) 1993-08-06
KR100294560B1 (ko) 2001-09-17
HK1039661B (zh) 2005-02-25
US5969976A (en) 1999-10-19
US20050251651A1 (en) 2005-11-10
US5682545A (en) 1997-10-28
EP1122638A3 (en) 2002-01-23
KR100268635B1 (ko) 2000-10-16
US6253308B1 (en) 2001-06-26
EP0525375A2 (en) 1993-02-03
EP1122638A2 (en) 2001-08-08
DE69233361D1 (de) 2004-07-08
US6272620B1 (en) 2001-08-07
DE69232232D1 (de) 2002-01-10
DE69233361T2 (de) 2005-06-02
US20020078325A1 (en) 2002-06-20
US5991545A (en) 1999-11-23
DE69233412D1 (de) 2004-10-21
DE69233412T2 (de) 2005-02-17

Similar Documents

Publication Publication Date Title
JP2984463B2 (ja) マイクロコンピュータ
US6539467B1 (en) Microprocessor with non-aligned memory access
US5901301A (en) Data processor and method of processing data
US6560697B2 (en) Data processor having repeat instruction processing using executed instruction number counter
EP1102163A2 (en) Microprocessor with improved instruction set architecture
JP3745039B2 (ja) 遅延命令を有するマイクロプロセッサ
US5924114A (en) Circular buffer with two different step sizes
JPS6014338A (ja) 計算機システムにおける分岐機構
JP3105197B2 (ja) 除算回路及び除算方法
JP3215085B2 (ja) 中央処理装置及びマイクロコンピュータ
JP3205544B2 (ja) 中央処理装置
JP3539914B2 (ja) マイクロコンピュータ
JP3740321B2 (ja) データ処理装置
JP4382076B2 (ja) データ処理装置
KS Central processing unit
JP2009134745A (ja) データ処理装置

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 19990914

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313117

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20070924

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080924

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080924

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090924

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090924

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100924

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100924

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120924

Year of fee payment: 13

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120924

Year of fee payment: 13

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120924

Year of fee payment: 13

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

EXPY Cancellation because of completion of term
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120924

Year of fee payment: 13