2

だから私は、URM Machineに非常に似ている抽象マシンのアセンブリ言語でプログラミングすることを学んでいます。URM マシンには 3 つの基本的な命令があります (一部の文献では 4 つ):
レジスタをゼロにするには: Z(r)
レジスタをインクリメントするには: S(r)
レジスタ r1 と r2 に同じ値が含まれている場合に行またはラベルにジャンプするには: J(r1,r2,l)
ここで、私の抽象マシンはさらに弱いです。なぜなら、ジャンプするために、レジスタとリテラル 0 の比較しかできないからです。
これを補うために、レジスタに任意の値を割り当てることができます (0 だけでなく、 URM) と基本的な算術演算。
どちらのマシンでも、無制限の数のレジスタを使用できます。

2 つの正の数を正常に比較して最大値を返すプログラムを作成できました。
ここで、プログラムが負の数も受け取れるようにしたいと思います。

私の質問: 数値が負かどうかを確認するにはどうすればよいですか? これらの命令だけでも可能ですか?

私は、この種の低レベル言語についてはあまり頭がよくないことを告白します...

私の最大のプログラムは次のとおりです:(入力はr1とr2で行われ、出力はr3で行われます)

maximo(){
    r5 := r1 - r3    
    jump (r5,0,maxr2)

    r5 := r2 - r4
    jump (r5,0,maxr1)


    r3 := r3 + 1
    r4 := r4 + 1
    jump (r1,r1,maximo)
}

maxr1(){
    r3 := r1 
}

maxr2(){
    r3 := r2 
}

ありがとうございました!

4

1 に答える 1

0

CSTheoryでこの回答に移動します。

x←v と y←−v を初期化します。次に、x と y のいずれかが 0 になるまで、両方を並行してインクリメントします。

ユッカ・スオメラ

于 2010-09-21T11:56:06.363 に答える