2017-11-27 10 views
2

私は以下のコードでいくつかの行を理解できません。各単語を別々の行に印刷

int sc=-1; 
while (strings[sc++]!=0) 
{ 
_asm{ 
PUSH SI; 
MOV SI,sc; get pointer 
MOV DL,strings[SI]; get character 
CMP DL,' '; if not space 
JNE next 
MOV AH,2H; display new line 
MOV DL,10H; what is significance of this line? 
INT 21H; And this one 
MOV DL,13H ; what is significane of this line 
next: MOV AH,2H; display character 
INT 21H; 
POP SI; 
} 
} 

コメントの中に私が書いた行がいくつかありますが、その意味はわかりません。また、私は、アセンブリ言語プログラミングに非常に新しいMとこれは私が10Hはおそらく改行のASCIIコードである10を読んでいる必要がありタイプミスであるテキストブック

+1

コードをインデントしてください。 – fuz

+0

編集ありがとう –

+1

このコードには複数の問題があります:間違ったASCIIコード(13と10の代わりに13Hと10H)を使用し、使用する前に 'sc'をインクリメントします。著者が明らかに自分のコードをテストしなかったので、より良い本を得ることを提案します。 – interjay

答えて

2
MOV DL,10H; what is significance of this line? 

で読むものです。画面上のカーソル1行を下に移動します。

MOV DL,13H ; what is significane of this line 

13HおそらくキャリッジリターンのASCIIコードである13を読んでいる必要がありタイプミスです。カーソルを画面の一番左に移動します。

INT 21H; And this one 

INT 21H命令を使用すると、AHレジスタに機能番号を入れている誰のための機能を実行するDOSシステムコールです。


スペース文字でない場合、コード全体が現在の文字を出力します。
空白文字の場合、コードは改行シーケンス(改行+改行)を実行します。 MOV DL,strings[SI]命令がMOV DL,strings[SI-1]に置き換えている場合

このため、インラインアセンブリコードの前に起こったポストインクリメントsc++の、コードは正常に動作します。


オタクをキャッチするためにinterjayに感謝します。

+0

ありがとう。あなたはそれを完全に説明しました –

+3

ASCIIコードは実際には間違っています。 10と13の10進数ではなく、10と13の16進数でなければなりません(これはH接尾辞が表すものです)。 – interjay

+0

@interjayニースキャッチ。私はクレジットで答えを編集しました。 –

関連する問題