大学の前学期、コンピュータ言語クラスの私の先生は私たちにホワイトスペースという難解言語を教えてくれました。非常に忙しいスケジュール(中期)で言語をよりよく学ぶために、私はPythonでインタープリターとアセンブラーを作成しました。アセンブリ言語は、プログラムの作成を容易にするように設計されており、サンプルプログラムは、指定されたアセンブリニーモニックを使用して作成されました。
夏になった今、Whitespace 0.3のインタプリタとアセンブラを書き直すことを目的とした新しいプロジェクトが始まり、その後さらに開発が進んでいます。以前よりも設計に取り組む時間が非常に長いため、ここでは、アセンブリ言語のニーモニックの改訂セットを提供する概要を示します。この投稿は、彼らの議論のためのwikiとしてマークされています。
過去にアセンブリ言語の経験はありますか?別の名前に変更すべきだと思った指示はありましたか?箱の外で、ニーモニックの名前が付けられたパラダイムとは異なるパラダイムで考えていることに気づきましたか?これらの質問のいずれかに「はい」と答えられる場合は、ここで大歓迎です。主観的な回答をいただければ幸いです。
スタック操作(IMP:[スペース])
スタック操作は、より一般的な操作の1つであるため、IMP[スペース]が短くなっています。4つのスタック命令があります。
hold N Push the number onto the stack
copy Duplicate the top item on the stack
copy N Copy the nth item on the stack (given by the argument) onto the top of the stack
swap Swap the top two items on the stack
drop Discard the top item on the stack
drop N Slide n items off the stack, keeping the top item
算術(IMP:[タブ] [スペース])
算術コマンドは、スタックの上位2つの項目を操作し、それらを操作の結果に置き換えます。最初にプッシュされたアイテムは、オペレーターの左側にあると見なされます。
add Addition
sub Subtraction
mul Multiplication
div Integer Division
mod Modulo
ヒープアクセス(IMP:[Tab] [Tab])
ヒープアクセスコマンドは、スタックを調べて、保存または取得するアイテムのアドレスを見つけます。アイテムを保存するには、アドレスを押してから値を押し、storeコマンドを実行します。アイテムを取得するには、アドレスをプッシュして取得コマンドを実行します。これにより、スタックの最上位の場所に格納されている値が配置されます。
save Store
load Retrieve
フロー制御(IMP:[LF])
フロー制御操作も一般的です。サブルーチンは、ラベル、および条件付きおよび無条件のジャンプのターゲットによってマークされます。これにより、ループを実装できます。インタプリタが正常に終了できるように、プログラムは[LF][LF][LF]を使用して終了する必要があります。
L: Mark a location in the program
call L Call a subroutine
goto L Jump unconditionally to a label
if=0 L Jump to a label if the top of the stack is zero
if<0 L Jump to a label if the top of the stack is negative
return End a subroutine and transfer control back to the caller
halt End the program
I / O(IMP:[タブ] [LF])
最後に、ユーザーと対話できる必要があります。数字と個々の文字を読み書きするためのIO命令があります。これらを使用して、文字列操作ルーチンを作成できます。読み取り命令は、スタックの最上位からの結果を格納するヒープアドレスを取得します。
print chr Output the character at the top of the stack
print int Output the number at the top of the stack
input chr Read a character and place it in the location given by the top of the stack
input int Read a number and place it in the location given by the top of the stack
質問:以前のニーモニックをどのように再設計、書き直し、または名前変更しますか?また、その理由は何ですか?