Сложение двоично десятичных чисел - Assembler

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

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

Задать с клавиатуры 2 двухразрядных ВСД числа. Выполнить сложение ВСД числа. Предусмотреть: 1) вывод приглашения к заданию чисел. 2) вывод результата сложения. Помогите кто может, последняя лабораторная осталась

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

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         A               dw      ?
  9.         B               dw      ?
  10.         R               dw      ?
  11.  
  12.         PromptA         db      'A=', '$'
  13.         PromptB         db      'B=', '$'
  14.         CrLf            db      0Dh, 0Ah, '$'
  15.         msgResult       db      'A+B=', '$'
  16. .code
  17.  
  18. main    proc
  19.         mov     ax,     @data
  20.         mov     ds,     ax
  21.  
  22.         ;ввод двухразрядного BCD числа A
  23.         ;приглашение
  24.         mov     ah,     09h
  25.         lea     dx,     PromptA
  26.         int     21h
  27.         ;старший разряд
  28.         call    GetDigit
  29.         mov     byte ptr[A+1],  al
  30.         ;младший разряд
  31.         call    GetDigit
  32.         mov     byte ptr [A],   al
  33.         ;перевод строки
  34.         mov     ah,     09h
  35.         lea     dx,     CrLf
  36.         int     21h
  37.  
  38.         ;ввод двухразрядного BCD числа B
  39.         ;приглашение
  40.         mov     ah,     09h
  41.         lea     dx,     PromptB
  42.         int     21h
  43.         ;старший разряд
  44.         call    GetDigit
  45.         mov     byte ptr[B+1],  al
  46.         ;младший разряд
  47.         call    GetDigit
  48.         mov     byte ptr[B],    al
  49.         ;перевод строки
  50.         mov     ah,     09h
  51.         lea     dx,     CrLf
  52.         int     21h
  53.         ;сложение BCD чисел
  54.         mov     ax,     A
  55.         mov     bx,     B
  56.         add     ax,     bx
  57.         aaa
  58.         mov     R,      ax      ;сохранение результата
  59.  
  60.         ;вывод результата
  61.         mov     ah,     09h
  62.         lea     dx,     msgResult
  63.         int     21h
  64.         mov     ah,     02h
  65.         mov     dl,     byte ptr [R+1]
  66.         add     dl,     '0'
  67.         cmp     dl,     '0'
  68.         je      @@SkipLeadingZero
  69.         int     21h
  70. @@SkipLeadingZero:
  71.         mov     ah,     02h
  72.         mov     dl,     byte ptr [R]
  73.         add     dl,     '0'
  74.         int     21h
  75.  
  76.         mov     ax,     4C00h
  77.         int     21h
  78. main    endp
  79.  
  80. GetDigit        proc
  81.         push    dx
  82. @@Input:
  83.         ;ввод символа без отображения на экран
  84.         mov     ah,     08h
  85.         int     21h
  86.         ;это цифра?
  87.         ; нет - повторить ввод
  88.         cmp     al,     '0'
  89.         jb      @@Input
  90.         cmp     al,     '9'
  91.         ja      @@Input
  92.         ;вывод цифры на экран
  93.         mov     ah,     02h
  94.         mov     dl,     al
  95.         int     21h
  96.         ;преобразование символа в цифру
  97.         sub     al,     '0'
  98.         pop     dx
  99.         ret
  100. GetDigit        endp
  101. end     main

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

11   голосов , оценка 3.909 из 5

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

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

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