2017-10-21 3 views
1

2つの8ビットレジスタを一緒に追加して結果を出力します。私はレジスタCLとCHを追加したいと思います。私は、ECXに-1275を設定しました。これらの2つのレジスタを引くと結果がどのようになるか見たいのですが、どうしたらいいですか?PutIntを使用してレジスタCLから印刷するには

これは私が書いたものですが、13行目でオペコードとオペランドの無効な組み合わせを示すエラーが表示されます。なぜ私はPutIntを使ってCLから印刷できないのですか?私は何をする必要がありますか?

%include "io.mac" 
.STACK 100H 
.DATA 

    msg4 db "The result is: ",0 
    .CODE 
     .STARTUP 
    mov ECX,1111101100000101b 


    PutStr msg4 ; print msg4 on the output 
    add CL, CH ; Add results 
    PutInt CL ; output int from register CL <-- line 13 
    nwln 
    done:       
     .EXIT 
+2

'PutInt'はx86アセンブリ命令ではありません。それはある種のマクロのように見えます。使用しているマクロのドキュメントを確認するか、コードを表示する必要があります。 'PutInt'マクロが他のすべてのマクロが展開された状態で十分に短い場合は、関連するコードで質問を編集してください。ところで、CPUの状態をチェックするためにデバッガを使用するのではなく、初心者のためにデバッグ出力を混乱させるのは非常に一般的ですが、CPUの実際の状態は実際とは異なります。 – Ped7g

+0

明らかに、それはいくつかの本と一緒に行くマクロパッケージです:https://stackoverflow.com/questions/21169375/unable-to-open-include-file-io-mac-assembly –

答えて

2

PutIntは8ビットのオペランドを使用しません。しかし、あなたはCXを使うことができます:

高位バイトは単純なmov操作で消去されます。それだけです。

+1

彼らはレジスタとして_ECX_を使用すると32ビットプロセッサ彼らは単に 'movzx cx、cl'を使って_CL_を_CX_に伸ばすこともできます。 –

+0

これらを一緒に追加すると-1280になります。これはなぜでしょうか? – Rubiks

+0

@Rubiks 'add CL、CH'はCHの値をとるため、結果をCLに格納するCLに追加します。 _CX_レジスタ(_CH_を含む)の残りの部分を変更することはできません。だから、CHに入っていたものは、追加後にCHに残っています。 –

関連する問題