JPH06337791A - プログラム変換装置およびプロセッサ - Google Patents

プログラム変換装置およびプロセッサ

Info

Publication number
JPH06337791A
JPH06337791A JP5126212A JP12621293A JPH06337791A JP H06337791 A JPH06337791 A JP H06337791A JP 5126212 A JP5126212 A JP 5126212A JP 12621293 A JP12621293 A JP 12621293A JP H06337791 A JPH06337791 A JP H06337791A
Authority
JP
Japan
Prior art keywords
instruction
address
data
register
bit width
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.)
Granted
Application number
JP5126212A
Other languages
English (en)
Other versions
JP2875711B2 (ja
Inventor
Masato Suzuki
正人 鈴木
Yuji Kamiyama
祐史 神山
Shinya Miyaji
信哉 宮地
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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial 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
Priority to JP5126212A priority Critical patent/JP2875711B2/ja
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to EP04075265A priority patent/EP1416374A3/en
Priority to EP02076025A priority patent/EP1229439A3/en
Priority to DE69432445T priority patent/DE69432445T2/de
Priority to EP94303862A priority patent/EP0626641B1/en
Priority to EP01202455A priority patent/EP1164479B1/en
Priority to DE69434967T priority patent/DE69434967T2/de
Priority to EP02076028A priority patent/EP1229440B1/en
Priority to DE69434971T priority patent/DE69434971T2/de
Publication of JPH06337791A publication Critical patent/JPH06337791A/ja
Priority to US08/587,338 priority patent/US5809306A/en
Application granted granted Critical
Publication of JP2875711B2 publication Critical patent/JP2875711B2/ja
Priority to US09/662,484 priority patent/USRE41959E1/en
Priority to US10/991,367 priority patent/USRE40498E1/en
Priority to US11/607,889 priority patent/US20080320454A1/en
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】 本発明は、データのビット幅が16ビットで
16メガバイト程度のアドレス空間を必要とする応用に
おいて、好適したコンパイラおよびマイクロコンピュー
タを提供することを目的とする。 【構成】 プログラム変換装置において、メモリ管理部
9、レジスタ管理部10、即値管理部11からの指示に
より、コード生成部7は、生成すべき機械語命令で用い
られる変数が、データを表す変数である場合、パラメー
タ保持手段が保持するデータのビット幅を有効とする命
令を生成する。アドレスを表す変数である場合、パラメ
ータ設定部8が保持するアドレスのビット幅を有効とす
る命令を生成する。マイクロコンピュータは、N(24)
ビット長のプログラムカウンタにより2のN乗(16Mバ
イト)のアドレス空間を利用でき、実行手段によりN
(24)ビット長の演算、及びデータのビット幅であるM
(16)ビット長の演算を実行し得る。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は高級言語プログラムを機
械語プログラムに変換するプログラム変換装置、及び、
その機械語プログラムを実行するプロセッサに関する。
【0002】
【従来の技術】近年の電子技術の発展により、マイクロ
プロセッサ等の情報処理装置が普及し、あらゆる分野で
用いられている。。従来のプロセッサとしては、例え
ば、森下巖著、「マイクロプロセッサのハードウェア」
(1984年11月9日、岩波書店)に示されている、
セグメントアドレス方式の16ビットプロセッサがあ
る。
【0003】このセグメントアドレス方式の16ビット
プロセッサは、16ビットよりも上位のビットを含む上
位アドレスを格納するセグメントレジスタを備えること
により、データのビット幅が16ビットでありながら6
4キロバイトを超えるアドレス空間を扱うことができ
る。すなわち、64キロバイトを越える全アドレス空間
をセグメントと呼ぶ64キロバイト単位の部分に分ける
とともに、各セグメントに番号を付ける方式である。ア
ドレスは、セグメントレジスタに収められたセグメント
番号と、データのビット幅と同じ16ビットで表される
セグメントの先頭からの距離(オフセット)とで管理さ
れる。これにより、セグメントアドレス方式の16ビッ
トプロセッサでは、データのビット幅が16ビットで6
4キロバイトを超えるアドレス空間を扱うことができ
る。
【0004】また、従来のプロセッサとして、同書に示
されている32ビットプロセッサがある。この32ビッ
トプロセッサは、32ビット幅のアドレスを32ビット
幅のデータと同一に管理して、4ギガバイトのアドレス
空間を扱うことができる。このようなプロセッサ上で実
行される機械語プログラムは、コンパイラ等のプログラ
ム変換装置によって生成される。
【0005】上記16ビットプロセッサに対するコンパ
イラは、アドレス管理の方式に関して、ラージモデル方
式を呼ばれるものと、ニアファーモデル方式と呼ばれる
ものがある。ラージモデル方式を採用するコンパイラ
は、ポインタ変数を常にセグメントレジスタと16ビッ
トオフセットとを対にして設定する。このため、このコ
ンパイラによるオブジェクトコードを実行するプロセッ
サは、アドレス計算の度にセグメントレジスタの内容を
計算して更新する操作が発生し、セグメントアドレス方
式を採らない16ビットプロセッサに比べて著しく性能
が劣化するという短所を有している。
【0006】また、ニアファーモデル方式とを採用する
コンパイラは、ラージモデル方式における上記の短所を
次のようにして解決している。この方式は、同一セグメ
ント内をアクセスするためのニアポインタ変数と、セグ
メント境界をまたいでアクセスするためのファーポイン
タ変数という2種類のポインタ変数を指定できるように
なっている。コンパイラは、ニアポインタ変数には16
ビットオフセットのみを設定し、ファーポインタ変数に
はセグメントレジスタと16ビットオフセットとを対に
して設定する。ニアポインタ変数とファーポインタ変数
のいずれを用いるかは、プログラマが選択する。
【0007】このニアファーモデル方式は、ニアポイン
タ変数を用いる場面ではラージモデル方式に比べて性能
が向上する反面、プログラマがプログラム作成時にセグ
メント境界を認識して2種類のポインタ変数を使い分け
る必要があり、プログラム開発効率が著しく低下すると
いう新たな問題点を有している。他方、32ビットプロ
セッサに対するコンパイラは、上記の問題点を有してい
ない。即ち、コンパイラが32ビットのデータ変数と同
様にポインタ変数にも32ビットのアドレスを設定する
ので、プログラマがセグメントの境界を認識する必要が
ないので、プログラムの開発効率を低下させることもな
い。また、コンパイルされたプロクラムを実行するプロ
セッサは、アドレス計算による性能劣化を発生させな
い。そして、4ギガバイトという広大なアドレス空間を
扱うことができる。
【0008】
【発明が解決しようとする課題】しかしながら従来技術
のプロセッサおよびプログラム変換装置によれば、組み
込み用途のマイクロコンピュータでの応用(アプリケー
ション)おいては、32ビットのデータ幅を必要とせ
ず、かつ、4ギガバイトのアドレス空間を必要としない
ものがほとんどである。多くのアプリケーションでは、
データ幅については16ビットあれば十分であるが、ア
ドレス空間については64キロバイトでは不足する。こ
のような現状に鑑みると、データのビット幅が16ビッ
ト必要で、かつ、アドレス空間が64キロバイト以上を
必要とするが4ギガバイトもの大きさを必要としない応
用では、最適なマイクロコンピュータおよびコンパイラ
がなかったという問題点があった。
【0009】より具体的に説明すると、32ビットプロ
セッサは、32ビットのデータおよびアドレスを処理す
るためのハードウェアを有することから、過分なハード
ウェアとなるのでコストおよび消費電力が増大するとい
う問題点を有している。16ビットプロセッサは、アド
レス空間の管理が従来技術で述べたようにアドレス計算
の点で性能劣化を避けられない。また、プログラマがセ
グメントの境界を認識する必要があることから、プログ
ラムの開発効率が落ちる。
【0010】また、32ビットプロセッサ用コンパイラ
は、16ビットまたは32ビットを基本語長とする機械
語命令を使い分け、プログラム中では32ビットのアド
レス指定が必要なために、プログラムのコードサイズが
増大する。また、32ビットプロセッサとメモリとを接
続するデータバスのビット幅が16ビットの場合は32
ビットに比べて性能が著しく劣化するという問題点も有
している。
【0011】本発明は上記問題点に鑑み、データのビッ
ト幅が16ビットで16メガバイト程度のアドレス空間
を必要とする応用において、好適したプログラム変換装
置およびプロセッサを提供することを目的とする。
【0012】
【課題を解決するための手段】上記の課題を解決するた
め本発明のプログラム変換装置は、主たるデータの型に
おける有効なビット幅よりも長いビット幅をもつアドレ
スを扱うプロセッサを対象とし、高級言語プログラムに
基づいて機械語命令を生成するプログラム変換装置であ
って、主たるデータの型における有効なビット幅および
アドレスのビット幅を保持するパラメータ保持手段と、
生成すべき機械語命令で用いられる変数が、データを表
す変数である場合、パラメータ保持手段が保持するデー
タのビット幅を有効とする命令を生成し、アドレスを表
す変数である場合、パラメータ保持手段が保持するアド
レスのビット幅を有効とする命令を生成する生成手段と
を備えている。
【0013】前記データのビット幅Mは16であり、前
記アドレスのビット幅Nは17以上31以下であっても
よい。また、前記生成手段は、生成すべき機械語命令が
メモリをアクセスする命令である場合に、アクセス対象
となる変数がデータであるかアドレスであるかに応じ
て、パラメータ保持手段に保持された対応するビット幅
をアクセス幅とすべきことを指示するメモリ管理手段
と、生成すべき機械語命令がレジスタを使用する命令で
ある場合に、そのレジスタにリード又はライトされる変
数がデータであるかアドレスであるか応じて、パラメー
タ保持手段に保持された対応するビット幅を有効とすべ
きことを指示するレジスタ管理手段と、生成すべき機械
語命令が即値を使用する命令である場合にその即値がデ
ータであるかアドレスであるか応じて、パラメータ保持
手段に保持された対応するビット幅の即値を用いるべき
ことを指示する即値管理手段とメモリ管理手段、レジス
タ管理手段、即値管理手段からの指示に従って、機械後
命令を生成するコード生成手段とからなっていてもよ
い。
【0014】また、本発明のプロセッサは、上記プログ
ラム変換装置により生成されたプログラムを実行するプ
ロセッサであって、Nビット長のプログラムカウンタ
と、Nビット長の演算、及びデータのビット幅であるM
ビット長の演算を実行する実行手段とを備えている。
【0015】ここで、前記Nは24であり、Mは16で
あってもよい。
【0016】
【作用】上記の手段により本発明のプログラム変換装置
において、生成手段は、生成すべき機械語命令で用いら
れる変数が、データを表す変数である場合、パラメータ
保持手段が保持するデータのビット幅を有効とする命令
を生成する。アドレスを表す変数である場合、パラメー
タ保持手段が保持するアドレスのビット幅を有効とする
命令を生成する。
【0017】また、前記生成手段において、メモリ管理
手段は、生成すべき機械語命令がメモリをアクセスする
命令である場合に、アクセス対象となる変数がデータで
あるかアドレスであるかに応じて、パラメータ保持手段
に保持された対応するビット幅をアクセス幅とすべきこ
とをコード生成手段に指示する。レジスタ管理手段は、
生成すべき機械語命令がレジスタを使用する命令である
場合に、そのレジスタにリード又はライトされる変数が
データであるかアドレスであるか応じて、パラメータ保
持手段に保持された対応するビット幅を有効とすべきこ
とをコード生成手段に指示する。即値管理手段は、生成
すべき機械語命令が即値を使用する命令である場合にそ
の即値がデータであるかアドレスであるか応じて、パラ
メータ保持手段に保持された対応するビット幅の即値を
用いるべきことをコード生成手段に指示する。
【0018】また、本発明のプロセッサは、N(24)
ビット長のプログラムカウンタにより2のN乗(16メ
ガバイト)のアドレス空間を利用でき、実行手段により
N(24)ビット長の演算、及びデータのビット幅であ
るM(16)ビット長の演算を実行し得る。
【0019】
【実施例】図1は本発明の実施例におけるマイクロコン
ピュータおよびプログラム変換装置(以下、コンパイラ
と略す。マイクロコンピュータとコンパイラを含めて情
報処理装置と呼ぶ)のブロック図を示す。図1におい
て、本情報処理装置は、C言語プログラムを格納してい
る記憶装置1と、C言語プログラムを機械語プログラム
に翻訳するコンパイラ2と、オブジェクトコードを実行
するハードウェア3とからなる。
【0020】コンパイラ2は、以下のものからなる。5
は構文解析部で、C言語プログラムの構文を解析し、プ
ログラム文が中間形式に変換された中間形式文及び中間
コードからなる中間ファイルを生成する。7はコード生
成部で、中間ファイルに基づいてオブジェクトコードを
生成する。
【0021】8はパラメータ設定部で、整数型のデータ
変数のビット幅とポインタ変数のビット幅とを保持す
る。本実施例では、予め利用者により整数型のデータ変
数のビット幅が16ビットに、ポインタ変数のビット幅
が24ビットに設定されているものとする。9はメモリ
管理部で、コード生成部7が生成すべきロード・ストア
命令について、その命令の対象となる変数の型に応じ
て、メモリを読み書きするビット幅を指示する。
【0022】10はレジスタ管理部で、コード生成部7
が生成すべきレジスタを使用する命令について、レジス
タにリード/ライトされる変数の型に応じて、有効なビ
ット幅を指示する。11は即値管理部で、コード生成部
7が生成すべき即値を用いる命令について、即値である
変数の型に応じて、命令コード中の即値のビット幅を指
示する。
【0023】また、ハードウェア3は、以下のものから
なる。13はメモリで、オブジェクトコードおよびプロ
グラムで用いられるデータを格納する。14はアドレス
バスで、24ビットのビット幅を持つ。15はデータバ
スで、16ビットのビット幅を持つ。
【0024】16はバス制御回路で、アドレスバス14
とデータバス15とを介してメモリ13に接続され、メ
モリ13に格納されたオブジェクトコードを命令として
逐一読み出し、またメモリ13に対してデータを読み書
きする。17は命令制御回路で、プログラムカウンタ1
9を有し、バス制御回路16へ命令アドレスを指示し、
バス制御回路16から命令を受け取り解読する。
【0025】プログラムカウンタ19は、24ビットの
命令アドレスを出力する。18は演算実行回路で、レジ
スタファイル20と演算器21からなる。レジスタファ
イル20は、24ビットの複数のレジスタを有する。演
算器21は、レジスタファイル20に保持された値を用
いて24ビット幅の算術論理演算等を実行する。
【0026】図2は、コード生成部7の処理フローを示
す。ステップ20は、中間ファイルからデータ変数を抽
出して、それぞれの変数に関する情報を載せた変数テー
ブル(シンボルテーブル)を作成する。シンボルテーブ
ルの一例を図7に示す。同図において、シンボル欄はデ
ータ変数のシンボルを、型欄はデータ変数が整数型であ
るかポインタ型であるかを、バイト数欄はそのデータ変
数のバイト数を、先頭アドレス欄はメモリに割り付けら
れている場合の先頭アドレスを、レジスタ欄はレジスタ
が割り当てれている場合のレジスタ名を示す。
【0027】ステップ21は、中間ファイルからコード
生成が未処理の中間命令があるか否かを判定する。あれ
ばステップ22に進み、なければコード生成が終了す
る。ステップ22は、中間ファイルから次に処理すべき
順の中間命令を1つ読み出す。ステップ23は、1つの
中間命令を実現する1つ又は複数の機械語命令を選定す
る。
【0028】ステップ24は、選定された機械語命令か
ら次に処理すべき順の機械語命令を1つ指定する。ステ
ップ25は、指定された1つの機械語命令(以下、個別
命令と呼ぶ)の命令コードを生成する処理(以下、個別
処理と呼ぶ)を行う。ステップ26は、ステップ23で
選定された機械語命令のうち次に処理すべき機械語命令
があるか否かを判定する。あればステップ24に戻り、
なければステップ21に戻る。
【0029】図3〜図6は、上記ステップ25の個別処
理のフローを示す。第1に、ステップ30は、個別命令
がロード/ストア命令の種類に属するか否かを判定し、
そうである場合はメモリ管理部9に通知し、そうでない
場合ステップ31に進む。この通知を受けたメモリ管理
部9の処理フローを図4に示す。図4において、ステッ
プ40は、その個別命令(ロード/ストア命令)におい
てメモリとの間でロード/ストアすべき変数について、
シンボルテーブルを参照し、その変数の型を調べる。
【0030】ステップ41は、その変数の型が整数型デ
ータ変数であるか、ポインタ型データ変数であるかを判
定し、前者である場合ステップ42に、後者である場合
ステップ43に進む。ステップ42は、アクセスするデ
ータ幅が2バイトのロード/ストア命令を生成すべきこ
とをコード生成部7に指示し、ステップ31に進む。
【0031】ステップ43は、アクセスするデータ幅が
3バイトのロード/ストア命令を生成すべきことをコー
ド生成部7に指示し、ステップ31に進む。第2に、ス
テップ31は、個別命令がレジスタを使用するか否かを
判定し、そうである場合はレジスタ管理部10に通知
し、そうでない場合ステップ32に進む。この通知を受
けた場合のレジスタ管理部10の処理フローを図5に示
す。図5において、ステップ50は、その個別命令が使
用するレジスタに格納される変数について、シンボルテ
ーブルを参照し、その変数の型を調べる。
【0032】ステップ51は、その変数の型が整数型デ
ータ変数であるか、ポインタ型データ変数であるかを判
定し、前者である場合ステップ52に、後者である場合
ステップ53に進む。ステップ52は、使用するレジス
タの下位16ビットを有効とする命令を生成すべきこと
をコード生成部7に指示し、ステップ32に進む。
【0033】ステップ53は、使用するレジスタの全2
4ビットを有効とする命令を生成すべきことをコード生
成部7に指示し、ステップ32に進む。第3に、ステッ
プ32は、個別命令が即値データを使用するかか否かを
判定し、そうである場合は即値管理部11に通知し、そ
うでない場合ステップ33に進む。この通知を受けた場
合の即値管理部11の処理フローを図6に示す。
【0034】図6において、ステップ60は、当該個別
命令において使用する即値データとなる変数について、
シンボルテーブルを参照し、その変数の型を調べる。ス
テップ61は、その変数の型が整数型データ変数である
か、ポインタ型データ変数であるかを判定し、前者であ
る場合ステップ62に、後者である場合ステップ63に
進む。
【0035】ステップ62は、2バイトの即値を持つ命
令を生成すべきことをコード生成部7に指示し、ステッ
プ33に進む。ステップ63は、3バイトの即値を持つ
命令を生成すべきことをコード生成部7に指示し、ステ
ップ33に進む。第4に、ステップ33は、メモリ管理
部9、レジスタ管理部10、即値管理部11からの指示
があれば、それにしたがって個別命令の命令コードを生
成する。
【0036】以上のように構成された本実施例のマイク
ロコンピュータおよびプログラム変換装置について、以
下その動作を説明する。説明を簡潔にするために、記憶
装置1に記憶されているC言語プログラムが次に示す場
合を例にあげる。 構文解析部5は、記憶装置1からC言語プログラムを取
り出し、構文を文法に照らして解析して中間形式の言語
で記述された中間ファイルを生成する。この中間ファイ
ルのイメージを以下に示す。ただし、ここでは便宜上、
中間形式の記述を意味がわかるように書き直してある。
【0037】中間形式文1: (int *a, b, c) 中間命令1: t1:=*a 中間命令2: t2:=t1+b 中間命令3: t3:=t2+1 中間命令4: c:=t3 中間形式文1は、宣言文int *a, b, c に対応し、中間
命令1〜4は、演算式c= *a + b + 1 に対応する。
【0038】これらの中間形式文、中間命令は、それぞ
れ以下のようにしてオブジェクトコードに変換される。
この中間ファイルが入力されると、コード生成部7は、
中間ファイル中のデータ変数(宣言のないものも含め
て)を抽出し、それぞれの変数の型を調査し、必要があ
ればメモリに割り当て、図7に示したシンボルテーブル
を作成する(図2のステップ20)。
【0039】上の例では、中間形式文1から明示に宣言
された変数*a,b,cが抽出される。ポインタ変数として宣
言された変数*aは、パラメータ設定部8においてポイン
タ変数のビット幅が24ビットに設定されているので、
メモリ上に24ビット(3バイト)の領域が確保され割
り付けられる。また、整数型データ変数として宣言され
た2つの変数b,cは、パラメータ設定部8において整数
型データ変数のビット幅が16ビットに設定されている
ので、それぞれメモリ上に16ビット(2バイト)の領
域が確保され割り付けられる。ここでは、変数*a,b,c
は、それぞれメモリの1000番地から3バイト、1004番地
から2バイト、1006番地から2バイトの領域に割り当て
られているものとする。ただし、1003番地の1バイトは
空領域である。
【0040】さらに、中間命令1〜4から一時変数t1,t
2,t3が抽出される。一時変数t1,t2,t3は、演算対象とな
る変数に合わせて、それぞれ整数型データ変数として扱
われる。これらの変数に関する情報がシンボルテーブル
に書き込まれる。このシンボルテーブルの内容は、以後
レジスタ割当等の変更があれば、その都度ダイナミック
にその内容が書き換えられる。既に示した図7は、この
時点におけるシンボルテーブルの内容である。この時点
では、レジスタ欄及び一時変数の先頭アドレス欄は、割
当がないので空欄のままである。
【0041】この後、コード生成部7は、中間命令のそ
れぞれについて、以下のようにして対応する機械語命令
を生成する。 << 中間命令1:t1:=*a >>コード生成部7は、中間ファ
イル中に処理すべき(未処理の)中間命令が残っている
か否かを判定する(図2のステップ21)。この時点で
は、中間命令1〜4が残っているので、ステップ22に
進む。
【0042】次に、コード生成部7は、未処理の中間命
令のうち先頭の中間命令を1つ読み出し(ステップ2
2)、その中間命令を実現する1つ又は複数の機械語命
令を選定する(ステップ23)。ステップ23における
中間命令1を実現する1つ又は複数の命令の選定を具体
的に説明する。
【0043】中間命令1は「ポインタ変数*aが割り当
てられている1000番地から、3バイトを読み出して、
その内容をアドレスとして2バイト読み出して一時変
数t1に格納する。」ことを内容とする。コード生成部7
は、この内容を実現するため上記〜に対応する機械
語命令を選定する。すなわち、アドレス1000番地を即
値データとして、第1のアドレスレジスタに格納するmo
v命令、第1のアドレスレジスタを用いて*aの内容
(ポインタ)をアドレスとして、第2のアドレスレジス
タに読み出すmov命令、第2のアドレスレジスタを用
いて、ポインタが指すデータをデータレジスタに読み出
すmov命令、の3つの命令を選定する。上記第1、第2
のアドレスレジスタは、A0、A1が割り当てられているも
のとする。これは、シンボルテーブルに記入される。
【0044】<個別命令の生成>さらに、コード生成
部7は、これらの複数の命令の中から処理すべき命令
(個別命令)を1つ指定し(ステップ24)、個別命令
に対する命令コードを生成する(ステップ25)。こ
のステップ25における個別命令の命令コード生成を
図3〜6のフローを用いて具体的に説明する。
【0045】コード生成部7は、ステップ24で指定さ
れた個別命令がメモリアクセスするロード/ストア命
令でなく(図3のステップ30)、レジスタA0を使用す
る命令であるのでレジスタ管理部10にその旨通知する
(ステップ31)。レジスタ管理部10は、シンボルテ
ーブルを参照し(図5のステップ50)、レジスタA0に
格納すべき変数がポインタであることから(ステップ5
1)、レジスタの全24ビットが有効となる命令を生成
すべきことをコード生成部7に対して指示する(ステッ
プ53)。
【0046】さらに、コード生成部7は、個別命令が
即値データを用いるので即値管理部11にその旨通知す
る(ステップ32)。即値管理部11は、シンボルテー
ブルを参照し(図6のステップ60)、レジスタA0に格
納すべき即値がポインタであることから(ステップ6
1)、3バイトの即値データを有する命令を生成すべき
ことをコード生成部7に対して指示する(ステップ6
3)。
【0047】ステップ53、63からの指示に従って、
コード生成部7は、個別命令に対応する、次に示す命
令1を生成する(ステップ33)。 命令1: MOV #001000,A0 この後コード生成部7は、ステップ23で選定された複
数命令のうち、次の命令コードを生成すべき命令、
が残っているので(ステップ26)、ステップ24に進
む。
【0048】<個別命令の生成>コード生成部7は、
これらの複数の命令の中から処理すべき命令(個別命
令)を1つ指定し(ステップ24)、個別命令に対す
る命令コードを生成する(ステップ25)。このステッ
プ25における個別命令の命令コード生成を図3〜6
のフローを用いて具体的に説明する。
【0049】コード生成部7は、個別命令がメモリア
クセスするロード/ストア命令であるので、メモリ管理
部9にその旨通知する(図3のステップ30)。メモリ
管理部9は、シンボルテーブルを参照し(図4のステッ
プ40)、第2のレジスタA1に格納すべき変数がポイン
タであることから(ステップ41)、メモリアクセスに
おけるアクセス幅が3バイトであるロード命令を生成す
べきことをコード生成部7に対して指示する(ステップ
43)。
【0050】さらに、コード生成部7は、個別命令が
レジスタA0、A1を使用する命令であるのでレジスタ管理
部10にその旨通知する(ステップ31)。レジスタ管
理部10は、シンボルテーブルを参照し(図5のステッ
プ50)、第2のレジスタA1に格納すべき変数がポイン
タであることから(ステップ51)、レジスタの全24
ビットが有効となる命令を生成すべきことをコード生成
部7に対して指示する(ステップ53)。
【0051】この後、コード生成部7は、個別命令が
即値データを用いないので(ステップ32)、ステップ
33に進む。ステップ43、53からの指示に従って、
コード生成部7は個別命令に対応する、次に示す命令
2を生成する(ステップ33)。 命令2: MOV @A0,A1 この後コード生成部7は、ステップ23で選定された複
数命令のうち、次の命令コードを生成すべき命令が残
っているので(ステップ26)、ステップ24に進む。
【0052】<個別命令の生成>個別命令について
も上記と同様にして、コード生成部7は次の命令3を生
成する(ステップ24〜26)。この時点で、一時変数
t1には、D0レジスタが割り当てられている。 命令3: MOV @A1,D0 以下、上記と同様にして、ステップ21〜26のループ
において各中間命令の処理が、ステップ24、25(図
3、4のフロー)、26において各個別命令の処理が行
われるので、詳細な説明は省略して概要を示す。
【0053】<< 中間命令2:t2:=t1+b >>この中間命令
は、「変数bが割り当てられている1004番地から2バ
イト読み出して、その内容と一時変数t1とを加算して
一時変数t2に格納する。」ことを内容とする。まず、コ
ード生成部7は、個別命令に対応してA0レジスタの内
容が示す1000番地から4番地離れた番地をロードする命
令4を生成する。その際、メモリ管理部9は、シンボル
テーブルを参照して(ステップ40)、個別命令4が整
数型データ変数をロードすることから(ステップ4
1)、アクセス幅が2バイトのロード命令を生成すべき
ことを指示する(ステップ42)。レジスタ管理部10
は、シンボルテーブルを参照して(ステップ50)、レ
ジスタに整数型データを格納するので(ステップ5
1)、レジスタの下位16ビットが有効となる命令を生
成すべきことを指示する(ステップ52)。この時点
で、レジスタD1には変数bが格納されている。
【0054】命令4: MOV @(04,A0),D1 次に、コード生成部7は、個別命令に対応してD1レジ
スタに格納された変数bと、D0レジスタの内容が示す一
時変数t1とを加算して、その結果をD1レジスタに格納す
る命令5を生成する。その際、レジスタ管理部10は、
シンボルテーブルを参照して(ステップ50)、レジス
タに整数型データを格納するので(ステップ51)、レ
ジスタの下位16ビットが有効となる命令を生成すべき
ことを指示する(ステップ52)。この時点で、一時変
数t2にはレジスタD1が割り当てられている。
【0055】命令5: ADD D0,D1 <<中間命令3:t3:=t2+1 >>この中間命令は、「一時
変数t2に1を加算して一時変数t3に格納する」ことを内
容とする。コード生成部7は、レジスタ管理部10、即
値管理部11の指示に従って、2バイトの即値#0001と
レジスタD1とを加算した結果をD1レジスタに格納する次
の命令6を生成する。この時点で、一時変数t3にはレジ
スタD1が割り当てられている。
【0056】命令6: ADD #0001,D1 <<中間命令4:c:=t3 >>この中間命令は「変数cが割
り当てられている1006番地から2バイトの領域に一時変
数t3を書き込む」ことを内容とする。コード生成部7
は、メモリ管理部9の指示に従って、レジスタA1の内容
が示す番地から6番地離れた番地にレジスタD1の内容を
ストアする次の命令7を生成する。
【0057】命令7: MOV D1,@(06,A0) 上記のようにして各中間命令の処理が終了する。その結
果、コード生成部7から次のようなオブジェクトコード
がメモリ13に対して出力される。メモリ13上で、命
令1から命令7はそれぞれ、100000番地、100005番地、
100007番地、100008番地、10000a番地、10000b番地、10
000f番地に配置されるものとする。
【0058】 命令1: 100000番地 MOV #001000,A0 命令2: 100005番地 MOV @A0,A1 命令3: 100007番地 MOV @A1,D0 命令4: 100008番地 MOV @(04,A0),D1 命令5: 10000a番地 ADD D0,D1 命令6: 10000b番地 ADD #0001,D1 命令7: 10000f番地 MOV D1,@(06,A0) これらの命令は、オブジェクトコードを便宜上ニモニッ
ク(アセンブリ言語)で表現したものであり、メモリ1
3に格納される際は2進数で表される。上記の数値はす
べて16進数である。以下、メモリ13に配置されたこ
のオブジェクトコードについて、マイクロコンピュータ
により実行される動作を説明する。
【0059】(命令1:100000番地 MOV #001000,A0
)バス制御回路16および命令制御回路17は、プロ
グラムカウンタ19が保持している値100000をアドレス
バス14に出力し、データバス15を介して命令1をフ
ェッチして解読する。解読結果に従って演算実行回路1
8は、命令1のオペランドで指定されている即値001000
を命令制御回路17から受け取り、レジスタファイル2
0の中のA0レジスタに格納する。
【0060】(命令2:100005番地 MOV @A0,A1 )バ
ス制御回路16および命令制御回路17は、同様にし
て、命令2をフェッチして解読する。演算実行回路18
は、A0レジスタの内容を読み出し、それをアドレスバス
14に出力してメモリ13を読み出し、データバス15
を介して読み出された16ビットのデータをA1レジスタ
の下位16ビットに格納する。続いて、演算実行回路1
8は、演算器21によりA0レジスタの値001000に2を加
算し、バス制御回路16により加算結果001002をアドレ
スバス14に出力してメモリ13を読み出し、データバ
ス15を介して読み出された8ビットのデータをA1レジ
スタの上位8ビットに格納する。
【0061】(命令3:100007番地 MOV @A1,D0 )バ
ス制御回路16および命令制御回路17は、命令3をフ
ェッチして解読する。演算実行回路18は、A1レジスタ
の内容を読み出し、それをアドレスバス14に出力し、
メモリ13を読み出す。その後演算実行回路18は、デ
ータバス15を介して読み出された16ビットの値をD0
レジスタの下位16ビットに格納する。D0レジスタは、
ポインタ変数*aが指し示すデータを保持することにな
る。
【0062】(命令4:100008番地 MOV @(04,A0),D1
)バス制御回路16および命令制御回路17は、命令
4をフェッチして解読する。演算実行回路18は、変位
値04を命令制御回路17から受け取り、演算器21にお
いて読み出されたA0レジスタの値001000と加算し、加算
結果001004をバス制御回路16によりアドレスバス14
に出力しメモリ13の読み出しを行う。その後演算実行
回路18は、データバス15に読み出された16ビット
の値をレジスタファイル20の中のD1レジスタの下位1
6ビットに格納する。D1レジスタは、変数bを保持する
ことになる。
【0063】(命令5:10000a番地 ADD D0,D1 )バ
ス制御回路16および命令制御回路17は、命令5をフ
ェッチして解読する。演算実行回路18は、演算器21
においてレジスタファイル20から読み出されたD0レジ
スタの値とD1レジスタの値とを加算し、加算結果をレジ
スタファイル20の中のD1レジスタに格納する。演算器
21はこの加算を24ビットで行うが、D1レジスタは下
位16ビットが有効である。D1レジスタは、ポインタ変
数*aが示すデータと変数bとの加算値を保持することに
なる。
【0064】(命令6:10000b番地 ADD #0001,D1 )
バス制御回路16および命令制御回路17は、命令6を
フェッチして解読する。演算実行回路18は、演算器2
1においてレジスタファイル20から読み出されたD1レ
ジスタの値と、命令制御回路17から受け取った即値00
01とを加算し、加算結果をD1レジスタに格納する。D1レ
ジスタは、ポインタ変数*aが示すデータと変数bと即値0
001との加算値を保持することになる。
【0065】(命令7:10000f番地 MOV D1,@(06,A0)
)バス制御回路16および命令制御回路17は、命令
7をフェッチして解読する。演算実行回路18は、変位
置06を命令制御回路17から受け取り、演算器21にお
いてレジスタファイル20から読み出されたA0レジスタ
の値001000と加算し、加算結果001006をバス制御回路1
6によりデータバス15に出力するとともに、D1レジス
タの下位16ビットの値をデータバス15に出力し、メ
モリ13に対して16ビットデータの書き込みを行う。
メモリ13の001006番地には、ポインタ変数*aが示すデ
ータと変数bと即値0001との加算値が書き込まれること
になる。
【0066】このようにしてC言語プログラムがコンパ
イラ2で翻訳されて生成されたオブジェクトコードが、
ハードウェア3で実行される。以上のように本実施例に
よれば、コンパイラ2が全ての変数と生成するオブジェ
クトコードとのメモリ上での配置を24ビットのアドレ
スで管理し、マイクロコンピュータが24ビットのレジ
スタファイル20および演算器21でこれらのアドレス
を計算し24ビットのアドレスバス14でメモリ13を
アクセスするため、本実施例の情報処理装置はセグメン
トに分割しない全く均一な16メガバイトのアドレス空
間を実現することができ、従ってC言語プログラムを記
述するプログラマはセグメントの境界のような空間の不
均一性を認識する必要がなく、またセグメントレジスタ
の操作のようなアドレス計算での性能劣化も発生しな
い。それに伴ってプログラムの開発効率も向上する。
【0067】また、データのビット幅が16ビットで1
6メガバイトのアドレス空間を必要とする応用にとっ
て、本実施例の情報処理装置は、マイクロコンピュータ
が24ビットのレジスタファイル20および演算器21
で構成されるため、従来の32ビットプロセッサのよう
に過分なハードウェアによってコストおよび消費電力が
増大することがない。
【0068】また、マイクロコンピュータの機械語命令
の基本語長は8ビットであり、上記の命令1のように命
令中にアドレスの即値が伴う場合でもその即値は最大で
も24ビットとなるため、コンパイラ2が生成するオブ
ジェクトコードは、機械語命令の基本語長を16または
32ビットとしアドレスの即値が最大32ビットとなる
32ビットプロセッサの情報処理装置に比べて極めて小
さくなる。また64キロバイトのアドレス空間しか扱え
ない16ビットプロセッサに比べても、コードサイズの
増加の要因が命令に伴うアドレスの即値による最大1バ
イトだけであるため、オブジェクトコードのサイズはほ
とんど大きくならない。
【0069】本実施例のマイクロコンピュータのデータ
バス15の幅は16ビットであるが、これを24ビット
とした場合と比べると、レジスタファイル20に格納さ
れた24ビットのアドレスに関する値をメモリ13に対
して読み書きする時のみ実行時間が長くなるだけであ
り、この性能の低下は、メモリに対して常に32ビット
で読み書きする32ビットプロセッサの情報処理装置の
データバスのビット幅を16ビットにした場合に比べて
極めて小さい。
【0070】なお、本実施例は、マイクロコンピュータ
のアドレスバス14、プログラムカウンタ19、レジス
タファイル20および演算器21のビット幅を24ビッ
トとし、コンパイラ2のパラメータ設定部8のポインタ
変数のビット幅を24ビットに設定しているが、これら
を必要とするアドレス空間の広さに対応して17ビット
から31ビットの任意のビット幅にしてもよい。対応は
次のようになる。
【0071】 必要なアドレス空間 ビット幅 128キロバイト 17ビット 256キロバイト 18ビット 512キロバイト 19ビット 1メガバイト 20ビット 2メガバイト 21ビット 4メガバイト 22ビット 8メガバイト 23ビット 16メガバイト 24ビット(本実施例) 32メガバイト 25ビット 64メガバイト 26ビット 128メガバイト 27ビット 256メガバイト 28ビット 512メガバイト 29ビット 1ギガバイト 30ビット 2ギガバイト 31ビット このようにすることにより、アドレスのビット幅を超す
過分なハードウェアがなくなり、応用に応じてコストお
よび消費電力の最適化を図ることができる。
【0072】また本実施例は、マイクロコンピュータの
データバス15の幅を16ビットとしているが、これを
24ビットとしてもよい。また本実施例は、マイクロコ
ンピュータのアドレスバス14、プログラムカウンタ1
9、レジスタファイル20および演算器21のビット幅
とコンパイラ2のパラメータ設定部8のポインタ変数の
ビット幅の設定値とを24ビットとし、コンパイラ2の
パラメータ設定部8のデータ変数のビット幅の設定値を
16ビットとしているが、これらのビット幅を限定する
ものではない。後者をプログラムが主として扱う型のデ
ータのビット幅(Mとする)と等しくし、前者をMより
大きい値(Nとする)とすることにより、情報処理装置
は、主として扱う型のデータのビット幅で表現できる2
のM乗バイトの空間を越える2のN乗バイトのアドレス
空間を扱うことができる。
【0073】また本実施例は、パラメータ設定部8でビ
ット幅を設定するデータ変数の型を整数型としている
が、これをC言語プログラムで主として扱うデータの型
に合わせていかなる型にしてもよい。また本実施例は、
C言語プログラムをコンパイルして実行するものである
が、言語を限定するものではない。コンパイラ2をプロ
グラムの記述言語に対応させることにより、情報処理装
置はいかなる言語のプログラムでも実行できる。
【0074】
【発明の効果】以上説明してきたたように本発明によれ
ば、パラメータ設定手段にデータ幅及びポインタ幅を任
意に設定できるので、プログラマにセグメントの境界の
ような空間の不均一性を認識させることなく、かつセグ
メントレジスタの操作のようなアドレス計算での性能劣
化をも伴うことなく、主として扱う型のデータのビット
幅で表現できる空間を超える広さの任意のアドレス空間
を扱うことができるという効果がある。
【0075】また、組み込み用途のマイクロコンピュー
タでの応用(アプリケーション)おいては、データのビ
ット幅が16ビット必要で、かつ、アドレス空間が64
キロバイト以上を必要とするが4ギガバイトもの大きさ
を必要としないものに対して最適化を図ることができる
という効果がある。また本発明によれば、従来の32ビ
ットプロセッサの情報処理装置に比べてプログラムのコ
ードサイズが小さく、またデータバスのビット幅が16
ビットの場合でも性能劣化がほとんどない情報処理装置
を実現できるという効果がある。
【図面の簡単な説明】
【図1】本発明の実施例における情報処理装置のブロッ
ク図である。
【図2】同実施例におけるコード生成部7の処理フロー
を示す。
【図3】同実施例におけるコード生成部7の処理フロー
のうち個別処理のフローを示す。
【図4】同実施例におけるメモリ管理部9の処理フロー
を示す。
【図5】同実施例におけるレジスタ管理部10の処理フ
ローを示す。
【図6】同実施例における即値管理部11の処理フロー
を示す。
【図7】同実施例におけるシンボルテーブルを示す。
【符号の説明】
1 記憶装置 2 コンパイラ 3 ハードウェア 5 構文解析部 7 コード生成部 8 パラメータ設定部 9 メモリ管理部 10 レジスタ管理部 11 即値管理部 13 メモリ 14 アドレスバス 15 データバス 16 バス制御回路 17 命令制御回路 18 演算実行回路 19 プログラムカウンタ 20 レジスタファイル 21 演算器

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】 主たるデータの型における有効なビット
    幅Mよりも長いビット幅Nをもつアドレスを扱うプロセ
    ッサを対象とし、高級言語プログラムに基づいて機械語
    命令を生成するプログラム変換装置であって、 主たるデータの型における有効なビット幅およびアドレ
    スのビット幅を保持するパラメータ保持手段と、 生成すべき機械語命令で用いられる変数が、データを表
    す変数である場合、パラメータ保持手段が保持するデー
    タのビット幅を有効とする命令を生成し、アドレスを表
    す変数である場合、パラメータ保持手段が保持するアド
    レスのビット幅を有効とする命令を生成する生成手段と
    を備えたことを特徴とするプログラム変換装置。
  2. 【請求項2】 前記データのビット幅Mは16であり、 前記アドレスのビット幅Nは17以上31以下であるこ
    とを特徴とする請求項1記載のプログラム変換装置。
  3. 【請求項3】 前記生成手段は、 生成すべき機械語命令がメモリをアクセスする命令であ
    る場合に、アクセス対象となる変数がデータであるかア
    ドレスであるかに応じて、パラメータ保持手段に保持さ
    れた対応するビット幅をアクセス幅とすべきことを指示
    するメモリ管理手段と、 生成すべき機械語命令がレジスタを使用する命令である
    場合に、そのレジスタにリード又はライトされる変数が
    データであるかアドレスであるか応じて、パラメータ保
    持手段に保持された対応するビット幅を有効とすべきこ
    とを指示するレジスタ管理手段と、 生成すべき機械語命令が即値を使用する命令である場合
    にその即値がデータであるかアドレスであるか応じて、
    パラメータ保持手段に保持された対応するビット幅の即
    値を用いるべきことを指示する即値管理手段とメモリ管
    理手段、レジスタ管理手段及び即値管理手段からの指示
    に従って、機械語命令を生成するコード生成手段とから
    なることを特徴とする請求項1又は2記載のプログラム
    変換装置。
  4. 【請求項4】 請求項1ないし3記載のいずれかのプロ
    グラム変換装置により生成されたプログラムを実行する
    プロセッサであって、 Nビット長のプログラムカウンタと、 Nビット長の演算、及びデータのビット幅であるMビッ
    ト長の演算を実行する実行手段とを備えたことを特徴と
    するプロセッサ。
  5. 【請求項5】 前記Nは24であることを特徴とする請
    求項3記載のプロセッサ。
JP5126212A 1993-05-27 1993-05-27 プログラム変換装置およびプロセッサ Expired - Lifetime JP2875711B2 (ja)

Priority Applications (13)

Application Number Priority Date Filing Date Title
JP5126212A JP2875711B2 (ja) 1993-05-27 1993-05-27 プログラム変換装置およびプロセッサ
EP02076028A EP1229440B1 (en) 1993-05-27 1994-05-27 Program converting unit and processor improved in address management
DE69432445T DE69432445T2 (de) 1993-05-27 1994-05-27 Verbesserter Prozessor für Adressierung
EP94303862A EP0626641B1 (en) 1993-05-27 1994-05-27 Processor improved in address management
EP01202455A EP1164479B1 (en) 1993-05-27 1994-05-27 Program converting unit
DE69434967T DE69434967T2 (de) 1993-05-27 1994-05-27 Programmumsetzungseinheit und verbesserter Prozessor für Adressierung
EP04075265A EP1416374A3 (en) 1993-05-27 1994-05-27 Program converting unit and processor improved in address management
DE69434971T DE69434971T2 (de) 1993-05-27 1994-05-27 Programmumsetzungseinheit
EP02076025A EP1229439A3 (en) 1993-05-27 1994-05-27 Program converting unit and processor improved in address management
US08/587,338 US5809306A (en) 1993-05-27 1996-01-16 Variable address length compiler and processor improved in address management
US09/662,484 USRE41959E1 (en) 1993-05-27 2000-09-14 Variable address length compiler and processor improved in address management
US10/991,367 USRE40498E1 (en) 1993-05-27 2004-11-19 Variable address length compiler and processor improved in address management
US11/607,889 US20080320454A1 (en) 1993-05-27 2006-12-04 Variable address length compiler and processor improved in address management

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5126212A JP2875711B2 (ja) 1993-05-27 1993-05-27 プログラム変換装置およびプロセッサ

Publications (2)

Publication Number Publication Date
JPH06337791A true JPH06337791A (ja) 1994-12-06
JP2875711B2 JP2875711B2 (ja) 1999-03-31

Family

ID=14929508

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5126212A Expired - Lifetime JP2875711B2 (ja) 1993-05-27 1993-05-27 プログラム変換装置およびプロセッサ

Country Status (1)

Country Link
JP (1) JP2875711B2 (ja)

Also Published As

Publication number Publication date
JP2875711B2 (ja) 1999-03-31

Similar Documents

Publication Publication Date Title
US10514922B1 (en) Transfer triggered microcontroller with orthogonal instruction set
KR100328162B1 (ko) 정보처리회로와마이크로컴퓨터와전자기기
US4293907A (en) Data processing apparatus having op-code extension register
US20080320454A1 (en) Variable address length compiler and processor improved in address management
US5249280A (en) Microcomputer having a memory bank switching apparatus for accessing a selected memory bank in an external memory
KR20010043826A (ko) 마이크로 컨트롤러 명령어 집합
US6687808B2 (en) Data processor using indirect register addressing
KR100272622B1 (ko) 데이타 처리장치
JP2004086837A (ja) データ処理装置
KR19990036893A (ko) 다중 어드레싱 모드를 실행하는 프로세서 구조 및 그 설계방법
KR19990037572A (ko) 뱅크 어드레스 값을 공급하는 다중 소스를 구비하는 프로세서구조 설계 및 그 설계방법
US4812971A (en) Central processing unit for a digital computer
JP3106060B2 (ja) 信号プロセッサ
JP2551167B2 (ja) マイクロコンピュータ
JPH09231071A (ja) コンピュータ装置
EP0206653A2 (en) Method and means for loading and storing data in a reduced instruction set computer
KR100960095B1 (ko) 마이크로컨트롤러 명령어 셋트
US6886159B2 (en) Computer system, virtual machine, runtime representation of object, storage media and program transmission apparatus
JPH06337791A (ja) プログラム変換装置およびプロセッサ
JPH06337792A (ja) プログラム変換装置およびプロセッサ
EP0180077B1 (en) A data processing machine for compiling computer programs
JPH09505428A (ja) ページアドレスモードを有するマイクロコントローラ
US4866608A (en) Microprocessor with improved execution of instructions
JP3345050B2 (ja) 二次元配列型メモリシステム
KR100897857B1 (ko) 마이크로컨트롤러 명령어 셋트

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080114

Year of fee payment: 9

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

Free format text: PAYMENT UNTIL: 20090114

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20090114

Year of fee payment: 10

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

Free format text: PAYMENT UNTIL: 20100114

Year of fee payment: 11

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

Free format text: PAYMENT UNTIL: 20110114

Year of fee payment: 12

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

Free format text: PAYMENT UNTIL: 20110114

Year of fee payment: 12

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

Free format text: PAYMENT UNTIL: 20120114

Year of fee payment: 13

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

Free format text: PAYMENT UNTIL: 20130114

Year of fee payment: 14

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

Free format text: PAYMENT UNTIL: 20130114

Year of fee payment: 14

EXPY Cancellation because of completion of term