我正在编写一个程序,它读取一个字符串,然后搜索某些关键字,如“cat”,并将其替换为“dog”。我只是不确定如何开始。我必须使用什么代码?
1 回答
对于 8 位字符,大致是这样的,有很多方法可以实现它:
设置
si为指向字符串的第一个字符。mov al,[si]repnz scasb找到第一个字符的第一个匹配项。将地址存储在某处。
设置
di为指向替换字符串的第一个字符('dog'在本例中)。设置
cx/ecx/rcx为字符串长度。repz cmpsb检查
cx/ecx/rcx是否为零和最后一个字符匹配。如果是,则匹配,因此复制到与(设置指针和首先)
'dog'一起存储的地址。请注意,此方法仅在替换字符串不长于原始字符串时才有效。如果它更长,您可能需要保留一个新的内存块以避免缓冲区溢出。如果不匹配,则回溯到存储的地址,递增1(对于 16 位字符,递增 2),然后跳转到 2。()。当您到达字符串的末尾时,您还需要在此处检查。rep movsbsidisisimov al,[si]准备好。或者,如果您想全部替换,如 sed
s/cat/dog/g,从 1 开始循环,首先设置指针 (si)(取决于您希望正则表达式引擎如何工作)。
对于 UTF-8(16 位字符),请替换以下内容:scasb-> scasw、cmpsb-> cmpsw、movsb-> movsw、al-> ax。
对于 32 位代码,替换所有对 with 的引用和对withsi的esi所有引用。diedi
对于 64 位代码,替换所有对 with 的引用和对withsi的rsi所有引用。dirdi