2012-05-01 21 views
1

私は書くべきアセンブリプログラムを持っています。 AXレジスタが0より大きい場合、AXレジスタが0より小さい値を持っていれば、BXで-1を動かし、AX = 0ならば0を動かし、BXで0を動かす必要があります。私はそれを行う次のコードがありますが、私は代わりの解決策を探しています。助けてください。ありがとうAXとゼロとの比較

+0

なぜ代替ソリューションが必要なのですか? –

+0

@KendallFrey:別の方法があるかどうかを理解したい。 – Foo

+0

あなたはそれを好きなようにすることができます。必要に応じて、独自のハードウェアデバイスを構築して変換を行います。言い換えれば、それを行うには多くの方法があります。動作する小さなソリューションを使用してください。 –

答えて

3

あなたが与えたコードは常に-1を返します。これを試してみてください:

CMP AX, 0 
JG GREATER 
JL LESS 
MOV BX, 0 
JMP END 
GREATER: 
MOV BX, 1 
JMP END 
LESS: 
MOV BX, -1 
END: 
+0

ああ、私の悪い。終了ジャンプを追加してくれてありがとう。 – Foo

1

は、単一の条件分岐なし無条件ジャンプを必要とし、これを試してみてください:

mov  bx, ax  // copy ax to bx 
    sarw bx, 15  // arithmetic shift - any -ve => -1, 0 or +ve => 0 
    cmp  ax, 0  // compare original number to zero 
    jle  end   // if it's <=, we're done 
    mov  bx, 1  // else bx = 1 
end: 

NB - 私のx86コードは非常に非常にさびです。また、sarのそのバージョンは、私はせずに386+のためのより良いバージョンを見つけたと思う8086ではありませんでしたが、286にあった以降、および80386

EDITまで、特に迅速な取得できませんでした任意の支店:

関連する問題