2013-11-20 4 views
1

Я использую MASM, и я пытаюсь обменять строку с другой Я хочу изменить testrull сЗамена строки с другой строкой

Я использую массив строки: This is a test I» m пытается найти test и заменить его rull.

Я сделал все, однако, у меня есть 2 проблемы

  1. Я должен написать rull в обратном направлении, llur.
  2. Он печатает t с rull, поэтому выход после его замены будет trull. Я не знаю, где наступил t.

Может кто-нибудь помочь?

Это то, что я сделал до сих пор:

 
     cld 
     lea edi, str2 
     mov ecx, lengthof str2 
     mov eax, 'test' 
     repne scasb 
     je found 
     jne notfound 
     dec edi 

     call crlf 

found: mov eax, 'llur' 
     stosd 
     lea edi, str2 

L1: mov eax, [edi] 
     call writechar 
     add edi, type str2 
     loop l1 

ответ

0

1- я должен написать Rull в обратном направлении, llur

Вот только как MASM интерпретирует строковые литералы при использовании их как непосредственный операнд.

2- печатает т с Rull поэтому выход после замены будет проститутка Я не уверен, где же т пришел

SCASB Увеличивает EDI после сравнения AL против [EDI], поэтому, когда REPNE SCASB отделки вы будете за один байт мимо персонажа, которого искали. У вас есть dec edi, чтобы противостоять этому, но вы прыгаете мимо этой инструкции с je found.

Также вы намеревались найти 'test' или просто 't'? Вы перемещаете 'test' в eax (это действительно будет 'tset'), но вы только сканируете один байт.

+0

Я пытался использовать код, не найденный ранее, и он работал, однако он все время удаляет все, когда я пытаюсь использовать цикл снова. он также изменит rull на что-то вроде rurull во второй раз, затем rururull в третий раз, затем он удалит его, затем он удалит это и это, и, наконец, он утвердит, что тест не найден! – rullzing

+0

Ваше описание ошибки не имеет особого смысла, не зная, как выглядит строка ввода. Вы должны включить это в вопрос, а также вывод, который вы получаете. – Michael

+0

Я сделал. «Это тест» – rullzing

Смежные вопросы