0

我正在编写一个程序,它读取一个字符串,然后搜索某些关键字,如“cat”,并将其替换为“dog”。我只是不确定如何开始。我必须使用什么代码?

4

1 回答 1

3

对于 8 位字符,大致是这样的,有很多方法可以实现它:

  1. 设置si为指向字符串的第一个字符。

  2. mov al,[si]

  3. repnz scasb找到第一个字符的第一个匹配项。

  4. 将地址存储在某处。

  5. 设置di为指向替换字符串的第一个字符('dog'在本例中)。

  6. 设置cx/ecx/rcx为字符串长度。

  7. repz cmpsb

  8. 检查cx/ecx/rcx是否为零和最后一个字符匹配。

  9. 如果是,则匹配,因此复制到与(设置指针和首先)'dog'一起存储的地址。请注意,此方法仅在替换字符串不长于原始字符串时才有效。如果它更长,您可能需要保留一个新的内存块以避免缓冲区溢出。如果不匹配,则回溯到存储的地址,递增1(对于 16 位字符,递增 2),然后跳转到 2。()。当您到达字符串的末尾时,您还需要在此处检查。rep movsbsidisisimov al,[si]

  10. 准备好。或者,如果您想全部替换,如 sed s/cat/dog/g,从 1 开始循环,首先设置指针 ( si)(取决于您希望正则表达式引擎如何工作)。

对于 UTF-8(16 位字符),请替换以下内容:scasb-> scaswcmpsb-> cmpswmovsb-> movswal-> ax

对于 32 位代码,替换所有对 with 的引用和对withsiesi所有引用。diedi

对于 64 位代码,替换所有对 with 的引用和对withsirsi所有引用。dirdi

于 2012-11-29T19:20:28.840 回答