2017-04-11 5 views
-1

特殊なASCII文字を出力します。たとえば、ユーザーが書き込んだ場合:総会:プログラムは、私は、入力と出力ASCII特殊文字のユーザーを頼むMASMでプログラムを書くことに助けが必要

hello \01 i missed you \03. 

それは出力にそれを同じように:

MOV AH, 6 
MOV DL, 1; print ☺ 
INT 21H 

:私はスマイリーフェイスを印刷するために、私は次のコードを使用することができます知っている

hello ☺ i missed you ♥. 

しかし、ユーザーが\01を入力したときに自動的に行う方法はわかりません。どんな援助も喜んで感謝します。

答えて

0

DOSサービスによる入力を読み取っている場合は、"\01"は3バイト(92,48,49)にエンコードされます(これらの値がどこにあるのかわからない場合はASCIIテーブルをチェックしてください)。

だから、あなたが必要なものを2バイトの値が1のシングルバイトの文字列にこれらの3つのバイトを交換し、文字列の残りの部分を移動させることである(すなわち。文字列置換)、それを圧縮するために「左」。

'\'文字を検出する何らかのパーサーを書かなければならないものを、文字列のどの部分に置き換えるべきかを知るためには、後ろの数字/文字を読んでください(正しい構文を定義する必要があります。 \が16進数のバイト値を形成した後に常に2文字の場合、"\4A"Jになります。つまり、"\122"zになります)、数字/文字を変換しますバイト値に変換し、そのバイト値をその解析部分の代わりに使用します。など「プロ」の品質ソリューションのも

\\01が数字を解析せずに\01に回すように、あなたのパーサは\<EOF>のような無効な構文を生き残るために、そしていくつかの合理的な構文を持つように十分に堅牢であることを確認し、...(/ Cを参照してくださいインスピレーションのためのC++の文字列リテラル構文ルール)。

おそらく最初に文字列置換機能を起動し、次にトリガシーケンス検出器を書き、値のパーサを書き込みます(可能であればそれらを別の関数として書き出し、次の対象に移動する前にデバッグ/検証します)。完全なソリューションに変換します。

+0

おかげで、私はそれをしようとします。 – MrGamez22

関連する問題