タスク#2「正のオートマトン」
読みたくない人のために:
式の値を見つけます:| x-| y ||
X、Y-整数(および負も)
制限: sub、dec ...、およびその他の減算は使用できません。フラグレジスタと二項演算は使用できません。 (特にシフト)
必要なものは、je、cmp(フラグは表示できません)、jmp、inc、movです。 (私は少し言った)
問題をよりよく理解するために:
という素晴らしいものがあります:
無制限のレジスタ (MPR)を備えたマシン
それはなぜですか? 個人的には、私の脳をかき立ててください。
それでは試してみましょう!
どうすれば使用できますか? 例:2つの数値を追加します。R0は最初の数値、R1は2番目の数値です。 r0、r1> = 0の間にR0に答えを書く
注:私はRnではなくrnのレジスタの名前を書きます。コマンドの名前も小さいので、もっと便利です。
解決策:
c1)s(r0); x = x + 1
c2)s(r2); r2 = r2 + 1
c3)j(r2、r1、c1); r2 = r1の場合、c1にジャンプします。
c4)
ご覧のとおり、c3ラベルのジャンプが発生しない場合、プログラムは停止し、レジスタr0に回答があります。
自由:
-ラベルに名前を付ける(括弧の前)
-空のラベルを書き込むことができます(それらを参照してプログラムを終了します)。
-タイプJ(1,1、)のジャンプを行います。これは無条件ジャンプと同等です
-タイプT(、)のレコードを作成します。例:T(r1、5)(通常これは実行できませんが、....)
-「;」の後のコメントですが、どのようにしたいですか
制限事項:
-タグにジャンプすることしかできません(アドレス変数を作成することはできません)
-レジスタに負の数を入れます
MPRで大規模なプログラム(OSなど)を作成する場合、アセンブラー(テスト)に同等の命令を作成すると便利です。
注:
r0 ..... rnはメモリに予約されている単語です。 例:r0 dw 0
さらに、すべての「レジスタ」は最初はゼロです。
MPRチーム/ AFM。 同等の
T(r1、r2)<=> mov ax、r2
mov r1、ax
S(r1)<=> inc r1
Z(r1)<=> mov r1,0
J(r1、r2、c1)<=> mov ax、r2
cmp r1、ax
je c1
J(1,1、c1)<=> jmp c1
一般的には、右手を足に結び、左手に3本の指を接着し、アスメにたるむという考えです。 まあ、何も、4つのチームがあります。
十分な理論、問題を解決する時が来ました。
タスク1.例でエラーを見つけます。
タスク2.ある番号から別の番号を減算します。 r0が最初で、r1が2番目です。 r0になります
問題3.式の値を見つける:| x-| y ||
X、Y-整数(および負も)
r0はxです。 r1-y。 結果をr0に書き込みます。 コメントでは、アセンブラーまたはMPRでアナログを指定します。
PS私はこれをすべて書きました。あなたも同じ制限で面白い仕事をすることを望んでいます。
PPSのコメントには、 AyayによるMPR、その後のASM の決定が含まれています。
PPPS MPRの機能を意図的に拡張しました。 定義上、それは一般に自然数でのみ機能します(MPR)。 T(rn、)で転送を入力しました。 これは、すぐにレジスタに番号を送信しています。 これ以前は、登録から登録までしかできませんでしたが、負の数は送信できませんでした。