Сумма цифр, введенных в строке - Assembler

Узнай цену своей работы

Формулировка задачи:

Разработать программу на языке Ассемблера Intel x86 для ОС MS-DOS. Модель памяти – не регламентируется. Все числа – однозначные (от 0 до 9). Программа ожидает ввода строки от пользователя, затем выполняет действия в соответствии с заданием. Результат отобразить на экране.

Посчитать сумму цифр, введенных в строке.

(на flat assembler) раньше изучал си подобные языки, но ассемблер это дикий лес... смог написать только следующие:
Листинг программы
  1. format mz
  2. mov ax,cs
  3. mov ds,ax
  4. mov dx, s1
  5. mov ah,9h
  6. int 21h
  7. mov ah,0
  8. int 16h ; ждем нажатия любой клавиши
  9. mov ax,4c00h
  10. int 21h ;завершаем программу
  11.  
  12. main:
  13. ; строка приветствия
  14. s1: db 'text$'

Решение задачи: «Сумма цифр, введенных в строке»

textual
Листинг программы
  1. org  100h
  2. jmp  start
  3.  
  4. ;---- DATA ----
  5. mes0     db  13,10,'Type Digit: $'
  6. mes1     db  13,10,'Summ......: $'
  7.  
  8. ;---- CODE ----
  9. start:   mov   ah,9           ;запрос на ввод
  10.          mov   dx,mes0
  11.          int   21h
  12.  
  13. ;--- Ввод чисел -------------------
  14.          mov   cx,9           ;макс.чисел
  15.          xor   bx,bx          ;здесь будет сумма
  16. @begin:  xor   ax,ax          ;ввод без эха
  17.          int   16h
  18.          cmp   al,13          ;Enter - закончить!
  19.          je    @next
  20.          cmp   al,'0'         ;фильтр чисел..
  21.          jb    @begin
  22.          cmp   al,'9'
  23.          ja    @begin
  24.          int   29h            ;покажем символ
  25.          and   ax,0Fh         ;переведём его в число
  26.          add   bx,ax          ;суммируем в ВХ
  27.          loop  @begin         ;промотать СХ-раз..
  28.  
  29. @next:   mov   ah,9           ;вывод результата
  30.          mov   dx,mes1
  31.          int   21h
  32.  
  33.          mov   ax,bx          ;вывод АХ на экран в DEC
  34.          aam
  35.          add   ax,3030h
  36.          rol   ax,8
  37.          int   29h
  38.          rol   ax,8
  39.          int   29h
  40.  
  41. @exit:   xor   ax,ax          ; ждём клавишу..
  42.          int   16h
  43.          mov   ax,4c00h
  44.          int   21h            ; на выход!

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

  1. Организация ввода Создаются две строки: mes0 и mes1, которые содержат сообщения для пользователя.
  2. Ввод чисел Создаются две переменные: cx и bx. Переменная cx инициализируется значением 9, так как предполагается, что пользователь введет не более 9 цифр. Переменная bx инициализируется значением 0 и будет использоваться как сумма. Используется цикл while, который будет выполняться до тех пор, пока пользователь не введет число от 0 до 9.
  3. Фильтрация вводимых цифр Проверяется, является ли введенная цифра числом от 0 до 9. Если это не так, то цикл прерывается.
  4. Суммирование введенных цифр Введенное число добавляется к переменной bx.
  5. Вывод результата После ввода всех цифр, программа выводит сообщение Summ......: $ и сумму введенных цифр.
  6. Ожидание нажатия клавиши Программа ожидает, пока пользователь не нажмет клавишу, после чего завершается.

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


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

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

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы