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