Помогите с SCASB, делая как в примерах а все время одно и тоже

Тема в разделе "WASM.BEGINNERS", создана пользователем lcat, 16 сен 2008.

  1. lcat

    lcat New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    9
    Добрый день, я в ассемблере новичок, не понимаю почему выполняеться всегда метка false
    а в метку true не попадаем. Что делаю не так.
    Программа простая, должна найти в строке символ. Пишу ее на TASM.

    Код (Text):
    1. MODEL SMALL
    2. STACK 256
    3. DATASEG
    4.     zero     DB '00000',10,13,'$'
    5.     one  DB '11111',10,13,'$'
    6.     str1       db   'Privet kak dela'
    7.     str1_len   equ  $-str1
    8. CODESEG    
    9. start: 
    10.     mov ax,@data       
    11.     mov ds,ax
    12.  
    13.     cld
    14.     mov al,'k'
    15.     mov di,offset str1
    16.     mov cx,offset str1_len         
    17. repne   scasb
    18.     jz true
    19. false:
    20.     lea dx,zero
    21.     mov ah,09h
    22.     int 21h
    23.     jmp exit
    24. true:
    25.     lea dx,one
    26.     mov ah,09h
    27.     int 21h
    28.     jmp exit
    29. exit:
    30.     mov ax,4C00h       
    31.     int 21h
    32. end start
    После сборки и запуска
    выводит
    00000
    Хотя поиск произвожу по символу 'k'.
     
  2. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Upd врал =), и в cx не адрес длины строки, а сама длина..
     
  3. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    зачем тут offset? =)
     
  4. lcat

    lcat New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    9
    Velheart
    А что значит "Upd врал" ?
    Я переписал, но все тоже самое :dntknw:
    Код (Text):
    1.     cld
    2.     mov al,'k'
    3.     mov di,offset str1
    4.     mov cx,15          
    5. repne   scasb
    6.     je true
    Все время 00000, хотя как видно k содержиться в строке.
     
  5. lcat

    lcat New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    9
    nobodyzzz
    Да я понял это уже :)
     
  6. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Чет мне сначало показалось, что надо в si строку засовывать, я написал, а потом исправил =)
     
  7. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Может в es загрузить data?
     
  8. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Именно так.
     
  9. lcat

    lcat New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    9
    Velheart Vov4ick
    Вы имеете ввиду замена.
    Код (Text):
    1. start: 
    2.     mov ax,@data       
    3.     mov ds,ax
    на
    Код (Text):
    1. start: 
    2.     mov ax,@data       
    3.     mov es,ax
    Тоже самое, только вмете с 00000 мусор сыпеться на экран, чертов компилятор.
     
  10. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    :) С языка ассемблера нет компиляторов, есть только трансляторы. Поэтому следует говорить "чёртов я".
    Настраивать надо и ES и DS. Вообще, пишите ком-файлы, чтобы за вас всё делала ДОС.
    mov ax, dataseg
    mov ds,ax
    mov es,ax
     
  11. lcat

    lcat New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    9
    Vov4ick
    Вуххууу воны дзена, спасибо вам огромное. Заработало.
    Как только настроил es и ds :)
    Спасибо.