Сложение двух чисел, введенных с клавиатуры - Assembler
Формулировка задачи:
Помогите, пожалуйста, с задачей по ассемблеру. Нужно сложить два числа введенных с клавиатуры и вывести их на экран. (П.с. Есть похожие программы, но это не то. Хотелось бы программу полностью и с комментариями. Буду благодарна)
Решение задачи: «Сложение двух чисел, введенных с клавиатуры»
textual
Листинг программы
- .model small
- .stack 16h
- .data
- msgA db 'Enter A = ', '$ '
- msgB db 13,10,'Enter B = ', '$ '
- msg5 db 13,10,'Result X = ', '$ '
- msg label byte
- maxnum db 6
- reallen db ?
- numfld db 5 dup(30h)
- mult10 dw 0
- ascval db 5 dup(30h),'$'
- x dw ?
- a dw 0
- b dw 0
- c dw 0
- z dw 0
- u dw 0
- .code
- start: mov ax, @data
- mov ds, ax
- mov ah,9
- lea dx, msgA ; Сообщение "Enter A = "
- int 21H;
- mov ah,0AH
- lea dx,msg
- int 21H
- call asbin ; Ввод числа с клавиатуры
- mov ax,z
- mov a,ax
- mov ah,9
- lea dx, msgB ; Сообщение "Enter B = "
- int 21H;
- mov ah,0AH
- lea dx,msg
- int 21H
- call asbin ; Ввод числа с клавиатуры
- mov ax,z
- mov b,ax
- mov ah,9
- lea dx, msg5 ; Сообщение "Result X = "
- int 21H;
- mov bx, dx
- mov cx, ax
- xor dx,dx
- mov ax, a
- add ax,b ; Складываем 2 числа
- mov x, ax
- call outp ; Вывод результата на экран
- mov ah, 4ch ; Выйти из программы
- int 21h
- asbin proc ; Процедура ввода с клавиатуры
- mov mult10,0001
- mov z,0
- mov cx,10
- lea si,numfld-1
- mov bl,reallen
- sub bh,bh
- b20:
- mov al,[si+bx]
- and ax,000fh
- mul mult10
- add z,ax
- mov ax,mult10
- mul cx
- mov mult10,ax
- dec bx
- jnz b20
- ret
- asbin endp
- outp proc ; Процедура вывода на экран
- mov cx,10 ; система счисления
- lea si, ascval+4 ; Установка указателя на конец массива ascval
- mov ax, x ; Результат х занести в ax
- c20: cmp ax,10 ; Сравнить результат с числом 10
- jb c30 ; Если меньше то преобразовывать не надо
- xor dx,dx ; Очистка регистра dx для команды деления
- div cx ; Делим на 10
- or dl, 30h ; Преобразование остатка к ASCII коду
- mov [si], dl ; Занесение остатка от деления в массив ascval
- dec si ; Перемещение указателя массива на 1 байт влево
- jmp c20 ; Переход на начало для преобразования след. цифры
- c30: or al, 30h ; Если остаток меньше 10, то вывод результата на экран
- mov [si], al ; дисплея командами (см. ниже)
- lea dx, ascval ; Загрузка адреса массива
- mov ah, 9 ; Вызов 9-ой функции MS-DOS
- int 21h
- ret ; Возврат в головную программу из п/программы
- outp endp ; Конец процедуры
- end start
Объяснение кода листинга программы
- Описание работы программы:
Программа выполняет сложение двух чисел, введенных пользователем с клавиатуры.
Ввод чисел и вывод результата осуществляется через процедуру
outp
, которая использует функциюint 21h
для взаимодействия с BIOS. Процедураasbin
используется для ввода чисел с клавиатуры. Она использует цикл и функциюint 21h
для считывания чисел. Переменные:reallen
- переменная, содержащая количество символов, введенных пользователем в последнем вызове функцииint 21h
.numfld
- массив, используемый для ввода чисел с клавиатуры.ascval
- массив, содержащий строки с символами от 0 до 9.maxnum
- максимальное число, которое может быть введено пользователем.x
- результат сложения двух введенных чисел.a
иb
- два числа, которые необходимо сложить.z
- временная переменная, используемая в процедуреasbin
.u
- не используется, может быть неинициализирован.cx
- используется в процедуреoutp
для подсчета количества цифр в числе.si
- используется в процедуреoutp
для обращения к массивуascval
.dx
- используется в процедуреoutp
для вывода результата на экран.al
иdl
- используются в процедуреoutp
для работы с ASCII кодами цифр.bx
- используется в процедуреasbin
для обращения к массивуnumfld
.ah
- используется в процедуреoutp
для вызова функцииint 21h
.
- Порядок выполнения программы:
- Сначала программа выводит сообщение
Enter A =
и ожидает ввода числа A с клавиатуры. - Затем выводит сообщение
Enter B =
и ожидает ввода числа B с клавиатуры. - После этого происходит сложение чисел A и B, результат сохраняется в переменной
x
. - Затем программа вызывает процедуру
outp
для вывода результата на экран. - Процедура
outp
преобразует число в строку, используя систему счисления с основанием 10, и выводит результат на экран. - Программа завершается после вывода результата.
- Сначала программа выводит сообщение
- Указание на особенности языка ассемблера:
- В языке ассемблера используются регистры для хранения данных и выполнения операций.
- Для взаимодействия с BIOS используются функции
int 21h
. - Для ввода чисел с клавиатуры используется процедура
asbin
, которая использует цикл и функциюint 21h
. - Для вывода чисел на экран используется процедура
outp
, которая использует функцииint 21h
для вывода символов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д