Сложение двух чисел, введенных с клавиатуры - 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
для вывода символов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д