Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Работа со строкой


Автор: user2 22.4.2007, 22:56
У меня следующая задача. Буду признателен, если кто поможет.
 Пользователем вводится строка произвольной длины из произвольных символов - буквы, цифры,знаки препинания, пробелы и т д. 
 Необходимо подсчитать сумму всех цифр, имеющихся в этой строке и вывести её(сумму) на экран.
Ещё одно условие - при написании программы желательно по максимуму использовать функции LODSB(w,d), STOSB(w,d), SCASB(w,d) , MOVSB(s,w) и REP(E,NE)

Автор: Mikl__ 30.5.2007, 08:20
Код

.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


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)