ちょっとしたロジック...

画像



タスク#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、)で転送を入力しました。 これは、すぐにレジスタに番号を送信しています。 これ以前は、登録から登録までしかできませんでしたが、負の数は送信できませんでした。




All Articles