Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2010, 23:35   #1
PeRt
 
Регистрация: 22.04.2010
Сообщений: 6
Сообщение Не знаю в чем ошибка

программа вроде правильно написана, но если в строку заносишь меньше 30 символов, то выводит сообщение об ошибке например я заносил в строку . . a123 .$ , но знак доллара при поиске он не видит ??

Код:
data segment
    
str1 db '.  . a123 .$'
    c=$-mas
ends

stack segment
    dw   128  dup (0)
ends

code segment
start:
      mov ax, data
      mov ds, ax
      mov es, ax
      
      mov cx,c-1
      xor di,di
      mov al,'.'
    S:repne scasb
      jne Q
      cmp str1[di],61h
      jl D
      cmp str1[di],7ah
      jg D
      sub str1[di],20h
    D: push cx
      push di
      mov cx,c-1
      mov ah,' '
    M:mov bl,str1[di]
      mov str1[di],ah
      mov ah,bl
      inc di
      loop M
      pop di
      pop cx
      inc cx
      loop S
      
    Q:lea dx,str1
      mov ah,9h
      int 21h
      
      mov ax, 4c00h
      int 21h    
ends

end start

Последний раз редактировалось Stilet; 26.05.2010 в 07:59.
PeRt вне форума Ответить с цитированием
Старый 26.05.2010, 07:01   #2
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

объясните что делает это цикл, зачем вы меняете текущую стоку, зачем перед заменой сохраняете символы
Код:
M:mov bl,str1[di]
mov str1[di],ah
mov ah,bl
inc di
loop M
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 26.05.2010, 09:20   #3
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Цитата:
Сообщение от PeRt
программа вроде правильно написана, но если в строку заносишь меньше 30 символов, то выводит сообщение об ошибке например я заносил в строку . . a123 .$ , но знак доллара при поиске он не видит ??
Код:
  Q:lea dx,str1
      mov ah,9h
      int 21h
9-ая функция 21h прерывания будет выводить строку до первого встречного знака доллара, который эта функция воспринемает, как конец строки, поэтому "знак доллара при поиске не видит"
это что за бред! str1 db '. . a123 .$'
c=$-mas

Если хотите указать количество символов в строке str1 должно быть
str1 db '. . a123 .$'
len=$-str1
от текущего адреса (обозначается знаком $) отнять адрес начала строки str1
символ с в ассемблере зарезервирован и относится к языку С/С++
переменной с именем mas в тексте вашей программы нет, поэтому она не должна была компилироваться

Последний раз редактировалось Mikl___; 26.05.2010 в 13:30.
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск (не знаю где ошибка) denisov PHP 9 17.02.2010 16:50
Не знаю где ошибка 24nastya11 Помощь студентам 2 20.09.2009 20:43
Не знаю что за ошибка Droid Общие вопросы Delphi 9 24.05.2008 22:18
Не не знаю в чем проблема с IdUDPServer D@rk M@k Работа с сетью в Delphi 2 28.12.2007 15:46