2009-09-15 6 views
5

Microsoft ASMのインタビューの質問ですか?私はMicrosoftが過去に尋ねたインタビューの質問のサンプルを介してオンラインを見て、この1出くわした

次のasmブロックは 共通数学関数を実行し、それは何ですか?

cwd xor ax, dx 
sub ax, dx 

誰かがこれに答え、私に答えを説明してくださいできますか?ありがとう!!

更新:大丈夫ですので、絶対値が計算されます。誰かがこれをどのようにステップバイステップで説明できますか?私。どの命令にどのレジスタを入れるのか、どのレジスタ上で実行するのかを説明する。

+0

人はインタビューでasm質問をしますか? –

+1

私は過去に質問したMSの質問がこれと同じようになったことを読んだだけです。インタビューはあなたの前に黒いペンを置き、「これは赤いペンです」と言っているだけなので、マイクロソフトを超えて何も置いていません –

答えて

1

それだけAX/EAXで動作ない

絶対値を求め - これは、レジスタ(DX/EDX)を破壊する - それは問題がCWD命令でペンティアム以降のプロセッサ上で高速に行うことができます。 CWDを置き換えるには、mov dx、ax sar dx、15(32ビットレジスタを使用する場合は、代わりに31の値を使用します)

cwd-単語をダブルワードに変換します。

XOR斧、DX =>斧=斧のXOR DX

+0

ありがとうございます。実際にこれがどのように絶対値を見つけたかを詳しく教えてください。すなわち、指示が何段階ずつ進んでいるかを示すことによって(私が第2のものを理解してからの最初の指示だけでもよい) –

+10

それはアセンブラだ。それはステップバイステップです。 – Bombe

4

それは(axの)abs機能です。

axが肯定の場合、dx0になり、何も変わりません。

axが負である場合、dxは、2の補数表現でnegを計算するための周知の方法である、ax~ax - (-1)もたらす0xffff、あろう。 DXでのダブルワードにAXで

7

cwd xor ax, dx

変換ワード:AX。記号は保持され、値は保存されます。したがって、AX> = 0の場合、DX = 0、AX <の場合はDX = -1となります。 AXの== 0

はAX < 0の場合、XORはAXのすべてのビットを反転させた場合

XORは何もしません。次に、SUBは、AXに1を加える(または-1を減じる:P)。これは2進数の2の補数を計算する方法です。

この命令シーケンスは、AXの絶対値をAXに設定し、符号に従ってDXを設定します。

関連する問題