Как указать начало строки и конец

Тема в разделе "WASM.BEGINNERS", создана пользователем yokohama, 22 ноя 2011.

  1. yokohama

    yokohama New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2011
    Сообщения:
    13
    Подскажите, пожалуйста, как написать программу чтобы указать начало строки, и конец, для поиска символа..может быть если есть длина строки то достаточно будет указать начальный адрес, может быть это связано с debug'ером.
    Код (Text):
    1. string db "Поиск символа в этой строке.",0ah,0dh,'$';строка для поиска
    2. mes1 db 0ah,0dh,'Исходная строка:','$'  ;Это пропустил!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Это и есть начало поиска???
    3. mes2 db 0ah,0dh,'Введите символ, на который следует заменить найденный'
    4.    db 0ah,0dh,'$'
    5. mes3 db 0ah ,0dh,'Новая строка: ',"$"
    6. .code
    7.    assume ds:@data,es:@data;привязка ds и es к сегменту данных
    8. main:;точка входав програму
    9.    mov ax,@data;загрузка сегментных регистров
    10.    mov ds,ax
    11. ;---------------
    12.    mov es,ax;настройка es на ds
    13.    mov ah,09h
    14.    lea dx,mes1
    15.    int 21h;вывод сообщения mes1
    16.    lea dx,string
    17.    int 21h                                                                                              
    18.    cld;сброс DF
    19.    lea di,string;загрузка в di смещения string
    20.    mov сx,28;для префикса repne - длина строки
    21. ;поиск в строке string до тех пор, пока
    22. ;символ в al и очередной символ в строке
    23. ;не равны: выход — при первом совпадении
    24. ;----------------------------------------------------------------------------------------------------------------------------
    25. cycl:
    26.   mov al,'a';символ для поиска - "а"(кириллица)
    27. repne scan string
    28.    je found;если элемент найден, то переход на
     
  2. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Думаю да.
    этот вывод непонятен.
    Зачем тогда '$' если символов 28 (cx = 28)?
    Строки для начала возьми латиницей.
    Так программа твоя работает, в чем вопрос то?
     
  3. yokohama

    yokohama New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2011
    Сообщения:
    13
    Мне преподаватель сказал что в дебагере указывать адрес нужно какой-то


    Вот вся программа, если кто умеет хорошо составлять алгоритм, помогите пожалуйста.

    Код (Text):
    1. .MODEL small
    2. .STACK 256
    3. .data
    4. fnd db 0ah,0dh,'Символ найден','$'
    5. nochar db 0ah ,0dh,'Символ не найден.','$'
    6. mesl db Oah,0dh,'Исходная строка:','$'
    7. string db "Поиск символа в этой строке.",0ah,0dh,'$'    ;строка для поиска
    8. mes2 db 0ah,0dh,'Введите символ, на который следует заменить найденный'
    9.    db 0ah,0dh,'$'
    10. mes3 db 0ah ,0dh,'Новая строка: ',"$"
    11. .code
    12.    assume ds:@data,es:@data     ;привязка ds и es к сегменту данных
    13. main:                      ;точка входав програму
    14.    mov ax,@data ;загрузка сегментных регистров
    15.    mov ds,ax
    16. ;---------------
    17.    mov es,ax    ;настройка es на ds
    18.    mov ah,09h
    19.    lea dx,mes1
    20.    int 21h    ;вывод сообщения mes1
    21.    lea dx,string
    22.    int 21h      ;вывод string
    23.    cld;сброс DF
    24.    lea di,string ;загрузка в di смещения string
    25.    mov сx,28 ;для префикса repne - длина строки
    26. ;поиск в строке string до тех пор, пока
    27. ;символ в al и очередной символ в строке
    28. ;не равны: выход — при первом совпадении
    29. ;---------
    30. cycl:
    31.   mov al,'a'  ;символ для поиска - "а"(кириллица)
    32. repne scan string
    33.    je found ;если элемент найден, то переход на found
    34.    mov ah,09h
    35.    lea dx,nochar;иначе, если не найден, то вывод сообщения nochar
    36.    int 21h
    37.    jmp exit
    38. ;----------
    39. found:
    40.    mov ah,09h
    41.    lea dx,fnd ;вывод сообщения об обнаружении символа
    42. ;корректируем di для получения значения
    43. ;действительной позиции совпавшего элемента
    44. ;в строке и регистре al
    45.    int 21h
    46.    dec di
    47. ;--------
    48. new_char:;блок замены символа
    49.    mov ah,09h
    50.    lea dx,mes2
    51.    int 21h
    52.    mov ah,01h                                            
    53.    int 21h;в al - введенный символ
    54.    stos string;сохраним введенный символ
    55. ; (из al) в строке
    56. ;string в позиции старого символа
    57.    mov ah,09h
    58.    lea dx,mes3
    59.    int 21h
    60.    lea dx,string
    61.    int 21h
    62.    inc di
    63.    jmp cycl
    64. ;-------------
    65. exit:
    66.    mov ax,4c00h
    67.    int 21h
    68. end main
     
  4. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Так у него спроси что он хотел )))