Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа со строкой, Подсчитать сумму цифр в строке 
:(
    Опции темы
user2
Дата 22.4.2007, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 27.3.2007

Репутация: нет
Всего: 1



У меня следующая задача. Буду признателен, если кто поможет.
 Пользователем вводится строка произвольной длины из произвольных символов - буквы, цифры,знаки препинания, пробелы и т д. 
 Необходимо подсчитать сумму всех цифр, имеющихся в этой строке и вывести её(сумму) на экран.
Ещё одно условие - при написании программы желательно по максимуму использовать функции LODSB(w,d), STOSB(w,d), SCASB(w,d) , MOVSB(s,w) и REP(E,NE)
PM MAIL   Вверх
Mikl__
Дата 30.5.2007, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 18.5.2007

Репутация: нет
Всего: 1



Код

.686P
.model flat
include windows.inc
includelib user32.lib
includelib kernel32.lib
extern _imp__MessageBoxA@16:dword
extern _imp__LoadCursorA@8:dword
extern _imp__wsprintfA:dword
.code
start: xor ebx,ebx
    mov ecx,200;максимальное количество символов=200
    xor eax,eax
    xor ebx,ebx
    mov edi,offset buff;позиционируемся на строку с символами
    mov esi,edi
    repne scasb;ищем ноль, завершающий строку 
    not ecx    
    add ecx,200;подсчитали количество символов
a1:    lodsb;получили символ в al
    sub al,30h
    cmp al,9;проверили символ на принадлежность к цифрам, т.е диаппазон между 30h и 39h
    ja a2;не цифра переход к следующему символу
    add ebx,eax;если цифра, то складываем ее
a2:    loop a1
    push ebx;сумма всех цифр, имеющихся в этой строке 
    push offset fmat2
    push offset buff1
    call _imp__wsprintfA
    pop ecx
    pop ecx
    pop ecx;выравниваем стек    
    push 0
    push offset head;выводим на экран
    push offset buff1 
    push 0
    call _imp__MessageBoxA@16
    ret
buff    db 'A0BCD1EF4GHI1234567890',0;наша строка
buff1    db 25 dup(0);строка результата
fmat2    db  '%02u',0
head    db 'Cursor',0;заголовок MsgBox'a
end start


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0614 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.