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

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

Info

Publication number
JPH11212806A
JPH11212806A JP1924198A JP1924198A JPH11212806A JP H11212806 A JPH11212806 A JP H11212806A JP 1924198 A JP1924198 A JP 1924198A JP 1924198 A JP1924198 A JP 1924198A JP H11212806 A JPH11212806 A JP H11212806A
Authority
JP
Japan
Prior art keywords
instruction
memory
address
byte
memory area
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
JP1924198A
Other languages
English (en)
Inventor
Nobuteru Tominaga
宣輝 富永
Seiichi Urushibara
誠一 漆原
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 JP1924198A priority Critical patent/JPH11212806A/ja
Publication of JPH11212806A publication Critical patent/JPH11212806A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 データメモリへアクセスする命令を含むバイ
トコードプログラムサイズの短縮を可能とする仮想マシ
ンを提供する。 【解決手段】 命令解読部110でプログラムメモリ1
31中のバイトコードを1バイトづつ読み込み、命令マ
ップ記憶部113に予め記憶している命令マップを参照
して、命令種別を判別し、命令が局所的メモリ領域中の
位置をメモリIDで特定するものである場合に、レジス
タ・メモリID読込部118によりプログラムメモリ1
31から1バイト読み込み、当該1バイト中の所定ビッ
トによりメモリIDを判別し、命令実行部120は、前
記の局所的メモリ領域中の位置をメモリIDで指定する
命令について、メモリIDで特定されるメモリ位置へア
クセスする所定処理をマイクロプロセッサ上で実行す
る。

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言語で記述したプログラムでは、
全てのデータがいずれかのクラスのローカル変数とな
り、クラスメソッドを介してのみアクセス可能となる。
ここで、オブジェクト指向言語とは、取り扱う様々な対
象を共通の性質に着目してひとまとめにして取り扱うこ
とに適した言語であり、この言語で記述するプログラム
においては、様々な対象物それぞれを示すオブジェクト
をクラスとして定義する。クラスはオブジェクトを抽象
化した概念であり、実体であるオブジェクトのテンプレ
ートとなるものである。また、クラスの定義の中にはオ
ブジェクトを表す各種データだけでなく、処理手続きも
記述する。
【0007】ここで、ローカル変数とは、オブジェクト
を表す各種データをいい、クラスメソッドとは前記の処
理手続きをいう。また、Java言語で記述したプログ
ラムにおけるローカル変数は、JavaByteCod
eでは、16ビットのローカル変数用のIDを用いて特
定される。
【0008】なお、Javaに関しては、「The J
ava Virtual Machine Speci
fication」(http://java.su
n.com)に詳しい。
【0009】
【発明が解決しようとする課題】ところで、最近、T
V、デジタルビデオ、DVDプレーヤー等の家電分野に
おいても、コンピュータの分野における場合と同様に、
インターネットやIEEE1394規格に基づく配線等
を通じてプログラムを配送し、各家電製品間で協調動作
を行なわせたいという要求が出てきており、仮想マシン
が必要とされている。
【0010】但し、コスト面等の諸事情からメモリ容量
の小さい家電製品の分野においては、バイトコードプロ
グラムのサイズを小さくすることが重大な課題となり、
仮想マシンには、バイトコードプログラムのサイズを短
縮化するための工夫が求められる。しかしながら、Ja
va仮想マシンは、ローカル変数を扱うために、16ビ
ットのローカル変数用のIDを用いて各種処理を指示す
る命令のみをサポートしているため、ローカル変数への
アクセスを多用するバイトコードプログラムについて
は、そのサイズが肥大化してしまう欠点を有する。
【0011】また、Java仮想マシンは、オブジェク
ト指向言語であるJava言語から翻訳されたJava
ByteCodeを実行するための仮想マシンであるた
め、ローカル変数は扱えるが、クラス内に閉じていない
大域的なデータを扱うことができない。これは、オブジ
ェクト指向言語に限定せず一般の高級言語における概念
で言い換えれば、複数の局所的プログラムから直接的に
同一のメモリ領域をアクセスすることができないという
ことになる。以下、前記局所的プログラムを関数とい
う。
【0012】このことは、プログラムの自由度を非常に
制限し、複数の関数から各種装置へのIOや画像用バッ
ファへのアクセス等を行うプログラム構造を採る場合の
多い家電製品における各種機能部分の制御処理プログラ
ムには適さない。そこで、本発明はかかる問題点に鑑み
てなされたものであり、データメモリへアクセスする命
令を含むバイトコードプログラムサイズの短縮を可能と
する仮想マシンを提供することを第1の目的とする。
【0013】また、本発明は、大域的なデータを扱うこ
とができる仮想マシンを提供することを第2の目的とす
る。さらに、本発明に係る仮想マシンに対応して、バイ
トコードプログラムサイズを短縮化するためのプログラ
ム変換装置を提供することを第3の目的とする。
【0014】
【課題を解決するための手段】上記課題を解決するため
に本発明に係る仮想マシンは、プログラム中での使用さ
れる回数の高いデータについては、当該データにアクセ
スする命令を短いバイトコードで記述できるように工夫
したものであり、マイクロプロセッサ配下で、プログラ
ムを構成するバイトコードを仮想的に逐次解読して実行
する仮想マシンであって、前記マイクロプロセッサを、
バイトコードを読み込む読込手段と、前記読込手段によ
り読み込んだ1バイトのバイトコードが、メモリ領域中
のある位置にアクセスする命令であって前記位置をメモ
リIDで特定するメモリID使用命令か否かを判別する
メモリID使用命令判別手段と、前記メモリID使用命
令判別手段により前記メモリID使用命令であると判別
されたバイトコードに連続する1バイトのバイトコード
を前記読込手段により取得し、当該1バイトのバイトコ
ード中の複数のビットデータにより前記メモリIDを判
別するメモリID判別手段と、前記メモリID使用命令
と判別されたバイトコードにつき、前記メモリID判別
手段により判別されたメモリIDで特定されるメモリ位
置にアクセスして当該バイトコードに応じた所定動作を
実行する実行手段として機能させることを特徴とする。
【0015】これにより、メモリ領域中のある位置にア
クセスする命令を2バイトのバイトコードで表すことが
できるため、バイトコードプログラムサイズの短縮化を
図ることができ、上記第1の目的を達成する。ここで、
前記メモリ領域は、プログラム中のある局所的部分から
のみアクセス可能な局所的メモリ領域又は複数の局所的
部分からアクセス可能な大域的メモリ領域のいずれかで
あり、前記メモリIDは、局所的メモリ領域中の位置を
特定する局所的メモリID又は大域的メモリ領域中の位
置を特定する大域的メモリIDのいずれかであり、前記
メモリID使用命令は、局所的メモリIDを使用する局
所的メモリID使用命令又は大域的メモリIDを使用す
る大域的メモリID使用命令のいずれかであり、前記メ
モリID使用命令判別手段における前記判別は、前記読
込手段により読み込んだ1バイトのバイトコードが局所
的メモリ領域中のある位置にアクセスする命令であると
きは、局所的メモリ領域中の位置を局所的メモリIDで
特定する局所的メモリID使用命令か否かを判別し、前
記バイトコードが大域的メモリ領域中のある位置にアク
セスする命令であるときは、大域的メモリ領域中の位置
を大域的メモリIDで特定する大域的メモリID使用命
令か否かを判別することとすることもできる。
【0016】これにより、局所的データ及び大域的なデ
ータのそれぞれにアクセスするプログラムを仮想マシン
に実行させることができるようになり、上記第2の目的
を達成する。また、本発明に係るプログラム変換装置
は、マイクロプロセッサ配下で、プログラムを構成する
バイトコードを仮想的に逐次解読して実行する仮想マシ
ンであって、前記マイクロプロセッサを、バイトコード
を読み込む読込手段と、前記読込手段により読み込んだ
1バイトのバイトコードが、メモリ領域中のある位置に
アクセスする命令であって前記位置をメモリIDで特定
するメモリID使用命令か否かを判別するメモリID使
用命令判別手段と、前記メモリID使用命令判別手段に
より前記メモリID使用命令であると判別されたバイト
コードに連続する1バイトのバイトコードを前記読込手
段により取得し、当該1バイトのバイトコード中の複数
のビットデータにより前記メモリIDを判別するメモリ
ID判別手段と、前記メモリID使用命令と判別された
バイトコードにつき、前記メモリID判別手段により判
別されたメモリIDで特定されるメモリ位置にアクセス
して当該バイトコードに応じた所定動作を実行する実行
手段と、命令の処理対象となる4本の汎用仮想レジスタ
を実現するための汎用仮想レジスタ手段と、前記読込手
段により読み込んだ1バイトのバイトコードが、メモリ
領域中のある位置にアクセスする命令であって前記位置
をアドレス値によって特定するアドレス使用命令か否か
を判別するアドレス使用命令判別手段と、前記アドレス
使用命令判別手段により前記アドレス使用命令と判別さ
れたバイトコードに連続する2バイト以上のバイトコー
ドを前記読込手段により取得し、当該2バイト以上のバ
イトコードにより前記アドレス値を判別するアドレス判
別手段として機能させ、前記メモリID使用命令は、1
本の汎用仮想レジスタをも処理対象とする命令であり、
前記メモリID判別手段は、判別対象の1バイトのバイ
トコード中の6ビットのビットデータにより前記メモリ
IDを判別し、さらに他の2ビットにより1本の汎用仮
想レジスタを識別するためのレジスタIDを判別し、前
記実行手段が実行する前記所定動作は、前記メモリID
判別手段により判別されたレジスタIDで識別される汎
用仮想レジスタを処理対象とする動作であり、前記実行
手段はさらに、前記アドレス使用命令と判別されたバイ
トコードにつき、前記アドレス判別手段により判別され
たアドレス値で特定されるメモリ位置にアクセスして当
該バイトコードに応じた動作を実行することを特徴とす
る仮想マシンを対象とするアセンブラソースプログラム
中の一部の命令を他の命令に変換するプログラム変換装
置であって、アセンブラソースプログラムを記憶する記
憶手段と、前記アセンブラソースプログラムにおいて、
メモリ領域中の位置を特定するものであって2バイト以
上で表されるアドレス値のうち、使用されている回数が
最大のものから64番目に大きいものまでを検出する多
使用アドレス検出手段と、前記多使用アドレス検出手段
により検出されたそれぞれのアドレス値と、メモリ領域
中の位置を特定するものであって1バイト以下で表され
るメモリIDとを対応づける対応づけ手段と、前記多使
用アドレス検出手段により検出されたアドレス値を使用
している命令を検出する命令検出手段と、前記命令検出
手段に検出された命令を、前記対応づけ手段により当該
命令が使用しているアドレス値と対応づけられているメ
モリIDを使用する所定の命令に変換する命令変換手段
とを備えることを特徴とする。
【0017】即ち、仮想マシンを対象とするアセンブラ
ソースプログラム中に、メモリ領域中の位置を特定する
ためにアドレス値を使用する命令が含まれている場合に
は、この命令のうちある程度のものはメモリIDを使用
する命令に書き換えられる。アセンブラソースプログラ
ムがバイトコードプログラムに翻訳された場合に、オフ
セットアドレス値を使用する命令より、メモリIDを使
用する命令の方が短いバイトコードで表されるため、本
発明は、上記第3の目的を達成するものであるといえ
る。
【0018】
【発明の実施の形態】以下、本発明の実施の形態につい
て、図面を用いて詳細に説明する。 <実施の形態1>以下、本発明の実施の形態1における
仮想マシンについて説明する。 <構成>図1は、本発明の実施の形態1における仮想マ
シンの位置づけに関する概念図である。
【0019】仮想マシン100は、マイクロプロセッサ
140上でOS141の管理下において、仮想マシンの
命令体系に適合した機械語列で構成されるバイトコード
プログラム130の動作を実現するものであり、一種の
プログラムである。但し、仮想マシン100は、プログ
ラムであるが、その名が示すように、マイクロプロセッ
サやOSをシミュレートしたものとしての特徴を有して
いる。即ち、独自の命令セットをもち、当該命令セット
の命令列からなるバイトコードを逐次解釈実行する。
【0020】以下、仮想マシンの機能構造について説明
する。図2は、本発明の実施の形態1における仮想マシ
ンの機能ブロック図である。プログラムメモリ131
は、バイトコードプログラムを格納するメモリであり、
データメモリ132は、バイトコードプログラムの処理
対象となるデータを格納するメモリである。
【0021】仮想マシン100は、プログラムメモリ1
31からバイトコードを読み込み解釈してマイクロプロ
セッサ140上で実行するためのプログラムであり、命
令解読部110と命令実行部120とからなる。命令解
読部110は、命令判別部111、命令読込部112、
命令マップ記憶部113、命令種別格納部114、処理
対象格納部115、レジスタ判別部117、レジスタ・
メモリID読込部118、オフセット読込部119を有
する。
【0022】命令マップ記憶部113は、後述する命令
マップを記憶している。命令読込部112は、プログラ
ムメモリ131から1バイトのバイトコードを読み込み
命令判別部111に渡す。命令判別部111は、命令読
込部112から渡されたバイトコードがいかなる命令な
のかを命令マップ記憶部113に記憶している命令マッ
プを参照して判別し、命令に応じて命令種別を命令種別
格納部114に格納し、また、命令に応じてレジスタ判
別部117、レジスタ・メモリID読込部118、オフ
セット読込部119に実行指示を出す。
【0023】レジスタ判別部117は、命令判別部11
1からの実行指示を受けると、命令の中のレジスタ指定
ビットを参照して、どの汎用仮想レジスタを用いる命令
かを判別し、汎用仮想レジスタを識別するためのレジス
タIDを処理対象格納部115に格納する。また、レジ
スタ・メモリID読込部118は命令判別部111から
の実行指示を受けると、プログラムメモリ131から1
バイトのバイトコードを読み込み、レジスタ判別部11
7にレジスタIDを判別させて処理対象格納部115に
格納させ、メモリIDを処理対象格納部115に格納す
る。
【0024】ここでメモリIDとは、メモリ中の一部の
領域を特定するための識別子をいう。また、オフセット
読込部119は、命令判別部111からの実行指示を受
けると、プログラムメモリ131から2バイトのオフセ
ットアドレス値を読み込み、処理対象格納部115に格
納する。
【0025】なお、命令解読部110は、上述の他の読
み出し部や命令解読制御部をも有するが、本発明の主た
る部分ではないため説明を省略する。命令実行部120
は、命令制御部121、仮想演算器122、メモリ制御
部123、汎用仮想レジスタ124を有する。命令制御
部121は、命令種別格納部114と処理対象格納部1
15との内容に従って、仮想演算器122を用いて、汎
用仮想レジスタ124の値を変化させ、また、メモリ制
御部123を用いてデータメモリ132にアクセスす
る。
【0026】また、汎用仮想レジスタ124は、R0か
らR3までの4本あり、処理の対象となる値を格納する
のに用いられる。例えば、命令種別格納部114に加算
命令である旨の「add」が格納され、処理対象格納部
115にレジスタIDが0と1のレジスタである旨の
「R0,R1」が格納された場合には、命令制御部12
1がそれを、R1←R0+R1として実行する。ここで
「←」は値の代入を意味する。
【0027】即ち、命令制御部121は、プログラムメ
モリ131に格納されたバイトコードを解読する命令解
読部110の解読結果に基づき、プログラムをマイクロ
プロセッサ140上で実行する。なお、命令実行部12
0は、上述の他の命令実行制御部をも有するが、本発明
の主たる部分ではないため説明を省略する。
【0028】以下、命令マップ記憶部113が記憶する
命令マップについて説明する。図3及び図4は、命令マ
ップの内容のイメージを示す概念図である。この命令マ
ップは、仮想マシン100の命令セットを示すものであ
り、横軸に16進数の1の位を、縦軸に16進数の10
の位を取った表形式で示してある。図3は1の位が0〜
7の命令を、図4は1の位が8〜fの命令を示してい
る。
【0029】図中では各命令につき、ニーモニックとオ
ペランドを空白で区切って示してあり、オペランドは1
つ、又は「,」で区切られた2つである。以下、命令マ
ップ中に示した主要な命令のニーモニックやオペランド
について説明する。Rn、Rmは、4本の汎用仮想レジ
スタR0、R1、R2、R3のうちのいずれかである。
【0030】PDは、結果レジスタIDであり、このP
Dをオペランドに有する命令より前に実行される命令の
処理結果が格納される汎用仮想レジスタを指す。RR
は、読込アドレスであり、読み込み用のアドレスを格納
するための専用レジスタに格納されているアドレスを意
味する。WRは、書込アドレスであり、書き込み用のア
ドレスを格納するための専用レジスタに格納されている
アドレスを意味する。
【0031】SPは、メモリ領域中の一部であって関数
内の局所的データが格納される局所的メモリ領域にアク
セスするために利用できるアドレスである。なお、各局
所的データは、SPからの相対アドレスによって特定可
能となる。const(8)等のように文字列(8)の
形式のものは8ビットの定数値であり、offset
(16)等のように文字列(16)の形式のものは16
ビットの定数値であり、addr(32)等のように文
字列(32)の形式のものは32ビットの定数値であ
り、LValID(6)等のように文字列(6)の形式
のものは6ビットのメモリIDである。
【0032】incは1増分、inc4は4増分、de
cは1減算、dec4は4減算、bandはビット積、
borはビット和、mulは乗算、shl2は4倍演
算、movは転送、mov4は4バイトの転送、add
は加算、subは減算、cmpは比較、jsrやjmp
等はジャンプ命令である。addrはメモリ領域中の特
定位置を指すアドレス値を意味し、offsetは、関
数内の局所的データが格納された一部の局所的メモリ領
域中の特定位置を指すためのオフセットアドレスを意味
する。
【0033】LValIDは関数内の局所的データが格
納されている局所的メモリ領域中の位置を特定するため
のメモリIDを意味し、GValIDは大域的なデータ
が格納されいている大域的メモリ領域中の位置を特定す
るためのメモリIDを意味する。なお、メモリ領域中の
局所的メモリ領域と大域的メモリ領域とは独立してお
り、局所的データについてのメモリIDと大域的なデー
タについてのメモリIDは、互いに関連はない。
【0034】ここで、局所的データや大域的データは、
予め値が定まっているとは限らないとし、以下、これら
のデータが格納されているメモリ領域中のある位置への
演算又はアクセスのことを、これらのデータへの演算又
はアクセスともいう。また、以下、局所的メモリ領域中
のある位置へアクセスする命令を局所的データを使用す
る命令ともいい、大域的メモリ領域中のある位置へアク
セスする命令を大域的データを使用する命令ともいう。
【0035】addlvやmov4lv等のニーモニッ
ク中にlvを含む命令は、関数内の局所的なデータに対
する演算であることを意味し、addgvやmov4g
v等のgvを含む命令は、関数内の局所的なデータでは
なく大域的なデータに対する演算であることを意味す
る。なお、関数内の局所的データとは、複数関数から構
成されるプログラムにおいて、一の関数の実行にのみ必
要なデータであり、他の関数からアクセス不可能なもの
をいい、大域的なデータとは、複数の関数の実行に必要
なデータであり、全ての関数からアクセス可能なものを
いう。従って、関数内の局所的データは、他の関数内の
局所的データや大域的データとはメモリ内において論理
的に独立した領域に配置される。
【0036】以下、命令を具体的な例に基づき説明す
る。例えば、バイトコード40は、関数内の局所的デー
タが格納された一部のメモリ領域中の特定位置の4バイ
トのデータを仮想レジスタR0に格納する命令mov4
(offset(16),SP),R0を意味するの
で、3バイトのバイトコード40 01 00は、mo
v4 (100,SP),R0に対応する。なお、命令
の説明に際して定数値は16進数を用いている。
【0037】また、2バイトのバイトコードd3 0a
は、関数内の局所的データの格納されているメモリ領域
のうち0aというメモリIDで特定される位置のもの
を、仮想レジスタR0に読み出す命令mov4lv 0
a,R0に対応する。また、3バイトのバイトコード4
8 02 00は、アドレス200に位置する大域的デ
ータを仮想レジスタR0に読み出す命令mov4 (2
00),R0に対応し、2バイトのバイトコードd7
01は、大域的データの格納されているメモリ領域のう
ち1というメモリIDで特定される位置のものを、仮想
レジスタR0に読み出す命令mov4gv 1,R0に
対応する。
【0038】<動作>上記構成を備える実施の形態1に
おける仮想マシンの動作について、具体的なプログラム
を実行した場合の例に基づいて説明する。図5は、仮想
マシン100に入力されるバイトコードプログラムを示
す図である。
【0039】図5に示すプログラムは、プログラムメモ
リ131に格納されている。このプログラムは、1つの
関数内における部分的なプログラムであり、同図のプロ
グラムを含む関数や他の関数から構成されるプログラム
全体において大域的な値を格納しているメモリ領域のう
ち0aというメモリIDで特定される位置のものを読み
出し、また、関数内に局所的な値のうちオフセットアド
レスが400のものを読み出し、相互に入れ替えて書き
戻すプログラムである。
【0040】なお、プログラムメモリ131に格納され
ているバイトコードについて、読み易さを考慮し、ここ
では命令形式で表記してある。図6は、命令解読部11
0の動作を示すフローチャートである。同図に示すよう
に、命令解読部110の動作は、バイトコードの読み込
みステップS210と、命令マップを参照することによ
る命令種別判別ステップS220と、命令種別を命令種
別格納部114に格納し命令に応じて必要であれば処理
対象を処理対象格納部115に格納するステップS23
0と、各命令対応の制御をするステップS240とから
なる。
【0041】図7は、各命令対応の制御をする動作につ
いて詳細化したフローチャートである。同図は、図6の
フローチャート中のステップS240について詳細化し
たものであり、各命令対応の制御処理(S240)は、
命令にレジスタ指定のビットが含まれている場合の処理
(ステップS241、S242、S243)、レジスタ
・メモリIDを用いる命令である場合の処理(ステップ
S244、S245、S246、S247)、オフセッ
トを用いる命令である場合の処理(ステップS248、
S249)等からなる。なお、図7は、図5に示すプロ
グラムに対しての仮想マシン100の動作説明に必要な
処理部分のみを示している。
【0042】まず、命令解読部110は、命令読込部1
12によりプログラムメモリ131に格納されているバ
イトコードを1バイト読み込む(ステップS210)。
命令判別部111は、命令読込部112からバイトコー
ドを取得して、命令マップ記憶部113に記憶している
命令マップを参照して、当該バイトコードがいかなる命
令であるか判別し(ステップS220)、それが大域的
メモリ領域中のメモリIDで特定される位置からの汎用
仮想レジスタへの読み出し命令mov4gv GVal
ID(6),Rnであるので、命令種別格納部114
に、読み出しアドレスから汎用仮想レジスタへの読み出
し命令を格納し(ステップS230)、各命令対応の制
御を行う(ステップS240)。
【0043】各命令対応の制御として、命令判別部11
1は、mov4gv GValID(6),Rnが、命
令種別を示す1バイト中にレジスタ指定ビットがある命
令ではないが(ステップS241)、レジスタ・メモリ
IDを用いる命令であることを判別し(ステップS24
4)、レジスタ・メモリID読込部118に実行指示を
出す。
【0044】命令判別部111からの実行指示を受けた
レジスタ・メモリID読込部118は、プログラムメモ
リ131から1バイトのバイトコード「0a」を読み込
む(ステップS245)。バイトコードを読み込んだレ
ジスタ・メモリID読込部118は、レジスタ判別部1
17にレジスタIDを判別させる(ステップS24
6)。
【0045】レジスタ判別部は、当該1バイトのバイト
コード中の上位2ビットを参照し、当該ビットが仮想レ
ジスタR0を示していることを判別して処理対象格納部
115に仮想レジスタR0のレジスタIDを格納し、レ
ジスタ・メモリID読込部118は、読み込んだ1バイ
トのバイトコード中の下位6ビットを参照し、メモリI
Dを処理対象格納部115に格納する(ステップS24
7)。
【0046】命令判別部111は、mov4gv GV
alID(6),Rnがオフセットを用いる命令でない
ことを判別し(ステップS248)、オフセットの読込
処理(ステップS249)はスキップする。こうして命
令解読部110にて1命令の解読がなされると、その結
果を受けて命令実行部120が命令を実行する。
【0047】即ち、命令制御部121は、命令種別格納
部114及び処理対象格納部115の内容に従って、命
令種別が「大域的メモリ領域中のメモリIDで特定され
る位置からの汎用仮想レジスタへの読み出し命令」であ
り、処理対象が「仮想レジスタR0、メモリID0a」
であることを判断して、メモリ制御部123を介して、
データメモリ132内の大域的メモリ領域の0aという
メモリIDで特定される位置からの4バイトのデータ
を、汎用仮想レジスタ124のうち仮想レジスタR0に
格納する。
【0048】具体的には、命令制御部121は、R0←
GlobalMemory[0a*4]を、マイクロプ
ロセッサ140上で実行する。ここで、GlobalM
emoryは、4バイトの大域的データの配列の先頭の
アドレスを意味する。このようにして仮想マシン100
は、mov4gv 0a,R0である1バイトのバイト
コードを実行する。
【0049】次に、命令解読部110は、命令読込部1
12により次の1バイトを読み込む(ステップS21
0)。命令判別部111は、命令読込部112からバイ
トコードを取得して、命令マップ記憶部113に記憶し
ている命令マップを参照して、当該バイトコードがいか
なる命令であるか判別し(ステップS220)、それが
関数内に局所的な値のうちオフセットアドレスが示すも
のを4バイト読み出して汎用仮想レジスタへ格納する命
令mov4 (offset(16),SP),Rnで
あるので、命令種別格納部114に、その旨の命令を格
納し(ステップS230)、その命令に対応する制御を
行う(ステップS240)。
【0050】命令対応の制御として、命令判別部111
は、mov4 (offset(16),SP),Rn
はレジスタ指定ビットのある命令であるため、レジスタ
判別部117に実行指示を出し、実行指示を受けたレジ
スタ判別部117は、命令中のレジスタを指定するビッ
トを参照し当該ビットが仮想レジスタR1を示している
ことを判別して(ステップS242)、処理対象格納部
115に仮想レジスタR1のレジスタIDを格納する
(ステップS243)。
【0051】また、mov4 (offset(1
6),SP),Rnは、レジスタ・メモリIDを用いる
命令ではないが(ステップS244)、オフセットを用
いる命令であるため(ステップS248)、命令判別部
111は、オフセット読込部119に実行指示を出し、
指示を受けたオフセット読込部119は、プログラムメ
モリ131から2バイトを読み込み、読み込んだ400
というオフセットアドレス値を処理対象格納部115に
格納する(ステップS249)。
【0052】こうして命令解読部110にて1命令の解
読がなされた後、命令実行部120が命令を実行する。
命令制御部121は、命令種別格納部114及び処理対
象格納部115の内容に従って、命令種別が「関数内に
局所的な値のうちオフセットアドレスが示すものを4バ
イト読み出して汎用仮想レジスタへ格納する命令」であ
り、処理対象が「仮想レジスタR1、オフセットアドレ
ス400」であることを判断して、データメモリ132
中の関数内に局所的な値のうちオフセットアドレスが4
00の位置の4バイトを汎用仮想レジスタ124のうち
仮想レジスタR1に格納する。即ち、命令制御部121
は、R1←Stack[0400]を実行する。
【0053】ここでStackは関数内に局所的な領域
の先頭のアドレスを意味する。このようにして仮想マシ
ン100が、mov4 (400,SP),R1を実行
した後に、命令解読部110は、命令読込部112によ
り次の1バイトを読み込む(ステップS210)。命令
判別部111は、命令読込部112からバイトコードを
取得して、命令マップ記憶部113に記憶している命令
マップを参照して、当該バイトコードがいかなる命令で
あるか判別し(ステップS220)、それが汎用仮想レ
ジスタから4バイトのデータを関数内に局所的な値のう
ちオフセットアドレスが示すものに代入する命令mov
4 Rn,(offset(16),SP)であるの
で、命令種別格納部114に、その旨の命令を格納し
(ステップS230)、当該命令に対応する制御を行う
(ステップS240)。
【0054】mov4 Rn,(offset(1
6),SP)に対する制御として、命令判別部111
は、当該命令が汎用仮想レジスタを使用する命令である
ことを判断し(ステップS241)、レジスタ判別部1
17に実行指示を出す。実行指示を受けたレジスタ判別
部117は、命令中のレジスタを指定するビットを参照
し当該ビットが仮想レジスタR0を示していることを判
別して(ステップS242)、処理対象格納部115に
仮想レジスタR0のレジスタIDを格納する(ステップ
S243)。
【0055】また、命令判別部111は、mov4 R
n,(offset(16),SP)はレジスタ・メモ
リIDを用いる命令ではないが、オフセットを用いる命
令であることを判別し(ステップS244、S24
8)、オフセット読込部119に実行指示を出す。実行
指示を受けたオフセット読込部119は、プログラムメ
モリ131から400という値のオフセットアドレス値
を読み込み、それを処理対象格納部115に格納する
(ステップS249)。
【0056】こうして命令解読部110にて1命令の解
読がなされた後、命令実行部120が命令を実行する。
命令制御部121は、命令種別格納部114及び処理対
象格納部115の内容に従って、命令種別が「汎用仮想
レジスタから4バイトのデータを関数内に局所的な値の
うちオフセットアドレスが示すものに代入する命令」で
あり、処理対象が「仮想レジスタR0、オフセットアド
レス400」であることを判断して、汎用仮想レジスタ
124のうち仮想レジスタR0の内容を、メモリ制御部
123を介してデータメモリ中の局所的メモリ領域のオ
フセットアドレスが400の位置に格納する。即ち、命
令制御部121は、Stack[400]←R0を実行
する。
【0057】このようにして仮想マシン100が、mo
v4 R0,(400,SP)を実行した後に、命令解
読部110は、命令読込部112により次の1バイトを
読み込む(ステップS210)。命令判別部111は、
命令読込部112からバイトコードを取得して、命令マ
ップ記憶部113に記憶している命令マップを参照し
て、当該バイトコードがいかなる命令であるか判別し
(ステップS220)、それが汎用仮想レジスタから大
域的メモリ領域中のメモリIDで特定される位置への書
込み命令mov4gvRn,GValID(6)である
ので、命令種別格納部114に、その旨の命令を格納し
(ステップS230)、当該命令に対応する制御を行う
(ステップS240)。
【0058】各命令対応の制御として、命令判別部11
1は、mov4gv Rn,GValID(6)が、命
令種別を示す1バイト中にレジスタ指定ビットがある命
令ではないが(ステップS241)、レジスタ・メモリ
IDを用いる命令であることを判別し(ステップS24
4)、レジスタ・メモリID読込部118に実行指示を
出す。
【0059】命令判別部111からの実行指示を受けた
レジスタ・メモリID読込部118は、プログラムメモ
リ131から1バイトのバイトコード「4a」を読み込
む(ステップS245)。バイトコードを読み込んだレ
ジスタ・メモリID読込部118は、レジスタ判別部1
17にレジスタIDを判別させる(ステップS24
6)。
【0060】レジスタ判別部は、当該1バイトのバイト
コード「4a」中の上位2ビットを参照し、当該ビット
が仮想レジスタR1を示していることを判別して処理対
象格納部115に仮想レジスタR1のレジスタIDを格
納し、レジスタ・メモリID読込部118は、読み込ん
だ1バイトのバイトコード「4a」中の下位6ビットを
参照し、メモリIDとして「0a」を処理対象格納部1
15に格納する(ステップS247)。
【0061】こうして命令解読部110にて1命令の解
読がなされた後、命令実行部120が命令を実行する。
命令制御部121は、命令種別格納部114及び処理対
象格納部115の内容に従って、命令種別が「汎用仮想
レジスタから大域的メモリ領域中のメモリIDで特定さ
れる位置への書込み命令」であり、処理対象が「仮想レ
ジスタR1、メモリID0a」であることを判断して、
汎用仮想レジスタ124のうち仮想レジスタR1の内容
を、メモリ制御部123を介してデータメモリ132中
の大域的メモリ領域中で0aというメモリIDで特定さ
れる位置に書き込む。即ち、命令制御部121は、Gl
obalMemory[0a*4]←R1を実行する。
【0062】このようにして仮想マシン100は、mo
v4gv R1,0aである1バイトのバイトコードを
実行し、図5に示すプログラムの実行は終了する。この
ように、実行されるべきバイトコードプログラムが、図
3及び図4に示す命令体系に則して構成されているなら
ば、マイクロプロセッサやOSといった実行環境に依存
することなく仮想マシン100によって実行される。 <実施の形態2>以下、本発明の実施の形態2における
プログラム変換装置について図を用いて説明する。
【0063】<構成>図8は、本発明の実施の形態2に
おけるプログラム変換装置の機能ブロック図である。プ
ログラム変換装置は、コンパイラ470から出力された
アセンブラプログラムを、変換し、アセンブラ480に
出力する装置、いわゆるアセンブラオプティマイザであ
り、アセンブラ最適化部410と、変換前記憶部420
と、変換後記憶部430とからなる。
【0064】ここで、コンパイラ470は、高級言語で
記述されたプログラムが入力されると、これを本発明に
係る仮想マシン(実施の形態1参照)に適合した命令列
からなるアセンブラプログラムに翻訳して出力する装置
であり、アセンブラ480は、アセンブラプログラムが
入力されると、これを本発明に係る仮想マシンに適合し
たバイトコードに変換する装置である。
【0065】ここで、変換前記憶部420に格納された
アセンブラプログラムについて説明する。実施の形態1
で説明した本発明に係る仮想マシンは、例えば、mov
4lvLValID(6),Rnやmov4gv GV
alID(6),Rn等の6ビットのメモリIDを使用
した命令をサポートしているが、メモリIDで特定でき
るメモリ位置の数は6ビットで表せる64個に限定され
る。一方、高級言語で記述されたプログラムにおいて使
用する変数の数等は64個に限定されるわけではない。
そこで、ここではコンパイラ470が、メモリIDを利
用せず、オフセットアドレス指定又はアドレス指定でメ
モリ領域中の位置を特定する命令を出力することとして
いる。
【0066】従って、変換前記憶部420に格納された
アセンブラプログラムは、メモリID指定はしていな
い。このような場合において、プログラム変換装置は、
最終的に得られるバイトコードプログラムが小さいもの
となるように、オフセットアドレス指定による関数内で
利用するメモリ位置へのアクセスや、アドレス指定によ
る大域的メモリ領域中の特定位置へのアクセス等を行う
命令が記述されているアセンブラプログラムの一部を、
メモリID指定によるアクセスを行う命令に変換するも
のである。また、プログラム変換装置は、前記命令の変
換に付随して、アセンブラプログラム中の当該命令によ
るアクセス対象となるデータ定義の記述の位置変更をも
行う。
【0067】変換前記憶部420及び変換後記憶部43
0は、一次的な記憶領域であり、それぞれ本装置の変換
対象となるアセンブラプログラム、及び本プログラム変
換装置によって変換された結果のアセンブラプログラム
を格納するためのものである。アセンブラ最適化部41
0は、初期化部440と、局所的メモリ特定部451
と、大域的メモリ特定部452と、局所的メモリ置換部
461と、大域的メモリ置換部462とを有する。
【0068】初期化部440は、変換前記憶部420に
格納されたアセンブラプログラム全体をそのまま変換後
記憶部430にコピーすることによって変換後記憶部4
30を初期化するものである。局所的メモリ特定部45
1は、各関数について、使用される回数の高い局所的メ
モリ領域中の位置のうち、その関数中での命令の処理対
象としての使用回数が最大のものから64番目に大きい
ものまでを求め、それぞれをメモリIDと対応づけて、
オフセットアドレスとメモリIDとの64個の組を局所
的メモリ置換部461に通知するものである。
【0069】大域的メモリ特定部452は、プログラム
中で、使用される回数の高い大域的メモリ領域中の位置
のうち、その使用回数が最大のものから64番目に大き
いものまでを求め、それぞれを大域的なデータについて
のメモリIDと対応づけて、オフセットアドレスとメモ
リIDとの64個の組を大域的メモリ置換部462に通
知するものである。
【0070】局所的メモリ置換部461は、局所的メモ
リ特定部451からの通知に基づいて、変換後記憶部4
30に格納されているプログラムのうち、通知を受けた
オフセットアドレスを用いて局所的なデータにアクセス
する命令を検出し、この命令を、この命令が用いるオフ
セットアドレスと対応づけられたメモリIDを用いた所
定の命令に書き換え、また、メモリIDで指定する局所
的なデータを局所的なデータの定義領域の先頭から64
個に配置されるようにデータ定義記述を書き換え、さら
に、このデータ定義記述の書き換えによってデータ位置
が変動したデータについてオフセットアドレスを用いて
アクセスする命令を、位置変更後の新たなオフセットア
ドレス値を用いる命令に書き換えるものである。
【0071】大域的メモリ置換部462は、大域的メモ
リ特定部452からの通知に基づいて、変換後記憶部4
30に格納されているプログラムのうち、通知を受けた
アドレスを用いて大域的なデータにアクセスする命令を
検出し、この命令を、この命令が用いるアドレスと対応
づけられたメモリIDを用いた所定の命令に書き換え、
また、メモリIDで指定する大域的なデータを大域的な
データの定義領域の先頭から64個に配置されるように
データ定義記述を書き換え、さらに、このデータ定義記
述の書き換えによってデータ位置が変動したデータにつ
いてアドレスを用いてアクセスする命令を、位置変更後
の新たなアドレス値を用いる命令に書き換えるものであ
る。
【0072】<動作>上記構成を備える実施の形態2に
おけるプログラム変換装置の動作について、以下に説明
する。なお、命令マップは実施の形態1と同様であると
する(図3、図4参照)。図9は、プログラム変換装置
の動作を示すフローチャートである。
【0073】同図に示すように、プログラム変換装置
は、初期化部440により変換前のプログラムをコピー
するステップS501と、局所的なデータについてアク
セスする命令とデータ位置の変換処理を行うステップS
502〜S506と、大域的なデータについてアクセス
する命令とデータ位置の変換処理を行うステップS50
7〜S510とからなる動作を行う。
【0074】局所的なデータについての処理は、局所的
メモリ特定部451により局所的メモリ領域中の位置を
特定するオフセットアドレス値のうちある関数内で命令
の処理対象として使用されている回数が最大のものから
64番目に大きいものまでを求めて、それぞれをメモリ
IDと対応づけるステップS502と、局所的メモリ特
定部451により求めたオフセットアドレス値とメモリ
IDとの64個の組の通知を受けて局所的メモリ置換部
461がオフセットアドレスを用いた命令記述をメモリ
IDを使用する命令に書き換えるステップS503と、
メモリIDで指定されることになった局所的データのデ
ータ定義記述を、局所的データのうちメモリID×4で
示される相対位置に相当するデータの定義記述と交換す
るステップS504と、この交換によって局所的データ
の先頭から64個より後に移されたデータ定義記述に相
当するオフセットアドレスを用いた命令のオフセットア
ドレス値の記述を、移された後の位置を示すオフセット
アドレスに変更するステップS505と、プログラム中
に未処理の関数がまだ残っているかどうかの判断ステッ
プS506とからなる。
【0075】また、大域的なデータについての処理は、
大域的メモリ特定部452により大域的メモリ領域中の
位置を特定するアドレス値のうちプログラム全体で命令
の処理対象として使用されている回数が最大のものから
64番目に大きいものまでを求めて、それぞれを大域的
データ用のメモリIDと対応づけるステップS507
と、大域的メモリ特定部452により求めたアドレス値
とメモリIDとの64個の組の通知を受けて大域的メモ
リ置換部462がアドレスを用いた命令記述をメモリI
Dを使用する命令に書き換えるステップS508と、メ
モリIDで指定されることになった大域的データのデー
タ定義記述を、大域的データのうちメモリID×4で示
される相対位置に相当するデータ定義記述と交換するス
テップS509と、この交換によって大域的データの先
頭から64個より後に移されたデータ定義記述に相当す
るアドレスを用いた命令のアドレス値の記述を、移され
た後の位置を示すアドレスに変更するステップS510
とからなる。
【0076】まず、図8の例に基づいてプログラム変換
装置の動作を簡単に説明する。図8に示すように、変換
前記憶部420に、mov4 (400,SP),R0
という命令記述とmov4 (100),R0という命
令記述とが含まれているアセンブラプログラムが格納さ
れているとする。初期化部440は、変換前記憶部42
0から変換後記憶部430に前記アセンブラプログラム
をコピーする(ステップS501)。これにより、mo
v4 (400,SP),R0及びmov4 (10
0),R0なる命令記述は変換後記憶部430内に格納
される。
【0077】前記のコピー後に、局所的メモリ特定部4
51及び局所的メモリ置換部461は、mov4 (4
00、SP),R0を、オフセットアドレス値400の
代わりに局所的メモリ領域中の位置を特定するメモリI
Dとして0が用いられたmov4lv 0,R0に書き
換える(ステップS502、S503)。また、大域的
メモリ特定部452及び大域的メモリ置換部462は、
mov4(100),R0を、アドレス値100の代わ
りに大域的メモリ領域中の位置を特定するメモリIDと
して0が用いられたmov4gv 0,R0に書き換え
る(ステップS507、S508)。
【0078】このようにして、アセンブラプログラムは
メモリID指定の命令記述を用いたものに変換されるこ
とになる。以下、図10に示す部分的なプログラムを含
むアセンブラプログラムが変換前記憶部420に格納さ
れているとして、実施の形態2におけるプログラム変換
装置の動作について詳細に説明する。
【0079】図10は、仮想マシンに対応する部分的な
アセンブラプログラムの例を示す図である。同図に示す
プログラムは、大域的な領域にあってアドレス100に
位置するデータと、関数内の局所的な領域にあってオフ
セットアドレス10に位置するデータとの加算結果を大
域的な領域のアドレス104の位置に格納するプログラ
ムであり、1つの関数に含まれる部分的なプログラムで
ある。
【0080】まず、初期化部440は、変換前記憶部4
20から変換後記憶部430にアセンブラプログラムを
コピーする(ステップS501)。これにより、mov
4(100),R0等の命令記述は変換後記憶部430
内に格納される。次に、局所的メモリ特定部451は、
各関数について、命令の処理対象として使用されている
オフセットアドレス値のうち、その使用されている回数
が最大のものから64番目までのものを求めて、使用回
数が多い順にメモリIDを0から昇順に対応させる(ス
テップS502)。従って、1つのオフセットアドレス
値に対し1つのメモリIDが対応づけられる。
【0081】なお、図10に示すアセンブラプログラム
については、オフセットアドレス値10が使用回数最大
であるとする。また、関数内で使用されているオフセッ
トアドレス値が64個もない場合には、全てがメモリI
D指定による命令記述への置換対象となる。オフセット
アドレス値10が置換対象となることを求めた局所的メ
モリ特定部451は、それが0というメモリIDと対応
することを局所的メモリ置換部461に通知し、これを
受けて局所的メモリ置換部461は、通知されたオフセ
ットアドレス値を使用している命令の記述箇所を検出し
て、当該オフセットアドレスに対応するメモリIDを用
いる命令記述に置き換える(ステップS503)。図1
0において;;in_funcのコメントで示した命令
の位置が検出されてメモリIDを用いた命令に置き換え
られることになる。
【0082】同図において、オフセットアドレス値10
を使用する命令記述は他にはないので、前記の1箇所の
命令記述が置き換えられる。この結果、図10中のmo
v4 (10,SP),R1なる命令は、mov4lv
0,R1に書き換えられることになる。ここで、mo
v4 (10,SP),R1はバイトコードに翻訳され
た場合には41 00 10といった3バイトのバイト
コードになるものであるが、mov4lv 0,R1は
バイトコードに翻訳された場合にはd3 40といった
2バイトのバイトコードになるので(図3参照)、結果
的にバイトコードサイズの短縮化が図れることになる。
【0083】局所的メモリ置換部461は、命令記述を
置き換えた後、通知されたオフセットアドレスで特定さ
れるデータ定義記述の位置を、当該オフセットアドレス
と対応づけられたメモリIDで示される位置のデータに
ついてのデータ定義記述と交換する(ステップS50
4)。ここで、オフセットと対応づけられたメモリID
で示される位置とは、メモリIDの4倍をオフセットア
ドレスとして扱った位置をいう。
【0084】即ち、使用される回数の高い64個の局所
的なデータについては、局所的なデータの先頭に位置す
るように、データ定義記述の位置を変更する。従って、
オフセットアドレスが10である位置のデータ定義記述
として、例えば、12という4バイトのデータを局所的
メモリ領域中に配置する命令DC412が記述されてお
り、オフセットアドレスがメモリIDの4倍である0の
位置のデータ定義記述として、例えば、13という4バ
イトのデータを局所的メモリ領域中に記憶する命令DC
4 13が記述されていたとすれば、これらの記述を交
換する。なお、データ定義記述の命令は、仮想マシンの
命令セットでサポートされている命令ではなく、アセン
ブラに対してデータ格納位置を指定するための擬似的な
命令である。
【0085】交換後は、局所的メモリ置換部461は、
交換によって先頭から64個より以後に移されたデータ
定義記述、即ちオフセットアドレスで64×4以後の位
置に移されたデータ定義記述が、最初にあった位置を示
すオフセットアドレスを用いた命令を検索して移された
後の位置を示すオフセットアドレスを用いた命令となる
ようにオフセットアドレス値を修正する(ステップS5
05)。
【0086】なお、局所的メモリ置換部461は、ステ
ップS504のデータ定義記述の交換の際には、交換す
るデータ定義記述の位置を一時的に記憶しておき、ステ
ップS505におけるデータ定義記述が最初にあった位
置を特定するのに用いる。このように1つの関数内につ
いてステップS502からS505までの処理を行った
後、他の関数についても同様の処理を行い(ステップS
506)、全ての関数について、局所的なデータへアク
セスする命令を置換し終えたら、大域的メモリ特定部4
52は、プログラム全体における大域的なデータへアク
セスするために命令の処理対象とされているアドレス値
のうち使用されている回数が最大のものから64番目ま
でのものを求めて、メモリIDと対応づける(ステップ
S507)。このメモリIDは、大域的なデータの特定
専用のものであり、局所的データについてステップS5
02で用いたメモリIDとは関係しない。
【0087】図10のアセンブラプログラムにおいては
アドレス値100と104とが置換対象として求められ
る。なお、複数の関数から使用される大域的なデータの
個数が64個もない場合には、これらのデータを指し示
すアドレス値は、全てメモリID指定による命令記述へ
の置換対象となる。置換対象となるアドレス値を求めた
大域的メモリ特定部452は、それと対応づけたメモリ
IDとを組にして大域的メモリ置換部462に通知し、
これを受けて大域的メモリ置換部462は、通知された
アドレス値を使用している命令の記述箇所を検出して、
当該命令を当該アドレスに対応するメモリIDを用いる
命令記述に置き換える(ステップS508)。図10に
おいて;;extのコメントで示した命令の位置が検出
されてメモリIDを用いた命令に書き換えられることに
なる。
【0088】このようにして、図10に示すプログラム
は、図11に示すプログラムに変換される。図11は、
プログラム変換装置の変換結果であるプログラムの例を
示す図である。同図に示すように、図10中のmov4
(100),R0の命令記述は、mov4gv 0,
R0というように0というメモリIDを用いた命令記述
に、mov4 R1,(104)の命令記述は、mov
4gv R1,1というように1というメモリIDを用
いた命令記述にそれぞれ変換されている。
【0089】ここで、mov4 (100),R0はバ
イトコードに翻訳された場合には48 01 00とい
った3バイトのバイトコードになるものであるが、プロ
グラム変換装置によって変換された後のmov4gv
0,R0はバイトコードに翻訳された場合にd7 00
といった2バイトのバイトコードになるものであるた
め、結果としてバイトコードプログラムのサイズが短縮
されることになる。
【0090】大域的メモリ置換部462は、命令記述を
置き換えた後、通知されたアドレスで特定されるデータ
定義記述の位置を、当該アドレスと対応づけられたメモ
リIDで示される位置のデータについてのデータ定義記
述と交換する(ステップS509)。ここで、メモリI
Dで示される位置とは、メモリIDの4倍をアドレスと
した位置をいう。
【0091】上述の局所的なデータについてのデータ定
義記述交換の処理と同様に、使用される回数の高い64
個の大域的なデータについては、大域的なデータの先頭
に位置するように、データ定義記述の位置を変更する必
要があり、このために、上述のデータ定義記述の交換を
行っている。これは、メモリIDの値の4倍がアドレス
と等価であるものとして動作するとした実施の形態1に
おける仮想マシンへ適合させる処理である。
【0092】交換後は、大域的メモリ置換部462は、
交換によって先頭から64個より以後に移されたデータ
定義記述、即ちアドレスで64×4以後の位置に移され
たデータ定義記述が、最初にあった位置を示すアドレス
を用いた命令を検索して移された後の位置を示すアドレ
スを用いた命令となるようにアドレス値を修正する(ス
テップS510)。
【0093】なお、大域的メモリ置換部462は、ステ
ップS509のデータ定義記述の交換の際には、交換す
るデータ定義記述の位置を一時的に記憶しておき、ステ
ップS510におけるデータ定義記述が最初にあった位
置を特定するのに用いる。このようにプログラム変換装
置は、局所的データ、大域的なデータのうちそれぞれ使
用されている回数が高いものについて、アクセスする命
令をメモリIDを用いた命令記述に変換し、データが先
頭に配置されるようにデータ定義記述を変更するもので
あり、この出力を受けてアセンブラによって生成される
バイトコードは短縮されることとなる。
【0094】以上、本発明に係る仮想マシン及びプログ
ラム変換装置について、実施形態に基づいて説明した
が、本発明はこれら実施形態に限られないことは勿論で
ある。即ち、 (1)両実施の形態では、仮想マシンの命令セットの一
部につき、図3及び図4に命令マップとして示したが、
この命令マップの命令配置や個々の命令の機能等につい
て限定されることはなく、局所的なデータにアクセスす
るためにメモリIDを用いる命令及び大域的なデータに
アクセスするためにメモリIDを用いる命令が含まれて
おり、その他使用頻度が高い命令を1バイトの命令語に
割り当ているならば、いかなる命令を盛り込んでいて
も、また、いかなる命令配置としてもよい。 (2)両実施の形態で用いた図3及び図4は、本発明に
係る仮想マシンの命令セットの一部の例を示すものであ
り、本発明に係る仮想マシンは、1バイト目をe0〜e
fとする多くの拡張命令をも扱うことができる。 (3)実施の形態1では、大域的なデータにアクセスす
るためにメモリIDを用いる命令と、局所的なデータに
アクセスするためにオフセットアドレス値を用いる命令
とについてのみ説明したが、同様に、局所的なデータに
アクセスするためにメモリIDを用いる命令と、大域的
なデータにアクセスするためにアドレス値を用いる命令
についても同様である。即ち、本発明に係る仮想マシン
は、図3及び図4に示すように、mov4 (addr
(16)),Rnやmov4lvLValID(6),
Rn等の命令も扱える。なお、大域的なデータにアクセ
スするためにアドレス値を用いる命令についてアドレス
値を読み込むためには、図2中には示していないが、オ
フセット読込部119と同様な動作を行うアドレス読込
部が用いられる。なお、メモリIDでアクセスされる局
所的データは、大域的なデータの場合と同様に、データ
メモリ132中の局所的なデータが格納されている領域
の先頭からメモリIDの値の4倍の値が示す相対位置に
格納されているものである。従って、メモリIDによっ
て上述のSPが示す局所的メモリ領域の先頭を示すアド
レスからメモリIDの値の4倍の値が示す相対位置に格
納されているデータを特定することになる。 (4)実施の形態1では、局所的データにアクセスする
ためのオフセットアドレス値は、16ビットとしていた
が、32ビット等とすることも可能であり、その場合
は、仮想マシンに、オフセット読込部119のような動
作を行う4バイト読込機構を備えればよい。なお、1バ
イト目がe8である拡張命令の命令マップを図12及び
図13に示す。32ビットのオフセットアドレス値等を
扱う命令等は、図12及び図13に示すように拡張命令
の形式でサポートすることも可能である。
【0095】なお、これにより、従来技術として示した
Java仮想マシンよりも非常に多くの局所的データを
扱うことが可能になり、この仮想マシンに対応するプロ
グラムの開発の自由度が増加する。 (5)実施の形態2では、変換前記憶部420と変換後
記憶部430の2つの記憶部を用いたが、これらは1つ
の記憶部としてもよい。 (6)実施の形態2では、メモリIDは使用される回数
が最も高いものから順に、0、1、2と定めることとし
たが、これに限定されることはなく、局所的データのう
ち使用される回数が高い64個のものに対し1対1とな
るようにメモリIDを定めるのであればよく、また、大
域的なデータについても同様にメモリIDを定めるので
あればよい。 (7)実施の形態2では、プログラム変換装置がアドレ
ス指定による命令をメモリID指定による命令に変換し
た後、メモリIDで指定されるメモリ位置が、メモリI
D×4をアドレス値とした場合と同様になるように、デ
ータ定義記述の位置の交換等の処理を行うこととしたが
(ステップS504、S505、S509、S51
0)、これに限定されることはなく、例えば、メモリ領
域内が使用される回数に応じてデータがならべられてい
るアセンブラソースプログラムをプログラム変換装置の
入力とするよう制限することや、初期処理として、使用
される回数に応じてデータをならべ替えた上でメモリ領
域中の個々のデータ位置を特定するアドレス値をも前記
ならべ替えに対応するように変更する処理を行う等によ
って、前記のデータ定義記述の位置の交換等の処理は省
略可能となる。 (8)実施の形態1における仮想マシンの処理手順(図
6、図7のフローチャートの手順等)又は実施の形態2
におけるプログラム変換装置の処理手順(図9のフロー
チャートの手順等)を機械語プログラムにより実現し、
これを記録媒体に記録して流通・販売の対象にしても良
い。このような記録媒体には、ICカード、光ディス
ク、フレキシブルディスク、ROM等があるが、これら
に記録された機械語プログラムは汎用のハードウェアに
インストールされることにより利用に供される。ここで
いう汎用ハードウェアは、一般のパーソナルコンピュー
タ、あるいはセットトップボックス、PDA、デジタル
TV等のプログラム実行能力を有する家電機器等であ
り、インストールした上記機械語プログラムを逐次実行
して、実施の形態1に示した仮想マシン又は実施の形態
2に示したプログラム変換装置の機能を実現する。
【0096】
【発明の効果】以上の説明から明らかなように、本発明
に係る仮想マシンは、マイクロプロセッサ配下で、プロ
グラムを構成するバイトコードを仮想的に逐次解読して
実行する仮想マシンであって、前記マイクロプロセッサ
を、バイトコードを読み込む読込手段と、前記読込手段
により読み込んだ1バイトのバイトコードが、メモリ領
域中のある位置にアクセスする命令であって前記位置を
メモリIDで特定するメモリID使用命令か否かを判別
するメモリID使用命令判別手段と、前記メモリID使
用命令判別手段により前記メモリID使用命令であると
判別されたバイトコードに連続する1バイトのバイトコ
ードを前記読込手段により取得し、当該1バイトのバイ
トコード中の複数のビットデータにより前記メモリID
を判別するメモリID判別手段と、前記メモリID使用
命令と判別されたバイトコードにつき、前記メモリID
判別手段により判別されたメモリIDで特定されるメモ
リ位置にアクセスして当該バイトコードに応じた所定動
作を実行する実行手段として機能させることを特徴とす
る。
【0097】これにより、メモリ領域中のある位置にア
クセスする命令を2バイトのバイトコードで表すことが
できるため、バイトコードプログラムサイズの短縮化を
図ることができ、上記第1の目的を達成する。また、前
記仮想マシンはさらに、前記マイクロプロセッサを、命
令の処理対象となる4本の汎用仮想レジスタを実現する
ための汎用仮想レジスタ手段と、前記読込手段により読
み込んだ1バイトのバイトコードが、メモリ領域中のあ
る位置にアクセスする命令であって前記位置をアドレス
値によって特定するアドレス使用命令か否かを判別する
アドレス使用命令判別手段と、前記アドレス使用命令判
別手段により前記アドレス使用命令と判別されたバイト
コードに連続する2バイト以上のバイトコードを前記読
込手段により取得し、当該2バイト以上のバイトコード
により前記アドレス値を判別するアドレス判別手段とし
て機能させ、前記メモリID使用命令は、1本の汎用仮
想レジスタをも処理対象とする命令であり、前記メモリ
ID判別手段は、判別対象の1バイトのバイトコード中
の6ビットのビットデータにより前記メモリIDを判別
し、さらに他の2ビットにより1本の汎用仮想レジスタ
を識別するためのレジスタIDを判別し、前記実行手段
が実行する前記所定動作は、前記メモリID判別手段に
より判別されたレジスタIDで識別される汎用仮想レジ
スタを処理対象とする動作であり、前記実行手段はさら
に、前記アドレス使用命令と判別されたバイトコードに
つき、前記アドレス判別手段により判別されたアドレス
値で特定されるメモリ位置にアクセスして当該バイトコ
ードに応じた動作を実行することとすることもできる。
【0098】これにより、メモリ領域中の64箇所の位
置のうちいずれかと、4本の汎用仮想レジスタのうちい
ずれかとの間でデータのやりとりをするための命令を2
バイトのバイトコードで表すことができ、メモリ領域中
の前記64箇所以外の位置についてアクセスする命令に
ついては、3バイトのバイトコードで表すことができ
る。
【0099】このことは、使用頻度の高い64個のデー
タにアクセスする命令を2バイトのバイトコードで表現
すれば、効果的にバイトコードプログラムのサイズを短
縮することができることを意味する。また、前記メモリ
領域は、プログラム中のある局所的部分からのみアクセ
ス可能な局所的メモリ領域又は複数の局所的部分からア
クセス可能な大域的メモリ領域のいずれかであり、前記
メモリIDは、局所的メモリ領域中の位置を特定する局
所的メモリID又は大域的メモリ領域中の位置を特定す
る大域的メモリIDのいずれかであり、前記メモリID
使用命令は、局所的メモリIDを使用する局所的メモリ
ID使用命令又は大域的メモリIDを使用する大域的メ
モリID使用命令のいずれかであり、前記メモリID使
用命令判別手段における前記判別は、前記読込手段によ
り読み込んだ1バイトのバイトコードが局所的メモリ領
域中のある位置にアクセスする命令であるときは、局所
的メモリ領域中の位置を局所的メモリIDで特定する局
所的メモリID使用命令か否かを判別し、前記バイトコ
ードが大域的メモリ領域中のある位置にアクセスする命
令であるときは、大域的メモリ領域中の位置を大域的メ
モリIDで特定する大域的メモリID使用命令か否かを
判別することとすることもできる。
【0100】これにより、局所的データ及び大域的なデ
ータのそれぞれにアクセスするプログラムを仮想マシン
に実行させることができるようになるため、複数関数か
ら同一のデータをアクセスするような例えば制御系等の
プログラムを、マイクロプロセッサ、OS等のアーキテ
クチャの相違する環境下で実行させることができるよう
になる。
【0101】また、前記仮想マシンはさらに、前記マイ
クロプロセッサを、命令の処理対象となる4本の汎用仮
想レジスタを実現するための汎用仮想レジスタ手段と、
前記読込手段により読み込んだ1バイトのバイトコード
が、局所的メモリ領域中のある位置にアクセスする命令
であって前記局所的メモリ領域中の位置をオフセットア
ドレス値によって特定するオフセットアドレス使用命令
か否かを判別するオフセットアドレス使用命令判別手段
と、前記読込手段により読み込んだ1バイトのバイトコ
ードが、大域的メモリ領域中のある位置にアクセスする
命令であって前記大域的メモリ領域中の位置をアドレス
値によって特定するアドレス使用命令か否かを判別する
アドレス使用命令判別手段と、前記オフセットアドレス
使用命令判別手段により前記オフセットアドレス使用命
令と判別されたバイトコードに連続する2バイト以上の
バイトコードを前記読込手段により取得し、当該2バイ
ト以上のバイトコードにより前記オフセットアドレス値
を判別するオフセットアドレス判別手段と、前記アドレ
ス使用命令判別手段により前記アドレス使用命令と判別
されたバイトコードに連続する2バイト以上のバイトコ
ードを前記読込手段により取得し、当該2バイト以上の
バイトコードにより前記アドレス値を判別するアドレス
判別手段として機能させ、前記メモリID使用命令は、
1本の汎用仮想レジスタをも処理対象とする命令であ
り、前記メモリID判別手段は、判別対象の1バイトの
バイトコード中の6ビットのビットデータにより前記メ
モリIDを判別し、さらに他の2ビットにより1本の汎
用仮想レジスタを識別するためのレジスタIDを判別
し、前記実行手段が実行する前記所定動作は、前記メモ
リID判別手段により判別されたレジスタIDで識別さ
れる汎用仮想レジスタを処理対象とする動作であり、前
記実行手段はさらに、前記オフセットアドレス使用命令
と判別されたバイトコードにつき、前記オフセットアド
レス判別手段により判別されたオフセットアドレス値で
特定される局所的メモリ領域中の位置にアクセスして当
該バイトコードに応じた動作を実行し、前記アドレス使
用命令と判別されたバイトコードにつき、前記アドレス
判別手段により判別されたアドレス値で特定される大域
的メモリ領域中の位置にアクセスして当該バイトコード
に応じた動作を実行することとすることもできる。
【0102】これにより、局所的メモリ領域中の64箇
所の位置のうちいずれかと、4本の汎用仮想レジスタの
うちいずれかとの間でデータのやりとりをするための命
令を2バイトのバイトコードで表すことができ、また、
大域的メモリ領域中の64箇所の位置のうちいずれか
と、4本の汎用仮想レジスタのうちいずれかとの間でデ
ータのやりとりをするための命令を2バイトのバイトコ
ードで表すことができるため、バイトコードプログラム
サイズの短縮を可能にする。
【0103】また、本発明に係るプログラム変換装置
は、前記仮想マシンを対象とするアセンブラソースプロ
グラム中の一部の命令を他の命令に変換するプログラム
変換装置であって、アセンブラソースプログラムを記憶
する記憶手段と、前記アセンブラソースプログラムにお
いて、メモリ領域中の位置を特定するものであって2バ
イト以上で表されるアドレス値のうち、使用されている
回数が最大のものから64番目に大きいものまでを検出
する多使用アドレス検出手段と、前記多使用アドレス検
出手段により検出されたそれぞれのアドレス値と、メモ
リ領域中の位置を特定するものであって1バイト以下で
表されるメモリIDとを対応づける対応づけ手段と、前
記多使用アドレス検出手段により検出されたアドレス値
を使用している命令を検出する命令検出手段と、前記命
令検出手段に検出された命令を、前記対応づけ手段によ
り当該命令が使用しているアドレス値と対応づけられて
いるメモリIDを使用する所定の命令に変換する命令変
換手段とを備えることを特徴とする。
【0104】これにより、仮想マシンを対象とするアセ
ンブラソースプログラム中での、使用頻度の高い64個
のデータにアクセスする命令は、メモリIDを使用する
命令に書き換えられ、結果的にバイトコードプログラム
のサイズが短縮される。また、本発明に係るプログラム
変換装置は、関数を含み前記仮想マシンを対象とするア
センブラソースプログラム中の一部の命令を他の命令に
変換するプログラム変換装置であって、アセンブラソー
スプログラムを記憶する記憶手段と、前記アセンブラソ
ースプログラムにおいて、局所的メモリ領域中の位置を
特定するものであって2バイト以上で表されるオフセッ
トアドレス値のうち、使用されている回数が最大のもの
から64番目に大きいものまでを検出する多使用オフセ
ットアドレス検出手段と、前記アセンブラソースプログ
ラムにおいて大域的メモリ領域中の位置を特定するもの
であって2バイト以上で表されるアドレス値のうち、使
用されている回数が最大のものから64番目に大きいも
のまでを検出する多使用アドレス検出手段と、前記多使
用オフセットアドレス検出手段により検出されたそれぞ
れのオフセットアドレス値と、局所的メモリ領域中の位
置を特定するものであって1バイト以下で表される局所
的メモリIDとを対応づける局所的メモリID対応づけ
手段と、前記多使用アドレス検出手段により検出された
それぞれのアドレス値と、大域的メモリ領域中の位置を
特定するものであって1バイト以下で表される大域的メ
モリIDとを対応づける大域的メモリID対応づけ手段
と、前記多使用オフセットアドレス検出手段により検出
されたオフセットアドレス値を使用している命令を検出
する多使用オフセットアドレス使用命令検出手段と、前
記多使用アドレス検出手段により検出されたアドレス値
を使用している命令を検出する多使用アドレス使用命令
検出手段と、前記多使用オフセットアドレス使用命令検
出手段に検出された命令を、前記局所的メモリID対応
づけ手段により当該命令が使用しているオフセットアド
レス値と対応づけられている局所的メモリIDを使用す
る所定の命令に変換する局所的メモリアクセス命令変換
手段と、前記多使用アドレス使用命令検出手段に検出さ
れた命令を、前記大域的メモリID対応づけ手段により
当該命令が使用しているアドレス値と対応づけられてい
る大域的メモリIDを使用する所定の命令に変換する大
域的メモリアクセス命令変換手段とを備えることを特徴
とする。
【0105】これにより、仮想マシンを対象とするアセ
ンブラソースプログラム中での、使用頻度の高い64個
の局所的データにアクセスする命令及び使用頻度の高い
64個の大域的データにアクセスする命令は、メモリI
Dを使用する命令に書き換えられ、結果的にバイトコー
ドプログラムのサイズが短縮される。また、前記プログ
ラム変換装置はさらに、前記多使用オフセットアドレス
使用命令検出手段によって検出された命令であって一の
オフセットアドレス値を使用する命令がアクセス対象と
する局所的メモリ領域中の位置を、前記局所的メモリI
D対応づけ手段によって前記一のオフセットアドレス値
に対応づけられた局所的メモリIDにより特定される局
所的メモリ領域中の位置と一致させるように前記アセン
ブラソースプログラム中のデータ定義記述を変更する局
所的データ位置変更手段と、前記多使用アドレス使用命
令検出手段によって検出された命令であって一のアドレ
ス値を使用する命令がアクセス対象とする大域的メモリ
領域中の位置を、前記大域的メモリID対応づけ手段に
よって前記一のアドレス値に対応づけられた大域的メモ
リIDにより特定される大域的メモリ領域中の位置と一
致させるように前記アセンブラソースプログラム中のデ
ータ定義記述を変更する大域的データ位置変更手段とを
備えることとすることもできる。
【0106】これにより、仮想マシンを対象とするアセ
ンブラソースプログラムのデータ定義記述が、使用頻度
の高いものから順に並べられていない場合であっても、
プログラム変換装置は、使用頻度の高い64個の局所的
データにアクセスする命令及び使用頻度の高い64個の
大域的データにアクセスする命令をメモリIDを使用す
る命令に書き換えて、正しくデータアクセスできるよう
なプログラムを出力する。
【0107】このように、本発明に係る仮想マシン及び
プログラム変換装置は、マイクロプロセッサのアーキテ
クチャの相違を問わずプログラム流通を可能にする技術
として有用であり、特に家電製品へのプログラムの配送
に関する技術としてその実用的効果は多大である。
【図面の簡単な説明】
【図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】1バイト目がe8である拡張命令の命令マッ
プを示す図であり、16進数で1の位が0〜7の命令を
示している。
【図13】1バイト目がe8である拡張命令の命令マッ
プを示す図であり、16進数で1の位が8〜fの命令を
示している。
【符号の説明】
100 仮想マシン 110 命令解読部 111 命令判別部 112 命令読込部 113 命令マップ記憶部 114 命令種別格納部 115 処理対象格納部 117 レジスタ判別部 118 レジスタ・メモリID読込部 119 オフセット読込部 120 命令実行部 121 命令制御部 122 仮想演算器 123 メモリ制御部 124 汎用仮想レジスタ 130 バイトコードプログラム 131 プログラムメモリ 132 データメモリ 140 マイクロプロセッサ 141 OS 410 アセンブラ最適化部 420 変換前記憶部 430 変換後記憶部 440 初期化部 451 局所的メモリ特定部 452 大域的メモリ特定部 461 局所的メモリ置換部 462 大域的メモリ置換部 470 コンパイラ 480 アセンブラ

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】 マイクロプロセッサ配下で、プログラム
    を構成するバイトコードを仮想的に逐次解読して実行す
    る仮想マシンであって、 前記マイクロプロセッサを、 バイトコードを読み込む読込手段と、 前記読込手段により読み込んだ1バイトのバイトコード
    が、メモリ領域中のある位置にアクセスする命令であっ
    て前記位置をメモリIDで特定するメモリID使用命令
    か否かを判別するメモリID使用命令判別手段と、 前記メモリID使用命令判別手段により前記メモリID
    使用命令であると判別されたバイトコードに連続する1
    バイトのバイトコードを前記読込手段により取得し、当
    該1バイトのバイトコード中の複数のビットデータによ
    り前記メモリIDを判別するメモリID判別手段と、 前記メモリID使用命令と判別されたバイトコードにつ
    き、前記メモリID判別手段により判別されたメモリI
    Dで特定されるメモリ位置にアクセスして当該バイトコ
    ードに応じた所定動作を実行する実行手段として機能さ
    せることを特徴とする仮想マシン。
  2. 【請求項2】 前記仮想マシンはさらに、 前記マイクロプロセッサを、 命令の処理対象となる4本の汎用仮想レジスタを実現す
    るための汎用仮想レジスタ手段と、 前記読込手段により読み込んだ1バイトのバイトコード
    が、メモリ領域中のある位置にアクセスする命令であっ
    て前記位置をアドレス値によって特定するアドレス使用
    命令か否かを判別するアドレス使用命令判別手段と、 前記アドレス使用命令判別手段により前記アドレス使用
    命令と判別されたバイトコードに連続する2バイト以上
    のバイトコードを前記読込手段により取得し、当該2バ
    イト以上のバイトコードにより前記アドレス値を判別す
    るアドレス判別手段として機能させ、 前記メモリID使用命令は、1本の汎用仮想レジスタを
    も処理対象とする命令であり、 前記メモリID判別手段は、判別対象の1バイトのバイ
    トコード中の6ビットのビットデータにより前記メモリ
    IDを判別し、さらに他の2ビットにより1本の汎用仮
    想レジスタを識別するためのレジスタIDを判別し、 前記実行手段が実行する前記所定動作は、前記メモリI
    D判別手段により判別されたレジスタIDで識別される
    汎用仮想レジスタを処理対象とする動作であり、 前記実行手段はさらに、前記アドレス使用命令と判別さ
    れたバイトコードにつき、前記アドレス判別手段により
    判別されたアドレス値で特定されるメモリ位置にアクセ
    スして当該バイトコードに応じた動作を実行することを
    特徴とする請求項1記載の仮想マシン。
  3. 【請求項3】 前記メモリ領域は、プログラム中のある
    局所的部分からのみアクセス可能な局所的メモリ領域又
    は複数の局所的部分からアクセス可能な大域的メモリ領
    域のいずれかであり、 前記メモリIDは、局所的メモリ領域中の位置を特定す
    る局所的メモリID又は大域的メモリ領域中の位置を特
    定する大域的メモリIDのいずれかであり、 前記メモリID使用命令は、局所的メモリIDを使用す
    る局所的メモリID使用命令又は大域的メモリIDを使
    用する大域的メモリID使用命令のいずれかであり、 前記メモリID使用命令判別手段における前記判別は、
    前記読込手段により読み込んだ1バイトのバイトコード
    が局所的メモリ領域中のある位置にアクセスする命令で
    あるときは、局所的メモリ領域中の位置を局所的メモリ
    IDで特定する局所的メモリID使用命令か否かを判別
    し、前記バイトコードが大域的メモリ領域中のある位置
    にアクセスする命令であるときは、大域的メモリ領域中
    の位置を大域的メモリIDで特定する大域的メモリID
    使用命令か否かを判別することを特徴とする請求項1記
    載の仮想マシン。
  4. 【請求項4】 前記仮想マシンはさらに、 前記マイクロプロセッサを、 命令の処理対象となる4本の汎用仮想レジスタを実現す
    るための汎用仮想レジスタ手段と、 前記読込手段により読み込んだ1バイトのバイトコード
    が、局所的メモリ領域中のある位置にアクセスする命令
    であって前記局所的メモリ領域中の位置をオフセットア
    ドレス値によって特定するオフセットアドレス使用命令
    か否かを判別するオフセットアドレス使用命令判別手段
    と、 前記読込手段により読み込んだ1バイトのバイトコード
    が、大域的メモリ領域中のある位置にアクセスする命令
    であって前記大域的メモリ領域中の位置をアドレス値に
    よって特定するアドレス使用命令か否かを判別するアド
    レス使用命令判別手段と、 前記オフセットアドレス使用命令判別手段により前記オ
    フセットアドレス使用命令と判別されたバイトコードに
    連続する2バイト以上のバイトコードを前記読込手段に
    より取得し、当該2バイト以上のバイトコードにより前
    記オフセットアドレス値を判別するオフセットアドレス
    判別手段と、 前記アドレス使用命令判別手段により前記アドレス使用
    命令と判別されたバイトコードに連続する2バイト以上
    のバイトコードを前記読込手段により取得し、当該2バ
    イト以上のバイトコードにより前記アドレス値を判別す
    るアドレス判別手段として機能させ、 前記メモリID使用命令は、1本の汎用仮想レジスタを
    も処理対象とする命令であり、 前記メモリID判別手段は、判別対象の1バイトのバイ
    トコード中の6ビットのビットデータにより前記メモリ
    IDを判別し、さらに他の2ビットにより1本の汎用仮
    想レジスタを識別するためのレジスタIDを判別し、 前記実行手段が実行する前記所定動作は、前記メモリI
    D判別手段により判別されたレジスタIDで識別される
    汎用仮想レジスタを処理対象とする動作であり、 前記実行手段はさらに、 前記オフセットアドレス使用命令と判別されたバイトコ
    ードにつき、前記オフセットアドレス判別手段により判
    別されたオフセットアドレス値で特定される局所的メモ
    リ領域中の位置にアクセスして当該バイトコードに応じ
    た動作を実行し、 前記アドレス使用命令と判別されたバイトコードにつ
    き、前記アドレス判別手段により判別されたアドレス値
    で特定される大域的メモリ領域中の位置にアクセスして
    当該バイトコードに応じた動作を実行することを特徴と
    する請求項3記載の仮想マシン。
  5. 【請求項5】 請求項2記載の仮想マシンを対象とする
    アセンブラソースプログラム中の一部の命令を他の命令
    に変換するプログラム変換装置であって、 アセンブラソースプログラムを記憶する記憶手段と、 前記アセンブラソースプログラムにおいて、メモリ領域
    中の位置を特定するものであって2バイト以上で表され
    るアドレス値のうち、使用されている回数が最大のもの
    から64番目に大きいものまでを検出する多使用アドレ
    ス検出手段と、 前記多使用アドレス検出手段により検出されたそれぞれ
    のアドレス値と、メモリ領域中の位置を特定するもので
    あって1バイト以下で表されるメモリIDとを対応づけ
    る対応づけ手段と、 前記多使用アドレス検出手段により検出されたアドレス
    値を使用している命令を検出する命令検出手段と、 前記命令検出手段に検出された命令を、前記対応づけ手
    段により当該命令が使用しているアドレス値と対応づけ
    られているメモリIDを使用する所定の命令に変換する
    命令変換手段とを備えることを特徴とするプログラム変
    換装置。
  6. 【請求項6】 関数を含み請求項4記載の仮想マシンを
    対象とするアセンブラソースプログラム中の一部の命令
    を他の命令に変換するプログラム変換装置であって、 アセンブラソースプログラムを記憶する記憶手段と、 前記アセンブラソースプログラムにおいて、局所的メモ
    リ領域中の位置を特定するものであって2バイト以上で
    表されるオフセットアドレス値のうち、使用されている
    回数が最大のものから64番目に大きいものまでを検出
    する多使用オフセットアドレス検出手段と、 前記アセンブラソースプログラムにおいて大域的メモリ
    領域中の位置を特定するものであって2バイト以上で表
    されるアドレス値のうち、使用されている回数が最大の
    ものから64番目に大きいものまでを検出する多使用ア
    ドレス検出手段と、 前記多使用オフセットアドレス検出手段により検出され
    たそれぞれのオフセットアドレス値と、局所的メモリ領
    域中の位置を特定するものであって1バイト以下で表さ
    れる局所的メモリIDとを対応づける局所的メモリID
    対応づけ手段と、 前記多使用アドレス検出手段により検出されたそれぞれ
    のアドレス値と、大域的メモリ領域中の位置を特定する
    ものであって1バイト以下で表される大域的メモリID
    とを対応づける大域的メモリID対応づけ手段と、 前記多使用オフセットアドレス検出手段により検出され
    たオフセットアドレス値を使用している命令を検出する
    多使用オフセットアドレス使用命令検出手段と、 前記多使用アドレス検出手段により検出されたアドレス
    値を使用している命令を検出する多使用アドレス使用命
    令検出手段と、 前記多使用オフセットアドレス使用命令検出手段に検出
    された命令を、前記局所的メモリID対応づけ手段によ
    り当該命令が使用しているオフセットアドレス値と対応
    づけられている局所的メモリIDを使用する所定の命令
    に変換する局所的メモリアクセス命令変換手段と、 前記多使用アドレス使用命令検出手段に検出された命令
    を、前記大域的メモリID対応づけ手段により当該命令
    が使用しているアドレス値と対応づけられている大域的
    メモリIDを使用する所定の命令に変換する大域的メモ
    リアクセス命令変換手段とを備えることを特徴とするプ
    ログラム変換装置。
  7. 【請求項7】 前記プログラム変換装置はさらに、 前記多使用オフセットアドレス使用命令検出手段によっ
    て検出された命令であって一のオフセットアドレス値を
    使用する命令がアクセス対象とする局所的メモリ領域中
    の位置を、前記局所的メモリID対応づけ手段によって
    前記一のオフセットアドレス値に対応づけられた局所的
    メモリIDにより特定される局所的メモリ領域中の位置
    と一致させるように前記アセンブラソースプログラム中
    のデータ定義記述を変更する局所的データ位置変更手段
    と、 前記多使用アドレス使用命令検出手段によって検出され
    た命令であって一のアドレス値を使用する命令がアクセ
    ス対象とする大域的メモリ領域中の位置を、前記大域的
    メモリID対応づけ手段によって前記一のアドレス値に
    対応づけられた大域的メモリIDにより特定される大域
    的メモリ領域中の位置と一致させるように前記アセンブ
    ラソースプログラム中のデータ定義記述を変更する大域
    的データ位置変更手段とを備えることを特徴とする請求
    項6記載のプログラム変換装置。
  8. 【請求項8】 プログラムを構成するバイトコードを仮
    想的に逐次解読して実行する仮想マシン的処理を、コン
    ピュータに実行させるためのプログラムを記録した記録
    媒体であって、 前記仮想マシン的処理は、 バイトコードを1バイト読み込む読込ステップと、 前記読込ステップにより読み込んだ1バイトのバイトコ
    ードが、コンピュータ中のメモリ領域中のある位置にア
    クセスする命令であって前記位置をメモリIDで特定す
    るメモリID使用命令か否かを判別するメモリID使用
    命令判別ステップと、 前記メモリID使用命令判別ステップにより前記メモリ
    ID使用命令であると判別されたバイトコードに連続す
    る1バイトのバイトコードを読み込む第2読込ステップ
    と、 前記第2読込ステップにより取得した1バイトのバイト
    コード中の複数のビットデータにより前記メモリIDを
    判別するメモリID判別ステップと、 前記メモリID使用命令と判別されたバイトコードにつ
    き、前記メモリID判別ステップにより判別されたメモ
    リIDで特定されるメモリ位置にアクセスして当該バイ
    トコードに応じた所定動作を実行する実行ステップとを
    含むことを特徴とする記録媒体。
  9. 【請求項9】 前記仮想マシン的処理はさらに、仮想的
    な汎用レジスタである4本の汎用仮想レジスタのうちい
    ずれかを処理対象とする命令を含むバイトコードを仮想
    的に解読実行するものであって、 前記読込ステップにより読み込んだ1バイトのバイトコ
    ードが、メモリ領域中のある位置にアクセスする命令で
    あって前記位置をアドレス値によって特定するアドレス
    使用命令か否かを判別するアドレス使用命令判別ステッ
    プと、 前記アドレス使用命令判別ステップにより前記アドレス
    使用命令と判別されたバイトコードに連続する2バイト
    以上のバイトコードを読み込む第3読込ステップと、 前記第3読込ステップにより取得した2バイト以上のバ
    イトコードにより前記アドレス値を判別するアドレス判
    別ステップとを含み、 前記メモリID使用命令は、4本の汎用仮想レジスタの
    うちいずれか1本をも処理対象とする命令であり、 前記メモリID判別ステップは、判別対象の1バイトの
    バイトコード中の6ビットのビットデータにより前記メ
    モリIDを判別し、さらに他の2ビットにより1本の汎
    用仮想レジスタを識別するためのレジスタIDを判別
    し、 前記実行ステップが実行する前記所定動作は、前記メモ
    リID判別ステップにより判別されたレジスタIDで識
    別される汎用仮想レジスタを処理対象とする動作であ
    り、 前記実行ステップはさらに、前記アドレス使用命令と判
    別されたバイトコードにつき、前記アドレス判別ステッ
    プにより判別されたアドレス値で特定されるメモリ位置
    にアクセスして当該バイトコードに応じた動作を実行す
    ることを特徴とする請求項8記載の記録媒体。
  10. 【請求項10】 前記メモリ領域は、プログラム中のあ
    る局所的部分からのみアクセス可能な局所的メモリ領域
    又は複数の局所的部分からアクセス可能な大域的メモリ
    領域のいずれかであり、 前記メモリIDは、局所的メモリ領域中の位置を特定す
    る局所的メモリID又は大域的メモリ領域中の位置を特
    定する大域的メモリIDのいずれかであり、 前記メモリID使用命令は、局所的メモリIDを使用す
    る局所的メモリID使用命令又は大域的メモリIDを使
    用する大域的メモリID使用命令のいずれかであり、 前記メモリID使用命令判別ステップにおける前記判別
    は、前記読込ステップにより読み込んだ1バイトのバイ
    トコードが局所的メモリ領域中のある位置にアクセスす
    る命令であるときは、局所的メモリ領域中の位置を局所
    的メモリIDで特定する局所的メモリID使用命令か否
    かを判別し、前記バイトコードが大域的メモリ領域中の
    ある位置にアクセスする命令であるときは、大域的メモ
    リ領域中の位置を大域的メモリIDで特定する大域的メ
    モリID使用命令か否かを判別することを特徴とする請
    求項8記載の記録媒体。
  11. 【請求項11】 前記仮想マシン的処理はさらに、仮想
    的な汎用レジスタである4本の汎用仮想レジスタのうち
    いずれかを処理対象とする命令を含むバイトコードを仮
    想的に解読実行するものであって、 前記読込ステップにより読み込んだ1バイトのバイトコ
    ードが、局所的メモリ領域中のある位置にアクセスする
    命令であって前記局所的メモリ領域中の位置をオフセッ
    トアドレス値によって特定するオフセットアドレス使用
    命令か否かを判別するオフセットアドレス使用命令判別
    ステップと、 前記読込ステップにより読み込んだ1バイトのバイトコ
    ードが、大域的メモリ領域中のある位置にアクセスする
    命令であって前記大域的メモリ領域中の位置をアドレス
    値によって特定するアドレス使用命令か否かを判別する
    アドレス使用命令判別ステップと、 前記オフセットアドレス使用命令判別ステップにより前
    記オフセットアドレス使用命令と判別されたバイトコー
    ドに連続する2バイト以上のバイトコードを読み込む第
    3読込ステップと、 前記第3読込ステップにより取得した2バイト以上のバ
    イトコードにより前記オフセットアドレス値を判別する
    オフセットアドレス判別ステップと、 前記アドレス使用命令判別ステップにより前記アドレス
    使用命令と判別されたバイトコードに連続する2バイト
    以上のバイトコードを読み込む第4読込ステップと、 前記第4読込ステップにより取得した2バイト以上のバ
    イトコードにより前記アドレス値を判別するアドレス判
    別ステップとを含み、 前記メモリID使用命令は、4本の汎用仮想レジスタの
    うちいずれか1本をも処理対象とする命令であり、 前記メモリID判別ステップは、判別対象の1バイトの
    バイトコード中の6ビットのビットデータにより前記メ
    モリIDを判別し、さらに他の2ビットにより1本の汎
    用仮想レジスタを識別するためのレジスタIDを判別
    し、 前記実行ステップが実行する前記所定動作は、前記メモ
    リID判別ステップにより判別されたレジスタIDで識
    別される汎用仮想レジスタを処理対象とする動作であ
    り、 前記実行ステップはさらに、 前記オフセットアドレス使用命令と判別されたバイトコ
    ードにつき、前記オフセットアドレス判別ステップによ
    り判別されたオフセットアドレス値で特定される局所的
    メモリ領域中の位置にアクセスして当該バイトコードに
    応じた動作を実行し、 前記アドレス使用命令と判別されたバイトコードにつ
    き、前記アドレス判別ステップにより判別されたアドレ
    ス値で特定される大域的メモリ領域中の位置にアクセス
    して当該バイトコードに応じた動作を実行することを特
    徴とする請求項10記載の記録媒体。
  12. 【請求項12】 コンピュータに、請求項2記載の仮想
    マシンを対象とするアセンブラソースプログラム中の一
    部の命令を他の命令に変換させるための変換処理プログ
    ラムを記録した記録媒体であって、 前記変換処理プログラムは、前記コンピュータに、 前記アセンブラソースプログラムにおいて前記コンピュ
    ータのメモリ領域中の位置を特定するものであって2バ
    イト以上で表されるアドレス値のうち、使用されている
    回数が最大のものから64番目に大きいものまでを検出
    させる多使用アドレス検出ステップと、 前記多使用アドレス検出ステップにより検出されたそれ
    ぞれのアドレス値と、メモリ領域中の位置を特定するも
    のであって1バイト以下で表されるメモリIDとを対応
    づけさせる対応づけステップと、 前記多使用アドレス検出ステップにより検出されたアド
    レス値を使用している命令を検出させる命令検出ステッ
    プと、 前記命令検出ステップにより検出された命令を、前記対
    応づけステップにより当該命令が使用しているアドレス
    値と対応づけられているメモリIDを使用する所定の命
    令に変換させる命令変換ステップとを含むことを特徴と
    する記録媒体。
  13. 【請求項13】 コンピュータに、関数を含み請求項4
    記載の仮想マシンを対象とするアセンブラソースプログ
    ラム中の一部の命令を他の命令に変換させるための変換
    処理プログラムを記録した記録媒体であって、 前記変換処理プログラムは、前記コンピュータに、 前記アセンブラソースプログラムにおいて局所的メモリ
    領域中の位置を特定するものであって2バイト以上で表
    されるオフセットアドレス値のうち、使用されている回
    数が最大のものから64番目に大きいものまでを検出さ
    せる多使用オフセットアドレス検出ステップと、 前記アセンブラソースプログラムにおいて大域的メモリ
    領域中の位置を特定するものであって2バイト以上で表
    されるアドレス値のうち、使用されている回数が最大の
    ものから64番目に大きいものまでを検出させる多使用
    アドレス検出ステップと、 前記多使用オフセットアドレス検出ステップにより検出
    されたそれぞれのオフセットアドレス値と、局所的メモ
    リ中の位置を特定するものであって1バイト以下で表さ
    れる局所的メモリIDとを対応づけさせる局所的メモリ
    ID対応づけステップと、 前記多使用アドレス検出ステップにより検出されたそれ
    ぞれのアドレス値と、大域的メモリ中の位置を特定する
    ものであって1バイト以下で表される大域的メモリID
    とを対応づけさせる大域的メモリID対応づけステップ
    と、 前記多使用オフセットアドレス検出ステップにより検出
    されたオフセットアドレス値を使用している命令を検出
    させる多使用オフセットアドレス使用命令検出ステップ
    と、 前記多使用アドレス検出ステップにより検出されたアド
    レス値を使用している命令を検出させる多使用アドレス
    使用命令検出ステップと、 前記多使用オフセットアドレス使用命令検出ステップに
    より検出された命令を、前記局所的メモリID対応づけ
    ステップにより当該命令が使用しているオフセットアド
    レス値と対応づけられている局所的メモリIDを使用す
    る所定の命令に変換させる局所的メモリアクセス命令変
    換ステップと、 前記多使用アドレス使用命令検出ステップにより検出さ
    れた命令を、前記大域的メモリID対応づけステップに
    より当該命令が使用しているアドレス値と対応づけられ
    ている大域的メモリIDを使用する所定の命令に変換さ
    せる大域的メモリアクセス命令変換ステップとを備える
    ことを特徴とするプログラム変換装置。
JP1924198A 1998-01-30 1998-01-30 仮想マシン及びプログラム変換装置 Pending JPH11212806A (ja)

Priority Applications (1)

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

Applications Claiming Priority (1)

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

Publications (1)

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

Family

ID=11993914

Family Applications (1)

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

Country Status (1)

Country Link
JP (1) JPH11212806A (ja)

Similar Documents

Publication Publication Date Title
US7594094B2 (en) Move data facility with optional specifications
RU2565496C2 (ru) Команда для загрузки данных до заданной границы памяти, указанной командой
RU2585975C2 (ru) Команда векторного типа для поиска равнозначного элемента
RU2598814C2 (ru) Команда векторного типа для поиска неравнозначного элемента
RU2568920C2 (ru) Способ выполнения машинной команды, компьютерная система и машиночитаемый носитель, обеспечивающие расчет расстояния от положения в основной памяти до границы блока основной памяти
EP0709767A1 (en) Method and apparatus for multiplatform instruction set architecture
JP2000132403A (ja) プログラム変換装置
JP3786644B2 (ja) バイトコンパイルされたJava(R)コードを実行するためのマイクロプロセッサ
JP4653236B2 (ja) ユーザ選択可能なストレージ・アクセス・キーを用いてデータを移動する方法及びシステム
US6662361B1 (en) Method, system, program, and data structures for transforming an instruction in a first bit architecture to an instruction in a second bit architecture
JP2003044273A (ja) データ処理装置及びデータ処理方法
WO2000036504A1 (en) Processor emulation instruction counter virtual memory address translation
US7219337B2 (en) Direct instructions rendering emulation computer technique
KR20060028403A (ko) 데이터 액세스 프로그램 명령 인코딩
JP2551167B2 (ja) マイクロコンピュータ
JPH11212806A (ja) 仮想マシン及びプログラム変換装置
JPH0668724B2 (ja) シミユレーシヨン方法
JP4626032B2 (ja) プログラム変換装置,プログラム変換方法及び記録媒体
US20010001328A1 (en) Link apparatus and virtual machine
JPH11212804A (ja) 仮想マシン及びプログラム変換装置
JPH11212805A (ja) 仮想マシン及びプログラム変換装置
JP2005190161A (ja) データ処理装置およびコンパイラ装置
JP2002182925A (ja) コンパイル方法及びコンピュータ読み取り可能な記録媒体
JP3474347B2 (ja) マイクロコンピュータの命令解読部
JP2000231495A (ja) 仮想マシン