JPH07105043A - Program error detection device - Google Patents
Program error detection deviceInfo
- Publication number
- JPH07105043A JPH07105043A JP5253082A JP25308293A JPH07105043A JP H07105043 A JPH07105043 A JP H07105043A JP 5253082 A JP5253082 A JP 5253082A JP 25308293 A JP25308293 A JP 25308293A JP H07105043 A JPH07105043 A JP H07105043A
- Authority
- JP
- Japan
- Prior art keywords
- program
- pointer
- error
- variable
- 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
Links
Landscapes
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
Description
【0001】[0001]
【産業上の利用分野】本発明は、C言語やパスカル言語
のように、スタックエリアに自動変数をとるソースプロ
グラムの作成時に、ポインタ変数を自動変数としながら
そのポインタ値の初期化をし忘れるエラー(以下、単に
プログラムエラーと略称する)を検出するプログラムエ
ラー検出装置に関するものである。BACKGROUND OF THE INVENTION 1. Field of the Invention The present invention, when creating a source program such as C language or Pascal language that takes automatic variables in a stack area, makes pointer variables automatic variables and forgets to initialize the pointer values. The present invention relates to a program error detection device for detecting (hereinafter simply referred to as a program error).
【0002】[0002]
【従来の技術】この種のプログラムエラー検出装置は既
に知られている。このプログラムエラー検出装置におい
ては、プログラムエラーが、ソースプログラムをオブジ
ェクトプログラムに翻訳する際に、ソースプログラムの
構文を解析することによって検出されるようになってい
た。つまり、従来のプログラムエラー検出装置は、ソフ
ト的に構成されたものである。2. Description of the Related Art A program error detecting device of this kind is already known. In this program error detection device, a program error is detected by analyzing the syntax of the source program when translating the source program into an object program. That is, the conventional program error detection device is configured as software.
【0003】[0003]
【発明が解決しようとする課題】そこで、本発明は、従
来のプログラムエラー検出装置とは異なる手段を用いて
プログラムエラーの検出を行い得るようにすることを課
題として為されたものである。すなわち、ハード的なエ
ラー検出回路を用いて、プログラムエラーを確実に検出
し得るプログラムエラー検出装置を得ることが本発明の
課題である。Therefore, an object of the present invention is to make it possible to detect a program error by using a means different from the conventional program error detecting apparatus. That is, it is an object of the present invention to obtain a program error detection device that can reliably detect a program error by using a hardware error detection circuit.
【0004】[0004]
【課題を解決するための手段】そして、本発明の要旨と
するところは、プログラムエラー検出装置を、(a) ソー
スプログラムをオブジェクトプログラムに翻訳する翻訳
手段と、ポインタ変数を自動変数とした場合にオブジェ
クトプログラムにポインタ変数のポインタ値を予め定め
られたアドレス値に設定する命令を自動的に追加する自
動初期化手段とを備えたコンパイラと、(b) オブジェク
トプログラムの実行時に、自動初期化手段によって設定
されたアドレス値を含む予め定められた範囲のメモリエ
リアに対する読み書きを検出し、エラー信号を出すエラ
ー検出回路と、(c) そのエラー信号に応じて、プログラ
ムエラーをオペレータに知らせる報知手段とを含むよう
に構成することにある。The gist of the present invention is to provide a program error detection device comprising: (a) a translation means for translating a source program into an object program; and a pointer variable as an automatic variable. A compiler having an automatic initialization means for automatically adding an instruction for setting the pointer value of a pointer variable to a predetermined address value in the object program, and (b) by the automatic initialization means at the time of execution of the object program. An error detection circuit that detects reading and writing to a memory area in a predetermined range including a set address value and outputs an error signal, and (c) a notification unit that notifies the operator of a program error according to the error signal. It is to be configured to include.
【0005】ここで、報知手段は、そのエラーの内容を
表示する表示装置であっても、エラーがあったことを知
らせるブザーやランプであってもよく、オブジェトプロ
グラムの実行を中断(強制終了)させる制御装置等であ
ってもよい。オブジェクトプログラムの実行が中断され
た場合には、ソースプログラムにプログラムエラーがあ
ることを示す記載が取扱説明書等にあれば、オペレータ
にプログラムエラーがあることを知らせ得るのである。Here, the notifying means may be a display device for displaying the content of the error, or a buzzer or a lamp for notifying that there is an error, and interrupts the execution of the object program (forced termination). It may be a control device or the like. When the execution of the object program is interrupted, the operator can be notified that there is a program error if the instruction manual or the like has a description indicating that the source program has a program error.
【0006】[0006]
【作用】本発明のプログラムエラー検出装置のコンパイ
ラにおいて、スタックエリアに自動変数をとるソースプ
ログラムが翻訳手段によってオブジェクトプログラムに
翻訳されるのであるが、ソースプログラムにおいてポイ
ンタ変数が自動変数とされている場合には、オブジェク
トプログラムにポインタ変数のポインタ値を予め定めら
れたアドレス値に設定する命令が自動初期化手段によっ
て自動的に追加される。そして、上記コンパイラによっ
て翻訳されたオブジェクトプログラムの実行時に、自動
初期化手段によって設定されたアドレス値を含む予め定
められた範囲のメモリエリアに対する読み書きがエラー
検出回路によって検出されれば、エラー信号が出力され
る。エラー検出回路は、上記メモリエリアに対する読み
書きが行われたことを検出するものであっても、読込み
指令信号あるいは書込み指令信号が発せられたことを検
出するものであってもよい。後者の場合には、実際に読
み書きが行われる以前に検出されることになる。In the compiler of the program error detecting apparatus of the present invention, the source program having automatic variables in the stack area is translated into the object program by the translating means. When the pointer variables are automatic variables in the source program, , An instruction for setting a pointer value of a pointer variable to a predetermined address value is automatically added to the object program by the automatic initialization means. Then, when the object program translated by the compiler is executed, if an error detection circuit detects reading / writing from / to a memory area in a predetermined range including the address value set by the automatic initialization means, an error signal is output. To be done. The error detection circuit may detect that a read / write operation has been performed on the memory area, or may detect that a read command signal or a write command signal has been issued. In the latter case, it will be detected before the actual reading and writing.
【0007】プログラマ(プログラム)によってポイン
タ変数のポインタ値の初期化が行われていれば、オブジ
ェクトプログラムの実行時に、読み書きが、上記予め定
められた範囲のメモリエリアに対しては行われず、プロ
グラマによって設定されたアドレス値のアドレスに対し
て行われるため、エラー信号が発せられることはない。
しかし、プログラマによってポインタ値の初期化が行わ
れていない場合には、読み書き(読込み指令信号あるい
は書込み指令信号の発生を含む)が、必ずに上記予め定
められた範囲のメモリエリアに対して行われるようにさ
れるため、確実にエラー信号が発せられることになる。
エラー信号に応じて、報知手段は、ソースプログラムに
プログラムエラーがあることをオペレータに知らせる。If the pointer value of the pointer variable is initialized by the programmer (program), reading and writing will not be performed on the memory area within the predetermined range when the object program is executed, and Since the operation is performed for the address having the set address value, no error signal is issued.
However, when the pointer value is not initialized by the programmer, reading / writing (including generation of a read command signal or a write command signal) is always performed in the memory area within the predetermined range. Therefore, the error signal is surely emitted.
In response to the error signal, the notification means notifies the operator that the source program has a program error.
【0008】[0008]
【発明の効果】本発明のプログラムエラー検出装置によ
れば、プログラムエラーを、ハード的に構成されたエラ
ー検出回路を用いて検出することができる。すなわち、
プログラムエラーの検出が、構文解析によらずエラー検
出回路によって行われるため、その分検出速度を早くす
ることができる。また、上述のように、プログラムエラ
ーを確実に検出することができる。さらに、報知手段に
よって、オペレータに確実に知らせることができる。According to the program error detecting apparatus of the present invention, it is possible to detect a program error by using an error detecting circuit constructed in hardware. That is,
Since the error detection circuit detects the program error regardless of the syntax analysis, the detection speed can be increased accordingly. Further, as described above, it is possible to reliably detect the program error. Furthermore, the operator can be surely notified by the notification means.
【0009】[0009]
【実施例】以下、本発明のエラー検出装置の一実施例で
あるパーソナルコンピュータについて図面を用いて詳細
に説明する。図1において、10はパーソナルコンピュ
ータの制御部であり、制御部10はCPU12,RAM
14等を備えている。本実施例におけるパーソナルコン
ピュータは、日本電気(株)製のPC−9801シリー
ズのものであり、CPU12は、インテル社製8086
系CPUである。また、図示しないパーソナルコンピュ
ータの本体に形成された汎用スロットからは、図2に示
すオプショナルボード16が挿入され、制御部10の一
部とされている。制御部10にはCRT表示部20が接
続される。DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS A personal computer which is an embodiment of the error detecting apparatus of the present invention will be described in detail below with reference to the drawings. In FIG. 1, 10 is a control unit of a personal computer, and the control unit 10 is a CPU 12 and a RAM.
14 and so on. The personal computer in this embodiment is a PC-9801 series manufactured by NEC Corporation, and the CPU 12 is an 8086 manufactured by Intel Corporation.
System CPU. Further, the optional board 16 shown in FIG. 2 is inserted from a general-purpose slot formed in the main body of a personal computer (not shown) to form a part of the control unit 10. A CRT display unit 20 is connected to the control unit 10.
【0010】RAM14は、図3に示すように、000
00H番地〜9FFFFH番地の640Kバイトの領域
を備えたものであるが、その領域には、MS−DOS領
域23,プログラムが格納されるコード領域24,複数
個の数値等のデータが記憶されるデータ領域26が設け
られ、それぞれの領域24,26を示すアドレスは可変
とされている。また、RAM14には、自動変数をとり
得るスタック領域28も設けられている。RAM14
は、ラージモデル型とされ、図において物理アドレス空
間として表されている。The RAM 14 has a memory capacity of 000, as shown in FIG.
It is provided with an area of 640 Kbytes from addresses 00H to 9FFFFH, and the area stores data such as an MS-DOS area 23, a code area 24 for storing a program, and a plurality of numerical values. The area 26 is provided, and the addresses indicating the areas 24 and 26 are variable. Further, the RAM 14 is also provided with a stack area 28 capable of taking automatic variables. RAM14
Is a large model type and is represented as a physical address space in the figure.
【0011】また、オプショナルボード16に設けられ
たシステムI/Oエリア29の領域のうちのD5000
H番地〜D5FFFH番地の4Kバイト分の領域は、後
述するエラー検出回路30に専用に使用される専用領域
32である。専用領域32は、コード領域24,データ
領域26,スタック領域28等としては使用できないよ
うになっている。つまり、プログラマによっては決して
使用できない領域である。In addition, the D5000 of the system I / O area 29 provided on the optional board 16 is used.
An area of 4 Kbytes from address H to D5FFFH is a dedicated area 32 used exclusively for the error detection circuit 30 described later. The dedicated area 32 cannot be used as the code area 24, the data area 26, the stack area 28, or the like. In other words, this area is never usable by some programmers.
【0012】オプショナルボード16は、複数個の大規
模集積回路(以下、LSIと略称する)36等を備えた
ものであり、その内の1つのLSI36にはデュアル・
イン・パッケージスイッチ40(以下、DIPスイッチ
40と略称する)が取り付けられている。DIPスイッ
チ40は、上述のD5000H番地〜D5FFFH番地
の専用領域32内のアドレスを示すアドレス値を表す信
号を出力するものであり、多数本の端子を備えたもので
ある。しかし、専用領域32は、アドレス値の上位2桁
がD5で示されるすべての領域とされているため、上位
2桁が(D5)を表す信号、すなわち(1101010
1)により専用領域32内のアドレス値すベてが表され
ることになる。つまり、本実施例においては、DIPス
イッチ40の多数本の端子のうち上位2桁を表す8本の
端子によって、専用領域32内のアドレスを示すアドレ
ス値を表す信号(D5)が出力されるようにされてい
る。また、LSI36の別の1つには、図4に示すエラ
ー検出回路30が組み込まれている。The optional board 16 is provided with a plurality of large-scale integrated circuits (hereinafter abbreviated as LSI) 36 and the like, and one of the LSIs 36 is a dual board.
An in-package switch 40 (hereinafter abbreviated as DIP switch 40) is attached. The DIP switch 40 outputs a signal indicating an address value indicating an address in the dedicated area 32 at the above-mentioned addresses D5000H to D5FFFH, and has a large number of terminals. However, since the upper two digits of the address value are all areas indicated by D5 in the dedicated area 32, a signal in which the upper two digits represent (D5), that is, (1101010)
All the address values in the dedicated area 32 are represented by 1). That is, in the present embodiment, the signal (D5) representing the address value indicating the address in the dedicated area 32 is output by the eight terminals representing the upper two digits of the many terminals of the DIP switch 40. Has been The error detection circuit 30 shown in FIG. 4 is incorporated in another one of the LSIs 36.
【0013】エラー検出回路30は、一致判断回路4
4,オア回路46,アンド回路48等を備えている。一
致判断回路44には、DIPスイッチ40の上述の8本
の端子が接続されるとともに、アドレス端子A19〜A
12が接続されている。アドレス端子は、オブジェクト
プログラムの実行時に、CPU12が00000H番地
〜FFFFFH番地の領域を備えたRAM14およびシ
ステムI/Oエリア29のアドレス値を指定する場合に
使用するものである。そのため、制御部10には合計2
0本のアドレス端子A0〜A19が設けられている。ア
ドレス端子A3〜A0は、RAM14およびシステムI
/Oエリア29の領域内のアドレス値の最下位桁を表す
信号を出力するものであり、アドレス端子A19〜A1
6は、最上位桁を表す信号を出力するものである。The error detection circuit 30 includes a match determination circuit 4
4, an OR circuit 46, an AND circuit 48 and the like. The above-mentioned eight terminals of the DIP switch 40 are connected to the coincidence judging circuit 44, and the address terminals A19 to A19 are connected.
12 are connected. The address terminal is used when the CPU 12 specifies the address value of the RAM 14 and the system I / O area 29 having the area of 00000H to FFFFFH when executing the object program. Therefore, the control unit 10 has a total of 2
Zero address terminals A0 to A19 are provided. The address terminals A3 to A0 are connected to the RAM 14 and the system I.
It outputs a signal indicating the least significant digit of the address value in the / O area 29, and the address terminals A19 to A1.
6 outputs a signal representing the most significant digit.
【0014】つまり、一致判断回路44には、CPU1
2によって指定されたアドレス値の上位2桁を表す信号
が供給される一方、上述のように、専用領域32の上位
2桁を表す信号(常時、11010101)が供給され
る。これらが一致しなければL信号が出力され、一致す
ればH信号が出力される。例えば、CPU12によって
87000H番地のアドレスが指定された場合には、ア
ドレス端子A19〜A12の出力は(1000011
1)となるためL信号が出力されるが、D5100H番
地が指定された場合には、出力が(11010101)
となるため、上記DIPスイッチ40による出力信号と
一致し、H信号が出力される。つまり、オブジェクトプ
ログラムの実行中に、CPU12によって専用領域32
内のアドレスが指定された場合に一致判断回路44によ
ってH信号が出力されるのである。In other words, the coincidence determination circuit 44 includes the CPU 1
While the signal representing the upper 2 digits of the address value designated by 2 is supplied, as described above, the signal representing the upper 2 digits of the dedicated area 32 (always 11010101) is supplied. If they do not match, the L signal is output, and if they match, the H signal is output. For example, when the address of address 87000H is designated by the CPU 12, the outputs of the address terminals A19 to A12 are (1000011).
However, when the D5100H address is specified, the output is (11010101).
Therefore, the output signal from the DIP switch 40 coincides with the output signal, and the H signal is output. That is, during execution of the object program, the CPU 12 causes the dedicated area 32
When the address inside is designated, the H signal is output by the coincidence judging circuit 44.
【0015】オア回路46には、オブジェクトプログラ
ムの実行時に、CPU12によってRAM14に格納さ
れたデータの読込みを行う指令が発せられた場合にはリ
ード信号(RD)が供給され、RAM14にデータの書
込みを行う指令が発せられた場合にはライト信号(W
R)が供給される。RDとWTとのいずれか一方が供給
されれば、オア回路46によってH信号が出力される。The OR circuit 46 is supplied with a read signal (RD) when the CPU 12 issues a command to read the data stored in the RAM 14 during execution of the object program, and writes the data to the RAM 14. When a command to perform is issued, a write signal (W
R) is supplied. When either RD or WT is supplied, the H signal is output by the OR circuit 46.
【0016】アンド回路48には、一致判断回路44と
オア回路46とが接続されている。アンド回路48は常
にはH信号を出力しているが、一致判断回路44の出力
信号とオア回路46の出力信号とが共にH信号である場
合には、瞬時L信号に変えられる。つまり、パルスが発
せられ、CPU12に供給されることになる。ここで、
パルスはCPU12に対する割り込みの要求を表す信号
である。したがって、エラー検出回路30において、オ
ブジェクトプログラムの実行時に、読込みあるいは書込
みが専用領域32に対して行うよう指令が発せられた場
合には、パルスが発せられ、CPU12に割り込み要求
信号が供給されるのである。A match determination circuit 44 and an OR circuit 46 are connected to the AND circuit 48. The AND circuit 48 always outputs the H signal, but when the output signal of the coincidence determination circuit 44 and the output signal of the OR circuit 46 are both H signals, they can be changed to the instantaneous L signal. That is, a pulse is emitted and supplied to the CPU 12. here,
The pulse is a signal indicating an interrupt request to the CPU 12. Therefore, when the error detection circuit 30 issues a command to read or write to the dedicated area 32 during execution of the object program, a pulse is issued and an interrupt request signal is supplied to the CPU 12. is there.
【0017】以上のように構成されたパーソナルコンピ
ュータにおける作動を説明する。C言語によって作成さ
れたソースプログラムがオブジェクトプログラムに翻訳
され、このオブジェクトプログラムが実行される。オブ
ジェクトプログラムの実行時にソースプログラムにプロ
グラムエラー(ポインタ変数のポインタ値の初期化し忘
れ)があることが検出されれば、そのことが、CRT表
示部20に表示され、オペレータに知らされる。The operation of the personal computer configured as above will be described. A source program created in C language is translated into an object program, and this object program is executed. If it is detected that the source program has a program error (forgetting to initialize the pointer value of the pointer variable) during the execution of the object program, the fact is displayed on the CRT display unit 20 to inform the operator.
【0018】図5には、ソースプログラムを表すプログ
ラムコードが示されている。ソースプログラムは、PC
─9801シリーズ用のMS−DOS(マイクロソフト
社の登録商標名)上で作成されたものである。ソースプ
ログラムコードの詳細な説明は省略するが、図には、2
個の関数uekansu ,関数sitakansu が定義されている
が、関数uekansu が実行される場合に関数sitakansu が
呼ばれるようにされている。FIG. 5 shows a program code representing a source program. Source program is PC
It is created on MS-DOS (registered trademark name of Microsoft Corporation) for 9801 series. A detailed description of the source program code is omitted, but in the figure, 2
Although the function uekansu and the function sitakansu are defined, the function sitakansu is called when the function uekansu is executed.
【0019】第1行目,第3行目,第m+1行目,第m
+3行目等に記載されたコードintは、各変数,関数の
返値等が整数型であることを宣言するコードである。こ
のように、各変数,関数の返値等が単にint 型であると
宣言されている場合には、これらが自動変数であること
を表しており、図3のスタック領域28が使用されるこ
とになる。第m+3行目においてint 型であると宣言さ
れたポインタ変数*poi は自動変数とされている。1st line, 3rd line, m + 1st line, mth
The code int described in the + 3rd line and the like is a code that declares that each variable, the return value of the function, and the like are of the integer type. In this way, when each variable, the return value of a function, or the like is simply declared as an int type, it means that these are automatic variables, and the stack area 28 in FIG. 3 is used. become. The pointer variable * poi declared to be an int type in the m + 3th line is an automatic variable.
【0020】ポインタ変数*poi は、ポインタ値poi に
よって指定されたアドレスにあるデータを表したり、ポ
インタ値poi によって指定されたアドレスに書き込むデ
ータを表したりする。第m+n行目のポインタ変数*po
i は後者、すなわち、ポインタ値poi で指定されたアド
レスに書き込むデータが123であることを表してい
る。したがって、プログラマは、ポインタ変数* poiを
書き込むアドレスを表すポインタ値(アドレス値)poi
を、第m+n行目が実行される以前の部分Rにおいて必
ず設定しなればならない。このように、ポインタ変数*
poiを書き込むアドレスを表すポインタ値poi を設定す
ることをポインタ変数のポインタ値の初期化を行うと称
する。The pointer variable * poi represents the data located at the address designated by the pointer value poi, or represents the data to be written at the address designated by the pointer value poi. Pointer variable * po on the m + nth line
i represents the latter, that is, 123 is the data to be written at the address specified by the pointer value poi. Therefore, the programmer has a pointer value (address value) poi that represents the address to write the pointer variable * poi.
Must be set in the portion R before the m + nth row is executed. In this way, pointer variables *
Setting the pointer value poi that represents the address to write poi is called initializing the pointer value of the pointer variable.
【0021】仮に、ポインタ値poi の初期化が行われな
いでポインタ変数*poi だけが設定されても、データを
どのアドレスに対して書き込むのかわからないことにな
る。そのため、書込みが、MS−DOS領域23内のア
ドレスに対して行われた場合には、OSが破壊されてし
まい、コード領域24内のアドレスに対して行われた場
合には、プログラムが破壊されてしまう問題が生じる。
また、未使用領域50内のアドレスに対して行われた場
合には、プログラムは問題なく実行されるが、納得でき
ない結果が出力されてしまうのである。図5に示すソー
スプログラムコードにおいては、ポインタ変数*poi は
設定されているが、ポインタ値poi の初期化を行うこと
が忘れられている。Even if only the pointer variable * poi is set without initializing the pointer value poi, it is not known to which address the data will be written. Therefore, when writing is performed to an address in the MS-DOS area 23, the OS is destroyed, and when writing is performed to an address in the code area 24, the program is destroyed. The problem arises.
Further, when the program is executed for the address in the unused area 50, the program is executed without any problem, but an unsatisfactory result is output. In the source program code shown in FIG. 5, the pointer variable * poi is set, but it is forgotten to initialize the pointer value poi.
【0022】このソースプログラムコードが翻訳される
と、図6に示すオブジェクトプログラムコードになる。
図6のオブジェクトプログラムについて簡単に説明す
る。部分60には、関数uekansu の実行の開始時に行わ
れる命令が表されている。ベースポインタbp,スタッ
クポインタspが退避させられるのである。ライン62
には、自動変数領域を6バイト確保する命令が表され、
部分64には、関数sitakansu をコールする命令が表さ
れている。ライン66には、関数uekansu の返値0をA
Xレジスタに格納する命令が表され、部分68には、関
数uekansu の実行の終了時に行われる命令が表されてい
る。退避していたベースポインタbp,スタックポイン
タspが戻されるのである。When this source program code is translated, it becomes the object program code shown in FIG.
The object program shown in FIG. 6 will be briefly described. The part 60 represents the instructions that are executed at the start of the execution of the function uekansu. The base pointer bp and the stack pointer sp are saved. Line 62
Indicates an instruction to secure 6 bytes of automatic variable area,
In the portion 64, an instruction to call the function sitakansu is represented. In line 66, the return value 0 of the function uekansu is A
The instruction to be stored in the X register is represented, and the portion 68 represents the instruction performed at the end of the execution of the function uekansu. The saved base pointer bp and stack pointer sp are returned.
【0023】以下、同様に、部分70には、ベースポイ
ンタbp,スタックポインタspを退避させる命令が表
されている。ライン72には、自動変数領域を12バイ
ト確保する命令が,部分74には、関数sitakansu の実
行を行う命令が、ライン76には、関数sitakansu の返
値をAXレジスタに格納する命令がそれぞれ表されてい
る。また、部分78には、ベースポインタbp,スタッ
クポインタspを戻す命令が表されているのである。Hereinafter, similarly, in the portion 70, an instruction for saving the base pointer bp and the stack pointer sp is represented. The line 72 shows an instruction to secure an automatic variable area of 12 bytes, the part 74 shows an instruction to execute the function sitakansu, and the line 76 shows an instruction to store the return value of the function sitakansu in the AX register. Has been done. Further, the portion 78 represents an instruction for returning the base pointer bp and the stack pointer sp.
【0024】図5から明らかなように、ソースプログラ
ムにおいてはポインタ変数*poi が自動変数とされてい
る。そのため、図6の部分Sに示すように、オブジェク
トプログラムには、ポインタ変数*poi のポインタ値po
i をD500;0800番地として設定する命令が自動
的に追加される。D500;0800番地は、図7に示
すように、セグメント空間で表された場合のポインタ値
であるため、物理アドレス空間におけるポインタ値に直
せば、D5800H番地となり、前述の専用領域32に
含まれることが明らかである。本実施例においては、ポ
インタ値poi が専用領域32の中間に設定されたのであ
る。また、図7のSSはセグメントを表している。As is apparent from FIG. 5, the pointer variable * poi is an automatic variable in the source program. Therefore, as shown in part S of FIG. 6, the object program includes the pointer value po of the pointer variable * poi.
A command to set i as address D500: 0800 is automatically added. As shown in FIG. 7, the address D500; 0800 is a pointer value in the case of being expressed in the segment space. Therefore, if it is corrected to the pointer value in the physical address space, it becomes the address D5800H and is included in the dedicated area 32 described above. Is clear. In this embodiment, the pointer value poi is set in the middle of the dedicated area 32. In addition, SS in FIG. 7 represents a segment.
【0025】次に、図6のオブジェクトプログラムコー
ドの実行を、図8の流れ図に従って説明する。過程1
(以下、単にK1で表す。他の過程についても同様)に
おいて、関数uekansu が呼び出され、K2において関数
sitakansu が呼び出される。K3において、部分74が
実行され、K4においてポインタ変数*poi の書込み指
令(WT)が発せられる。本実施例においては、部分S
において、ポインタ変数*poi のポインタ値poi が専用
領域32内のD5800H番地に設定されるため、CP
U12によってD5800H番地を表す信号が発せら
れ、一致判断回路44によってH信号が出力される。ま
た、ポインタ変数*poi の書込み指令信号(WR)が発
せられるため、オア回路46によってH信号が出力され
る。その結果、AND回路48によってL信号、すなわ
ち、パルス信号が出力される。CPU12に割り込み要
求信号が出力されるのである。Next, the execution of the object program code of FIG. 6 will be described with reference to the flow chart of FIG. Process 1
In the following (simply represented by K1. The same applies to other processes), the function uekansu is called, and the function in K2 is
sitakansu is called. At K3, part 74 is executed and at K4 a write command (WT) of the pointer variable * poi is issued. In this embodiment, the part S
, The pointer value poi of the pointer variable * poi is set to the address D5800H in the dedicated area 32.
A signal representing the address D5800H is issued by U12, and the H signal is output by the coincidence determination circuit 44. Further, since the write command signal (WR) for the pointer variable * poi is issued, the OR circuit 46 outputs the H signal. As a result, the AND circuit 48 outputs the L signal, that is, the pulse signal. The interrupt request signal is output to the CPU 12.
【0026】つまり、部分Sにおいて、ポインタ値poi
がD5800H番地に設定されるが、プログラマによっ
てポインタ値が設定されていないため(ソースプログラ
ムには、ポインタ値を設定する命令がないため)、この
値は変更されない。そのため、専用領域32内のアドレ
スに対する書込みを指令する信号が発せられ、エラー信
号が発せられるのである。That is, in the portion S, the pointer value poi
Is set to the address D5800H, but since the pointer value has not been set by the programmer (since there is no instruction to set the pointer value in the source program), this value is not changed. Therefore, a signal instructing writing to the address in the dedicated area 32 is issued, and an error signal is issued.
【0027】その後、K5において、CPU12によっ
て、オブジェクトプログラムの実行が中断(強制的に終
了)させられ、K6において、CRT表示部20には
「ポインタ変数が初期化されていません」と表示させら
れる。オペレータは、この表示を見れば、プログラムエ
ラーがあることがわかる。Thereafter, in K5, the CPU 12 interrupts (forcefully terminates) the execution of the object program, and in K6, the CRT display section 20 displays "Pointer variables are not initialized". . The operator can see from this display that there is a program error.
【0028】このように、本実施例においては、ポイン
タ変数*poi の書込みが実際に行われる以前,すなわ
ち、専用領域32内のアドレスを指定する信号と書込み
を指令する信号とが発せられた時点において、オブジェ
クトプログラムの実行が中断させられるため、実際に
は、ポインタ変数*poi の書込みは行われない。しか
し、仮に、書込みが実際に行われたとしても、ポインタ
値が、前述のように、プログラマによっては使用されな
いエラー検出のための専用領域32内に設定されている
ため、他のプログラムコード等が破壊されることが回避
される。また、ポインタ値poi が専用領域32の中間に
設定されているため、ポインタ値poi の前後2Kバイト
の領域に対して読み書き指令が発せられた場合に、エラ
ー信号が発せられるようになっている。As described above, in the present embodiment, before the pointer variable * poi is actually written, that is, when the signal designating the address in the dedicated area 32 and the signal instructing the writing are issued. At, since the execution of the object program is suspended, the pointer variable * poi is not actually written. However, even if the writing is actually performed, since the pointer value is set in the dedicated area 32 for error detection that is not used by the programmer as described above, other program code or the like may be written. Avoid being destroyed. Further, since the pointer value poi is set in the middle of the dedicated area 32, an error signal is issued when a read / write command is issued to an area of 2 Kbytes before and after the pointer value poi.
【0029】一方、ソースプログラムの部分Rにおいて
ポインタ値aがプログラマによって設定されている場合
には、K4において、その設定されたポインタ値aが表
すアドレスに対してポインタ変数*poi の書込みが行わ
れることになる。そのため、専用領域32内のアドレス
を表すポインタ値を指定する信号と、WTとが同時に発
せられることはないため、エラー検出回路30において
パルス信号が発せらることはない。その後、K7,8に
おいて、関数sitakansu ,関数uekansu が戻される。On the other hand, when the pointer value a is set by the programmer in the portion R of the source program, the pointer variable * poi is written to the address indicated by the set pointer value a in K4. It will be. Therefore, since the signal designating the pointer value indicating the address in the dedicated area 32 and the WT are not simultaneously issued, the pulse signal is never issued in the error detection circuit 30. Then, in K7 and K8, the functions sitakansu and uekansu are returned.
【0030】以上のように、本実施例においては、プロ
グラムエラー(ポインタ変数*poiのポインタ値poi の
初期化し忘れ)をハード的に構成されたエラー検出回路
30を用いて検出することができる。また、そのプログ
ラムエラーの検出が、構文解析によらず、ハード回路に
よって行われるため、その分、検出速度を早くすること
ができる。また、ソースプログラムにおいてプログラマ
がポインタ変数*poi のポインタ値の初期化をし忘れた
場合には、オブジェクトプログラムの実行時に、そのポ
インタ変数*poi の書込み指令信号が必ず専用領域32
内のアドレスに対して発せられるようにされているた
め、プログラムエラーを確実に検出することができる。
さらに、プログラムエラーの内容がCRT表示装置20
に表示されるため、そのことをオペレータに確実に知ら
せることができる。As described above, in the present embodiment, the program error (forgetting to initialize the pointer value poi of the pointer variable * poi) can be detected by using the error detecting circuit 30 which is constructed by hardware. Further, since the detection of the program error is performed by the hard circuit, not by the syntax analysis, the detection speed can be increased accordingly. In addition, if the programmer forgets to initialize the pointer value of the pointer variable * poi in the source program, the write command signal of the pointer variable * poi must be the dedicated area 32 when the object program is executed.
Since it is designed to be issued to the address within, the program error can be detected with certainty.
Further, the contents of the program error are displayed on the CRT display device 20.
Since it is displayed on the screen, the operator can be surely notified of that fact.
【0031】以上のように、本実施例においては、制御
部10の、ソースプログラムコードをオブジェクトプロ
グラムコードに変換する部分が、特許請求の範囲にいう
翻訳手段であり、ポインタ変数*poiのポインタ値をD5
8000H番地(D500:0800)に設定する命令
を自動的に追加する部分が自動初期化手段であり、翻訳
手段と自動初期化手段とを合わせた部分がコンパイラで
ある。また、自動初期化手段によって設定されたポイン
タ値(D5800H番地)を含む予め定められた範囲の
メモリエリアが専用領域32(D5000H番地〜D5
FFFH番地)であり、パルス信号がエラー信号であ
る。CRT表示部20が報知手段である。As described above, in this embodiment, the portion of the control unit 10 for converting the source program code into the object program code is the translation means referred to in the claims, and the pointer value of the pointer variable * poi. To D5
The portion for automatically adding the instruction to be set at the address 8000H (D5: 0800) is the automatic initialization means, and the portion for combining the translation means and the automatic initialization means is the compiler. Further, the memory area in a predetermined range including the pointer value (address D5800H) set by the automatic initialization means is the dedicated area 32 (addresses D5000H to D5).
FFFH address), and the pulse signal is an error signal. The CRT display unit 20 is a notification means.
【0032】なお、上記実施例においては、エラー検出
回路30がオプショナルボード16に組み付けられ、外
付け回路として設けられていたが、内蔵回路として予め
パーソナルコンピュータ内に内蔵されていてもよい。ま
た、上記実施例においては、専用領域32が、D500
0H番地〜D5FFFH番地とされていたが、他の領域
であってもよく、容量も4Kバイトでなく他の大きさで
あってもよい。エラー検出回路を制御部10の内蔵回路
として設けた場合には、専用領域の容量を小さくすれ
ば、他の目的に使用できる領域を大きくすることができ
る。さらに、上記実施例においては、自動初期化手段に
よって設定されるポインタ値が専用領域32内のD58
00H番地であったが、専用領域32内であれば、どこ
であってもよい。Although the error detection circuit 30 is mounted on the optional board 16 and provided as an external circuit in the above embodiment, it may be built in the personal computer in advance as an internal circuit. In the above embodiment, the dedicated area 32 is the D500.
Although the addresses are from 0H to D5FFFH, they may be in other areas and the capacity may be other than 4 Kbytes. When the error detection circuit is provided as a built-in circuit of the control unit 10, the capacity of the dedicated area can be reduced to increase the area that can be used for other purposes. Further, in the above embodiment, the pointer value set by the automatic initialization means is D58 in the dedicated area 32.
The address is 00H, but it may be anywhere within the dedicated area 32.
【0033】また、上記実施例においては、プログラム
エラーがCRT表示部20に表示されるようにされてい
たが、プログラムエラーが検出された場合にブザーが発
せられるようにしたり、ランプが点灯させられるように
してもよい。さらに、オブジェクトプログラムの実行が
中断(強制終了)させられるだけでもよい。その場合に
は、取扱説明書等に、中断の原因がプログラムエラーで
あることが記載されていれば、オペレータは取扱説明書
を見れば、プログラムエラーがあることを知ることがで
きる。Further, in the above embodiment, the program error is displayed on the CRT display section 20, but when the program error is detected, a buzzer is emitted or a lamp is turned on. You may do it. Furthermore, the execution of the object program may only be interrupted (forced termination). In that case, if the instruction manual or the like states that the cause of the interruption is a program error, the operator can know that there is a program error by looking at the instruction manual.
【0034】さらに、上記実施例においては、プログラ
ムエラーが、専用領域32にポインタ変数*poi の書込
みが実際に行われる以前に検出されるようにされている
が、実際に書込みが行われてから検出されるようにして
もよい。その場合にも、書込みが専用領域32内に行わ
れるようにされているため、他のプログラム等が破壊さ
れることはない。Further, in the above embodiment, the program error is detected before the pointer variable * poi is actually written in the dedicated area 32, but after the actual writing is performed, It may be detected. Even in that case, since writing is performed in the dedicated area 32, other programs are not destroyed.
【0035】その他、いちいち例示することはしない
が、特許請求の範囲を逸脱することなく当業者の知識に
基づいて種々の変形,改良を施した態様で本発明を実施
することができる。Although not specifically exemplified, the present invention can be carried out in various modified and improved modes based on the knowledge of those skilled in the art without departing from the scope of the claims.
【図1】本発明の一実施例であるプログラムエラー検出
装置を備えたパーソナルコンピュータを表すブロック図
である。FIG. 1 is a block diagram showing a personal computer equipped with a program error detection device according to an embodiment of the present invention.
【図2】上記パーソナルコンピュータの制御部の一部で
あるオプショナルボードの正面図である。FIG. 2 is a front view of an optional board that is a part of the control unit of the personal computer.
【図3】上記制御部のRAMを表す図である。FIG. 3 is a diagram illustrating a RAM of the control unit.
【図4】上記制御部のエラー検出回路を示す回路図であ
る。FIG. 4 is a circuit diagram showing an error detection circuit of the control unit.
【図5】上記制御部によって翻訳されるソースプログラ
ムコードを示す図である。FIG. 5 is a diagram showing a source program code translated by the control unit.
【図6】図5のソースプログラムコードが翻訳されて得
られるオブジェクトプログラムコードを示す図である。6 is a diagram showing an object program code obtained by translating the source program code of FIG.
【図7】上記RAMを表す図である。FIG. 7 is a diagram showing the RAM.
【図8】上記オブジェクトプログラムの実行の過程を示
す流れ図である。FIG. 8 is a flowchart showing a process of executing the object program.
10 制御部 12 CPU 14 RAM 16 オプショナルボード 20 CRT表示部 30 エラー検出回路 32 専用領域 40 DIPスイッチ 44 一致判断回路 46 OR回路 48 AND回路 10 control section 12 CPU 14 RAM 16 optional board 20 CRT display section 30 error detection circuit 32 dedicated area 40 DIP switch 44 coincidence determination circuit 46 OR circuit 48 AND circuit
Claims (1)
プログラムの作成時に、ポインタ変数を自動変数としな
がらそのポインタ値の初期化をし忘れるプログラムエラ
ーを検出する装置であって、 前記ソースプログラムをオブジェクトプログラムに翻訳
する翻訳手段と、前記ポインタ変数を自動変数とした場
合にオブジェクトプログラムにポインタ変数のポインタ
値を予め定められたアドレス値に設定する命令を自動的
に追加する自動初期化手段とを備えたコンパイラと、 前記オブジェクトプログラムの実行時に、前記自動初期
化手段によって設定されたアドレス値を含む予め定めら
れた範囲のメモリエリアに対する読み書きを検出し、エ
ラー信号を出すエラー検出回路と、 そのエラー信号に応じて、前記ソースプログラムにおけ
るポインタ変数のポインタ値の初期化し忘れをオペレー
タに知らせる報知手段とを含むことを特徴とするプログ
ラムエラー検出装置。1. A device for detecting a program error that forgets to initialize a pointer value while using a pointer variable as an automatic variable when creating a source program that takes an automatic variable in a stack area, wherein the source program is an object program. And an automatic initialization means for automatically adding an instruction for setting the pointer value of the pointer variable to a predetermined address value to the object program when the pointer variable is an automatic variable. A compiler, an error detection circuit that detects read / write to a memory area in a predetermined range including an address value set by the automatic initialization means and outputs an error signal when the object program is executed, and an error detection circuit Depending on the pointer in the source program A program error detection device comprising: a notification unit for notifying an operator that a pointer value of a variable has not been initialized.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP5253082A JPH07105043A (en) | 1993-10-08 | 1993-10-08 | Program error detection device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP5253082A JPH07105043A (en) | 1993-10-08 | 1993-10-08 | Program error detection device |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH07105043A true JPH07105043A (en) | 1995-04-21 |
Family
ID=17246244
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP5253082A Pending JPH07105043A (en) | 1993-10-08 | 1993-10-08 | Program error detection device |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH07105043A (en) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006031363A (en) * | 2004-07-15 | 2006-02-02 | Mitsubishi Research Institute Inc | Buffer overflow vulnerability detection program and buffer overflow vulnerability detection method |
JP2014121378A (en) * | 2012-12-20 | 2014-07-03 | Sophia Co Ltd | Game machine |
JP2014121380A (en) * | 2012-12-20 | 2014-07-03 | Sophia Co Ltd | Game machine |
JP2016135258A (en) * | 2016-02-19 | 2016-07-28 | 株式会社ソフイア | Game machine |
-
1993
- 1993-10-08 JP JP5253082A patent/JPH07105043A/en active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006031363A (en) * | 2004-07-15 | 2006-02-02 | Mitsubishi Research Institute Inc | Buffer overflow vulnerability detection program and buffer overflow vulnerability detection method |
JP2014121378A (en) * | 2012-12-20 | 2014-07-03 | Sophia Co Ltd | Game machine |
JP2014121380A (en) * | 2012-12-20 | 2014-07-03 | Sophia Co Ltd | Game machine |
JP2016135258A (en) * | 2016-02-19 | 2016-07-28 | 株式会社ソフイア | Game machine |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5140687A (en) | Data processing apparatus with self-emulation capability | |
JP2970821B2 (en) | Data processing device | |
JPH07105043A (en) | Program error detection device | |
JP2551167B2 (en) | Microcomputer | |
JPS60159951A (en) | Tracing system in information processing device | |
JPH087680B2 (en) | Instruction counter loading device | |
JPS63106836A (en) | Different architecture emulation system | |
US5596761A (en) | Central processing unit with internal register initializing means | |
KR930006516B1 (en) | Dta processing system | |
JP2817267B2 (en) | Break address detector | |
JPS6230455B2 (en) | ||
JPS63271542A (en) | Rom debugger | |
JP2849088B2 (en) | Character processor | |
JP2557366B2 (en) | Input / output procedure converter | |
JPS5856051A (en) | Address comparison system by access interruption | |
CA1270336A (en) | Higher order language-directed computer | |
JP2904488B2 (en) | Character processor | |
JPH0926898A (en) | Device and method for detection of program error | |
JPH0548492B2 (en) | ||
JPS58189747A (en) | Display for progress of execution | |
JP3123545B2 (en) | Data processing device | |
JPH0795288B2 (en) | Microcomputer | |
JPS6349943A (en) | Arithmetic processing unit | |
JPH0268636A (en) | Debugging system | |
JPS60169947A (en) | Program abnormality detector |