2016-09-11 6 views
0

私はDosBoxを使用していますが、割り込みからバッファから読み込んだ文字列があります。私は最初の文字がメモリに格納されている場所を知っています、次の文字にどのようにインクリメントするのですか?MS-DOSデバッガ、次のメモリ位置に移動

0100 mov ah, 0a 
0102 mov dx, 111 
0105 int 21 
0107 mov dl, [113]  ;first character here 
010b mov ah, 02 
010d int 21 
010f int 20 
0111 db 0f 

質問はどのように文字列の次の文字に増分するのですか?文字列「Hello」を入力してinc dlを使用すると、単に「e」の代わりに「I」という文字が表示されます。

+2

MOV 113、および対処するための_BX_を使用しています。その後、BXをインクリメントして次のメモリ位置に移動することができます。 –

+0

コンピュータのメモリの仕組みを知っていますか?その '[113]'の意味は何ですか?どのようなレジスタがあるか知っていますか? '[113]'を '113'に変更するとどうなりますか?なぜ 'mov dx、111'が入力を呼び出すのですか? (私は何が起こっていなければならないかを知りたいと思っています)。 – Ped7g

答えて

0

現在の文字を指すようにレジスタを選択する必要があります。一度これがあると、ポインタを進めるための指示だけでなく、ポインタが指しているバイトを読み込むための指示があります。

ユーザー入力関数で読み取る文字の数がわからないため、この関数を任意の入力値で使用するには、何らかのループが必要です。あなたが単純なものにしたいのであれば、入力された内容にかかわらず、最初の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 
関連する問題