はじめに
本連載では、最近の日本語プログラミング言語の中で高いシェアを占める「なでしこ」を使用して、BASICライクな自作言語のコンパイラを作成します。
前回、「MASMとなでしこによるオリジナルコンパイラの制作 4」では、メッセージボックスのタイトルを指定できるようにし、変数についても解説しました。今回は変数に値を代入してコンソールに出力します。
過去の記事
変数の宣言
ようやくまともに使える関数が少しはできました。しかし、まともに使える関数が2つや3つでは「プログラミング言語もどき」と言うにも厳しいです。そこで、変数を扱う関数をいくつか用意したいと思います。MASMでは、変数に値を代入するには、以下の書式を使用します。
(変数名) (変数型) (代入する内容)
例えば、「dd
型のhensuu
という変数名に32を代入する」という場合は以下のようになります。単語の間は半角スペースです。
hensuu dd 32
イメージはつかめましたか? では、この行を実際に出力するプログラムを作ってみましょう。
違えば、もし、最新命令が「msgbox」ならば、 アセンブリデータに「STR{文字列数} db "{バッファ¥0}", 0」を配列追加。 もし、バッファ¥1が空ならば、 アセンブリに「invoke MessageBoxA, 0, offset STR{文字列数}, offset STR{文字列数}, 0」を配列追加。 違えば、 アセンブリデータに「STR{文字列数+1} db "{バッファ¥1}", 0」を配列追加。 アセンブリに「invoke MessageBoxA, 0, offset STR{文字列数}, offset STR{文字列数+1}, 0」を配列追加。 文字列数は文字列数+1。 //文字列を1つ多く使ったので 文字列数は文字列数+1。 バッファは空。 違えば、もし、最新命令が「Dim」ならば、 もし、予約名¥1が「Long」ならば、 アセンブリデータに「{予約名¥0} dd 0」を配列追加。 予約名は空。 違えば、もし、対象が改行でなければ、 バッファは「{バッファ}{対象}」。 もし、予約名スィッチがオンならば、 予約名は「{予約名}{対象}」。
Dim
は、Basic言語で「変数の宣言」を意味します。ただし、この行ではまだ何も代入していません。変数の宣言の時に同時に代入することができる言語もたくさんありますが、現時点では対応しないようにします。
それでは、コンパイルしてエラーが起きないことを確認してください。
Dim testdim As Long
注意点が2つあります。まず、これは前回(第4回)で書いた「test3.txt」の内容と全く一緒ですが、新しく「test4.txt」を作成するようにしてください。2点目は、ソースコードの最後に改行をつけてることを忘れないようにしてください。
アセンブリの中の.data
の下に、以下の行が打ち込まれているのを確認できましたか?
tester dd 0
アセンブルしてもエラーは発生しませんでしたが、このままでは本当に変数が作られたか分かりません。そこで、変数に値が代入されているか確かめてみます。変数が代入されているか、そして変数が表示されるかを2ステップに分けて確認します。