Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Чемпионы рейтинга экспертов в этой рассылке Номер выпуска: | 1361 | Дата выхода: | 18.06.2010, 03:30 | Администратор рассылки: | Лысков Игорь Витальевич, Старший модератор | Подписчиков / экспертов: | 236 / 63 | Вопросов / ответов: | 1 / 1 | IRC-канал по теме: | #assembler | Вопрос № 179055: Доброго времени суток, уважаемые эксперты! Помогите, пожалуйста с такой задачей: Определить число вхождений указанного символа в заданную строку. Задача по теме "Прерывания". Решение нужно для ТАСМ. В правилах задания вопроса... Вопрос № 179055: Доброго времени суток, уважаемые эксперты! Помогите, пожалуйста с такой задачей: Определить число вхождений указанного символа в заданную строку. Задача по теме "Прерывания". Решение нужно для ТАСМ. В правилах задания вопроса сказано, что желательно указывать методичку или что-то подобное... У нас такой "методичкой" является учебник В.Юрова. Отправлен: 12.06.2010, 03:16 Вопрос задал: Даниил Цветков, Студент Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич, Старший модератор : Здравствуйте, Даниил Цветков. Вот Вам программа для решения Вашей задачи
Код: .model small .data ;Структура для ввода строки по функции 0ah max db 128 ;макс размер буфера count db 0 ;реальный размер string db 129 dup (0) ;буфер
;сообщения sString db 'Enter string: $' sSymbol db 0dh,0ah,'Enter symbol: $' sCount db 0dh,0ah,'Count = $' sAny db 0dh,0ah,'Press any key$'
.code .286 .startup
mov ax, @DATA ;ds уже = @DATA (макро .startup) mov es, ax ;надо чтобы и es = @DATA
lea dx, sString ;приглашение ввести строку mov ah, 9 int 21h
lea dx, max ;вводим строку mo v ah, 0ah int 21h
lea dx, sSymbol ;приглашение ввести символ mov ah, 9 int 21h
mov ah, 1 ;вводим в al символ int 21h
;ищем и считаем вхождения символа в строку xor si, si ;число вхождений mov cx, si mov cl, count ;длина строки lea di, string ;адрес строки sca_loop: jcxz output ;если длина = 0, то не ищем repne scasb ;ищем, пока неравно jne output ;если будет не равно, то значит дошли до конца inc si ;равно - считаем jmp sca_loop ;продолжаем
output: ;выводим результат lea dx, sCount ;строка 'Count = ' mov ah, 9 int 21h
;выведем десятичное число mov ax, si ;число xor cx, cx ;количество цифр mov bx, 10 ;будем делить на 10 div_loop: xor dx, dx ;подготавливаемся к делению div bx ;dx:ax / bx push dx ;сохраним остаток - очередную младшую цифру inc cx ;считаем цифры test ax, ax ;есть еще? jnz div_loop out_loop: ; выводим в обратном порядке pop dx ;извлечем из стека or dl, '0' ;превратим в символ mov ah, 2 int 21h ;выводим loop out_loop ;по всем
lea dx, sAny ;выводим 'Press any key' mov ah, 9 int 21h
mov ah, 8 ;ждем нажатия int 21h mov ax, 4c00h ;завершаемся int 21h
end
----- Удачи! Ответ отправил: Лысков Игорь Витальевич, Старший модератор Ответ отправлен: 14.06.2010, 15:23 Номер ответа: 262103 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Абонент Skype: igorlyskov Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 262103 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий