みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アセンブラ、ファンクションコールの使い方

入力した一文字を改行して表示させるものを作ってます。
以下のものを書いてみまして、
一文字読み取って改行はしますが表示されません。
アドバイス頂けますでしょうか?

環境は MASM 32 です。

name double
.model small
.stack 100
.data
prompt db 0ah,0dh,"? $"
.code
start:
movax, @data
movds, ax
lea dx, prompt

movah, 9;output string
int21h

movah, 1;get keyboard input and store into al
int21h

mov dl, 0ah
mov ah, 2
int 21h

mov dl, 0dh
mov ah, 2
int 21h

mov dl, al
movah, 2 ;output char from dl
int 21h

movax, 4c00h;exit
int 21h

endstart

投稿日時 - 2008-02-01 10:32:42

QNo.3733447

困ってます

質問者が選んだベストアンサー

文字出力(ah=2)のファンクションコールは AXレジスタを破壊するようです

ah=1で読み込んでから 別の破壊されないレジスタにALを保存するか
スタックにプッシュしておいて改行を行い
保存したレジスタまたはスタックからデータを取り出して表示させましょう

mov ah, 2
int 21H
# ここでスタックにプッシュ
push ax
mov ah,2
mov dl,0dh
int 21H
mov ah,2
mov dl,0a
int 21H
# スタックからポップ
pop ax
mov ah,2
mov dl,al
int 21H

といった具合でしょう

投稿日時 - 2008-02-01 10:56:42

お礼

>文字出力(ah=2)のファンクションコールは AXレジスタを破壊するようです

本には書いてなかったんですが 気付かなかったのは経験不足ですね。
他のレジスタに保存して解決です。 プッシュの方法も書いて頂き勉強になりました。
回答ありがとうございました。

投稿日時 - 2008-02-01 20:40:26

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問