Изменить текст читаемостью наоборот

Тема в разделе "WASM.BEGINNERS", создана пользователем Valentin, 13 дек 2017.

  1. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    128
    Всем привет.
    Есть в буфере слово "на", как получить "ан" ?? или "лимон" изменить на "номил"??
    Заранее спасибо.
     
  2. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Пройтись до середины слова, попарно меняя первый и последний символы.
    Код (Text):
    1.  
    2. char str[80];
    3. strcpy(str, "test string");
    4. for (char *p=str, *e=str[strlen(str)-1]; p < e; ++p, --e)
    5. {
    6.     char tmp = *p;
    7.     *p = *e;
    8.     *e = tmp;
    9. }
    10. printf("Reversed string: %s", str);
    11.  
     
  3. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    128
    Принцип понятен, но как это будет выглядеть на АСМе? (спасибо)
     
  4. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Например, так:

    Код (Text):
    1.  
    2. string:  
    3. .ascii "test string";  
    4. strend:  
    5.    
    6. reverse:  
    7.   mov string, %rcx  
    8.   mov strend, %rdx
    9.   cmp %rcx, %rdx
    10.   jae 2f
    11.   1:
    12.   mov (%rcx), %al
    13.   mov (%rdx), %ah
    14.   mov %ah, (%rcx)
    15.   mov %al, (%rdx)
    16.   inc %rcx
    17.   dec %rdx
    18.   cmp %rcx, %rdx
    19.   jb 1b
    20.   2:
    21.   ret
    22.  
     
  5. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    128
    Спасибо, это похоже на правду, кружка пива с меня.
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Читать данные с конца, сменить направление адресации и кодить не нужно :yes4:

    SadKo,

    > mov (%rcx), %al

    Очень плохой пример, не системный(общепринятый) синтаксис. Адресация в асм всегда и везде в [ptr], выражения в (fun).
     
  7. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Вполне нормальный GAS'овский синтаксис. К нему просто надо немного привыкнуть.
     
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    SadKo,

    Тоесть по вашему тот, кто хорошо не знает набор инструкций должен открыть ман, что бы определить где там адреса или сопоставить нормальный синтаксис с этим, изучив конкретный компиль ?
    Пример должен быть наглядным, вы бы есчо в бинарном виде показали, ну что бы не напрягать читающего всякими левыми компилями :sarcastic:
     
  9. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Да ладно вам, успокойтесь. Судя по посту, человек разобрался - уже хорошо.