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

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

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

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

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

(на flat assembler) раньше изучал си подобные языки, но ассемблер это дикий лес... смог написать только следующие:
format mz
 
mov ax,cs
mov ds,ax
mov dx, s1
mov ah,9h
int 21h
 
mov ah,0
int 16h ; ждем нажатия любой клавиши
mov ax,4c00h
int 21h ;завершаем программу

main:
; строка приветствия
s1: db 'text$'

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

textual
Листинг программы
org  100h
jmp  start
 
;---- DATA ----
mes0     db  13,10,'Type Digit: $'
mes1     db  13,10,'Summ......: $'
 
;---- CODE ----
start:   mov   ah,9           ;запрос на ввод
         mov   dx,mes0
         int   21h
 
;--- Ввод чисел -------------------
         mov   cx,9           ;макс.чисел
         xor   bx,bx          ;здесь будет сумма
@begin:  xor   ax,ax          ;ввод без эха
         int   16h
         cmp   al,13          ;Enter - закончить!
         je    @next
         cmp   al,'0'         ;фильтр чисел..
         jb    @begin
         cmp   al,'9'
         ja    @begin
         int   29h            ;покажем символ
         and   ax,0Fh         ;переведём его в число
         add   bx,ax          ;суммируем в ВХ
         loop  @begin         ;промотать СХ-раз..
 
@next:   mov   ah,9           ;вывод результата
         mov   dx,mes1
         int   21h
 
         mov   ax,bx          ;вывод АХ на экран в DEC
         aam
         add   ax,3030h
         rol   ax,8
         int   29h
         rol   ax,8
         int   29h
 
@exit:   xor   ax,ax          ; ждём клавишу..
         int   16h
         mov   ax,4c00h
         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
Похожие ответы