JPH11212805A - 仮想マシン及びプログラム変換装置 - Google Patents

仮想マシン及びプログラム変換装置

Info

Publication number
JPH11212805A
JPH11212805A JP10019240A JP1924098A JPH11212805A JP H11212805 A JPH11212805 A JP H11212805A JP 10019240 A JP10019240 A JP 10019240A JP 1924098 A JP1924098 A JP 1924098A JP H11212805 A JPH11212805 A JP H11212805A
Authority
JP
Japan
Prior art keywords
instruction
register
program
general
address
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.)
Pending
Application number
JP10019240A
Other languages
English (en)
Inventor
Nobuteru Tominaga
宣輝 富永
Toshiyuki Sakata
俊幸 坂田
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
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP10019240A priority Critical patent/JPH11212805A/ja
Publication of JPH11212805A publication Critical patent/JPH11212805A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 バイトコードプログラムのサイズを縮小する
ことを可能とする仮想マシン及びプログラム変換装置を
提供する。 【解決手段】 命令解読部110でプログラムメモリ1
31中のバイトコードを1バイトづつ読み込み、命令マ
ップ記憶部113に予め記憶している命令マップを参照
して、命令種別を判別し、命令種別に応じて第1レジス
タ判別部117、第2レジスタ判別部118を用いて処
理対象となる汎用仮想レジスタを特定し、命令実行部1
20は、命令に応じて汎用仮想レジスタ124を用いて
マイクロプロセッサ上で処理を実行する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、異なったアーキテ
クチャのマイクロプロセッサ上で動作する仮想マシン及
びプログラムを当該仮想マシンに好適なプログラムに変
換するプログラム変換装置に関する。
【0002】
【従来の技術】近年、インターネットの利用が拡大し、
あるコンピュータ上で開発したプログラムをインターネ
ットを通じて配送し、他のコンピュータ上で実行させた
いという要求が高まってきている。このようなプログラ
ムの流通においては、プログラム開発側のコンピュータ
とプログラム実行側のコンピュータは必ずしも同一の機
種であるとは限らないため、コンピュータ間のアーキテ
クチャの違いを吸収する必要があり、このために仮想マ
シンなる技術が開発されている。
【0003】ここで仮想マシンとは、仮想マシンコード
(バイトコード)を逐次解釈してそれぞれのコンピュー
タ上で実行するための制御を行うプログラムをいい、仮
想マシンのアーキテクチャは実行環境となるコンピュー
タのアーキテクチャに依存しない。従って、流通するプ
ログラムは、この仮想マシンコードで記述してあれば、
又は仮想マシンコードに翻訳してあれば、様々なコンピ
ュータの上で実行可能なものとなる。
【0004】例えば、パーソナルコンピュータやワーク
ステーションの分野では、通信回線を通じて配送して他
のコンピュータ上で動作させるプログラムは、Java
Soft社のJavaを用いて開発されるのが一般的
であり、Java言語で開発されたプログラムは、コン
パイラにより仮想マシンの動作を記述するバイトコード
で構成するプログラムに変換され、配送される。なお、
JavaにおけるバイトコードをJavaByteCo
deという。
【0005】この場合、実行側コンピュータでは、Ja
vaByteCodeを解釈実行するJava仮想マシ
ンが動作している。JavaByteCodeはコンピ
ュータアーキテクチャに依存しないため、実行側コンピ
ュータが、Intel社のx86、Motorola社
のPowerPC、SUN Microsystems
社のSPARC等のどのアーキテクチャに基づくパーソ
ナルコンピュータ或いはワークステーションであって
も、共通の動作を行なう。
【0006】このJava仮想マシンは、スタックマシ
ンアーキテクチャを採用しており、演算の対象がスタッ
クの最上位のデータであるという特徴を有する。ここ
で、Java言語のプログラム例について説明する。図
16は、Java言語で記述したプログラムとこれに対
応するJavaByteCodeの例である。
【0007】同図のプログラムは、SUN Micro
systems LaboratoriesのJame
s Goslingが、ACM SIGPLAN Wo
rkshop on Intermediate Re
prersentations(IR’95)で発表し
た “Java Intermediate Bytec
odes”という論文に記載されているものである。
【0008】Java仮想マシンがスタックマシンアー
キテクチャを採用しているため同図のJavaByte
Code中のそれぞれの演算は、値のロード、演算自
体、ストアというステップで成り立っている。同図
中、;の後にコメントの形で付加したのが各コードの大
きさであり、この例では20命令で28バイトである。
また、;;loopのコメントで示したのが、forル
ープの本体部分である。この例では、ループ内部が10
命令で構成されている。なお、実際には、Javaのイ
ンプリメントでは、コンスタントプールという定数値や
名前を保存するための領域が別途必要である。この詳細
については、Tim Lindholm and Fr
ank Yellinの“The Java TM V
irtual Machine Specificat
ion”,Addison Wesleyに詳しい。
【0009】なお、Javaに関しては、「The J
ava Virtual Machine Speci
fication」(http://java.su
n.com)に詳しい。 また、Java仮想マシン以
外にも、デジタルセットトップボックス等への応用を考
えた仮想マシンアーキテクチャとして、Thomson
Sun Interactive(TSI)社のOpe
nTVの仮想マシンがあるが、これもスタックマシンア
ーキテクチャである。なお、OpenTVに関しては、
http://www.opentv.comに詳し
い。
【0010】ところで、最近、TV、デジタルビデオ、
DVDプレーヤー等の家電分野においても、コンピュー
タの分野における場合と同様に、インターネットやIE
EE1394規格に基づく配線等を通じてプログラムを
配送し、各家電製品間で協調動作を行なわせたいという
要求が出てきている。
【0011】
【発明が解決しようとする課題】しかしながら、Jav
a仮想マシンは、コンピュータアーキテクチャとしてい
わゆるスタックマシンアーキテクチャを採用しているこ
とから、これを家電分野に適用しようとした場合、以下
の問題点がある。まず、JavaByteCodeによ
って記述されたプログラムのサイズがあまり小さくない
ことが問題である。
【0012】即ち、スタックマシンアーキテクチャで
は、それぞれの命令の語長は短くなる傾向があるが、そ
れぞれの演算が、演算対象となるデータをスタック上に
おき、演算し、演算結果をスタックから取り出すという
最低3ステップのプログラムで実現されるためプログラ
ム全体でのサイズはあまり小さくならない。さらに、コ
ンパイラによるプログラム最適化技術を適用することが
困難であることが問題である。
【0013】これは、x86、PowerPC、SPA
RC等を備えてメモリ量も数十から数百Mバイトある一
般のコンピュータの分野においては重大な問題とはなら
ないとしても、コスト面等の諸事情から低速のマイコン
を用いメモリ量も1Mバイト以下の場合が多い家電製品
の分野においては重大な問題となる。ここで、最適化技
術とは、プログラム全体の制御やデータの流れを見渡
し、一度計算した値を保存しておいて再利用することで
計算量を減らす、或いは、ループ内の演算等のような何
度も繰り返し行なわれる演算を少なくするためにループ
の事前に準備をしておく等の高速化・コードサイズの縮
小化等の技術をいう。一般に最適化の実現のためには、
値を保存しておき、必要な時に演算の対象とすることが
できる汎用レジスタが不可欠であり、また、レジスタ割
り付け技術という、汎用レジスタにいかにうまくプログ
ラムの各所で必要となる値を割り振るかの技術も必要と
なる。
【0014】しかし、スタックマシンアーキテクチャで
は、演算の対象は基本的にスタックの最上位のデータの
みであるので、最適化やレジスタ割り付けをうまく行な
うことができない。なお、コンパイラの最適化技術およ
びレジスタ割り付け技術に関しては、エイホ&セシィ&
ウルマン著「コンパイラI・II 原理・技法・ツー
ル」(サイエンス社)に詳しい。
【0015】なお、Java仮想マシン以外にも、デジ
タルセットトップボックス等への応用を考えた仮想マシ
ンアーキテクチャとして、Thomson Sun I
nteractive社のOpenTVの仮想マシンが
あるが、これもスタックマシンアーキテクチャであるた
め、上述のJava仮想マシンと同様の問題点を有す
る。OpenTVに関しては、http://www.
opentv.comに詳しい。
【0016】そこで、本発明はかかる問題点に鑑み、プ
ログラムのサイズを小さくすること及びコンパイラによ
るプログラム最適化技術の適用を可能にする仮想マシン
を提供すること、及び当該仮想マシンに対応して、プロ
グラムを小さいサイズのプログラムに変換することを可
能にするプログラム変換装置を提供することを目的とす
る。
【0017】
【課題を解決するための手段】<着眼点>プログラムの
流通等の考慮によりプログラムサイズは小さく押さえる
方が望ましい。このためには命令語長は短い方が望まし
く、Java仮想マシンで命令語長は1バイトである。
【0018】ところで、仮想マシンが汎用レジスタ(汎
用仮想レジスタ)を扱えるようにするためには、命令語
中に汎用仮想レジスタを指定するビットを設ける必要が
生じ、これにより命令語長は長くなるか、又は命令語長
は同一であっても当該ビット数の分だけサポートする命
令種別が減少するかという望ましくない結果をもたら
す。
【0019】従って、Java仮想マシンがスタックマ
シンアーキテクチャを採用し、汎用仮想レジスタを処理
対象とする命令を、命令セット中にもたないのも上記の
望ましくない効果を回避した結果とも考えられる。ま
た、マイクロプロセッサ、OS等のプラットフォームに
依存しない仮想マシンであって、汎用仮想レジスタを備
えているものが未だ出現しないのも、同様の理由による
ところが大きいと考えられる。
【0020】ところが、本発明に係る仮想マシンは、汎
用仮想レジスタを扱う命令を命令セット中に設けること
によって、究極的には仮想マシン上で動作させるプログ
ラムサイズを小さくするものである。即ち、本発明は、
仮想マシン上で動作させるプログラムのサイズを小さく
するためには、スタックマシンアーキテクチャを採用せ
ざるを得ないという通常の認識を打ち破り、プログラム
サイズを小さくする目的を達成すべく仮想マシンにも汎
用レジスタ(汎用仮想レジスタ)を導入した。
【0021】本発明は、第1に、通常のプログラムは複
数のレジスタを用いた演算で実現する方がスタックのみ
を用いる演算で実現するより短いコードにすることがで
きること、及びレジスタを用いることにより最適化技術
を最大限に活用でき、より短いコード化が図れることと
いう点、第2に、命令は種別により使用頻度が異なり、
代入、加算、減算、比較等の一定の命令はプログラム中
で使用されている割合が他の命令より高いという点に着
眼して、仮想マシンにレジスタを導入することによって
なされたものである。
【0022】即ち、本発明は、適度な本数のレジスタを
導入して、ある程度使用頻度の高い命令は任意のレジス
タを処理対象とすることができるようにしても1バイト
の命令語長の命令とすることができ、前述の望ましくな
い結果を回避することができるという考察に基づいてな
されたものである。 <解決手段>本発明に係る仮想マシンは、バイトコード
を逐次解釈してマイクロプロセッサに実行させるための
制御を行うプログラムである仮想マシンであって、値を
保持でき命令の処理対象となる複数の汎用仮想レジスタ
と、バイトコードを読み込む読込手段と、前記読込手段
により読み込んだバイトコードにつき、命令種別と汎用
仮想レジスタを処理対象とする命令か否かとを判別する
命令判別手段と、前記命令判別手段により汎用仮想レジ
スタを処理対象とする命令であると判別された第1グル
ープのバイトコードにつき、処理対象が前記複数の汎用
仮想レジスタのいずれであるかを示すレジスタIDを判
別するレジスタID判別手段と、第1グループのバイト
コードにつき、前記レジスタIDで示される汎用仮想レ
ジスタを処理対象として用いて、前記命令種別で示され
る所定動作をマイクロプロセッサに実行させる実行制御
手段とを備えることを特徴とする。
【0023】これにより、仮想マシンの命令セットにレ
ジスタを使用した命令が備わり、バイトコードにレジス
タを処理対象とする命令を含むことができるため、バイ
トコードプログラムのサイズを小さくすることができ、
また、バイトコードプログラムに対しプログラム最適化
技術を適用可能となる。また、前記仮想マシンは、レジ
スタIDを記憶するための結果レジスタ保存手段を備
え、前記命令判別手段はさらに、前記読込手段により読
み込んだバイトコードにつき処理結果を汎用仮想レジス
タに格納する命令か否かを判別し、また、前記読込手段
により読み込んだバイトコードにつき、前記結果レジス
タ保存手段により記憶されているレジスタIDにより識
別される汎用仮想レジスタを処理対象とする命令か否か
を判別し、前記結果レジスタ保存手段は、前記命令判別
手段により処理結果を汎用仮想レジスタに格納する命令
と判別されたバイトコードを参照することにより、その
汎用仮想レジスタを識別するためのレジスタIDを記憶
し、前記実行制御手段は、前記レジスタID判別手段に
より判別されたレジスタIDで示される汎用仮想レジス
タに加えて前記結果レジスタ保存手段により記憶されて
いるレジスタIDで示される汎用仮想レジスタをも処理
対象として用いて、前記所定動作をマイクロプロセッサ
に実行させることとすることもできる。
【0024】これにより、バイトコードプログラム中の
汎用仮想レジスタを処理対象とする命令であって、当該
命令に前置された命令の処理結果が格納される1つの汎
用仮想レジスタが処理対象である命令については、前記
の結果レジスタ保存手段に記憶されているレジスタID
で示される1つの汎用仮想レジスタを処理対象とする旨
の1つの1バイト命令として記述できるため、当該命令
の命令語長を小さいものとすることができる可能性を高
め、また、当該命令は1つの命令種別でしかないこと
は、その分多様な命令を1バイト命令にマッピングでき
る可能性を高める。
【0025】一般的には、処理対象となる汎用仮想レジ
スタが複数の汎用仮想レジスタのうちいずれであるかを
特定するためには命令語中にレジスタID指定用のビッ
トを設ける必要があるが、結果レジスタ保存手段に記憶
されているレジスタIDで示される1つの汎用仮想レジ
スタを処理対象とする旨の命令では、1つの汎用仮想レ
ジスタについては特定されているのでその分レジスタI
D指定用のビットを不要とすることができるのである。
【0026】従って、これによりバイトコードプログラ
ムサイズを小さくすることができる。また、前記仮想マ
シンは、読込専用のアドレス値を記憶するための読込ア
ドレス保存手段と、前記読込アドレス保存手段を処理対
象として用いて、前記命令種別で示される所定動作をマ
イクロプロセッサに実行させる第2実行制御手段とを備
え、前記命令種別のうち少なくとも1つは、読込アドレ
ス保存手段を処理対象とする命令であることとすること
もできる。
【0027】これにより、バイトコードプログラム中の
命令であって、値を読み出すためのアドレス値を命令語
中に含む命令を、アドレス値を含まず読込アドレス保存
手段を処理対象とする命令として記述できるため、アド
レス値を記述しない分だけ、バイトコードプログラムサ
イズを小さくすることができる。また、前記仮想マシン
は、書込専用のアドレス値を記憶するための書込アドレ
ス保存手段と、前記書込アドレス保存手段を処理対象と
して用いて、前記命令種別で示される所定動作をマイク
ロプロセッサに実行させる第3実行制御手段とを備え、
前記命令種別のうち少なくとも1つは、読込アドレス保
存手段を処理対象とする命令であるとすることもでき
る。
【0028】これにより、バイトコードプログラム中の
命令であって、値を書き込むためのアドレス値を命令語
中に含む命令を、アドレス値を含まず書込アドレス保存
手段を処理対象とする命令として記述できるため、アド
レス値を記述しない分だけ、バイトコードプログラムサ
イズを小さくすることができる。また、本発明に係るプ
ログラム変換装置は、本発明に係る仮想マシンを対象と
するアセンブラソースプログラム中の一部の命令を他の
命令に変換するプログラム変換装置であって、プログラ
ムを記憶する記憶手段と、前記プログラム中において、
汎用仮想レジスタに処理結果を格納する第1の命令の後
に当該汎用仮想レジスタを処理対象とする第2の命令が
連続して配置されている部分を検出する結果レジスタ使
用部分検出手段と、前記結果レジスタ使用部分検出手段
に検出された部分における前記第2の命令を、前記結果
レジスタ保存手段に記憶しているレジスタIDで示され
る汎用仮想レジスタを処理対象とした第3の命令に変換
する命令変換手段とを備えることを特徴とする。
【0029】また、本発明に係るプログラム変換装置
は、本発明に係る仮想マシンを対象とするアセンブラソ
ースプログラム中の一部の命令を他の命令に変換するプ
ログラム変換装置であって、プログラムを記憶する記憶
手段と、前記プログラム中において、読み込みに用いら
れて書き込みには用いられないアドレス値のうち当該ア
ドレス値を処理対象とする命令の数が最大のアドレス値
を特定し、この特定したアドレス値を処理対象とする命
令を検出する読込アドレス使用命令検出手段と、前記読
込アドレス使用命令検出手段に検出された命令を、前記
読込アドレス保存手段を処理対象とする命令に変換する
命令変換手段と、前記読込アドレス使用命令検出手段に
より特定されたアドレス値を前記読込アドレス保存手段
に格納する旨の命令を、前記読込アドレス使用命令検出
手段により検出された全ての命令より前の部分に挿入す
る命令挿入手段とを備えることを特徴とする。
【0030】また、本発明に係るプログラム変換装置
は、本発明に係る仮想マシンを対象とするアセンブラソ
ースプログラム中の一部の命令を他の命令に変換するプ
ログラム変換装置であって、プログラムを記憶する記憶
手段と、前記プログラム中において、書き込みに用いら
れて読み込みには用いられないアドレス値のうち当該ア
ドレス値を処理対象とする命令の数が最大のアドレス値
を特定し、この特定したアドレス値を処理対象とする命
令を検出する書込アドレス使用命令検出手段と、前記書
込アドレス使用命令検出手段に検出された命令を、前記
書込アドレス保存手段を処理対象とする命令に変換する
命令変換手段と、前記書込アドレス使用命令検出手段に
より特定されたアドレス値を前記書込アドレス保存手段
に格納する旨の命令を、前記書込アドレス使用命令検出
手段により検出された全ての命令より前の部分に挿入す
る命令挿入手段とを備えることを特徴とする。
【0031】これらのそれぞれのプログラム変換装置に
より、仮想マシンに対応するアセンブラソースプログラ
ムの命令を、より命令語長の短いバイトコードにアセン
ブル可能な命令に変換できるため、結果的にプログラム
サイズを小さくすることができる。
【0032】
【発明の実施の形態】以下、本発明の実施の形態につい
て、図面を用いて詳細に説明する。 <実施の形態1>以下、本発明の実施の形態1における
仮想マシンについて説明する。 <構成>図1は、本発明の実施の形態1における仮想マ
シンの適用図である。
【0033】仮想マシン100は、マイクロプロセッサ
140上でOS141の管理下において、仮想マシンの
命令体系に適合した機械語列で構成されるバイトコード
プログラム130の動作を実現するものであり、一種の
プログラムである。但し、仮想マシン100は、プログ
ラムであるが、その名が示すように、マイクロプロセッ
サやOSをシミュレートしたものとしての特徴を有して
いる。即ち、独自の命令セットをもち、当該命令セット
の命令列からなるバイトコードを逐次解釈実行する。
【0034】以下、仮想マシンの機能構造について説明
する。図2は、本発明の実施の形態1における仮想マシ
ンの機能ブロック図である。プログラムメモリ131
は、バイトコードプログラムを格納するメモリであり、
データメモリ132は、バイトコードプログラムの処理
対象となるデータを格納するメモリである。
【0035】仮想マシン100は、プログラムメモリ1
31からバイトコードを読み込み解釈してマイクロプロ
セッサ140上で実行するためのプログラムであり、命
令解読部110と命令実行部120からなる。命令解読
部110は、命令判別部111、命令読込部112、命
令マップ記憶部113、命令種別格納部114、処理対
象格納部115、1バイト定数読込部116、第1レジ
スタ判別部117、第2レジスタ判別部118、結果レ
ジスタID保存部119を有する。
【0036】命令マップ記憶部113は、後述する命令
マップを記憶している。命令読込部112は、プログラ
ムメモリ131から1バイトのバイトコードを読み込み
命令判別部111に渡す。命令判別部111は、命令読
込部112から渡されたバイトコードがいかなる命令な
のかを命令マップ記憶部113に記憶している命令マッ
プを参照して判別し、命令に応じて命令種別を命令種別
格納部114に格納し、必要に応じて処理対象格納部1
15に処理対象を特定する値を格納し、また、命令に応
じて第1レジスタ判別部117、第2レジスタ判別部1
18、1バイト定数読込部116に実行指示を出す。ま
た、命令判別部111は命令に応じて、第1レジスタ判
別部117又は第2レジスタ判別部118に指示を出
し、判別したレジスタについてレジスタIDを結果レジ
スタID保存部119に格納させる。
【0037】第1レジスタ判別部117と第2レジスタ
判別部118とは、命令判別部111からの実行指示を
受けると、命令の中のレジスタ指定ビットを参照して、
どの汎用仮想レジスタを用いる命令かを判別し、汎用仮
想レジスタを識別するためのレジスタIDを処理対象格
納部115に格納する。また、1バイト定数読込部11
6は命令判別部111からの実行指示を受けると、プロ
グラムメモリ131から1バイトのバイトコードを読み
込み処理対象格納部115に格納する。
【0038】また、結果レジスタID保存部119は、
命令判別部111の制御により、第1レジスタ判別部1
17と第2レジスタ判別部118とのいずれかから命令
の実行結果が格納されるレジスタのレジスタIDが渡さ
れるので、そのレジスタIDを保存する。保存したレジ
スタIDは、命令判別部111の制御により処理対象格
納部115に格納される。
【0039】なお、命令解読部110は、上述の他の読
み出し部や命令解読制御部をも有するが、本発明の主た
る部分ではないため説明を省略する。命令実行部120
は、命令制御部121、仮想演算器122、メモリ制御
部123、汎用仮想レジスタ124、読込アドレス保存
部125、書込アドレス保存部126を有する。
【0040】命令制御部121は、命令種別格納部11
4と処理対象格納部115との内容に従って、仮想演算
器122を用いて、汎用仮想レジスタ124、読込アド
レス保存部125、書込アドレス保存部126の値を変
化させ、また、メモリ制御部123を用いてデータメモ
リ132にアクセスする。また、汎用仮想レジスタ12
4は、R0からR3までの4本あり、処理の対象となる
値を格納するのに用いられる。また、読込アドレス保存
部125は、処理対象を読み込むアドレスを指定するた
めに利用することができるものであり、書込アドレス保
存部126は、処理結果を書き込むアドレスを指定する
ために利用することができるものである。
【0041】例えば、命令種別格納部114に加算命令
である旨の「add」が格納され、処理対象格納部11
5にレジスタIDが0と1のレジスタである旨の「R
0,R1」が格納された場合には、命令制御部121が
それを、R1←R0+R1として実行する。ここで
「←」は値の代入を意味する。即ち、命令制御部121
は、プログラムメモリ131に格納されたバイトコード
を解読する命令解読部110の解読結果に基づき、プロ
グラムをマイクロプロセッサ140上で実行する。
【0042】なお、命令実行部120は、上述の他の命
令実行制御部をも有するが、本発明の主たる部分ではな
いため説明を省略する。以下、命令マップ記憶部113
が記憶する命令マップについて説明する。図3及び図4
は、命令マップの内容のイメージを示す概念図である。
この命令マップは、仮想マシン100の命令セットを示
すものであり、横軸に16進数の1の位を、縦軸に16
進数の10の位を取った表形式で示してある。図3は1
の位が0〜7の命令を、図4は1の位が8〜fの命令を
示している。
【0043】図中では各命令につき、ニーモニックとオ
ペランドを空白で区切って示してあり、オペランドは1
つ、又は「,」で区切られた2つである。以下、命令マ
ップ中に示した主要な命令のニーモニックやオペランド
について説明する。Rn、Rmは、4本の汎用仮想レジ
スタR0、R1、R2、R3のうちのいずれかである。
【0044】PDは、結果レジスタIDであり、結果レ
ジスタID保存部119に格納されているレジスタID
が示すレジスタを意味する。即ち、PDをオペランドに
有する命令は、当該命令より前に実行される命令の処理
結果が格納される仮想レジスタを用いて演算等の処理を
行う命令である。RRは、読込アドレスであり、読込ア
ドレス保存部125に格納されているアドレスを意味す
る。
【0045】WRは、書込アドレスであり、書込アドレ
ス保存部126に格納されているアドレスを意味する。
const(8)等のように文字列(8)の形式のもの
は8ビットの定数値であり、offset(16)等の
ように文字列(16)の形式のものは16ビットの定数
値であり、addr(32)等のように文字列(32)
の形式のものは32ビットの定数値であり、LValI
D(6)等のように文字列(6)の形式のものは6ビッ
トのメモリIDである。
【0046】incは1増分、inc4は4増分、de
cは1減算、dec4は4減算、bandはビット積、
borはビット和、mulは乗算、shl2は4倍演
算、movは転送、mov4は4バイトの転送、add
は加算、subは減算、cmpは比較、jsrやjmp
等はジャンプ命令である。例えば、バイトコード00
は、仮想レジスタR0を1増分する命令inc R0に
対応し、バイトコード1bは、結果レジスタID保存部
119に格納されているレジスタIDが示すレジスタと
仮想レジスタR3の乗算を行なう命令mulPD,R3
に対応する。
【0047】<動作>上記構成を備える実施の形態1に
おける仮想マシンの動作について、具体的なプログラム
を実行した場合の例に基づいて説明する。図5は、仮想
マシン100に入力されるバイトコードプログラムを示
す図である。
【0048】図5に示すプログラムは、プログラムメモ
リ131に格納されている。このプログラムは、読込ア
ドレスから読み出した値に10を掛け、さらに仮想レジ
スタR2の内容を加えたものを書込アドレスに書き込む
プログラムである。なお、プログラムメモリ131に格
納されているバイトコードについて、読み易さを考慮
し、ここでは命令形式で表記してある。
【0049】図6は、命令解読部110の動作を示すフ
ローチャートである。同図に示すように、命令解読部1
10の動作は、バイトコードの読み込みステップS21
0と、命令マップを参照することによる命令種別判別ス
テップS220と、命令種別を命令種別格納部114に
格納し命令に応じて必要であれば処理対象を処理対象格
納部115に格納するステップS230と、各命令対応
の制御をするステップS240とからなる。
【0050】図7は、各命令対応の制御をする動作につ
いて詳細化したフローチャートである。同図は、図6の
フローチャート中のステップS240について詳細化し
たものであり、各命令対応の制御処理(S240)は、
命令が結果レジスタID保存部の内容を用いる命令であ
る場合の処理(ステップS242)、定数を読み込む必
要がある命令である場合の処理(ステップS244)、
命令にレジスタ指定のビットが含まれている場合の処理
(ステップS246、S247)、結果をレジスタに格
納する命令である場合の処理(ステップS249)等か
らなる。なお、図7は、図5に示すプログラムに対して
の仮想マシン100の動作説明に必要な処理部分のみを
示している。
【0051】まず、命令解読部110は、命令読込部1
12によりプログラムメモリ131に格納されているバ
イトコードを1バイト読み込む(ステップS210)。
命令判別部111は、命令読込部112からバイトコー
ドを取得して、命令マップ記憶部113に記憶している
命令マップを参照して、当該バイトコードがいかなる命
令であるか判別し(ステップS220)、それが読み出
しアドレスから汎用仮想レジスタへの読み出し命令mo
v4 (RR),Rnであるので、命令種別格納部11
4に、読み出しアドレスから汎用仮想レジスタへの読み
出し命令を格納し、処理対象格納部115に読出アドレ
ス保存部を示す値を格納し(ステップS230)、各命
令対応の制御を行う(ステップS240)。
【0052】各命令対応の制御として、mov4 (R
R),Rnは、結果レジスタID保存部を用いる命令で
はなく(ステップS241)、定数を読み込む必要のあ
る命令でもないが(ステップS243)、レジスタを指
定した命令であるため、命令判別部111は、第1レジ
スタ判別部117に実行指示を出す(ステップS24
5)。
【0053】実行指示を受けた第1レジスタ判別部11
7は、命令中のレジスタを指定するビットを参照し、当
該ビットが仮想レジスタR0を示していることを判別し
て(ステップS246)、処理対象格納部115に仮想
レジスタR0のレジスタIDを格納する(ステップS2
47)。また、当該命令が結果を仮想レジスタに格納す
る命令であるため、命令判別部111は、第1レジスタ
判別部117に、判別したレジスタIDを結果レジスタ
ID保存部119に格納するよう指示を出し、その結果
として結果レジスタID保存部119には汎用仮想レジ
スタが仮想レジスタR0であることを識別するためのレ
ジスタIDが格納される(ステップS248、S24
9)。
【0054】こうして命令解読部110にて1命令の解
読がなされると、その結果を受けて命令実行部120が
命令を実行する。即ち、命令制御部121は、命令種別
格納部114及び処理対象格納部115の内容に従っ
て、命令種別が「読み出しアドレスから汎用仮想レジス
タへの読み出し命令」であり、処理対象が「読出アドレ
ス保存部、仮想レジスタR0」であることを判断して、
メモリ制御部123を介して、読込アドレス保存部12
5の内容が指し示すデータメモリ132の内容を汎用仮
想レジスタ124のうち仮想レジスタR0に格納する。
【0055】具体的には、命令制御部121は、R0←
[RR]を、マイクロプロセッサ140上で実行する。
ここで「[RR]」は、RRが示すアドレスの内容を意
味する。このようにして仮想マシン100は、mov4
(RR),R0である1バイトのバイトコードを実行
する。
【0056】次に、命令解読部110は、命令読込部1
12により次の1バイトを読み込む(ステップS21
0)。命令判別部111は、命令読込部112からバイ
トコードを取得して、命令マップ記憶部113に記憶し
ている命令マップを参照して、当該バイトコードがいか
なる命令であるか判別し(ステップS220)、それが
定数値を汎用仮想レジスタへ代入する命令mov co
nst(8),Rnであるので、命令種別格納部114
に、定数を汎用仮想レジスタへ代入する命令を格納し
(ステップS230)、その命令に対応する制御を行う
(ステップS240)。
【0057】命令対応の制御として、命令判別部111
は、mov const(8),Rnは定数値を読み込
む必要がある命令であるため、1バイト定数読込部11
6に実行指示を出し、この実行指示を受けた1バイト定
数読込部116はプログラムメモリ131から1バイト
を読み込み、その内容である定数0aを処理対象格納部
115に格納する(ステップS243、S244)。な
お、命令の説明に際して定数値は16進数を用いてい
る。
【0058】また、当該命令はレジスタを1つ指定した
命令であるため、命令判別部111は、第1レジスタ判
別部117に実行指示を出し(ステップS245)、実
行指示を受けた第1レジスタ判別部117は、命令中の
レジスタを指定するビットを参照し当該ビットが仮想レ
ジスタR1を示していることを判別して(ステップS2
46)、処理対象格納部115に仮想レジスタR1のレ
ジスタIDを格納する(ステップS247)。
【0059】また、mov const(8),Rn
は、処理結果を仮想レジスタに格納する命令であるた
め、命令判別部111は、第1レジスタ判別部117
に、判別したレジスタIDを結果レジスタID保存部1
19に格納するよう指示を出し、その結果として結果レ
ジスタID保存部119には汎用仮想レジスタが仮想レ
ジスタR1であることを識別するためのレジスタIDが
格納される(ステップS248、S249)。
【0060】こうして命令解読部110にて1命令の解
読がなされた後、命令実行部120が命令を実行する。
命令制御部121は、命令種別格納部114及び処理対
象格納部115の内容に従って、命令種別が「定数を汎
用仮想レジスタへ代入する命令」であり、処理対象が
「定数0a、仮想レジスタR1」であることを判断し
て、定数0aを汎用仮想レジスタ124のうち仮想レジ
スタR1に格納する。即ち、命令制御部121は、R1
←0aを実行する。
【0061】このようにして仮想マシン100が、mo
v 0a,R1を実行した後に、命令解読部110は、
命令読込部112により次の1バイトを読み込む(ステ
ップS210)。命令判別部111は、命令読込部11
2からバイトコードを取得して、命令マップ記憶部11
3に記憶している命令マップを参照して、当該バイトコ
ードがいかなる命令であるか判別し(ステップS22
0)、それが結果レジスタID保存部119が保持する
レジスタIDが示す仮想レジスタと汎用仮想レジスタと
の乗算命令mul PD,Rnであるので、命令種別格
納部114に、1つの汎用仮想レジスタの内容と1つの
汎用仮想レジスタの内容とを乗算する命令を格納し(ス
テップS230)、当該命令に対応する制御を行う(ス
テップS240)。
【0062】mul PD,Rnに対する制御として、
命令判別部111は、結果レジスタID保存部119を
用いる命令であることを判断し(ステップS241)、
結果レジスタID保存部119に保存しているレジスタ
IDを処理対象格納部115に格納する。即ち、仮想レ
ジスタR1のレジスタIDが処理対象格納部115には
格納されることになる。
【0063】また、命令判別部111は、当該命令が汎
用仮想レジスタを1つ使用する命令であることを判断
し、第1レジスタ判別部117に実行指示を出す(ステ
ップS245)。実行指示を受けた第1レジスタ判別部
117は、命令中のレジスタを指定するビットを参照し
当該ビットが仮想レジスタR0を示していることを判別
して(ステップS246)、処理対象格納部115に仮
想レジスタR0のレジスタIDを格納する(ステップS
247)。
【0064】また、mul PD,Rnは、処理結果を
仮想レジスタに格納する命令であるため、命令判別部1
11は、第1レジスタ判別部117に、判別したレジス
タIDを結果レジスタID保存部119に格納するよう
指示を出し、その結果として結果レジスタID保存部1
19には汎用仮想レジスタが仮想レジスタR1であるこ
とを識別するためのレジスタIDが格納される(ステッ
プS248、S249)。
【0065】こうして命令解読部110にて1命令の解
読がなされた後、命令実行部120が命令を実行する。
命令制御部121は、命令種別格納部114及び処理対
象格納部115の内容に従って、命令種別が「1つの汎
用仮想レジスタの内容と1つの汎用仮想レジスタの内容
とを乗算する命令」であり、処理対象が「仮想レジスタ
R1、仮想レジスタR0」であることを判断して、仮想
演算器122を用いて、汎用仮想レジスタ124のうち
仮想レジスタR1の内容と仮想レジスタR0の内容とを
乗算して結果を仮想レジスタR0に代入する。即ち、命
令制御部121は、R0←R1*R0を実行する。
【0066】このようにして仮想マシン100が、mu
l PD,R0を実行した後に、命令解読部110は、
命令読込部112により次の1バイトを読み込む(ステ
ップS210)。命令判別部111は、命令読込部11
2からバイトコードを取得して、命令マップ記憶部11
3に記憶している命令マップを参照して、当該バイトコ
ードがいかなる命令であるか判別し(ステップS22
0)、それが汎用仮想レジスタと汎用仮想レジスタとの
加算命令add Rn,Rmであるので、命令種別格納
部114に、1つの汎用仮想レジスタの内容と1つの汎
用仮想レジスタの内容とを加算する命令を格納し(ステ
ップS230)、当該命令に対応する制御を行う(ステ
ップS240)。
【0067】add Rn,Rmに対する制御として、
命令判別部111は、結果レジスタID保存部119を
用いる命令でなく(ステップS241)、定数を読み込
む必要のある命令でなく(ステップS243)、レジス
タ指定ビットありの命令であることを判断し(ステップ
S245)、第1レジスタ判別部117及び第2レジス
タ判別部118に実行指示を出す。
【0068】実行指示を受けた第1レジスタ判別部11
7は、命令中のレジスタを指定するビットを参照し当該
ビットが仮想レジスタR2を示していることを判別して
(ステップS246)、処理対象格納部115に仮想レ
ジスタR2のレジスタIDを格納する(ステップS24
7)。同様に実行指示を受けた第2レジスタ判別部11
8は、命令中のレジスタを指定するビットを参照し当該
ビットが仮想レジスタR0を示していることを判別して
(ステップS246)、処理対象格納部115に仮想レ
ジスタR0のレジスタIDを格納する(ステップS24
7)。
【0069】また、add Rn,Rmは、処理結果を
仮想レジスタに格納する命令であるため、命令判別部1
11は、第2レジスタ判別部118に、判別したレジス
タIDを結果レジスタID保存部119に格納するよう
指示を出し、その結果として結果レジスタID保存部1
19には汎用仮想レジスタが仮想レジスタR0であるこ
とを識別するためのレジスタIDが格納される(ステッ
プS248、S249)。
【0070】こうして命令解読部110にて1命令の解
読がなされた後、命令実行部120が命令を実行する。
命令制御部121は、命令種別格納部114及び処理対
象格納部115の内容に従って、命令種別が「1つの汎
用仮想レジスタの内容と1つの汎用仮想レジスタの内容
とを加算する命令」であり、処理対象が「仮想レジスタ
R2、仮想レジスタR0」であることを判断して、仮想
演算器122を用いて、汎用仮想レジスタ124のうち
仮想レジスタR2の内容と仮想レジスタR0の内容とを
加算して結果を仮想レジスタR0に代入する。即ち、命
令制御部121は、R0←R2+R0を実行する。
【0071】このようにして仮想マシン100が、ad
d R2,R0を実行した後に、命令解読部110は、
命令読込部112により次の1バイトを読み込む(ステ
ップS210)。命令判別部111は、命令読込部11
2からバイトコードを取得して、命令マップ記憶部11
3に記憶している命令マップを参照して、当該バイトコ
ードがいかなる命令であるか判別し(ステップS22
0)、それが汎用仮想レジスタから書込アドレスへの書
込命令mov4 Rn,(WR)であるので、命令種別
格納部114に、汎用仮想レジスタから書込アドレスへ
の書込命令を格納し、処理対象格納部115に書込アド
レス保存部を示す値を格納し(ステップS230)、各
命令対応の制御を行う(ステップS240)。
【0072】各命令対応の制御として、mov4 R
n,(WR)は、結果レジスタID保存部を用いる命令
ではなく(ステップS241)、定数を読み込む必要の
ある命令でもないが(ステップS243)、レジスタを
指定した命令であるため、命令判別部111は、第1レ
ジスタ判別部117に実行指示を出す(ステップS24
5)。
【0073】実行指示を受けた第1レジスタ判別部11
7は、命令中のレジスタを指定するビットを参照し、当
該ビットが仮想レジスタR0を示していることを判別し
て(ステップS246)、処理対象格納部115に仮想
レジスタR0のレジスタIDを格納する(ステップS2
47)。また、当該命令は結果を仮想レジスタに格納す
る命令ではないため、命令判別部111は、レジスタI
Dを結果レジスタID保存部119に格納する処理はス
キップする。
【0074】こうして命令解読部110にて1命令の解
読がなされると、その結果を受けて命令実行部120が
命令を実行する。即ち、命令制御部121は、命令種別
格納部114及び処理対象格納部115の内容に従っ
て、命令種別が「汎用仮想レジスタから書込アドレスへ
の書込命令」であり、処理対象が「書込アドレス保存
部、仮想レジスタR0」であることを判断して、メモリ
制御部123を介して、汎用仮想レジスタ124のうち
仮想レジスタR0の内容を書込アドレス保存部126の
内容が指し示すデータメモリ132に格納する。
【0075】具体的には、命令制御部121は、[W
R]←R0を、マイクロプロセッサ140上で実行す
る。このようにして仮想マシン100は、mov4 R
0,(WR)である1バイトのバイトコードを実行し、
図5に示すプログラムの実行は終了する。このように、
実行されるべきバイトコードプログラムが、図3及び図
4に示す命令体系に則して構成されているならば、マイ
クロプロセッサやOSといった実行環境に依存すること
なく仮想マシン100によって実行される。 <実施の形態2>以下、本発明の実施の形態2における
プログラム変換装置について図を用いて説明する。
【0076】<構成>図8は、本発明の実施の形態2に
おけるプログラム変換装置の機能ブロック図である。プ
ログラム変換装置は、コンパイラ470から出力された
アセンブラプログラムを変換し、アセンブラ480に出
力する装置、いわゆるアセンブラオプティマイザであ
り、アセンブラ最適化部410と、変換前記憶部420
と、変換後記憶部430とからなる。
【0077】ここで、コンパイラ470は、高級言語で
記述されたプログラムが入力されると、これを本発明に
係る仮想マシン(実施の形態1参照)に適合した命令列
からなるアセンブラプログラムに翻訳して出力する装置
であり、アセンブラ480は、アセンブラプログラムが
入力されると、これを本発明に係る仮想マシンに適合し
たバイトコードに変換する装置である。
【0078】変換前記憶部420及び変換後記憶部43
0は、一次的な記憶領域であり、それぞれ本装置の変換
対象となるアセンブラプログラム、及び本プログラム変
換装置によって変換された結果のアセンブラプログラム
を格納するためのものである。アセンブラ最適化部41
0は、初期化部440と、レジスタ連鎖特定部451
と、読込アドレス特定部452と、書込アドレス特定部
453と、連鎖レジスタ置換部461と、読込アドレス
置換部462と、書込アドレス置換部463とを有す
る。
【0079】初期化部440は、変換前記憶部420に
格納されたアセンブラプログラム全体をそのまま変換後
記憶部430にコピーすることによって変換後記憶部4
30を初期化するものである。レジスタ連鎖特定部45
1は、プログラム中から汎用仮想レジスタへの値の設定
と当該汎用仮想レジスタの値の使用が連続する箇所を検
出し、当該汎用仮想レジスタの値を使用する命令の箇所
を連鎖レジスタ置換部461に通知するものである。
【0080】読込アドレス特定部452は、プログラム
中から値の書き込みには用いられないアドレス値のう
ち、使用されている回数が最大のものを検出し、当該ア
ドレス値を用いた命令記述の箇所全てを読込アドレス置
換部462に通知するものである。書込アドレス特定部
453は、プログラム中から値の読み込みには用いられ
ないアドレス値のうち、使用されている回数が最大のも
のを検出し、当該アドレス値を用いた命令記述の箇所全
てを書込アドレス置換部463に通知するものである。
【0081】連鎖レジスタ置換部461は、変換後記憶
部430中のプログラムのうち、レジスタ連鎖特定部4
51から通知を受けた箇所に対応する命令記述箇所につ
いて、直前に設定された汎用仮想レジスタの値を使用す
る命令の記述を、仮想マシンの結果レジスタID保存部
を使用した所定の命令の記述に書き換えるものである。
【0082】読込アドレス置換部462は、変換後記憶
部430中のプログラムのうち、読込アドレス特定部4
52から通知を受けた箇所に対応する命令記述箇所につ
いて、アドレス値を使用する命令記述を、仮想マシンの
読込アドレス保存部を使用した所定の命令の記述に書き
換え、また、変換後記憶部430中のプログラム中に、
仮想マシンの読込アドレス保存部に前記アドレス値を初
期設定するための命令を挿入するものである。
【0083】書込アドレス置換部463は、変換後記憶
部430中のプログラムのうち、書込アドレス特定部4
53から通知を受けた箇所に対応する命令記述箇所につ
いて、アドレス値を使用する命令記述を、仮想マシンの
書込アドレス保存部を使用した所定の命令の記述に書き
換え、また、変換後記憶部430中のプログラム中に、
仮想マシンの書込アドレス保存部に前記アドレス値を初
期設定するための命令を挿入するものである。
【0084】<動作>上記構成を備える実施の形態2に
おけるプログラム変換装置の動作について、以下に説明
する。なお、命令マップは実施の形態1と同様であると
する(図3、図4参照)。図9は、プログラム変換装置
の動作を示すフローチャートである。
【0085】同図に示すように、プログラム変換装置
は、初期化部440により変換前のプログラムをコピー
するステップS510と、レジスタ連鎖特定部451に
より、汎用仮想レジスタに処理結果を格納する命令の記
述と当該汎用仮想レジスタを引き続き処理対象とする命
令の記述と連続している部分を検出するステップS52
0と、連鎖レジスタ置換部461により、命令記述を書
き換えるステップS530と、読込アドレス特定部45
2及び書込アドレス特定部453により最も多く使用さ
れているアドレスを特定するステップS540と、読込
アドレス置換部462及び書込アドレス置換部463と
により、命令記述を書き換えるステップS550及びア
ドレスの初期設定をする命令記述を挿入するステップS
560とからなる動作を行う。
【0086】以下、図8の例に基づいて説明する。図8
に示すように、変換前記憶部420に、mov (R
3),R0という命令記述とmul R0,R1という
命令記述とが連続するアセンブラプログラムが格納され
ているとする。まず、初期化部440は、変換前記憶部
420から変換後記憶部430に前記アセンブラプログ
ラムをコピーする(ステップS510)。これにより、
mov(R3),R0及びmul R0,R1なる命令
記述は変換後記憶部430内に格納される。
【0087】次に、レジスタ連鎖特定部451は、変換
前記憶部420に記憶しているアセンブラプログラム中
の汎用仮想レジスタの使用が連鎖的になされる部分を検
出し、使用している命令の箇所を連鎖レジスタ置換部4
61に通知する(ステップS520)。アセンブラプロ
グラム中のmov (R3),R0とmul R0,R
1は、仮想レジスタR0への値の設定とその使用が連続
するので、mul R0,R1の命令記述の箇所が、レ
ジスタ連鎖特定部451から、連鎖レジスタ置換部46
1に通知される。なお、他にも汎用仮想レジスタが連鎖
的に使用されている命令記述箇所があれば、それらも同
様に処理される。
【0088】通知を受けた連鎖レジスタ置換部461
は、変換後記憶部430中のプログラムの該当箇所につ
いて、所定の命令に置換する(ステップS530)。こ
の置換結果が、図8の変換後記憶部430中に示したm
ul PD,R1であり、この命令は、その命令の前に
記述されている命令が処理結果を格納する汎用仮想レジ
スタを、処理対象とする意味をPDによって示し、その
汎用仮想レジスタがR0〜R3のいずれであっても同様
となる。従って、PDはR0〜R3を識別するための2
ビットを要しない命令となる(図3、図4参照)。な
お、PDを処理対象とする命令は、仮想マシンにおいて
は、仮想マシンの結果レジスタID保存部に保存されて
いるレジスタIDで特定される汎用仮想レジスタを処理
対象とする命令として扱われるため、動作は当該汎用仮
想レジスタを直接記述した命令と同様となるが、コード
サイズを縮小できるという利点を有する。この例では、
mulR0,R1は命令語長が2バイトの拡張命令であ
るが、mul PD,R1は命令語長が1バイトの命令
である。
【0089】ここで、拡張命令は、1バイト目がe0〜
efで始まり(図3、図4参照)、1バイト目より後の
部分で命令種別を識別可能な命令であり、例えば、mu
lRO,R1は、e241である。なお、拡張命令につ
いての命令マップについては図示しないが、使用頻度が
1バイト命令よりは低い多種多様な命令を拡張命令とし
て定めてあり、図3及び図4に示されていない命令は全
て拡張命令である。
【0090】このようにして、プログラム変換装置は、
アセンブラプログラムを語長の短い命令を用いたアセン
ブラプログラムに最適化する。なお、この例においては
ステップS540以後の説明は省略する。次に、図10
に示すアセンブラプログラムを例にして、このプログラ
ムをプログラム変換装置が変換する動作について説明す
る。
【0091】図10は、プログラム変換装置に入力する
プログラムの例を示す図である。変換前記憶部420に
は、図10に示されたプログラムが格納されている。同
図中;の右に示したのがそれぞれの命令のサイズであ
る。まず、初期化部440は、変換前記憶部420にお
かれたプログラム全体をそのまま変換後記憶部430に
コピーする(ステップS510)。
【0092】レジスタ連鎖特定部451は、プログラム
中の汎用仮想レジスタへの値の設定をする命令と当該汎
用仮想レジスタの値の使用をする命令とが連続する箇所
を検出し、汎用仮想レジスタの値の使用をする命令の箇
所を連鎖レジスタ置換部461に通知する(ステップS
520)。図10中 ;;regで示した箇所がこれに
相当する。
【0093】通知を受けた連鎖レジスタ置換部461
は、図10中の;;regで示された命令に対応する変
換後記憶部430中の命令を仮想マシンの結果レジスタ
ID保存部を用いた所定の命令に書き換える(ステップ
S530)。読込アドレス特定部452は、プログラム
中の値の読み込みには用いられるが書き込みには用いら
れないアドレス値のうち、使用される回数が最大のもの
を特定し、当該アドレス値を使用する命令の箇所を検出
して、その箇所を読込アドレス置換部462に通知し、
書込アドレス特定部453は、プログラム中の値の書込
みには用いられるが読み込みには用いられないアドレス
値のうち、使用される回数が最大のもののを特定し、当
該アドレス値を使用する命令の箇所を検出して、その箇
所を書込アドレス置換部463に通知する(ステップS
540)。
【0094】図10のプログラムにおいて値の書き込み
には用いられないアドレス値のうち使用される回数が最
大のものは、1000であり、このアドレス値を使用す
る命令の箇所は、同図中に;;readで示している。
また、読み込みには用いられないアドレス値のうち使用
される回数が最大のものは、2000であり、このアド
レス値を使用する命令の箇所は、同図中に;;writ
eで示している。
【0095】読込アドレス置換部462は、読込アドレ
ス特定部452からの通知を受けて、変換後記憶部43
0中のプログラムにおいて図10中の;;readで示
した命令に対応する箇所につき、仮想マシンの読込アド
レス保存部を用いる所定の命令に書き換え、書込アドレ
ス置換部463は、書込アドレス特定部453からの通
知を受けて、変換後記憶部430中のプログラムにおい
て図10中の;;writeで示した命令に対応する箇
所につき、仮想マシンの書込アドレス保存部を用いる所
定の命令に書き換える(ステップS550)。
【0096】命令の書き換え後、読込アドレス置換部4
62は、変換後記憶部430中のプログラムにおいて図
10中の;;readで示した命令のうち最初の命令に
対応する箇所の前に、仮想マシンの読込アドレス保存部
にアドレス値を代入する所定の命令を挿入し、書込アド
レス置換部463は、変換後記憶部430中のプログラ
ムにおいて図10中の;;writeで示した命令のう
ち最初の命令に対応する箇所の前に、仮想マシンの書込
アドレス保存部にアドレス値を代入する所定の命令を挿
入する(ステップS560)。
【0097】このようなプログラム変換装置の動作の
後、変換後記憶部430の内容は、図11に示すように
なる。図11は、プログラム変換装置の変換結果である
プログラムの例を示す図である。同図に示すように、変
換後のプログラムでは、アドレス値「1000」は、読
込アドレス保存部を示すRRに代入されて利用され、ア
ドレス値「2000」は、書込アドレス保存部を示すW
Rに代入されて利用されている。
【0098】同図中;の右にそれぞれの命令のサイズを
示している。従って、プログラム変換装置によって、図
10に示した合計30バイトのバイトコードと等価なア
センブラプログラムは、図11に示すように合計22バ
イトという短いバイトコードと等価なアセンブラプログ
ラムに変換される。 <実施例1>以下、本発明に係る仮想マシンに対応する
バイトコードについて、従来技術の説明中で示したJa
vaByteCode(図16参照)と対比して説明す
る。
【0099】図12は、図16に示したJavaByt
eCodeと同様の動作を行なうプログラムを、実施の
形態1に示した仮想マシンに対応したバイトコードで記
述したものを示す図である。但し、同図においては、特
段の最適化を施していない状態を示した。なお、同図
中;の右に示したのがそれぞれの命令のコードサイズで
ある。
【0100】当然ではあるが、このようにJavaBy
teCodeと同様の動作を行うプログラムは本発明に
係る仮想マシンに対応するバイトコードとして作成で
き、当該仮想マシンで実行可能となる。図13は、前記
の仮想マシンに対応するバイトコードプログラムに対し
てプログラム最適化を施し実施の形態2に示したプログ
ラム変換装置によって変換した後の状態を示す図であ
る。
【0101】同図においても;の右に示したのがそれぞ
れの命令のコードサイズである。同図に示すように本発
明に係る仮想マシンに対応するバイトコードは、図16
に示したJavaByteCode の28バイトに比
べ、18バイトとすることができ、10バイト短縮され
た。また、同図中;;loopのコメントで示した部分
が主たる実行部分であるループの中身であり、これも図
16に示した JavaByteCode の10命令に
比べ、5命令と半減した。 <実施例2>以下、本発明に係る仮想マシンに対応する
バイトコードについて、従来のTSI社のOpenTV
の仮想マシンに対応するバイトコードであるO−cod
eと対比して説明する。
【0102】図14は、C言語のソースコード及びこれ
をO−codeで記述した例を示す図であり、図15
は、当該ソースコードを実施の形態1に示した仮想マシ
ンに対応するバイトコードで記述した例を示す図であ
る。なお、図14に示すC言語のソースコード及びO−
codeは、TSI社のドキュメント“Proposa
l for a virtual machinefo
r interoperability and br
oadcasting”の最後に付されている例であ
る。
【0103】図14中の//の右、図15の;の右にそ
れぞれコードサイズを示している。o−codeでは、
18命令20バイトであるのに対し、本発明に係る仮想
マシンに対応するバイトコードでは、12命令15バイ
トとすることができ、5バイト短縮された。また、ルー
プ部分は、o−codeでは12命令であるのに対し、
本発明に係る仮想マシンに対応するバイトコードでは7
命令と大幅に縮減できている。
【0104】以上、本発明に係る仮想マシン及びプログ
ラム変換装置について、実施形態に基づいて説明した
が、本発明はこれら実施形態に限られないことは勿論で
ある。即ち、 (1)両実施の形態では、仮想マシンの命令セットの一
部につき、図3及び図4に命令マップとして示したが、
この命令マップの命令配置や個々の命令の機能等につい
て限定されることはなく、汎用仮想レジスタ、結果レジ
スタID、読込アドレス又は書込アドレスを用いる命令
が含まれており、加算、減算、比較、ジャンプ等の主要
で使用頻度が高い命令を1バイトの命令語に割り当てい
るならば、いかなる命令を盛り込んでいても、また、い
かなる命令配置としてもよい。 (2)実施の形態2では、読込アドレス保存部を示すR
R及び書込アドレス保存部を示すWRに対しては代入演
算を施しているが(図11参照)、RR及びWRに対し
ては代入の他に加減算を施すこともできる。 (3)実施の形態2では、変換前記憶部420と変換後
記憶部430の2つの記憶部を用いたが、これらは1つ
の記憶部としてもよい。 (4)実施の形態1における仮想マシンの処理手順(図
6、図7のフローチャートの手順等)又は実施の形態2
におけるプログラム変換装置の処理手順(図9のフロー
チャートの手順等)を機械語プログラムにより実現し、
これを記録媒体に記録して流通・販売の対象にしても良
い。このような記録媒体には、ICカード、光ディス
ク、フレキシブルディスク、ROM等があるが、これら
に記録された機械語プログラムは汎用のハードウェアに
インストールされることにより利用に供される。ここで
いう汎用ハードウェアは、一般のパーソナルコンピュー
タ、あるいはセットトップボックス、PDA、デジタル
TV等のプログラム実行能力を有する家電機器等であ
り、インストールした上記機械語プログラムを逐次実行
して、実施の形態1に示した仮想マシン又は実施の形態
2に示したプログラム変換装置の機能を実現する。
【0105】
【発明の効果】以上の説明から明らかなように、本発明
に係る仮想マシンは、バイトコードを逐次解釈してマイ
クロプロセッサに実行させるための制御を行うプログラ
ムである仮想マシンであって、値を保持でき命令の処理
対象となる複数の汎用仮想レジスタと、バイトコードを
読み込む読込手段と、前記読込手段により読み込んだバ
イトコードにつき、命令種別と汎用仮想レジスタを処理
対象とする命令か否かとを判別する命令判別手段と、前
記命令判別手段により汎用仮想レジスタを処理対象とす
る命令であると判別された第1グループのバイトコード
につき、処理対象が前記複数の汎用仮想レジスタのいず
れであるかを示すレジスタIDを判別するレジスタID
判別手段と、第1グループのバイトコードにつき、前記
レジスタIDで示される汎用仮想レジスタを処理対象と
して用いて、前記命令種別で示される所定動作をマイク
ロプロセッサに実行させる実行制御手段とを備えること
を特徴とする。
【0106】これにより、仮想マシンの命令セットにレ
ジスタを使用した命令が備わり、バイトコードにレジス
タを処理対象とする命令を含むことができるため、バイ
トコードプログラムのサイズを小さくすることができ、
また、バイトコードプログラムに対しプログラム最適化
技術を適用可能となる。ここで、前記仮想マシンにおけ
る汎用仮想レジスタは、4本であり、前記読込手段は、
バイトコードを1バイトづつ逐次読み込み、前記命令判
別手段は、1バイトのバイトコードを1回の判別単位と
し、前記レジスタID判別手段は、第1グループのバイ
トコード中の2ビットを参照することにより1つのレジ
スタIDの前記判別を行うものとすることもできる。
【0107】これにより、バイトコードプログラムのサ
イズを小さいものとすることができる。なぜなら、仮想
マシンに4本の汎用仮想レジスタを設けた場合、1つの
汎用レジスタを指定するのに2ビットしか使用しないた
め、1バイト命令に主要な命令を十分配置することがで
きるので、これに対応するバイトコードプログラムの大
部分の命令を命令語長1バイトの命令とすることがで
き、また4本の汎用仮想レジスタが扱えれば十分にプロ
グラム構造自体を最適化し小さくすることができるから
である。
【0108】また、現在、汎用レジスタを4本以上備え
るマイクロプロセッサは多数存在するが、これらのマイ
クロプロセッサにおいて仮想マシンを実装する際に、汎
用仮想レジスタをマイクロプロセッサの汎用レジスタを
割り付けることによって、バイトコードプログラムの実
行につき、十分な実行速度を得ることが可能となる。こ
こで、前記仮想マシンにおける前記命令判別手段は、判
別対象のバイトコードが汎用仮想レジスタを処理対象と
する命令であると判別するに際して1つの汎用仮想レジ
スタを処理対象とする命令か2つの汎用仮想レジスタを
処理対象とする命令かの別をも判別し、前記レジスタI
D判別手段は、前記命令判別手段により2つの汎用仮想
レジスタを処理対象とする命令であると判別されたバイ
トコードについては、当該バイトコード中の4ビットを
参照して、2つの汎用仮想レジスタそれぞれのレジスタ
IDの前記判別を行うこととすることもできる。
【0109】これにより、仮想マシンは2つの処理対象
として4本の汎用仮想レジスタを任意の組み合わせで用
いる命令を処理できる。この2つの処理対象となる汎用
仮想レジスタを指定するために4ビットを使用しても、
代入、加算、減算、比較といった主要命令を十分に1バ
イト命令に配置することができ、当該仮想マシンに対応
するバイトコードプログラムのうち使用頻度の高い命令
は、命令語長1バイトの命令とすることができるため、
プログラムのサイズを小さくすることができる。
【0110】また、前記仮想マシンはさらに、レジスタ
IDを記憶するための結果レジスタ保存手段を備え、前
記命令判別手段はさらに、前記読込手段により読み込ん
だバイトコードにつき処理結果を汎用仮想レジスタに格
納する命令か否かを判別し、また、前記読込手段により
読み込んだバイトコードにつき、前記結果レジスタ保存
手段により記憶されているレジスタIDにより識別され
る汎用仮想レジスタを処理対象とする命令か否かを判別
し、前記結果レジスタ保存手段は、前記命令判別手段に
より処理結果を汎用仮想レジスタに格納する命令と判別
されたバイトコードを参照することにより、その汎用仮
想レジスタを識別するためのレジスタIDを記憶し、前
記実行制御手段は、前記レジスタID判別手段により判
別されたレジスタIDで示される汎用仮想レジスタに加
えて前記結果レジスタ保存手段により記憶されているレ
ジスタIDで示される汎用仮想レジスタをも処理対象と
して用いて、前記所定動作をマイクロプロセッサに実行
させることとすることもできる。
【0111】これにより、バイトコードプログラム中の
汎用仮想レジスタを処理対象とする命令であって、当該
命令に前置された命令の処理結果が格納される1つの汎
用仮想レジスタが処理対象である命令については、前記
の結果レジスタ保存手段に記憶されているレジスタID
で示される1つの汎用仮想レジスタを処理対象とする旨
の1つの1バイト命令として記述できるため、当該命令
の命令語長を小さいものとすることができる可能性を高
め、また、当該命令は1つの命令種別でしかないこと
は、その分多様な命令を1バイト命令にマッピングでき
る可能性を高める。
【0112】一般的には、処理対象となる汎用仮想レジ
スタが複数の汎用仮想レジスタのうちいずれであるかを
特定するためには命令語中にレジスタID指定用のビッ
トを設ける必要があるが、結果レジスタ保存手段に記憶
されているレジスタIDで示される1つの汎用仮想レジ
スタを処理対象とする旨の命令では、1つの汎用仮想レ
ジスタについては特定されているのでその分レジスタI
D指定用のビットを不要とすることができるのである。
【0113】従って、これによりバイトコードプログラ
ムサイズを小さくすることができる。また、前記仮想マ
シンはさらに、読込専用のアドレス値を記憶するための
読込アドレス保存手段と、前記読込アドレス保存手段を
処理対象として用いて、前記命令種別で示される所定動
作をマイクロプロセッサに実行させる第2実行制御手段
とを備え、前記命令種別のうち少なくとも1つは、読込
アドレス保存手段を処理対象とする命令であることとす
ることもできる。
【0114】これにより、バイトコードプログラム中の
命令であって、値を読み出すためのアドレス値を命令語
中に含む命令を、アドレス値を含まず読込アドレス保存
手段を処理対象とする命令として記述できるため、アド
レス値を記述しない分だけ、バイトコードプログラムサ
イズを小さくすることができる。なお、仮想マシンのマ
イクロプロセッサへの実装にあたり、前記読込アドレス
保存手段を汎用レジスタに割り付けることによって、バ
イトコードプログラムの実行につき、十分な実行速度を
得ることが可能となる。
【0115】また、前記仮想マシンはさらに、書込専用
のアドレス値を記憶するための書込アドレス保存手段
と、前記書込アドレス保存手段を処理対象として用い
て、前記命令種別で示される所定動作をマイクロプロセ
ッサに実行させる第3実行制御手段とを備え、前記命令
種別のうち少なくとも1つは、読込アドレス保存手段を
処理対象とする命令であることとすることもできる。
【0116】これにより、バイトコードプログラム中の
命令であって、値を書き込むためのアドレス値を命令語
中に含む命令を、アドレス値を含まず書込アドレス保存
手段を処理対象とする命令として記述できるため、アド
レス値を記述しない分だけ、バイトコードプログラムサ
イズを小さくすることができる。なお、仮想マシンのマ
イクロプロセッサへの実装にあたり、前記書込アドレス
保存手段を汎用レジスタに割り付けることによって、バ
イトコードプログラムの実行につき、十分な実行速度を
得ることが可能となる。
【0117】また、本発明に係るプログラム変換装置
は、本発明に係る仮想マシンを対象とするアセンブラソ
ースプログラム中の一部の命令を他の命令に変換するプ
ログラム変換装置であって、プログラムを記憶する記憶
手段と、前記プログラム中において、汎用仮想レジスタ
に処理結果を格納する第1の命令の後に当該汎用仮想レ
ジスタを処理対象とする第2の命令が連続して配置され
ている部分を検出する結果レジスタ使用部分検出手段
と、前記結果レジスタ使用部分検出手段に検出された部
分における前記第2の命令を、前記結果レジスタ保存手
段に記憶しているレジスタIDで示される汎用仮想レジ
スタを処理対象とした第3の命令に変換する命令変換手
段とを備えることを特徴とする。
【0118】これにより、汎用仮想レジスタを処理対象
とする命令について、1つの汎用仮想レジスタを指定す
るために2ビットを必要とすること及び使用頻度等から
2バイト以上の命令語長の命令で表現している部分を、
汎用仮想レジスタ指定のための2ビットが不要な命令と
することができる等から前記命令語長より小さい命令語
長の命令での表現に変更することができるため、結果的
にバイトコードプログラムサイズを小さくすることがで
きる。
【0119】また、本発明に係るプログラム変換装置
は、本発明に係る仮想マシンを対象とするアセンブラソ
ースプログラム中の一部の命令を他の命令に変換するプ
ログラム変換装置であって、プログラムを記憶する記憶
手段と、前記プログラム中において、読み込みに用いら
れて書き込みには用いられないアドレス値のうち当該ア
ドレス値を処理対象とする命令の数が最大のアドレス値
を特定し、この特定したアドレス値を処理対象とする命
令を検出する読込アドレス使用命令検出手段と、前記読
込アドレス使用命令検出手段に検出された命令を、前記
読込アドレス保存手段を処理対象とする命令に変換する
命令変換手段と、前記読込アドレス使用命令検出手段に
より特定されたアドレス値を前記読込アドレス保存手段
に格納する旨の命令を、前記読込アドレス使用命令検出
手段により検出された全ての命令より前の部分に挿入す
る命令挿入手段とを備えることを特徴とする。
【0120】これにより、読み込み処理に頻繁に用いら
れるアドレス値を、バイトコードプログラム中に複数回
記述しなくてもよくなるため、プログラムサイズを小さ
くすることができる。また、本発明に係るプログラム変
換装置は、本発明に係る仮想マシンを対象とするアセン
ブラソースプログラム中の一部の命令を他の命令に変換
するプログラム変換装置であって、プログラムを記憶す
る記憶手段と、前記プログラム中において、書き込みに
用いられて読み込みには用いられないアドレス値のうち
当該アドレス値を処理対象とする命令の数が最大のアド
レス値を特定し、この特定したアドレス値を処理対象と
する命令を検出する書込アドレス使用命令検出手段と、
前記書込アドレス使用命令検出手段に検出された命令
を、前記書込アドレス保存手段を処理対象とする命令に
変換する命令変換手段と、前記書込アドレス使用命令検
出手段により特定されたアドレス値を前記書込アドレス
保存手段に格納する旨の命令を、前記書込アドレス使用
命令検出手段により検出された全ての命令より前の部分
に挿入する命令挿入手段とを備えることを特徴とする。
【0121】これにより、書き込み処理に頻繁に用いら
れるアドレス値を、バイトコードプログラム中に複数回
記述しなくてもよくなるため、プログラムサイズを小さ
くすることができる。このように、本発明に係る仮想マ
シン及びプログラム変換装置は、マイクロプロセッサの
アーキテクチャの相違を問わずプログラム流通を可能に
する技術として有用であり、特に家電製品へのプログラ
ムの配送に関する技術としてその実用的効果は多大であ
る。
【図面の簡単な説明】
【図1】本発明の実施の形態1における仮想マシンの適
用図である。
【図2】本発明の実施の形態1における仮想マシンの機
能ブロック図である。
【図3】命令マップの内容のイメージを示す概念図であ
り、16進数で1の位が0〜7の命令を示している。
【図4】命令マップの内容のイメージを示す概念図であ
り、16進数で1の位が8〜fの命令を示している。
【図5】仮想マシン100に入力されるバイトコードプ
ログラムを示す図である。
【図6】命令解読部110の動作を示すフローチャート
である。
【図7】各命令対応の制御をする動作について詳細化し
たフローチャートである。
【図8】本発明の実施の形態2におけるプログラム変換
装置の機能ブロック図である。
【図9】プログラム変換装置の動作を示すフローチャー
トである。
【図10】プログラム変換装置に入力するプログラムの
例を示す図である。
【図11】プログラム変換装置の変換結果であるプログ
ラムの例を示す図である。
【図12】図16に示すJavaByteCodeと同
様の動作を行なうプログラムを、実施の形態1に示した
仮想マシンに対応したバイトコードで記述したものを示
す図である。
【図13】前記の仮想マシンに対応するバイトコードプ
ログラムを実施の形態2に示したプログラム変換装置に
よって変換した後の状態を示す図である。
【図14】C言語のソースコード及びこれをO−cod
eで記述した例を示す図である。
【図15】図14に示すソースコードを実施の形態1に
示した仮想マシンに対応するバイトコードで記述した例
を示す図である。
【図16】Java言語で記述したプログラムとこれに
対応するJavaByteCodeの例である。
【符号の説明】
100 仮想マシン 110 命令解読部 111 命令判別部 112 命令読込部 113 命令マップ記憶部 114 命令種別格納部 115 処理対象格納部 116 1バイト定数読込部 117 第1レジスタ判別部 118 第2レジスタ判別部 119 結果レジスタID保存部 120 命令実行部 121 命令制御部 122 仮想演算器 123 メモリ制御部 124 汎用仮想レジスタ 125 読込アドレス保存部 126 書込アドレス保存部 130 バイトコードプログラム 131 プログラムメモリ 132 データメモリ 140 マイクロプロセッサ 141 OS 410 アセンブラ最適化部 420 変換前記憶部 430 変換後記憶部 440 初期化部 451 レジスタ連鎖特定部 452 読込アドレス特定部 453 書込アドレス特定部 461 連鎖レジスタ置換部 462 読込アドレス置換部 463 書込アドレス置換部 470 コンパイラ 480 アセンブラ

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】 バイトコードを逐次解釈してマイクロプ
    ロセッサに実行させるための制御を行うプログラムであ
    る仮想マシンであって、 値を保持でき命令の処理対象となる複数の汎用仮想レジ
    スタと、 バイトコードを読み込む読込手段と、 前記読込手段により読み込んだバイトコードにつき、命
    令種別と汎用仮想レジスタを処理対象とする命令か否か
    とを判別する命令判別手段と、 前記命令判別手段により汎用仮想レジスタを処理対象と
    する命令であると判別された第1グループのバイトコー
    ドにつき、処理対象が前記複数の汎用仮想レジスタのい
    ずれであるかを示すレジスタIDを判別するレジスタI
    D判別手段と、 第1グループのバイトコードにつき、前記レジスタID
    で示される汎用仮想レジスタを処理対象として用いて、
    前記命令種別で示される所定動作をマイクロプロセッサ
    に実行させる実行制御手段とを備えることを特徴とする
    仮想マシン。
  2. 【請求項2】 前記汎用仮想レジスタは、4本であり、 前記読込手段は、バイトコードを1バイトづつ逐次読み
    込み、 前記命令判別手段は、1バイトのバイトコードを1回の
    判別単位とし、 前記レジスタID判別手段は、第1グループのバイトコ
    ード中の2ビットを参照することにより1つのレジスタ
    IDの前記判別を行うことを特徴とする請求項1記載の
    仮想マシン。
  3. 【請求項3】 前記命令判別手段は、判別対象のバイト
    コードが汎用仮想レジスタを処理対象とする命令である
    と判別するに際して1つの汎用仮想レジスタを処理対象
    とする命令か2つの汎用仮想レジスタを処理対象とする
    命令かの別をも判別し、 前記レジスタID判別手段は、前記命令判別手段により
    2つの汎用仮想レジスタを処理対象とする命令であると
    判別されたバイトコードについては、当該バイトコード
    中の4ビットを参照して、2つの汎用仮想レジスタそれ
    ぞれのレジスタIDの前記判別を行うことを特徴とする
    請求項2記載の仮想マシン。
  4. 【請求項4】 前記仮想マシンはさらに、レジスタID
    を記憶するための結果レジスタ保存手段を備え、 前記命令判別手段はさらに、前記読込手段により読み込
    んだバイトコードにつき処理結果を汎用仮想レジスタに
    格納する命令か否かを判別し、また、前記読込手段によ
    り読み込んだバイトコードにつき、前記結果レジスタ保
    存手段により記憶されているレジスタIDにより識別さ
    れる汎用仮想レジスタを処理対象とする命令か否かを判
    別し、 前記結果レジスタ保存手段は、前記命令判別手段により
    処理結果を汎用仮想レジスタに格納する命令と判別され
    たバイトコードを参照することにより、その汎用仮想レ
    ジスタを識別するためのレジスタIDを記憶し、 前記実行制御手段は、前記レジスタID判別手段により
    判別されたレジスタIDで示される汎用仮想レジスタに
    加えて前記結果レジスタ保存手段により記憶されている
    レジスタIDで示される汎用仮想レジスタをも処理対象
    として用いて、前記所定動作をマイクロプロセッサに実
    行させることを特徴とする請求項1〜3のいずれか1項
    記載の仮想マシン。
  5. 【請求項5】 前記仮想マシンはさらに、 読込専用のアドレス値を記憶するための読込アドレス保
    存手段と、 前記読込アドレス保存手段を処理対象として用いて、前
    記命令種別で示される所定動作をマイクロプロセッサに
    実行させる第2実行制御手段とを備え、 前記命令種別のうち少なくとも1つは、読込アドレス保
    存手段を処理対象とする命令であることを特徴とする請
    求項1〜4のいずれか1項記載の仮想マシン。
  6. 【請求項6】 前記仮想マシンはさらに、 書込専用のアドレス値を記憶するための書込アドレス保
    存手段と、 前記書込アドレス保存手段を処理対象として用いて、前
    記命令種別で示される所定動作をマイクロプロセッサに
    実行させる第3実行制御手段とを備え、 前記命令種別のうち少なくとも1つは、読込アドレス保
    存手段を処理対象とする命令であることを特徴とする請
    求項1〜5のいずれか1項記載の仮想マシン。
  7. 【請求項7】 請求項4記載の仮想マシンを対象とする
    アセンブラソースプログラム中の一部の命令を他の命令
    に変換するプログラム変換装置であって、 プログラムを記憶する記憶手段と、 前記プログラム中において、汎用仮想レジスタに処理結
    果を格納する第1の命令の後に当該汎用仮想レジスタを
    処理対象とする第2の命令が連続して配置されている部
    分を検出する結果レジスタ使用部分検出手段と、 前記結果レジスタ使用部分検出手段に検出された部分に
    おける前記第2の命令を、前記結果レジスタ保存手段に
    記憶しているレジスタIDで示される汎用仮想レジスタ
    を処理対象とした第3の命令に変換する命令変換手段と
    を備えることを特徴とするプログラム変換装置。
  8. 【請求項8】 請求項5記載の仮想マシンを対象とする
    アセンブラソースプログラム中の一部の命令を他の命令
    に変換するプログラム変換装置であって、 プログラムを記憶する記憶手段と、 前記プログラム中において、読み込みに用いられて書き
    込みには用いられないアドレス値のうち当該アドレス値
    を処理対象とする命令の数が最大のアドレス値を特定
    し、この特定したアドレス値を処理対象とする命令を検
    出する読込アドレス使用命令検出手段と、 前記読込アドレス使用命令検出手段に検出された命令
    を、前記読込アドレス保存手段を処理対象とする命令に
    変換する命令変換手段と、 前記読込アドレス使用命令検出手段により特定されたア
    ドレス値を前記読込アドレス保存手段に格納する旨の命
    令を、前記読込アドレス使用命令検出手段により検出さ
    れた全ての命令より前の部分に挿入する命令挿入手段と
    を備えることを特徴とするプログラム変換装置。
  9. 【請求項9】 請求項6記載の仮想マシンを対象とする
    アセンブラソースプログラム中の一部の命令を他の命令
    に変換するプログラム変換装置であって、 プログラムを記憶する記憶手段と、 前記プログラム中において、書き込みに用いられて読み
    込みには用いられないアドレス値のうち当該アドレス値
    を処理対象とする命令の数が最大のアドレス値を特定
    し、この特定したアドレス値を処理対象とする命令を検
    出する書込アドレス使用命令検出手段と、 前記書込アドレス使用命令検出手段に検出された命令
    を、前記書込アドレス保存手段を処理対象とする命令に
    変換する命令変換手段と、 前記書込アドレス使用命令検出手段により特定されたア
    ドレス値を前記書込アドレス保存手段に格納する旨の命
    令を、前記書込アドレス使用命令検出手段により検出さ
    れた全ての命令より前の部分に挿入する命令挿入手段と
    を備えることを特徴とするプログラム変換装置。
  10. 【請求項10】 請求項1〜6のいずれか1項に記載の
    仮想マシンを記録した記録媒体。
  11. 【請求項11】 コンピュータに、請求項4記載の仮想
    マシンを対象とするアセンブラソースプログラム中の一
    部の命令を他の命令に変換させるための変換処理プログ
    ラムを記録した記録媒体であって、 前記アセンブラソースプログラム中において、汎用仮想
    レジスタに処理結果を格納する第1の命令の後に当該汎
    用仮想レジスタを処理対象とする第2の命令が連続して
    配置されている部分を検出する結果レジスタ使用部分検
    出ステップと、 前記結果レジスタ使用部分検出ステップで検出した部分
    における前記第2の命令を、前記結果レジスタ保存手段
    に記憶しているレジスタIDで示される汎用仮想レジス
    タを処理対象とした第3の命令に変換する命令変換ステ
    ップとを含むことを特徴とする記録媒体。
  12. 【請求項12】 コンピュータに、請求項5記載の仮想
    マシンを対象とするアセンブラソースプログラム中の一
    部の命令を他の命令に変換させるための変換処理プログ
    ラムを記録した記録媒体であって、 前記アセンブラソースプログラム中において、読み込み
    に用いられて書き込みには用いられないアドレス値のう
    ち当該アドレス値を処理対象とする命令の数が最大のア
    ドレス値を特定し、この特定したアドレス値を処理対象
    とする命令を検出する読込アドレス使用命令検出ステッ
    プと、 前記読込アドレス使用命令検出ステップで検出された命
    令を、前記読込アドレス保存手段を処理対象とする命令
    に変換する命令変換ステップと、 前記読込アドレス使用命令検出ステップで特定されたア
    ドレス値を前記読込アドレス保存手段に格納する旨の命
    令を、前記読込アドレス使用命令検出ステップで検出さ
    れた全ての命令より前の部分に挿入する命令挿入ステッ
    プとを含むことを特徴とする記録媒体。
  13. 【請求項13】 コンピュータに、請求項6記載の仮想
    マシンを対象とするアセンブラソースプログラム中の一
    部の命令を他の命令に変換させるための変換処理プログ
    ラムを記録した記録媒体であって、 前記アセンブラソースプログラム中において、書き込み
    に用いられて読み込みには用いられないアドレス値のう
    ち当該アドレス値を処理対象とする命令の数が最大のア
    ドレス値を特定し、この特定したアドレス値を処理対象
    とする命令を検出する書込アドレス使用命令検出ステッ
    プと、 前記書込アドレス使用命令検出ステップで検出された命
    令を、前記書込アドレス保存手段を処理対象とする命令
    に変換する命令変換ステップと、 前記書込アドレス使用命令検出ステップで特定されたア
    ドレス値を前記書込アドレス保存手段に格納する旨の命
    令を、前記書込アドレス使用命令検出ステップで検出さ
    れた全ての命令より前の部分に挿入する命令挿入ステッ
    プとを含むことを特徴とする記録媒体。
