Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 2475
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2000
∙ повысить рейтинг »
vladisslav
Статус: 6-й класс
Рейтинг: 1235
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Assembler (Ассемблер)

Номер выпуска: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 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.21 от 28.09.2010

    В избранное