2011-06-20 8 views
1

以下のインテリジェントアセンブリコードでは、条件付きジャンプの前にcmp(比較)命令を使用しますが、下のコードではジャンプしないでください。&は文字列を出力します。このアセンブリコードで何が問題なのですか

何が問題になりますか(フラットアセンブラ、Win-7 x32)。

ORG 100h 
USE16 


     mov ah, 09 
     mov dx, message 
     cmp ah, 10d 
     je condjmp 


condjmp: 
     int 21h 

     mov ah,01 
     int 21h 

     mov ah,4ch 
     int 21h 

message db 'conditional jump', 0Ah, '$' 
+0

jeとラベルの間に何かがありますか?多分それはちょうど落ちているのでしょうか? – Kevin

+2

私はx86アセンブリをプログラムしたことがないので、基本とは言えないかもしれませんが、 'je condjmp'と実際の' condjmp'アドレスの間に命令がない場合、 'condjmp'はどちらの方法でも実行されませんか?あるいは、あなたが含まなかった 'je'命令の後にコードがありますか? – Andrew

答えて

6

ジャンプはすぐにJMP命令に従っているので、ジャンプがとられているかどうか、あなたは常にラベルで終わる問題ではありませんラベルに行きます。サイモンはあなたのプログラムの論理的な流れに従うなら

あなたは条件ジャンプの両方のケースでそれを見つけるでしょう、あなたに言ったように

+0

はい、それは一種の落ち込みでした。同等の「戻り値」を追加すると、4ch、int21が助けになりました。 – goldenmean

0

はいGoldenmean、右の実行次の命令は次のようになります。

私が意味するのint 0x21で

JE真実ではない--->次の命令= INT 0x21で JE真------->の次の命令= INT 0x21で

もしあれば

これはあなたにとって十分なはずです。