JP10019240A 1998-01-30 1998-01-30 仮想マシン及びプログラム変換装置 Pending JPH11212805A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP10019240A JPH11212805A (ja) 1998-01-30 1998-01-30 仮想マシン及びプログラム変換装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP10019240A JPH11212805A (ja) 1998-01-30 1998-01-30 仮想マシン及びプログラム変換装置

Publications (1)

Publication Number Publication Date
JPH11212805A true JPH11212805A (ja) 1999-08-06

Family

ID=11993883

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10019240A Pending JPH11212805A (ja) 1998-01-30 1998-01-30 仮想マシン及びプログラム変換装置

Country Status (1)

Country Link
JP (1) JPH11212805A (ja)

Similar Documents

Publication Publication Date Title
US6496922B1 (en) Method and apparatus for multiplatform stateless instruction set architecture (ISA) using ISA tags on-the-fly instruction translation
US6151618A (en) Safe general purpose virtual machine computing system
RU2565496C2 (ru) Команда для загрузки данных до заданной границы памяти, указанной командой
JP3606561B2 (ja) 第1ビット・アーキテクチャの命令を第2ビット・アーキテクチャの命令に変換する方法、システム、プログラムおよびデータ構造
JP2000347873A (ja) マルチプラットフォーム環境における命令選択
JP2000066902A (ja) 動的トランスレ―タにおけるマルチブランチ修正処理システム
US5991763A (en) Method and apparatus for embedding concatenated data files into object files during runtime in a virtual file system
JP2000066901A (ja) レジスタ割当て部を用いてスタック内のレジスタを最適化するための方法、装置及びコンピュ―タプログラムプロダクト
US6738966B1 (en) Compiling device, computer-readable recording medium on which a compiling program is recorded and a compiling method
US7219337B2 (en) Direct instructions rendering emulation computer technique
JP5777843B1 (ja) プロセッサ、処理装置、プログラム作成方法
US6978451B2 (en) Method for fast compilation of preverified JAVA bytecode to high quality native machine code
JP2007535241A5 (ja)
JP2007535241A (ja) 条件付で実行可能モジュールを縮小するシステムおよび方法
JP4653236B2 (ja) ユーザ選択可能なストレージ・アクセス・キーを用いてデータを移動する方法及びシステム
US8561042B2 (en) System and method for reducing execution time of bytecode in java virtual machine
US5694605A (en) Program translator with selective data value amendment and processor with data extension instructions
JPH11212805A (ja) 仮想マシン及びプログラム変換装置
JPH08161169A (ja) Vliw方式の計算機システム及びvliwの解釈・実行方法
US20060288019A1 (en) Flexible data file format
JP3264901B2 (ja) コンパイル装置及びコンパイル方法
US7028292B1 (en) Program executing apparatus, control method therefor, and storage medium for interpreting and executing intermediate codes
CN110187897B (zh) 一种固件升级方法及装置
JPH11212806A (ja) 仮想マシン及びプログラム変換装置
CN115964053B (zh) 一种反编译处理方法、装置、电子设备和存储介质