Сумма цифр, введенных в строке - 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 ; на выход!
Объяснение кода листинга программы
- Организация ввода
Создаются две строки:
mes0
иmes1
, которые содержат сообщения для пользователя. - Ввод чисел
Создаются две переменные:
cx
иbx
. Переменнаяcx
инициализируется значением 9, так как предполагается, что пользователь введет не более 9 цифр. Переменнаяbx
инициализируется значением 0 и будет использоваться как сумма. Используется циклwhile
, который будет выполняться до тех пор, пока пользователь не введет число от 0 до 9. - Фильтрация вводимых цифр Проверяется, является ли введенная цифра числом от 0 до 9. Если это не так, то цикл прерывается.
- Суммирование введенных цифр
Введенное число добавляется к переменной
bx
. - Вывод результата
После ввода всех цифр, программа выводит сообщение
Summ......: $
и сумму введенных цифр. - Ожидание нажатия клавиши Программа ожидает, пока пользователь не нажмет клавишу, после чего завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д