【问题标题】:Replacing a string with another string用另一个字符串替换一个字符串
【发布时间】:2013-12-03 21:47:26
【问题描述】:

我正在使用 MASM,我正在尝试与另一个字符串交换 我想把test改成rull

我正在使用一个字符串数组:This is a test 我正在尝试搜索test 并将其替换为rull

我什么都做了,但是我有两个问题

  1. 我必须反写rullllur
  2. 它打印trull,因此替换后的输出将是trull。 我不确定t 是从哪里来的。

有人可以帮忙吗?

这是我到目前为止所做的:

分类 lea edi, str2 mov ecx, str2 的长度 mov eax, '测试' 雷普内斯卡斯布 我发现 未找到 dec edi 调用 crlf 找到: mov eax, 'llur' 斯托德 lea edi, str2 L1: mov eax, [edi] 调用 writechar 添加edi,输入str2 循环 l1

【问题讨论】:

    标签: assembly x86 masm


    【解决方案1】:

    1- 我必须把 rull 反过来写,llur

    当您将字符串文字用作直接操作数时,这就是 MASM 解释字符串文字的方式。

    2- 它用 rull 打印 t,所以替换它后的输出将是 trull 我不确定 t 是从哪里来的

    SCASB 在比较 AL[EDI] 之后增加了 EDI,所以当 REPNE SCASB 完成时,您将比您要查找的字符多一个字节。你有一个dec edi 来解决这个问题,但是你用je found 跳过了那个指令。

    您还打算寻找'test' 还是仅仅寻找't'?您正在将 'test' 移动到 eax(最终将成为 'tset'),但您只扫描一个字节。

    【讨论】:

    • 我曾尝试使用之前没有找到 je 的代码,但它确实有效,但是,每次我再次尝试使用循环时,它都会删除所有内容。它还会在第二次将 rull 更改为 rurull ,然后在第三次将 rururull 更改为类似的东西,然后将其删除,然后将删除 is 和 this,最后它会声称未找到测试!
    • 如果不知道输入字符串的样子,您的错误描述实际上并没有多大意义。您应该在问题中包含它以及您获得的输出。
    • 我做到了。 “这是一个测试”
    • 我多次更换都没有问题。我用字符串“This is a test and another test”进行了尝试,得到了输出“This is a rull and anorull rull”(“another”中的“t”匹配,因为您只扫描单个字符)。跨度>
    • 我想让用户选择是否要继续搜索测试,这就是为什么我再做一次
    猜你喜欢
    • 2019-05-14
    • 1970-01-01
    • 2011-04-06
    • 2017-01-28
    • 2017-03-07
    • 2021-06-15
    • 1970-01-01
    • 2011-03-25
    相关资源
    最近更新 更多