Сложение двух чисел, введенных с клавиатуры - Assembler

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

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

Помогите, пожалуйста, с задачей по ассемблеру. Нужно сложить два числа введенных с клавиатуры и вывести их на экран. (П.с. Есть похожие программы, но это не то. Хотелось бы программу полностью и с комментариями. Буду благодарна)

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

textual
Листинг программы
  1. .model small                  
  2. .stack 16h                    
  3. .data  
  4. msgA db 'Enter A = ', '$ '
  5. msgB db 13,10,'Enter B = ', '$ '
  6. msg5 db 13,10,'Result X = ', '$ '              
  7. msg label byte
  8. maxnum db 6
  9. reallen db ?
  10. numfld db 5 dup(30h)
  11. mult10 dw 0
  12. ascval db 5 dup(30h),'$'            
  13.   x  dw  ?
  14.   a  dw  0
  15.   b  dw  0
  16. c dw 0
  17.   z dw 0
  18. u dw 0
  19.  
  20. .code                        
  21. start: mov ax, @data          
  22.        mov ds, ax  
  23.        mov ah,9
  24.        lea dx, msgA ; Сообщение "Enter A = "
  25.        int 21H;
  26.  
  27.        mov ah,0AH
  28.        lea dx,msg
  29.        int 21H  
  30.        call asbin ; Ввод числа с клавиатуры
  31.        mov ax,z
  32.        mov a,ax
  33.  
  34.        mov ah,9
  35.        lea dx, msgB ; Сообщение "Enter B = "
  36.        int 21H;
  37.  
  38.        mov ah,0AH
  39.        lea dx,msg
  40.        int 21H  
  41.        call asbin ; Ввод числа с клавиатуры
  42.        mov ax,z
  43.        mov b,ax
  44.  
  45.    
  46.        mov ah,9
  47.        lea dx, msg5 ; Сообщение "Result X = "
  48.        int 21H;      
  49.    
  50.    
  51.        mov bx, dx
  52.        mov cx, ax            
  53.  
  54.        xor dx,dx
  55.        mov ax, a        
  56.        add ax,b ; Складываем 2 числа                
  57.        mov x, ax
  58.  
  59.  
  60. call outp ; Вывод результата на экран
  61.      
  62.        mov ah, 4ch ; Выйти из программы            
  63.        int 21h    
  64.                  
  65. asbin proc ; Процедура ввода с клавиатуры
  66.        mov mult10,0001
  67.        mov z,0
  68.        mov cx,10
  69.        lea si,numfld-1
  70.        mov bl,reallen
  71.        sub bh,bh
  72. b20:
  73.        mov al,[si+bx]
  74.        and ax,000fh
  75.        mul mult10
  76.        add z,ax
  77.        mov ax,mult10
  78.        mul cx
  79.        mov mult10,ax
  80.        dec bx
  81.        jnz b20
  82.        ret
  83. asbin  endp
  84.  
  85. outp proc ; Процедура вывода на экран
  86.        mov cx,10                ; система счисления
  87.        lea si, ascval+4         ; Установка указателя на конец массива ascval
  88.        mov ax, x                ; Результат х занести в ax
  89. c20:   cmp ax,10                ; Сравнить результат с числом 10
  90.        jb c30                   ; Если меньше то преобразовывать не надо
  91.         xor dx,dx   ; Очистка регистра dx для команды деления
  92.        div cx                   ; Делим на 10
  93.        or dl, 30h               ; Преобразование остатка к ASCII коду
  94.        mov [si], dl             ; Занесение остатка от деления в массив ascval
  95.        dec si                   ; Перемещение указателя массива на 1 байт влево
  96.        jmp c20                  ; Переход на начало для преобразования след. цифры
  97. c30:   or al, 30h               ; Если остаток меньше 10, то вывод результата на экран
  98.        mov [si], al             ; дисплея командами (см. ниже)
  99.        lea dx, ascval           ; Загрузка адреса массива
  100.        mov ah, 9                ; Вызов 9-ой функции MS-DOS
  101.        int 21h
  102.        ret                      ; Возврат в головную программу из п/программы
  103. outp endp               ; Конец процедуры
  104.  
  105.  
  106. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы