Деление двухразрядного BCD числа на одноразрядное - Assembler
Формулировка задачи:
Задать с клавиатуры двухразрядное BCD число , затем задать одноразрядное BCD число. Выполнить деление первого числа на второе. Результат записать в предусмотренную ячейку.
Предусмотреть:
1. Вывод приглашение к вводу числа
2. Вывод результата на экран.
Решение задачи: «Деление двухразрядного BCD числа на одноразрядное»
textual
Листинг программы
LOCALS .model small .stack 100h .data A dw ? B db ? 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 [B], al ;перевод строки mov ah, 09h lea dx, CrLf int 21h ;деление BCD чисел mov ax, A aad ;подготовка числа A к делению mov bl, B div bl aam 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
Объяснение кода листинга программы
- Предполагаемая постановка задачи: Деление двухразрядного BCD числа на одноразрядное.
- Описание работы программы:
- Ввод двухразрядного BCD числа A
- Ввод одноразрядного BCD числа B
- Деление BCD чисел
- Сохранение результата в переменной R
- Вывод результата на экран
- Логика работы программы:
- Переменная A содержит два разряда BCD числа
- Переменная B содержит один разряд BCD числа
- Переменная R используется для сохранения результата деления
- Для ввода чисел используется процедура GetDigit, которая:
- Вводит символ без отображения на экран
- Проверяет, является ли введенный символ цифрой
- Если это цифра, выводит ее на экран и преобразует в числовое значение
- Описание кода:
- Используется ассемблерный язык
- Применяется модель малого языка
- Используется стек размером 100 байт
- В сегменте данных размещены переменные A, B и R
- В сегменте кода размещен основной процедурный блок main
- В сегменте кода размещена вспомогательная процедурная блок GetDigit
- Для ввода чисел используется функция 08h, которая не отображает введенный символ на экран
- Для вывода чисел используется функция 02h, которая выводит однобайтовый символ на экран
- Для деления чисел используется инструкция div
- Для преобразования BCD числа в десятичное число используется инструкция aam
- Для пропуска ведущего нуля в десятичном числе используется метка @@SkipLeadingZero и инструкции jb и ja
- Примечание:
- В реальном коде необходимо добавить обработку ошибок для исключения переполнения при делении
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д