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