Сложение двух чисел, введенных с клавиатуры - 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

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

  1. Описание работы программы: Программа выполняет сложение двух чисел, введенных пользователем с клавиатуры. Ввод чисел и вывод результата осуществляется через процедуру 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.
  2. Порядок выполнения программы:
    • Сначала программа выводит сообщение Enter A = и ожидает ввода числа A с клавиатуры.
    • Затем выводит сообщение Enter B = и ожидает ввода числа B с клавиатуры.
    • После этого происходит сложение чисел A и B, результат сохраняется в переменной x.
    • Затем программа вызывает процедуру outp для вывода результата на экран.
    • Процедура outp преобразует число в строку, используя систему счисления с основанием 10, и выводит результат на экран.
    • Программа завершается после вывода результата.
  3. Указание на особенности языка ассемблера:
    • В языке ассемблера используются регистры для хранения данных и выполнения операций.
    • Для взаимодействия с BIOS используются функции int 21h.
    • Для ввода чисел с клавиатуры используется процедура asbin, которая использует цикл и функцию int 21h.
    • Для вывода чисел на экран используется процедура outp, которая использует функции int 21h для вывода символов.

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

6   голосов , оценка 4.167 из 5
Похожие ответы