2017-05-23 18 views
0

私の問題はそれほど大きくはありませんが、私は何かを理解していないので、いくつかの助けを求めていました。アセンブリx86補助演算命令

私たちはAssembly .x86言語について学び、SUB算術命令に固執しました。

これはコードです:

INCLUDE Irvine32.inc 

.data 

val_A DWORD 1234h 
val_B DWORD 144h 

.code 

main proc 

MOV  EAX, val_B ;This works 
SUB  EAX, val_A 

CALL WriteInt 
CALL Crlf 

INVOKE ExitProcess, 0 
main endp 

.stack 
dw  100 dup(?) 

end main 

私は、このように配置しようとすると:

MOV EAX, val_A 
MOV EBX, val_B 
SUB EBX, EAX 

それは仕事をdoesntの。私たちは[SUB]算術構造は[MOV]と[ADD]と同じように動作することを知りましたが、[SUB reg/reg]として使用しようとすると、EAXレジスタにあるものだけが表示されます。 私はVisual Studioを使用しています。それが問題なのかどうかはわかりません。

+0

結果はEBXに格納されます。 MOV EAX、EBXを追加してWriteIntを満足させ、正しい値を表示させる必要があります。 –

+0

Ohh ....これは簡単です...ありがとうございました:) – Terminatorka

+1

最初のバージョンはEAXの結果をEBXの2番目に入れます。だから、あなたのWriteIntはEAXの入力を期待しているので、あなたは別のバーチャルを持っています。 – Artur

答えて

0

サブ命令はMOVとADDのように機能します。 SUB reg/regとして動作します。 あなたはとしてSUBを使用しようとすると:あなたはEAXを変更していない、とあなたが言ったように、レジスタEAXが変更されていない

MOV EAX, val_A 
MOV EBX, val_B 
SUB EBX, EAX 

。 結果がEBXに保存されているためです。 SUB命令結果は内に移動する理由というMOVとなどの作業を行い、

をもう一度明確にする:あなたはコーディングすべきレジスタEAXに - (123H 1234H)の結果を得るために 最初のレジスタ。例:

MOV EAX, 1234h 

数字1234hをEAXレジスタに入れ、反対には入れないでください。

関連する問題