プロが教えるわが家の防犯対策術!

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

環境は 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

A 回答 (1件)

文字出力(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

といった具合でしょう
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2008/02/01 20:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!