Посчитать сумму цифр, встречающихся в строке - 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

Объяснение кода листинга программы

  1. Объявлены переменные:
    • 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) - переменная для хранения суммы цифр.
  2. В сегменте кода определены процедуры:
    • OUTPUT (PROC) - вывод строки на экран;
    • INPUT (PROC) - ввод строки с клавиатуры.
  3. В начале работы программы в сегменты данных и стека записываются соответствующие сегменты.
  4. Далее происходит ввод строки с клавиатуры с помощью процедуры INPUT.
  5. Переменная LEN получает реальную длину введенной строки.
  6. Затем начинается цикл поиска цифр в строке:
    • Если символ является цифрой, он сохраняется в буфере CIF и добавляется к сумме;
    • Если символ не является цифрой, цикл продолжается;
    • После обработки всех символов, в буфер CIF записывается символ конца строки.
  7. После цикла выводится строка найденных цифр с помощью процедуры OUTPUT.
  8. В конце работы программы выводится сообщение об успешном выполнении и выход в DOS.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы