文字列の最後から特定の数の文字を削除する必要があります(3としましょう)。この特定の文字列については、私は 'Z'を見つけたときに動作し、sub edi、3でWを指すようにして、残りの文字列を0で保存します。文字列の最後から数える文字を削除するには?
INCLUDE Irvine32.inc
.data
source BYTE "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0
.code
main PROC
mov edi, OFFSET source
mov al, 'Z' ; search for Z
mov ecx, LENGTHOF source
cld
repne scasb ; repeat while not equal
sub edi, 3 ; now points to W
mov al, 0
rep stosb ; stores all characters after W with 0.
mov edx, OFFSET source
call WriteString
call CrlF
exit
main ENDP
end main
ただし、このコードを別のヌル終了文字列で動作させたいとします。その目的のために私はコードが以下に示すように、0(文字列の最後)を見つけようとしました。しかし、それは動作しません、それはちょうど全体の文字列を出力します。
文字列の末尾の検索を毎回変更しなくても文字列が変更されてもコードが確実に機能するようにするにはどうすればよいですか?
INCLUDE Irvine32.inc
.data
source BYTE "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0
.code
main PROC
mov edi, OFFSET source
mov al, '0' ; search for end of string
mov ecx, LENGTHOF source
cld
repne scasb ; repeat while not equal
sub edi, 3 ; now points to W ??
mov al, 0
rep stosb ; stores all characters after W with 0.
mov edx, OFFSET source
call WriteString
call CrlF
exit
main ENDP
end main
で、あなただけの1を必要とすることにも注意してください。コンパイル時定数文字列の場合、検索の必要がないので 'LENGTHOF'を使うことができます。また、 '' 0 'は '0'のASCIIコードで' 0'ではなく '48'であることに注意してください。 – Jester
この3つの試みのうち、少なくとも1つは閉じられませんでした。 :) –
私の喜び。これは、「質問する方法」wikiが何をするかをより詳しく示しているようです。 –