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

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

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

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

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

textual
Листинг программы
LOCALS
 
.model small
 
.stack 100h
 
.data
        A               dw      ?
        B               dw      ?
        R               dw      ?
 
        PromptA         db      'A=', '$'
        PromptB         db      'B=', '$'
        CrLf            db      0Dh, 0Ah, '$'
        msgResult       db      'A+B=', '$'
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;ввод двухразрядного BCD числа A
        ;приглашение
        mov     ah,     09h
        lea     dx,     PromptA
        int     21h
        ;старший разряд
        call    GetDigit
        mov     byte ptr[A+1],  al
        ;младший разряд
        call    GetDigit
        mov     byte ptr [A],   al
        ;перевод строки
        mov     ah,     09h
        lea     dx,     CrLf
        int     21h
 
        ;ввод двухразрядного BCD числа B
        ;приглашение
        mov     ah,     09h
        lea     dx,     PromptB
        int     21h
        ;старший разряд
        call    GetDigit
        mov     byte ptr[B+1],  al
        ;младший разряд
        call    GetDigit
        mov     byte ptr[B],    al
        ;перевод строки
        mov     ah,     09h
        lea     dx,     CrLf
        int     21h
        ;сложение BCD чисел
        mov     ax,     A
        mov     bx,     B
        add     ax,     bx
        aaa
        mov     R,      ax      ;сохранение результата
 
        ;вывод результата
        mov     ah,     09h
        lea     dx,     msgResult
        int     21h
        mov     ah,     02h
        mov     dl,     byte ptr [R+1]
        add     dl,     '0'
        cmp     dl,     '0'
        je      @@SkipLeadingZero
        int     21h
@@SkipLeadingZero:
        mov     ah,     02h
        mov     dl,     byte ptr [R]
        add     dl,     '0'
        int     21h
 
        mov     ax,     4C00h
        int     21h
main    endp
 
GetDigit        proc
        push    dx
@@Input:
        ;ввод символа без отображения на экран
        mov     ah,     08h
        int     21h
        ;это цифра?
        ; нет - повторить ввод
        cmp     al,     '0'
        jb      @@Input
        cmp     al,     '9'
        ja      @@Input
        ;вывод цифры на экран
        mov     ah,     02h
        mov     dl,     al
        int     21h
        ;преобразование символа в цифру
        sub     al,     '0'
        pop     dx
        ret
GetDigit        endp
end     main

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


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

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

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