文字列を読み取り、「猫」などの特定のキーワードを検索して「犬」に置き換えるプログラムを作成しています。私はそれをどのように開始するかについて確信が持てません。どのコードを使用する必要がありますか?
1 に答える
8 ビット文字の場合、大まかに次のようになります。これを実装するには多くの方法があります。
si
文字列の最初の文字を指すように設定します。mov al,[si]
repnz scasb
最初の文字の最初の一致を検索します。アドレスをどこかに保存します。
di
置換文字列の最初の文字を指すように設定します ('dog'
この場合)。cx/ecx/rcx
文字列の長さに設定します。repz cmpsb
cx/ecx/rcx
がゼロで最後の文字が一致することを確認してください。はいの場合は一致するので、 (set pointers and first)
'dog'
で格納されたアドレスにコピーします。このアプローチは、置換文字列が元の文字列よりも長くない場合にのみ機能することに注意してください。それよりも長い場合は、バッファ オーバーフローを回避するために、新しいメモリ ブロックを予約する必要がある場合があります。一致しない場合は、格納されているアドレスに戻り、1 (16 ビット文字の場合は 2) ずつインクリメントし、2 にジャンプします。 ( ) 文字列の最後に到達した場合は、ここもチェックする必要があります。rep movsb
si
di
si
si
mov al,[si]
準備。または、 sed のようにすべてを置き換えたい場合は、
s/cat/dog/g
1 からループし、si
最初にポインター ( ) を設定します (正規表現エンジンをどのように動作させたいかによって異なります)。
UTF-8 (16 ビット文字) の場合は、次を置き換えます: scasb
-> scasw
、cmpsb
-> cmpsw
、movsb
-> movsw
、al
-> ax
。
32 ビット コードの場合、 へのすべての参照と へのすべての参照をsi
にesi
置き換えdi
ますedi
。
64 ビット コードの場合、 へのすべての参照と へのすべての参照をsi
にrsi
置き換えdi
ますrdi
。