• 締切済み

文字を表示するファンクションコールについて

アセンブリ言語プログラムについての質問です。 MASM32を使っています。AXレジスタの数値をah→表示、al→表示というプログラムを作ったのですが、al→表示の部分がうまく機能しせません。以下にプログラムを書きます。 (1)mov ax,3132h (2)mov dl,ah (3)mov ah,02h (4)int 21h (5)mov dl,al (6)mov ah,02h (7)int 21h (分かりやすく番号をふっています。実際のプログラムには番号はふっていないです。) 具体的どこが機能しないかというと、(5)番目の命令のalレジスタの内容をdlレジスタに転送するという命令が機能しません。デバックのT命令で確認したところ(5)番目の命令がNOPとなっていました。 このプログラムを実行すると結果的に表示されるのは「11」という文字です。(本来は12と表示したい。) 質問 なぜ(5)番目の命令がnopとなるのでしょうか?

みんなの回答

回答No.1

nopの件は、よく分かりませんが。。。 ah=02hでのint21h呼び出しは、戻り値としてalに、入力のdlが戻されるようです。 そのため、呼び出し前にalに何か入れておいても、呼出し後にはdlの値に置き換えられてしまいます。 結果、このプログラムでは、次のah=02hのint21hで前回と同じ文字(この場合は1)が表示されることになります。 ご質問のプログラムを (1) mov ah,31h (2)(3)(4) (そのまま) (4a) mov al,32h (5)(6)(7) (そのまま) のようにすれば、「12」と表示されると思います。 こちらなど、ご参考にどうぞ。(英語です。日本語の説明が見つかりませんでした。) http://www.ctyme.com/intr/rb-2554.htm

参考URL:
http://www.ctyme.com/intr/rb-2554.htm
すると、全ての回答が全文表示されます。

関連するQ&A