Посчитать сумму цифр, встречающихся в строке - Assembler
Формулировка задачи:
Посчитать сумму цифр, встречающихся в строке.
Решение задачи: «Посчитать сумму цифр, встречающихся в строке»
textual
Листинг программы
;Посчитать сумму цифр, встречающихся в строке DataS SEGMENT ;сегмент даных MAX DB 255 ;максимальная длинна строки LEN DB ? BUF DB 255 DUP (?) ;буфер для ввода з клавиатури CIF DB 255 DUP (?) ;буфер для виводa на екран цифр INVITE DB 'Enter a character string (maximum 255)', 10, 13, '$' ERROR DB ' does not apply to letters or numbers', 10, 13, '$' ENT DB 10, 13, '$' ;нова строка Com2 DB 'Numbers:', 10, 13, '$' Sum DW 0 ;здесь хранится сумма цифр DataS ENDS STSEG SEGMENT STACK ;сегмент стеку DB 128 DUP (?) STSEG ENDS CODSEG SEGMENT ;сегмент коду ASSUME CS:CODSEG, DS:DataS, SS:STSEG ;ПП вывода на дисплей строки DX - адрес буфера для вывода OUTPUT PROC MOV AH, 09h INT 21h RET OUTPUT ENDP INPUT PROC LEA DX, INVITE CALL OUTPUT LEA DX, MAX MOV AH, 0Ah INT 21h LEA DX, ENT CALL OUTPUT RET INPUT ENDP ;-------------------- BEGIN: MOV AX, DataS ; DS MOV DS, AX MOV AX, STSEG ; SS MOV SS, AX CALL INPUT MOV CH, 0 MOV CL, LEN ;реальная длинна строки MOV DI, 0 ;поиск в строке цифр cikl1: MOV AL, BUF[BX] CMP AL, '0' ;проверка на отношение к цифрам JB m1 CMP AL, '9' JA m1 MOV CIF[DI],AL ;сохраняем цифру INC DI SUB AL, '0' ;ASCII-код в число XOR AH, AH ADD Sum, AX ;сумма цифр JMP m1 m1: INC BX LOOP cikl1 MOV CIF[DI], '$' ;конец строки ;выводим строку имеющихся цифр LEA DX, Com2 CALL OUTPUT LEA DX, CIF CALL OUTPUT LEA DX, ENT CALL OUTPUT TOCHKA: MOV AX, 4Ch ;выход в DOS INT 21h CODSEG ENDS END BEGIN
Объяснение кода листинга программы
- Объявлены переменные:
- MAX (DB 255) - максимальная длина строки;
- LEN (?) - длина введенной строки;
- BUF (255 DUP (?)) - буфер для ввода с клавиатуры;
- CIF (255 DUP (?)) - буфер для вывода цифр на экран;
- INVITE (DB 'Enter a character string (maximum 255)', 10, 13, '$') - приглашение для ввода строки;
- ERROR (DB ' does not apply to letters or numbers', 10, 13, '$') - сообщение об ошибке;
- ENT (10, 13, '$') - символ новой строки;
- Com2 (DB 'Numbers:', 10, 13, '$') - заголовок для вывода чисел;
- Sum (DW 0) - переменная для хранения суммы цифр.
- В сегменте кода определены процедуры:
- OUTPUT (PROC) - вывод строки на экран;
- INPUT (PROC) - ввод строки с клавиатуры.
- В начале работы программы в сегменты данных и стека записываются соответствующие сегменты.
- Далее происходит ввод строки с клавиатуры с помощью процедуры INPUT.
- Переменная LEN получает реальную длину введенной строки.
- Затем начинается цикл поиска цифр в строке:
- Если символ является цифрой, он сохраняется в буфере CIF и добавляется к сумме;
- Если символ не является цифрой, цикл продолжается;
- После обработки всех символов, в буфер CIF записывается символ конца строки.
- После цикла выводится строка найденных цифр с помощью процедуры OUTPUT.
- В конце работы программы выводится сообщение об успешном выполнении и выход в DOS.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д