JPH083792B2 - 関数呼び出し処理方法 - Google Patents
関数呼び出し処理方法Info
- Publication number
- JPH083792B2 JPH083792B2 JP2787888A JP2787888A JPH083792B2 JP H083792 B2 JPH083792 B2 JP H083792B2 JP 2787888 A JP2787888 A JP 2787888A JP 2787888 A JP2787888 A JP 2787888A JP H083792 B2 JPH083792 B2 JP H083792B2
- Authority
- JP
- Japan
- Prior art keywords
- function
- stack
- processing
- instruction
- processing method
- 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
- Devices For Executing Special Programs (AREA)
Description
【発明の詳細な説明】 〔概要〕 LISP等の計算機プログラムにおいて、ある関数が他の
関数を呼び出すための処理に関し、 スタックを介して情報を授受する関数間の呼び出し処
理の、処理効率を改善できる関数呼び出し処理方法を目
的とし、 計算機の記憶領域にロードされ、実行される呼び出し
元関数から呼び出し先関数を呼び出す場合に、スタック
に所要の情報をスタックして該呼び出し先関数に渡すよ
うにした計算機において、該呼び出し元関数は該スタッ
クに、該呼び出し元関数の記憶領域の先頭アドレスと、
復帰先命令の該先頭アドレスからのオフセットと、所要
の実引数とを該順序にスタックした後、該呼び出し先関
数の所定命令へのブランチ命令を実行するように構成す
る。
関数を呼び出すための処理に関し、 スタックを介して情報を授受する関数間の呼び出し処
理の、処理効率を改善できる関数呼び出し処理方法を目
的とし、 計算機の記憶領域にロードされ、実行される呼び出し
元関数から呼び出し先関数を呼び出す場合に、スタック
に所要の情報をスタックして該呼び出し先関数に渡すよ
うにした計算機において、該呼び出し元関数は該スタッ
クに、該呼び出し元関数の記憶領域の先頭アドレスと、
復帰先命令の該先頭アドレスからのオフセットと、所要
の実引数とを該順序にスタックした後、該呼び出し先関
数の所定命令へのブランチ命令を実行するように構成す
る。
本発明は、LISP等の計算機プログラムにおける、ある
関数が他の関数を呼び出すための処理方法、特にスタッ
クを介して情報を授受する関数呼び出し処理方法に関す
る。
関数が他の関数を呼び出すための処理方法、特にスタッ
クを介して情報を授受する関数呼び出し処理方法に関す
る。
よく知られているように、LISPプログラミング言語等
におけるプログラムは関数によって構成され、実行にお
いてある関数から他の関数を呼び出す操作が頻繁に行わ
れ、このような関数呼び出しを効率よく実行するため
に、関数間の情報授受の公知のスタック機構が使用され
る。
におけるプログラムは関数によって構成され、実行にお
いてある関数から他の関数を呼び出す操作が頻繁に行わ
れ、このような関数呼び出しを効率よく実行するため
に、関数間の情報授受の公知のスタック機構が使用され
る。
即ち、代表的なシステムのLISPコンパイラで生成され
る、関数のオブジェクトプログラムにおける関数呼び出
し手続きでは、復帰先命令アドレス(以下においてPCと
表す)と一般に可変個数の実引数とをスタックを介して
授受するために、PC、実引数の順にスタックされている
必要があるので、第3図に処理の流れを示すように、先
ず処理ステップ1において、PCを格納する領域をスタッ
クに確保するために仮の特定値をスタックする。
る、関数のオブジェクトプログラムにおける関数呼び出
し手続きでは、復帰先命令アドレス(以下においてPCと
表す)と一般に可変個数の実引数とをスタックを介して
授受するために、PC、実引数の順にスタックされている
必要があるので、第3図に処理の流れを示すように、先
ず処理ステップ1において、PCを格納する領域をスタッ
クに確保するために仮の特定値をスタックする。
次に処理ステップ2で呼び出し先に渡す情報のスタッ
ク開始位置を示すフレームポインタ(以下においてFPと
表す)をPC格納領域を指すように設定すると共に、旧FP
値を保存するためにスタックし、処理ステップ3で1個
以上の所要の実引数をスタックしてスタック処理を終わ
り、スタックを第4図に例示するように構成する。
ク開始位置を示すフレームポインタ(以下においてFPと
表す)をPC格納領域を指すように設定すると共に、旧FP
値を保存するためにスタックし、処理ステップ3で1個
以上の所要の実引数をスタックしてスタック処理を終わ
り、スタックを第4図に例示するように構成する。
その後処理ステップ4で呼び出し先関数へ分岐するブ
ランチ命令を実行する。
ランチ命令を実行する。
このブランチ命令には、例えばブランチ・アンド・リ
ンク命令等として知られるような、分岐と共に該ブラン
チ命令の次に位置する命令のアドレスを復帰先命令アド
レスとして所定のレジスタに格納する機能を有する命令
を使用する。
ンク命令等として知られるような、分岐と共に該ブラン
チ命令の次に位置する命令のアドレスを復帰先命令アド
レスとして所定のレジスタに格納する機能を有する命令
を使用する。
そこで呼び出し先では、処理ステップ5で復帰先命令
アドレスを、上記レジスタからスタック上のPC格納領域
に格納した後、処理ステップ6以降で、スタックで渡さ
れた実引数を使用する関数処理を開始する。
アドレスを、上記レジスタからスタック上のPC格納領域
に格納した後、処理ステップ6以降で、スタックで渡さ
れた実引数を使用する関数処理を開始する。
前記の関数呼び出し処理方法によれば、PC格納領域に
ついて、呼び出し側において仮の値をスタックし、呼び
出し先でレジスタから実のPC値を格納するという2度の
処理が必要となる。
ついて、呼び出し側において仮の値をスタックし、呼び
出し先でレジスタから実のPC値を格納するという2度の
処理が必要となる。
本発明は、スタックを介して情報を授受する関数間の
呼び出しの、PC格納領域の処理を改善して処理効率を向
上できる関数呼び出し処理方法を目的とする。
呼び出しの、PC格納領域の処理を改善して処理効率を向
上できる関数呼び出し処理方法を目的とする。
第1図は、本発明の構成を示す処理の流れ図である。
図は関数呼び出し処理の流れを示し、11〜16は処理ス
テップである。
テップである。
呼び出し元関数は関数呼び出しにおいて、処理ステッ
プ11〜15により、その記憶領域の先頭アドレス、復帰先
命令の先頭アドレスからのオフセット、所要の実引数を
この順にスタックした後、呼び出し先関数へブランチす
る。呼び出し先関数では、処理ステップ16以降で直ちに
関数の処理を実行する。
プ11〜15により、その記憶領域の先頭アドレス、復帰先
命令の先頭アドレスからのオフセット、所要の実引数を
この順にスタックした後、呼び出し先関数へブランチす
る。呼び出し先関数では、処理ステップ16以降で直ちに
関数の処理を実行する。
以上の処理方法により、仮のPCスタックが不要にな
る。
る。
各関数は計算機の記憶領域にロードされたとき、以降
の実行命令のベースアドレスとして、ロードされた領域
の先頭アドレスを受け取って、適当なレジスタに保持し
ている。
の実行命令のベースアドレスとして、ロードされた領域
の先頭アドレスを受け取って、適当なレジスタに保持し
ている。
又、その領域内の所要の命令の上記ベースからのオフ
セットは、コンパイラがその関数のオブジェクトを生成
するとき決定することができるので、これを定数として
保持するようにする。
セットは、コンパイラがその関数のオブジェクトを生成
するとき決定することができるので、これを定数として
保持するようにする。
従って、関数呼び出しにおいて、第1図の処理ステッ
プ11で、先頭アドレスをスタックし、処理ステップ12で
上記オフセット値をスタックするようオブジェクトを生
成することが可能であり、この2項のアドレス値によっ
て、PCの内容は決定する。
プ11で、先頭アドレスをスタックし、処理ステップ12で
上記オフセット値をスタックするようオブジェクトを生
成することが可能であり、この2項のアドレス値によっ
て、PCの内容は決定する。
呼び出し元関数は、処理ステップ11、12で復帰先PCの
ための先頭アドレスとオフセットをスタックしたのち、
処理ステップ13で従来と同様に、呼び出し先に渡す情報
のスタック開始位置を示すFPを先頭アドレスの格納領域
を指すように設定すると共に旧例FP値をスタックする。
ための先頭アドレスとオフセットをスタックしたのち、
処理ステップ13で従来と同様に、呼び出し先に渡す情報
のスタック開始位置を示すFPを先頭アドレスの格納領域
を指すように設定すると共に旧例FP値をスタックする。
処理ステップ14で1個以上の所要の実引数をスタック
してスタック処理を終わり、呼び出し先関数に渡すスタ
ックを例えは第2図のような構成のスタックにする。
してスタック処理を終わり、呼び出し先関数に渡すスタ
ックを例えは第2図のような構成のスタックにする。
その後処理ステップ15で呼び出し先関数へ分岐するブ
ランチ命令を実行する。このブランチ命令は、従来と異
なり単純なジャンプを実行する命令でよい。
ランチ命令を実行する。このブランチ命令は、従来と異
なり単純なジャンプを実行する命令でよい。
そこでジャンプ先の呼び出し先関数では、処理ステッ
プ16以降で、直ちに関数本来の処理に入ることができ
る。
プ16以降で、直ちに関数本来の処理に入ることができ
る。
以上の説明から明らかなように本発明によれば、LISP
等の計算機プログラムの、ある関数が他の関数を呼び出
すための関数呼び出し処理において、スタックを介して
情報を授受する関数間の呼び出しの処理効率が改善され
るという著しい工業的効果がある。
等の計算機プログラムの、ある関数が他の関数を呼び出
すための関数呼び出し処理において、スタックを介して
情報を授受する関数間の呼び出しの処理効率が改善され
るという著しい工業的効果がある。
第1図は本発明の構成を示す処理の流れ図、 第2図は本発明のスタックを説明する図、 第3図は従来の処理の流れ図、 第4図は従来のスタックを説明する図 である。 図において、 1〜6、11〜16は処理ステップ を示す。
Claims (1)
- 【請求項1】計算機の記憶領域にロードされ、実行され
る呼び出し元関数から呼び出し先関数を呼び出す場合
に、スタックに所要の情報をスタックして該呼び出し先
関数に渡すようにした計算機において、 該呼び出し元関数は該スタックに、該呼び出し元関数の
記憶領域の先頭アドレスと、復帰先命令の該先頭アドレ
スからのオフセットと、所要の実引数とを該順序にスタ
ックした(11〜14)後、 該呼び出し先関数の所定命令へのブランチ命令を実行す
る(15)ことを特徴とする関数呼び出し処理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2787888A JPH083792B2 (ja) | 1988-02-09 | 1988-02-09 | 関数呼び出し処理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2787888A JPH083792B2 (ja) | 1988-02-09 | 1988-02-09 | 関数呼び出し処理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH01309133A JPH01309133A (ja) | 1989-12-13 |
JPH083792B2 true JPH083792B2 (ja) | 1996-01-17 |
Family
ID=12233151
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2787888A Expired - Fee Related JPH083792B2 (ja) | 1988-02-09 | 1988-02-09 | 関数呼び出し処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH083792B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4764406B2 (ja) * | 2007-11-15 | 2011-09-07 | 株式会社藤商事 | 遊技機 |
-
1988
- 1988-02-09 JP JP2787888A patent/JPH083792B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH01309133A (ja) | 1989-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2752094B2 (ja) | 論理型言語におけるバックトラック処理方式 | |
JPH083792B2 (ja) | 関数呼び出し処理方法 | |
US5388263A (en) | Procedure state descriptor system for digital data processors | |
JPS6378231A (ja) | 部分的プログラム結合方式 | |
US5765148A (en) | Database processing apparatus and database processing method for variable length objects, and computer-readable memory medium for storing database processing program | |
JPH064319A (ja) | オペレーティング・システムにおける共有ルーチン管理方式 | |
JPS63156255A (ja) | インタプリタにおけるオ−バレイ方法 | |
JPH0527975A (ja) | マイクロコンピユータ | |
JPS6337439B2 (ja) | ||
JPS63163636A (ja) | 並列処理実行方式 | |
JPH04153741A (ja) | 被デバッグプログラムのデバッグにおける逆方向実行方式 | |
JP3039450B2 (ja) | スタック領域の切替方法、方式およびスタック領域切替プログラムを記録した記憶媒体 | |
JP2745519B2 (ja) | データ駆動型制御方法 | |
JPH0667942A (ja) | ログ採取方式 | |
JPH021017A (ja) | プログラム結合制御方式 | |
JPH0350296B2 (ja) | ||
JPH0675757A (ja) | 仮想空間常駐プログラムのリンク方式 | |
JPH05173788A (ja) | 計算機装置 | |
JPH02249042A (ja) | 構造化プログラミングモジュールの実行時特性計測装置 | |
JPH01185729A (ja) | オーバレイ構造プログラム実行方式 | |
JPH07134656A (ja) | 割り込み制御方法及びそれを実現するマルチタスクシステム | |
JPH01231137A (ja) | トレース情報出力方式 | |
JPH0477840A (ja) | 障害解析情報収集方式 | |
JPH0683635A (ja) | コンパイル・リンク方式 | |
JPH0421028A (ja) | レジスタ管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |