JPH0625969B2 - マイクロプロセッサのスタツク領域を用いる制御方式 - Google Patents
マイクロプロセッサのスタツク領域を用いる制御方式Info
- Publication number
- JPH0625969B2 JPH0625969B2 JP61279046A JP27904686A JPH0625969B2 JP H0625969 B2 JPH0625969 B2 JP H0625969B2 JP 61279046 A JP61279046 A JP 61279046A JP 27904686 A JP27904686 A JP 27904686A JP H0625969 B2 JPH0625969 B2 JP H0625969B2
- Authority
- JP
- Japan
- Prior art keywords
- register
- stack
- instruction
- pointer
- call instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Executing Machine-Instructions (AREA)
Description
【発明の詳細な説明】 産業上の利用分野 本発明は、マイクロプロセッサを用いるプログラムの実
行に際して、プログラム中のコール命令およびリターン
命令の実行において用いられるスタック領域を用いる制
御方式に関する。
行に際して、プログラム中のコール命令およびリターン
命令の実行において用いられるスタック領域を用いる制
御方式に関する。
従来技術 電子計算機などにおいて、プログラムを実行する場合、
実行されるプログラムは電子計算機に備えられる読出し
/書込み自在な記憶手段に取込まれる。電子計算機に備
えられるマイクロプロセッサは、この記憶手段に記憶さ
れたプログラムを、アドレス順に読取って逐次実行して
いく。
実行されるプログラムは電子計算機に備えられる読出し
/書込み自在な記憶手段に取込まれる。電子計算機に備
えられるマイクロプロセッサは、この記憶手段に記憶さ
れたプログラムを、アドレス順に読取って逐次実行して
いく。
一方、一般にプログラムを実行する際に、同一内容の処
理が数多く表われる場合、この同一処理を行なうプログ
ラム部分を、いわゆるサブルーチンとして独立させ、主
プログラムにおいてこのようなサブルーチンを必要とす
る箇所では、たとえばコール(CALL)命令を用いて処理ス
テップを前記サブルーチンに移し、サブルーチンの末尾
に記述されるリターン(RET)命令によって、主プログラ
ムの前記コール命令の直後のステップに処理を移すよう
にしている。
理が数多く表われる場合、この同一処理を行なうプログ
ラム部分を、いわゆるサブルーチンとして独立させ、主
プログラムにおいてこのようなサブルーチンを必要とす
る箇所では、たとえばコール(CALL)命令を用いて処理ス
テップを前記サブルーチンに移し、サブルーチンの末尾
に記述されるリターン(RET)命令によって、主プログラ
ムの前記コール命令の直後のステップに処理を移すよう
にしている。
ここで、アドレス指定できる記憶容量がたとえば64キ
ロバイトより大きな電子計算機では、用いられるマイク
ロプロセッサに関して前述したようなサブルーチンに関
するコール命令として、ファーコール(FCALL)命令とニ
アコール(CALL)命令とが用いられている。前者はこのよ
うな記憶手段のどのアドレスへでも処理を移すことがで
き、後者は一定の範囲内のみに処理を移すことができ
る。一方、前記サブルーチンの末尾に記述されるリター
ン命令も、前記2種類のコール命令に対応してファーリ
ターン(FRET)命令とニアリターン(RET)命令の2種類が
用いられる。
ロバイトより大きな電子計算機では、用いられるマイク
ロプロセッサに関して前述したようなサブルーチンに関
するコール命令として、ファーコール(FCALL)命令とニ
アコール(CALL)命令とが用いられている。前者はこのよ
うな記憶手段のどのアドレスへでも処理を移すことがで
き、後者は一定の範囲内のみに処理を移すことができ
る。一方、前記サブルーチンの末尾に記述されるリター
ン命令も、前記2種類のコール命令に対応してファーリ
ターン(FRET)命令とニアリターン(RET)命令の2種類が
用いられる。
第6図はこのような従来技術のマイクロプロセッサにお
いて前記コール命令およびリターン命令を実行する際に
用いられる構成を示す図である。本従来技術では、アド
レス指定可能な全記憶領域を複数のブロックに区分す
る。また現在読取り中の命令がどのブロックに含まれる
命令であるかを表わすブロックデータが記憶され、プロ
グラムカウントのために用いられるセグメントレジスタ
1と、セグメントレジスタ1によって指定されたブロッ
ク中において、現在読取り中の命令がどの位置であるか
を示すプログラムカウンタ2と、前記セグメントレジス
タ1および/またはプログラムカウンタ2の記憶内容が
記憶されるスタック領域(アドレス指定可能なメモリ中
に設定される記憶領域)3と、このスタック領域3にお
いて前記データが記憶されるアドレスを指定するスタッ
クポインタ4とが含まれる。
いて前記コール命令およびリターン命令を実行する際に
用いられる構成を示す図である。本従来技術では、アド
レス指定可能な全記憶領域を複数のブロックに区分す
る。また現在読取り中の命令がどのブロックに含まれる
命令であるかを表わすブロックデータが記憶され、プロ
グラムカウントのために用いられるセグメントレジスタ
1と、セグメントレジスタ1によって指定されたブロッ
ク中において、現在読取り中の命令がどの位置であるか
を示すプログラムカウンタ2と、前記セグメントレジス
タ1および/またはプログラムカウンタ2の記憶内容が
記憶されるスタック領域(アドレス指定可能なメモリ中
に設定される記憶領域)3と、このスタック領域3にお
いて前記データが記憶されるアドレスを指定するスタッ
クポインタ4とが含まれる。
ここで前記ニアコール命令を実行した場合には、スタッ
ク領域3のスタックポインタ4で指示されるアドレスに
は、プログラムカウンタ2の記憶内容のみが記憶され
る。またファーコール命令を実行した場合には、スタッ
ク領域3にはセグメントレジスタ1およびプログラムカ
ウンタ2の記憶内容が、ともに記憶される。すなわち前
記ニアコール命令は、セグメントレジスタ1の記憶内容
を変化させる必要のない、同一ブロック内のステップを
コールするコール命令である。
ク領域3のスタックポインタ4で指示されるアドレスに
は、プログラムカウンタ2の記憶内容のみが記憶され
る。またファーコール命令を実行した場合には、スタッ
ク領域3にはセグメントレジスタ1およびプログラムカ
ウンタ2の記憶内容が、ともに記憶される。すなわち前
記ニアコール命令は、セグメントレジスタ1の記憶内容
を変化させる必要のない、同一ブロック内のステップを
コールするコール命令である。
第7図は実行されるプログラムの処理手順を示す図であ
り、第8図はスタック領域3の記憶態様を示す図であ
る。第6図〜第8図を参照して、ニアコール命令の実行
処理について説明する。第7図に示す主プログラム5中
において、サブルーチンAがコール命令「CALL」でニアコ
ールされると、スタックポインタ4の記憶内容はたとえ
ば2(バイト)だけ減算され、これによって指示される
スタック領域3のアドレス位置に、主プログラム5の命
令のアドレスをカウントするプログラムカウンタ2の記
憶内容が記憶される。
り、第8図はスタック領域3の記憶態様を示す図であ
る。第6図〜第8図を参照して、ニアコール命令の実行
処理について説明する。第7図に示す主プログラム5中
において、サブルーチンAがコール命令「CALL」でニアコ
ールされると、スタックポインタ4の記憶内容はたとえ
ば2(バイト)だけ減算され、これによって指示される
スタック領域3のアドレス位置に、主プログラム5の命
令のアドレスをカウントするプログラムカウンタ2の記
憶内容が記憶される。
このようにしてサブルーチン「A」6が実行され、末尾の
ニアリターン命令がマイクロプロセッサ(図示せず)な
どによって読取られると、スタックポインタ4によって
指示されるスタック領域3のアドレスの記憶内容が読出
され、主プログラム5の前記コール命令に引き続く処理
が続行される。この後スタックポインタ4の内容は2だ
け加算される。
ニアリターン命令がマイクロプロセッサ(図示せず)な
どによって読取られると、スタックポインタ4によって
指示されるスタック領域3のアドレスの記憶内容が読出
され、主プログラム5の前記コール命令に引き続く処理
が続行される。この後スタックポインタ4の内容は2だ
け加算される。
第9図は従来技術においてファーコール命令を実行する
処理手順を示す図であり、第10図はスタック領域3の
記憶内容を示す図である。第6図、第9図および第10
図を参照して、ファーコール命令の実行処理について説
明する。第9図に示される主プログラム5のファーコー
ル命令「FCALL」によって、最終的に読出されて実行され
るのは第9図に示すサブルーチン「A」6であるが、この
サブルーチン6の末尾を、主プログラム5からのファー
コール命令に対応するファーリターン命令「FRET」にして
おくと、このサブルーチン6を同一ブロック内からはコ
ールできないため、サブルーチン6の末尾はニアリター
ン命令「RET」としておく。
処理手順を示す図であり、第10図はスタック領域3の
記憶内容を示す図である。第6図、第9図および第10
図を参照して、ファーコール命令の実行処理について説
明する。第9図に示される主プログラム5のファーコー
ル命令「FCALL」によって、最終的に読出されて実行され
るのは第9図に示すサブルーチン「A」6であるが、この
サブルーチン6の末尾を、主プログラム5からのファー
コール命令に対応するファーリターン命令「FRET」にして
おくと、このサブルーチン6を同一ブロック内からはコ
ールできないため、サブルーチン6の末尾はニアリター
ン命令「RET」としておく。
このため、サブルーチン6が属する同一ブロック内に、
第9図に示すコール命令とファーリターン命令とからの
みなるサブルーチン「B」6aを設定する。すなわち末尾
がニアリターン命令「RET」であるサブルーチン6
は、同一セグメント内からコールされることができ、ま
た異なるセグメントからも後述されるようにコールされ
ることができる。
第9図に示すコール命令とファーリターン命令とからの
みなるサブルーチン「B」6aを設定する。すなわち末尾
がニアリターン命令「RET」であるサブルーチン6
は、同一セグメント内からコールされることができ、ま
た異なるセグメントからも後述されるようにコールされ
ることができる。
主プログラム5でファーコール命令が読取られると、第
6図示のスタックポインタ4は2だけ加算され、第10
図に示す当初のスタック位置A3から、第2のスタック
位置A4にスタック領域3の指示アドレスを変更する。
このスタック位置A4に、セグメントレジスタ1の記憶
内容が記憶される。スタックポインタ4は引続いて2だ
け加算され、前記スタック位置A4からスタック位置A
5にスタック領域3の指示アドレスを変更する。このス
タック位置A5に、プログラムカウンタ2の記憶内容が
書込まれる。続いてプログラムカウンタ2に、サブルー
チン「B」6aのアドレスが書込まれる。以下、同様にし
てサブルーチン「A」6がコールされる。
6図示のスタックポインタ4は2だけ加算され、第10
図に示す当初のスタック位置A3から、第2のスタック
位置A4にスタック領域3の指示アドレスを変更する。
このスタック位置A4に、セグメントレジスタ1の記憶
内容が記憶される。スタックポインタ4は引続いて2だ
け加算され、前記スタック位置A4からスタック位置A
5にスタック領域3の指示アドレスを変更する。このス
タック位置A5に、プログラムカウンタ2の記憶内容が
書込まれる。続いてプログラムカウンタ2に、サブルー
チン「B」6aのアドレスが書込まれる。以下、同様にし
てサブルーチン「A」6がコールされる。
サブルーチン6が実行され、末尾にリターン命令「RET」
が読取られると、スタックポインタ4の指示するスタッ
ク領域3におけるスタック位置A5の記憶内容が読取ら
れて、プログラムカウンタ2へ転送される。スタックポ
インタ4の記憶内容は2だけ減算され、スタック領域3
のスタック位置A4を指示する。このスタック位置A4
の記憶内容が読出され、セグメントレジスタ1に転送さ
れる。スタックポインタ4の記憶内容はさらに2だけ減
算される。このようにして第9図示の主プログラム5に
おけるファーコール命令のアドレスが指示され、引続く
処理ステップが実行される。
が読取られると、スタックポインタ4の指示するスタッ
ク領域3におけるスタック位置A5の記憶内容が読取ら
れて、プログラムカウンタ2へ転送される。スタックポ
インタ4の記憶内容は2だけ減算され、スタック領域3
のスタック位置A4を指示する。このスタック位置A4
の記憶内容が読出され、セグメントレジスタ1に転送さ
れる。スタックポインタ4の記憶内容はさらに2だけ減
算される。このようにして第9図示の主プログラム5に
おけるファーコール命令のアドレスが指示され、引続く
処理ステップが実行される。
発明が解決しようとする問題点 上述したような従来技術では、サブルーチンの末尾がニ
アリターン命令で終了しているとき、このサブルーチン
を含む前記一定のブロック内からはニアコール命令でコ
ールすることができるけれども、その他の領域からコー
ルしようとすると、ファーリターン命令を含む複数ステ
ップの命令を用いる必要があり、処理手順が繁雑になっ
てしまうという問題点があった。また前記サブルーチン
がファーリターン命令で終了しているとき、前記ニアコ
ール命令が可能な同一ブロック内からコールする場合で
あっても、ファーコール命令を用いなければならず、前
述したようなスタック領域3への記憶データ量の相違に
より、スタック領域3のメモリ容量をこのようなファー
コール命令およびファーリターン命令のためにむやみに
増大しなければならないという問題点があった。
アリターン命令で終了しているとき、このサブルーチン
を含む前記一定のブロック内からはニアコール命令でコ
ールすることができるけれども、その他の領域からコー
ルしようとすると、ファーリターン命令を含む複数ステ
ップの命令を用いる必要があり、処理手順が繁雑になっ
てしまうという問題点があった。また前記サブルーチン
がファーリターン命令で終了しているとき、前記ニアコ
ール命令が可能な同一ブロック内からコールする場合で
あっても、ファーコール命令を用いなければならず、前
述したようなスタック領域3への記憶データ量の相違に
より、スタック領域3のメモリ容量をこのようなファー
コール命令およびファーリターン命令のためにむやみに
増大しなければならないという問題点があった。
本発明の目的は、上述の問題点を解決し、使用するメモ
リ容量を節減することができるとともに、プログラムの
作成手順も簡易化されるスタック領域を用いた制御方式
を提供することである。
リ容量を節減することができるとともに、プログラムの
作成手順も簡易化されるスタック領域を用いた制御方式
を提供することである。
問題点を解決するための手段 本発明は、主プログラム28およびサブルーチンプログ
ラム29,30,31に、ファーコール命令と、ニアコ
ール命令とが含まれ、サブルーチンプログラム29,3
0,31にリターン命令が含まれ、 スタック領域26が設けられ、さらに、 スタック領域26のスタック位置を指示するスタックポ
インタ12と、 スタック位置に書込むべき内容を記憶するセグメントレ
ジスタ14と、 主プログラム28およびサブルーチンプログラム29,
30,31の命令と位置をカウントするプログラムカウ
ンタ13と、 ファーコール命令とニアコール命令とを判別する判別用
レジスタ15と、 判別用レジスタ15のアドレスを指示するレジスタペイ
ンタ27とを設け、 ファーコール命令を実行するとき、レジスタポインタ2
7によって指示される判別用レジスタ15のアドレス
に、ファーコール命令を表す判別データを書込み、レジ
スタポインタをインクリメントし、スタックポインタ1
2をインクリメントしつつセグメントレジスタ14の内
容をスタック位置に書込み、かつ、プログラムカウンタ
17の内容をインクリメントしてスタック位置に書込
み、プログラムカウンタ13には、ファーコールされた
サブルーチンプログラムの先頭アドレスをストアし、 ニアコール命令を実行するとき、レジスタポインタ27
によって指示される判別用レジスタ15のアドレスに、
ニアコール命令を表す判別データを書込み、レジスタポ
インタをインクリメントし、スタックポインタ12をイ
ンクリメントしつつ、プログラムカウンタ13の内容を
インクリメントしてスタック位置に書込み、プログラム
カウンタ13には、ニアコールされたサブルーチンプロ
グラムの先頭アドレスをストアし、 リターン命令を実行するとき、レジスタポインタ27を
デクリメントし、 判別用レジスタ15の記憶内容がファーコール命令を表
す判別データであれば、スタックポインタ12をデクリ
メントし、スタックポインタ12によって指示されるス
タック位置の記憶内容をプログラムカウンタ13に転送
し、またセグメントレジスタ14に取込み、 判別用レジスタ15の記憶内容がニアコール命令を表す
判別データであれば、スタックポインタ12をデクリメ
ントしてスタック位置を指示し、このスタック位置の記
憶内容をプログラムカウンタ13に転送することを特徴
とするマイクロプロセッサのスタック領域を用いる制御
方式である。
ラム29,30,31に、ファーコール命令と、ニアコ
ール命令とが含まれ、サブルーチンプログラム29,3
0,31にリターン命令が含まれ、 スタック領域26が設けられ、さらに、 スタック領域26のスタック位置を指示するスタックポ
インタ12と、 スタック位置に書込むべき内容を記憶するセグメントレ
ジスタ14と、 主プログラム28およびサブルーチンプログラム29,
30,31の命令と位置をカウントするプログラムカウ
ンタ13と、 ファーコール命令とニアコール命令とを判別する判別用
レジスタ15と、 判別用レジスタ15のアドレスを指示するレジスタペイ
ンタ27とを設け、 ファーコール命令を実行するとき、レジスタポインタ2
7によって指示される判別用レジスタ15のアドレス
に、ファーコール命令を表す判別データを書込み、レジ
スタポインタをインクリメントし、スタックポインタ1
2をインクリメントしつつセグメントレジスタ14の内
容をスタック位置に書込み、かつ、プログラムカウンタ
17の内容をインクリメントしてスタック位置に書込
み、プログラムカウンタ13には、ファーコールされた
サブルーチンプログラムの先頭アドレスをストアし、 ニアコール命令を実行するとき、レジスタポインタ27
によって指示される判別用レジスタ15のアドレスに、
ニアコール命令を表す判別データを書込み、レジスタポ
インタをインクリメントし、スタックポインタ12をイ
ンクリメントしつつ、プログラムカウンタ13の内容を
インクリメントしてスタック位置に書込み、プログラム
カウンタ13には、ニアコールされたサブルーチンプロ
グラムの先頭アドレスをストアし、 リターン命令を実行するとき、レジスタポインタ27を
デクリメントし、 判別用レジスタ15の記憶内容がファーコール命令を表
す判別データであれば、スタックポインタ12をデクリ
メントし、スタックポインタ12によって指示されるス
タック位置の記憶内容をプログラムカウンタ13に転送
し、またセグメントレジスタ14に取込み、 判別用レジスタ15の記憶内容がニアコール命令を表す
判別データであれば、スタックポインタ12をデクリメ
ントしてスタック位置を指示し、このスタック位置の記
憶内容をプログラムカウンタ13に転送することを特徴
とするマイクロプロセッサのスタック領域を用いる制御
方式である。
作用 本発明に従えば、主プログラム28およびサブルーチン
プログラム29,30,31には、2種類のコール命
令、すなわちファーコール命令とニアコール命令とが含
まれており、ファーコール命令を実行するときには、プ
ログラムカウンタ13の記憶内容だけでなく、セグメン
トレジスタ14の記憶内容が用いられ、ニアコール命令
を実行するときには、プログラムカウンタ13の記憶内
容が用いられ、 リターン命令の読取り毎に、判別用レジスタ15の記憶
内容に基づいて、ファーコール命令に対応するリターン
命令であるときには、スタックポインタ12によって指
示されるスタック位置の記憶内容をプログラムカウンタ
13に転送するとともにセグメントレジスタ14に取込
み、これに対してニアコール命令に対応するリターン命
令であるときには、スタックポインタによって指示され
るスタック位置の記憶内容をプログラムカウンタ13に
転送する。
プログラム29,30,31には、2種類のコール命
令、すなわちファーコール命令とニアコール命令とが含
まれており、ファーコール命令を実行するときには、プ
ログラムカウンタ13の記憶内容だけでなく、セグメン
トレジスタ14の記憶内容が用いられ、ニアコール命令
を実行するときには、プログラムカウンタ13の記憶内
容が用いられ、 リターン命令の読取り毎に、判別用レジスタ15の記憶
内容に基づいて、ファーコール命令に対応するリターン
命令であるときには、スタックポインタ12によって指
示されるスタック位置の記憶内容をプログラムカウンタ
13に転送するとともにセグメントレジスタ14に取込
み、これに対してニアコール命令に対応するリターン命
令であるときには、スタックポインタによって指示され
るスタック位置の記憶内容をプログラムカウンタ13に
転送する。
実施例 第1図は本発明の一実施例に従うマイクロプロセッサ1
1に関連する構成を示すブロック図である。第1図を参
照して、本実施例について説明する。本実施例に従うマ
イクロプロセッサ11には、B,C,D,E,H,Lレジスタ、ス
タックポインタ12、プログラムカウンタ13、セグメ
ントレジスタ14およびファーコール/ニアコールの判
別のために用いられる判別用レジスタ15などを含むレ
ジスタファイル16が備えられる。レジスタファイル1
6は内部バス17に接続され、この内部バス17にはマ
イクロプロセッサ11に入力される命令語を解読する命
令レジスタ18が接続され、この命令レジスタ18には
制御回路19が接続される。
1に関連する構成を示すブロック図である。第1図を参
照して、本実施例について説明する。本実施例に従うマ
イクロプロセッサ11には、B,C,D,E,H,Lレジスタ、ス
タックポインタ12、プログラムカウンタ13、セグメ
ントレジスタ14およびファーコール/ニアコールの判
別のために用いられる判別用レジスタ15などを含むレ
ジスタファイル16が備えられる。レジスタファイル1
6は内部バス17に接続され、この内部バス17にはマ
イクロプロセッサ11に入力される命令語を解読する命
令レジスタ18が接続され、この命令レジスタ18には
制御回路19が接続される。
内部バス17にはアキュムレータ20および状態レジス
タ21も接続され、アキュムレータ20には算術論理回
路(ALU)22が接続される。一方、このようなマイクロ
プロセッサ11にはデータバス23およびアドレスバス
24などを介してRAM(ランダムアクセスメモリ)や
ROM(リードオンリメモリ)などによって実現され、
アドレス指定可能なメモリ空間を有する記憶手段25が
接続される。この記憶手段25中には、後述するような
スタック領域26が設定される。また内部バス17に
は、後述するようなファーコール/ニアコールを判別す
るために用いられるレジスタポインタ27が接続され
る。
タ21も接続され、アキュムレータ20には算術論理回
路(ALU)22が接続される。一方、このようなマイクロ
プロセッサ11にはデータバス23およびアドレスバス
24などを介してRAM(ランダムアクセスメモリ)や
ROM(リードオンリメモリ)などによって実現され、
アドレス指定可能なメモリ空間を有する記憶手段25が
接続される。この記憶手段25中には、後述するような
スタック領域26が設定される。また内部バス17に
は、後述するようなファーコール/ニアコールを判別す
るために用いられるレジスタポインタ27が接続され
る。
第2図は本実施例に従う処理手順を示す図である。第2
図を参照して、本実施例は主プログラム28がサブルー
チン29,30,31などのファーコール命令「FCALL」
や、ニアコール命令「CALL」などによってコールさ
れるサブルーチンの末尾のリターン命令を、前述の従来
技術と異なり単一のリターン命令「RET」とし、第1図に
示すごとくマイクロプロセッサ11に、判別用レジスタ
15およびレジスタポインタ27などのハードウエアを
追加して、単一のリターン命令によってファーコール命
令およびニアコール命令に対応しようとするものであ
る。
図を参照して、本実施例は主プログラム28がサブルー
チン29,30,31などのファーコール命令「FCALL」
や、ニアコール命令「CALL」などによってコールさ
れるサブルーチンの末尾のリターン命令を、前述の従来
技術と異なり単一のリターン命令「RET」とし、第1図に
示すごとくマイクロプロセッサ11に、判別用レジスタ
15およびレジスタポインタ27などのハードウエアを
追加して、単一のリターン命令によってファーコール命
令およびニアコール命令に対応しようとするものであ
る。
第3図は判別用レジスタ15およびレジスタポインタ2
7の記憶態様を説明する図であり、第4図は記憶手段2
5中のスタック領域26の記憶態様を示す図であり、第
5図は本実施例に従う処理手順を説明するフローチャー
トである。第1図〜第5図を参照して、本実施例の処理
手順について説明する。本実施例では第2図に示すよう
に、主プログラム28からサブルーチン「C」29をコー
ルし、サブルーチン「C」29中からサブルーチン「D」30
をコールし、この中からさらにサブルーチン「E」31を
コールする場合を想定して説明する。
7の記憶態様を説明する図であり、第4図は記憶手段2
5中のスタック領域26の記憶態様を示す図であり、第
5図は本実施例に従う処理手順を説明するフローチャー
トである。第1図〜第5図を参照して、本実施例の処理
手順について説明する。本実施例では第2図に示すよう
に、主プログラム28からサブルーチン「C」29をコー
ルし、サブルーチン「C」29中からサブルーチン「D」30
をコールし、この中からさらにサブルーチン「E」31を
コールする場合を想定して説明する。
第5図のステップn1でマイクロプロセッサ11は、主
プログラム28に記述された命令を逐次読込む。ステッ
プn2では読込まれた命令がファーコール命令か否かを
判断する。ここで主プログラム28において、一般にフ
ァーコール命令「FCALL」以外の命令が処理される
とき、この判断は否定となり、処理はステップn3に移
る。ステップn3では読込まれた命令がニアコール命令
「CALL」であるかどうかの判断を行ない、主プログラム2
8でニアコール命令以外の命令が処理されている場合を
想定すると、この判断は否定となり、処理はステップn
4に移る。ステップn4では、読込まれた命令がリター
ン命令であるかどうかの判断を行ない、リターン命令で
ない命令を実行している場合を想定すると、処理はステ
ップn5に写り、上述のようなコール命令およびリター
ン命令以外の命令の処理を行なう。この処理が終了すれ
ば、プログラムカウンタ13は+1インクリメントさ
れ、ステップn1に戻って次のアドレスの命令を読込
む。この一連の処理が繰返される。
プログラム28に記述された命令を逐次読込む。ステッ
プn2では読込まれた命令がファーコール命令か否かを
判断する。ここで主プログラム28において、一般にフ
ァーコール命令「FCALL」以外の命令が処理される
とき、この判断は否定となり、処理はステップn3に移
る。ステップn3では読込まれた命令がニアコール命令
「CALL」であるかどうかの判断を行ない、主プログラム2
8でニアコール命令以外の命令が処理されている場合を
想定すると、この判断は否定となり、処理はステップn
4に移る。ステップn4では、読込まれた命令がリター
ン命令であるかどうかの判断を行ない、リターン命令で
ない命令を実行している場合を想定すると、処理はステ
ップn5に写り、上述のようなコール命令およびリター
ン命令以外の命令の処理を行なう。この処理が終了すれ
ば、プログラムカウンタ13は+1インクリメントさ
れ、ステップn1に戻って次のアドレスの命令を読込
む。この一連の処理が繰返される。
主プログラム28にはファーコール命令「FCALL
C」が記述されており、これによって処理はステップn
7に移る。ステップn7では、レジスタポインタ27の
記憶内容によって設定される判別用レジスタ15のアド
レスに、判別用データ「1」を書込む。ここでレジスタポ
インタ27は初期状態では「0」が設定されており、した
がって前記判別用データ「1」は第3図に示すように、判
別用レジスタ15の第0番地に記憶される。
C」が記述されており、これによって処理はステップn
7に移る。ステップn7では、レジスタポインタ27の
記憶内容によって設定される判別用レジスタ15のアド
レスに、判別用データ「1」を書込む。ここでレジスタポ
インタ27は初期状態では「0」が設定されており、した
がって前記判別用データ「1」は第3図に示すように、判
別用レジスタ15の第0番地に記憶される。
ステップn8ではレジスタポインタ27の値が+1イン
クリメントされ、ステップn9では当初第4図に示すス
タック領域26のスタック位置B1を指示していたスタ
ックポインタ12の記憶内容が+2(バイト)だけイン
クリメントされ、第4図に示すスタック位置B2を指示
する。このスタック位置B2にセグメントレジスタ14
の記憶内容が書込まれる。
クリメントされ、ステップn9では当初第4図に示すス
タック領域26のスタック位置B1を指示していたスタ
ックポインタ12の記憶内容が+2(バイト)だけイン
クリメントされ、第4図に示すスタック位置B2を指示
する。このスタック位置B2にセグメントレジスタ14
の記憶内容が書込まれる。
ステップn10ではスタックポインタ12の値が、同様
に+2インクリメントされ、スタック領域26のスタッ
ク位置B3を指示する。ステップn11ではプログラム
カウンタ13の内容が+1インクリメントされ、その結
果がスタック領域26のスタック位置B3に書込まれ
る。この後、ステップn12でスタックポインタ12の
値が+2インクリメントされ、スタック領域26におけ
るスタック位置B4を指示する。ステップn13ではプ
ログラムカウンタ13に、前記コールされたサブルーチ
ン「C」29の先頭アドレスをセットする。この後、処理
はステップn1に戻る。
に+2インクリメントされ、スタック領域26のスタッ
ク位置B3を指示する。ステップn11ではプログラム
カウンタ13の内容が+1インクリメントされ、その結
果がスタック領域26のスタック位置B3に書込まれ
る。この後、ステップn12でスタックポインタ12の
値が+2インクリメントされ、スタック領域26におけ
るスタック位置B4を指示する。ステップn13ではプ
ログラムカウンタ13に、前記コールされたサブルーチ
ン「C」29の先頭アドレスをセットする。この後、処理
はステップn1に戻る。
コールされたサブルーチン「C」29において、コール命
令およびリターン命令ではないその他の命令を読込んで
いる間は、前述のステップn1〜n6からなる処理を順
次繰返す。ここで第2図に示すように、サブルーチン
「C」29でニアコール命令「CALL D」をステップn1で読
込んだとき、ステップn2の判断は否定、ステップn3
の判断は肯定となり、処理はステップn14に移る。ス
テップn14では読込んだ命令がニアコール命令である
ため、前記ステップn8において得られたレジスタポイ
ンタ27の記憶内容「1」で指示される判別用レジスタ1
5のアドレス「1」に、判別用データ「0」を書込む。
令およびリターン命令ではないその他の命令を読込んで
いる間は、前述のステップn1〜n6からなる処理を順
次繰返す。ここで第2図に示すように、サブルーチン
「C」29でニアコール命令「CALL D」をステップn1で読
込んだとき、ステップn2の判断は否定、ステップn3
の判断は肯定となり、処理はステップn14に移る。ス
テップn14では読込んだ命令がニアコール命令である
ため、前記ステップn8において得られたレジスタポイ
ンタ27の記憶内容「1」で指示される判別用レジスタ1
5のアドレス「1」に、判別用データ「0」を書込む。
ステップn15では、前記ステップn8と同様に、レジ
スタポインタ27が+1インクリメントされ、ステップ
n16では前述したようにスタックポインタ12によっ
て指示されているスタック領域26のスタック位置B4
に、プログラムカウンタ13の値が+1インクリメント
された値が記憶される。
スタポインタ27が+1インクリメントされ、ステップ
n16では前述したようにスタックポインタ12によっ
て指示されているスタック領域26のスタック位置B4
に、プログラムカウンタ13の値が+1インクリメント
された値が記憶される。
ステップn17では、スタックポインタ12の値が+2
インクリメントされ、スタック領域26においてスタッ
ク位置B5を指示する。ステップn18ではプログラム
カウンタ13に、ニアコール命令「CALL D」によってコー
ルされるサブルーチン「D」30の先頭アドレスをセット
する。この後、処理はステップn1に戻る。
インクリメントされ、スタック領域26においてスタッ
ク位置B5を指示する。ステップn18ではプログラム
カウンタ13に、ニアコール命令「CALL D」によってコー
ルされるサブルーチン「D」30の先頭アドレスをセット
する。この後、処理はステップn1に戻る。
以下、サブルーチン「D」30におけるファーコール命令
「FCALL E」を読込むまでの命令処理と、これによってコ
ールされるサブルーチン「E」31の末尾のリターン命
令「RET」以前までの命令の実行は、前述した処理が繰返
し行なわれる。すなわちサブルーチン「D」30における
ファーコール命令の実行に当たっては、スタック領域2
6におけるスタック位置B5にセグメントレジスタ14
の値が、またスタック位置B6にはプログラムカウンタ
13の値がそれぞれ記憶されている。またサブルーチン
「E」31がコールされ終った段階で、主プログラム28
の実行に関して3回のコール命令が実行されたことにな
り、したがってレジスタポインタ27の値は「3」に設定
され、判別用レジスタ15の第2番地には「1」が記憶さ
れる。
「FCALL E」を読込むまでの命令処理と、これによってコ
ールされるサブルーチン「E」31の末尾のリターン命
令「RET」以前までの命令の実行は、前述した処理が繰返
し行なわれる。すなわちサブルーチン「D」30における
ファーコール命令の実行に当たっては、スタック領域2
6におけるスタック位置B5にセグメントレジスタ14
の値が、またスタック位置B6にはプログラムカウンタ
13の値がそれぞれ記憶されている。またサブルーチン
「E」31がコールされ終った段階で、主プログラム28
の実行に関して3回のコール命令が実行されたことにな
り、したがってレジスタポインタ27の値は「3」に設定
され、判別用レジスタ15の第2番地には「1」が記憶さ
れる。
ここで、サブルーチン「E」31が実行されてゆき、末尾
のリターン命令「RET」が第5図のステップn1で読込ま
れると、ステップn2,n3の判断は否定となり、ステップ
n4の判断は肯定となる。したがって処理はステップn
19に移り、レジスタポインタ27の値が−1デクリメ
ントされ、このときのレジスタポイン27の記憶内容
「2」によって、判別用レジスタ15の第2番地が指示さ
れる。ステップn20ではレジスタポインタ27の記憶
内容によって指示された、判別用レジスタ15のアドレ
スの記憶内容が「0」であるかどうかの判断を行なう。
のリターン命令「RET」が第5図のステップn1で読込ま
れると、ステップn2,n3の判断は否定となり、ステップ
n4の判断は肯定となる。したがって処理はステップn
19に移り、レジスタポインタ27の値が−1デクリメ
ントされ、このときのレジスタポイン27の記憶内容
「2」によって、判別用レジスタ15の第2番地が指示さ
れる。ステップn20ではレジスタポインタ27の記憶
内容によって指示された、判別用レジスタ15のアドレ
スの記憶内容が「0」であるかどうかの判断を行なう。
第3図に示すように本実施例の場合には、第2番地の記
憶内容は「1」であり、判断は否定となって処理はステッ
プn21に移る。ステップn21では、スタック領域26のス
タック位置B6を指示しているスタックポインタ12の
記憶内容が−2だけデクリメントされる。ステップn2
2では、ステップn21で得られたスタックポインタ1
2の記憶内容によって指示されるスタック領域26のス
タック位置B5の記憶内容が読取られ、プログラムカウ
ンタ13に転送される。
憶内容は「1」であり、判断は否定となって処理はステッ
プn21に移る。ステップn21では、スタック領域26のス
タック位置B6を指示しているスタックポインタ12の
記憶内容が−2だけデクリメントされる。ステップn2
2では、ステップn21で得られたスタックポインタ1
2の記憶内容によって指示されるスタック領域26のス
タック位置B5の記憶内容が読取られ、プログラムカウ
ンタ13に転送される。
ステップn23ではスタックポインタ12の記憶内容が
−2デクリメントされ、ステップn24でスタックポイ
ンタ12はスタック領域26のスタック位置B5を指示
し、そのスタック位置B5の記憶内容がセグメントレジ
スタ14に取込まれる。すなわちセグメントレジスタ1
4およびプログラムカウンタ13の記憶内容によって、
第2図に示すサブルーチン「D」30のファーコール命令
「FCALL E」のアドレスが確定され、この後、処理はステ
ップn1に戻る。
−2デクリメントされ、ステップn24でスタックポイ
ンタ12はスタック領域26のスタック位置B5を指示
し、そのスタック位置B5の記憶内容がセグメントレジ
スタ14に取込まれる。すなわちセグメントレジスタ1
4およびプログラムカウンタ13の記憶内容によって、
第2図に示すサブルーチン「D」30のファーコール命令
「FCALL E」のアドレスが確定され、この後、処理はステ
ップn1に戻る。
サブルーチン「D」30のファーコール命令「FCALL
E」以降、リターン命令「RET」までは前述したステッ
プn1〜ステップn6の処理が繰返し行なわれる。サブル
ーチン「D」30においてリターン命令「RET」を読取ると、
第5図のフローチャートにおいて処理はステップn1か
らステップn19を経てステップn20に到達する。ステップ
n20においてレジスタポインタ27の記憶内容は「1」
であり、判別用レジスタの第1番地の記憶内容「0」が読
取られ、処理はステップn25に移る。ステップn25
ではスタックポインタ12の記憶内容が−2デクリメン
トされ、ステップn26ではこれによってスタック領域
26においてスタック位置B4が指示される。このスタ
ック位置B4の記憶内容がプログラムカウンタ13に転
送され、したがって第2図に示すサブルーチン「C」2
9のニアコール命令「CALL D」のアドレスが確定され、処
理はステップn1に戻る。
E」以降、リターン命令「RET」までは前述したステッ
プn1〜ステップn6の処理が繰返し行なわれる。サブル
ーチン「D」30においてリターン命令「RET」を読取ると、
第5図のフローチャートにおいて処理はステップn1か
らステップn19を経てステップn20に到達する。ステップ
n20においてレジスタポインタ27の記憶内容は「1」
であり、判別用レジスタの第1番地の記憶内容「0」が読
取られ、処理はステップn25に移る。ステップn25
ではスタックポインタ12の記憶内容が−2デクリメン
トされ、ステップn26ではこれによってスタック領域
26においてスタック位置B4が指示される。このスタ
ック位置B4の記憶内容がプログラムカウンタ13に転
送され、したがって第2図に示すサブルーチン「C」2
9のニアコール命令「CALL D」のアドレスが確定され、処
理はステップn1に戻る。
これ以降、サブルーチン「E」31のリターン命令「RET」の
読取り時の処理およびサブルーチン「D」30のリターン
命令「RET」の読取り時における処理と同様の処理が繰返
され、最終的に主プログラム28のファーコール命令
「FCALL C」のアドレスが確定され、この命令以
降の処理が続行される。
読取り時の処理およびサブルーチン「D」30のリターン
命令「RET」の読取り時における処理と同様の処理が繰返
され、最終的に主プログラム28のファーコール命令
「FCALL C」のアドレスが確定され、この命令以
降の処理が続行される。
以上のようにして本実施例によれば、記憶手段25に記
憶された命令列のどのようなアドレスから開始されるサ
ブルーチンであっても、そのリターン命令をニアリター
ン命令の単一種類とすることができ、従来技術で指摘し
たようなスタック領域3(第8図および第10図参照)
のむやみな占有を抑制することができる。また従来技術
で述べたようなコール命令およびリターン命令に関する
補助的なプログラムを別途記憶させる必要はなく、本発
明が適用されるたとえばマイクロプロセッサなどの利便
性が格段に向上される。
憶された命令列のどのようなアドレスから開始されるサ
ブルーチンであっても、そのリターン命令をニアリター
ン命令の単一種類とすることができ、従来技術で指摘し
たようなスタック領域3(第8図および第10図参照)
のむやみな占有を抑制することができる。また従来技術
で述べたようなコール命令およびリターン命令に関する
補助的なプログラムを別途記憶させる必要はなく、本発
明が適用されるたとえばマイクロプロセッサなどの利便
性が格段に向上される。
効果 以上のように本発明によれば、ファーコール命令および
ニアコール命令のいずれのコール命令で呼出される命令
であっても、その末尾のリターン命令を単一種類とする
ことができ、したがってスタック領域26のメモリ容量
を低減することができるようになる。このような構成
は、判別用レジスタ15とレジスタポインタ27とを、
従来のマイクロプロセッサに増設することによって実現
されることができ、その実現が容易であり、構成が簡単
である。
ニアコール命令のいずれのコール命令で呼出される命令
であっても、その末尾のリターン命令を単一種類とする
ことができ、したがってスタック領域26のメモリ容量
を低減することができるようになる。このような構成
は、判別用レジスタ15とレジスタポインタ27とを、
従来のマイクロプロセッサに増設することによって実現
されることができ、その実現が容易であり、構成が簡単
である。
第1図は本発明の一実施例のマイクロプロセッサ11に
関連する構成を示すブロック図、第2図は本実施例の処
理手順を示す図、第3図はレジスタポインタ27および
判別用レジスタ15の記憶態様を示す図、第4図はスタ
ック領域26の記憶態様を示す図、第5図は本実施例の
処理手順を示すフローチャート、第6図は従来技術のマ
イクロプロセッサなどのスタック領域3に関連する構成
を示すブロック図、第7図は従来技術の具体的な一処理
手順を示す図、第8図はこの手順におけるスタック領域
3の記憶内容を示す図、第9図は本従来技術の他の具体
例の処理手順を示す図、第10図はこの処理手順におけ
るスタック領域3の記憶態様を示す図である。 11…マイクロプロセッサ、12…スタックポインタ、
13…プログラムカウンタ、14…セグメントレジス
タ、15…判別用レジスタ、25…記憶手段、26…ス
タック領域、27…レジスタポインタ、28…主プログ
ラム、29〜31…サブルーチン、B1〜B6…スタッ
ク位置
関連する構成を示すブロック図、第2図は本実施例の処
理手順を示す図、第3図はレジスタポインタ27および
判別用レジスタ15の記憶態様を示す図、第4図はスタ
ック領域26の記憶態様を示す図、第5図は本実施例の
処理手順を示すフローチャート、第6図は従来技術のマ
イクロプロセッサなどのスタック領域3に関連する構成
を示すブロック図、第7図は従来技術の具体的な一処理
手順を示す図、第8図はこの手順におけるスタック領域
3の記憶内容を示す図、第9図は本従来技術の他の具体
例の処理手順を示す図、第10図はこの処理手順におけ
るスタック領域3の記憶態様を示す図である。 11…マイクロプロセッサ、12…スタックポインタ、
13…プログラムカウンタ、14…セグメントレジス
タ、15…判別用レジスタ、25…記憶手段、26…ス
タック領域、27…レジスタポインタ、28…主プログ
ラム、29〜31…サブルーチン、B1〜B6…スタッ
ク位置
Claims (1)
- 【請求項1】主プログラム28およびサブルーチンプロ
グラム29,30,31に、ファーコール命令と、ニア
コール命令とが含まれ、サブルーチンプログラム29,
30,31にリターン命令が含まれ、 スタック領域26が設けられ、さらに、 スタック領域26のスタック位置を指示するスタックポ
インタ12と、 スタック位置に書込むべき内容を記憶するセグメントレ
ジスタ14と、 主プログラム28およびサブルーチンプログラム29,
30,31の命令と位置をカウントするプログラムカウ
ンタ13と、 ファーコール命令とニアコール命令とを判別する判別用
レジスタ15と、 判別用レジスタ15のアドレスを指示するレジスタペイ
ンタ27とを設け、 ファーコール命令を実行するとき、レジスタポインタ2
7によって指示される判別用レジスタ15のアドレス
に、ファーコール命令を表す判別データを書込み、レジ
スタポインタをインクリメントし、スタックポインタ1
2をインクリメントしつつセグメントレジスタ14の内
容をスタック位置に書込み、かつ、プログラムカウンタ
17の内容をインクリメントしてスタック位置に書込
み、プログラムカウンタ13には、ファーコールされた
サブルーチンプログラムの先頭アドレスをストアし、 ニアコール命令を実行するとき、レジスタポインタ27
によって指示される判別用レジスタ15のアドレスに、
ニアコール命令を表す判別データを書込み、レジスタポ
インタをインクリメントし、スタックポインタ12をイ
ンクリメントしつつ、プログラムカウンタ13の内容を
インクリメントしてスタック位置に書込み、プログラム
カウンタ13には、ニアコールされたサブルーチンプロ
グラムの先頭アドレスをストアし、 リターン命令を実行するとき、レジスタポインタ27を
デクリメントし、 判別用レジスタ15の記憶内容がファーコール命令を表
す判別データであれば、スタックポインタ12をデクリ
メントし、スタックポインタ12によって指示されるス
タック位置の記憶内容をプログラムカウンタ13に転送
し、またセグメントレジスタ14に取込み、 判別用レジスタ15の記憶内容がニアコール命令を表す
判別データであれば、スタックポインタ12をデクリメ
ントしてスタック位置を指示し、このスタック位置の記
憶内容をプログラムカウンタ13に転送することを特徴
とするマイクロプロセッサのスタック領域を用いる制御
方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP61279046A JPH0625969B2 (ja) | 1986-11-22 | 1986-11-22 | マイクロプロセッサのスタツク領域を用いる制御方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP61279046A JPH0625969B2 (ja) | 1986-11-22 | 1986-11-22 | マイクロプロセッサのスタツク領域を用いる制御方式 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPS63132337A JPS63132337A (ja) | 1988-06-04 |
JPH0625969B2 true JPH0625969B2 (ja) | 1994-04-06 |
Family
ID=17605644
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP61279046A Expired - Fee Related JPH0625969B2 (ja) | 1986-11-22 | 1986-11-22 | マイクロプロセッサのスタツク領域を用いる制御方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH0625969B2 (ja) |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5786954A (en) * | 1980-11-19 | 1982-05-31 | Hitachi Ltd | Software subroutine link system |
JPS6014340A (ja) * | 1983-07-01 | 1985-01-24 | Nippon Telegr & Teleph Corp <Ntt> | スタツク制御回路 |
-
1986
- 1986-11-22 JP JP61279046A patent/JPH0625969B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPS63132337A (ja) | 1988-06-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU686358B2 (en) | Computer system | |
EP0155211A2 (en) | System for by-pass control in pipeline operation of computer | |
US5146581A (en) | Subprogram executing data processing system having bank switching control storing in the same address area in each of memory banks | |
JPH0248931B2 (ja) | ||
WO1979000035A1 (en) | Apparatus for use with a data processor for defining a cyclic data buffer | |
JPH0414385B2 (ja) | ||
JPS645330B2 (ja) | ||
JPS61118850A (ja) | マイクロプロセツサ | |
US5867696A (en) | Saving a program counter value as the return address in an arbitrary general purpose register | |
EP0240606B1 (en) | Pipe-line processing system and microprocessor using the system | |
EP0220990A2 (en) | Buffer storage control system | |
JPS6212529B2 (ja) | ||
US4580238A (en) | Arithmetic operating system | |
JPH0449142B2 (ja) | ||
JPH0625969B2 (ja) | マイクロプロセッサのスタツク領域を用いる制御方式 | |
US4816992A (en) | Method of operating a data processing system in response to an interrupt | |
US4991130A (en) | Normalization control system for floating point arithmetic operation | |
JPS5890247A (ja) | 情報処理装置のパイプライン制御方式 | |
JPH06342397A (ja) | 論理的アドレス空間を写像するための回路装置 | |
JP2525854B2 (ja) | 命令プリフェッチ抑制装置 | |
JPS6149695B2 (ja) | ||
JPS62151936A (ja) | マイクロプロセツサに内蔵されるキヤツシユ回路 | |
JPH1027153A (ja) | バス転送装置 | |
JPS626253B2 (ja) | ||
JPH10269081A (ja) | プロセッサおよびその使用方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |