0

現在、文字列を入力してメモリに保存し、画面に出力するプログラムを作成しています。しかし、私はこのタスクを解決するのに苦労しています。

私のソースコード:

IDEAL

MODEL small
STACK 100h

DATASEG

beggining db 100 dup(0)

CODESEG

Start:
   mov ax, @data
   mov ds, ax

   mov bx, offset beggining

myloop:

   mov ah, 06h
   mov dl, 0ffh
   int 21h

   mov [bx], al

   mov dl, [bx]
   mov ah, 02h
   int 21h

   inc bx

   cmp al, 13
   je quit   

   jmp myloop


quit:

   mov  ax, 4c00h
   int  21h


end Start

上記のソース コードでプログラムを実行すると、動作しません。無限ループに陥ります。

以前に入力した文字がプログラムで出力されないのはなぜですか??

ところで、私はTASMで書いています。

4

2 に答える 2

0

STDIN から文字を読み取り、それをエコーするINT 21Hfunctionを使用します。01だから代わりに

mov ah, 06h
mov dl, 0ffh
int 21h

あなたがしたい:

mov ah, 01h
int 21h

関数01hは「調理された」コンソール入力です。文字を入力してエコーします。また、control-C と control-break もチェックし、これらのキーのいずれかを押すとプログラムを終了します。また、Page Up などの拡張文字も解釈する可能性があります。思い出せません。

関数07hは「生の」コンソール入力です。control-C をチェックしたり、その他の前処理を行ったりしません。入力されたものを正確に提供します。

あなたの質問は、ユーザーが Enter キーを押した後に文字列を出力することになっていると言っていますが、に保存した文字列を出力するコードは表示されませんbeggining

(ちなみに、この言葉は通常「始まり」と綴られています)

于 2011-10-22T20:53:32.490 に答える