Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Чемпионы рейтинга экспертов в этой рассылке Номер выпуска: | 1373 | Дата выхода: | 01.10.2010, 09:00 | Администратор рассылки: | Лысков Игорь Витальевич, Старший модератор | Подписчиков / экспертов: | 225 / 64 | Вопросов / ответов: | 1 / 1 | IRC-канал по теме: | #assembler | Вопрос № 180037: Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, решить следующую задачу по программированию на Ассемблере. Вывести на экран сумму двух введенных с клавиатуры двузначных чисел (Вводить посимвольно функцией 01 прерывания 21h, значение вводит... Вопрос № 180037: Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, решить следующую задачу по программированию на Ассемблере. Вывести на экран сумму двух введенных с клавиатуры двузначных чисел (Вводить посимвольно функцией 01 прерывания 21h, значение вводить так, чтобы сумма была меньше 100). Для решения задачи применить команды десятичной арифметики. Отправлен: 26.09.2010, 08:46 Вопрос задал: Aleksandrkib, Посетитель Всего ответов: 1 Страница вопроса » Отвечает Лысков Игорь Витальевич, Старший модератор : Здравствуйте, Aleksandrkib. Примерно так. Достаточно прокомментировано, если что осталось непонятно, спрашивайте в мини-форуме
Код: .model small .data sNum1 db 'Enter first number: $' ;Строка приглашения для ввода первого числа sNum2 db 'Enter second number: $' ;Строка приглашения для ввода второго числа sSum db 'Result = ' ;Строка вывода результата sNum db '00$' ;Сюда вставим число-сумму введенных чисел
.code .286 ;чтобы использовать shr al, 4 .startup ;точка входа ;вводим первое число lea dx, sNum1 ;строка приглашения call GetNumber ;в al однобайтное BCD число mov bh, al ;сох раним в bh ;вводим второе число lea dx, sNum2 ;строка приглашения call GetNumber ;в al однобайтное BCD число
add al, bh ;сложим с первым daa ;делаем коррекцию! ;в al корректное BCD число ;выведем сообщение, для этого сформируем двубайтное символьное число mov ah, al ;обработам и старший полубайт, и младший shr al, 4 ;старший десятичный разряд в младшем полубайте al and ah, 0fh ;младший десятичный разряд в младшем полубайте ah or ax, '00' ;числа - в символы mov word ptr sNum, ax ;запишем двубайтное число в строку результата
lea dx, sSum ;выведем mov ah, 9 int 21h
.exit 0
;ввод однобайтного BCD числа ;результат - в al GetNumber proc mov ah, 9 ;подсказка int 21h
mov bl, 0 ;здесь будем формировать BCD число mov cx, 2 ;вводим максимум две цифры GetLoop: mov ah, 1 ;вводим символ int 21h cmp al, 0dh ;по Enter-у заканчиваем ввод досрочно je GetNumRet cmp al, '0' ;проверим на цифру jb GetLoop cmp al, '9' ja GetLoop and al, 0fh ;получаем из символа число 0-9 shl bl, 4 ;старый младший десятичный разряд становится старшим or bl, al ;вставляем новый младший разряд loop GetLoop ;вводим максимум две цифры
GetNumRet: ;перейдем на новую строку mov ah, 2 mov dl, 0dh int 21h mov dl, 0ah int 21h mov al, bl ;результат в al ret GetNumber endp
end
----- Люби своего ближнего, как самого себя Ответ отправил: Лысков Игорь Витальевич, Старший модератор Ответ отправлен: 27.09.2010, 00:07 Номер ответа: 263208 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru
Оценка ответа: 5 Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 263208 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий