現在の文字を指すようにレジスタを選択する必要があります。一度これがあると、ポインタを進めるための指示だけでなく、ポインタが指しているバイトを読み込むための指示があります。
ユーザー入力関数で読み取る文字の数がわからないため、この関数を任意の入力値で使用するには、何らかのループが必要です。あなたが単純なものにしたいのであれば、入力された内容にかかわらず、最初の3文字だけを印刷するようにすることができます。ユーザーが入力したものを正確に印刷したいと仮定します。
これに対処する良い方法は、CXレジスタに配置されたカウントでループ本体を繰り返す(ジャンプする)LOOP命令を使用することです。ユーザー入力関数は文字カウントを提供するので、ループ初期化のためにCXレジスタ(CL)の下部にその文字数を読み込むだけです。また、現在の文字を指すポインタも必要です。一度ループ本体に入ると、 "現在の文字"ポインタにある文字を読み込み、DOSの文字出力関数を呼び出してコンソールに出力します。その後、すべての文字が完了するまでポインタとLOOPを進めることができます。 LOOP命令が出現するたびに、CXはゼロに達するまで減分されることに注意してください。それがゼロになると、LOOPはもはやボディにジャンプしなくなり、単にLOOPに続く命令に進むだけです。
注:ユーザー入力を読み込んだ後でCRLFを出力しない場合、改行はなく、新しい出力はコンソールで入力が読み取られた場所を上書きします。効果的に何も起こっていないように見えます。
はここにあなたの修正されたサンプルです:_BX_に
0100 MOV AH,0A
0102 MOV DX,
0105 INT 21 ;input string using buffer at
0107 MOV DX,0120
010A MOV AH,09
010C INT 21 ;output CRLF sequence first
010E MOV SI,0124 ;point SI at byte containing chars read
0111 XOR CX,CX ;CX = 0
0113 MOV CL,[SI] ;CX = chars_read
0115 INC SI ;mov SI to next char to display
0116 MOV DL,[SI] ;DL = character SI is pointing at
0118 MOV AH,02
011A INT 21 ;display character
011C LOOP 0115 ;loop back to INC instruction until no more chars left
011E INT 20 ;exit
0120 DB 0D ;CR
0121 DB 0A ;LF
0122 DB 24 ;"$" DOS string terminator
DB 20 ;buffer start; max characters = 32
0124 DB 00 ; chars read goes here
0125 DB 00 ; input chars are read here
MOV 113、および対処するための_BX_を使用しています。その後、BXをインクリメントして次のメモリ位置に移動することができます。 –
コンピュータのメモリの仕組みを知っていますか?その '[113]'の意味は何ですか?どのようなレジスタがあるか知っていますか? '[113]'を '113'に変更するとどうなりますか?なぜ 'mov dx、111'が入力を呼び出すのですか? (私は何が起こっていなければならないかを知りたいと思っています)。 – Ped7g