Вопрос № 173828: Приветствую! Пришел я к вам с просьбой о помощи) а помощь нужна в следующем: "Написать на ассемблере подпрограмму вывода на экран значения регистра AX в десятичной системе счисления без использования прерываний DOS и BIOS (для текстового реж...
Вопрос № 173828:
Приветствую! Пришел я к вам с просьбой о помощи) а помощь нужна в следующем: "Написать на ассемблере подпрограмму вывода на экран значения регистра AX в десятичной системе счисления без использования прерываний DOS и BIOS (для текстового режима видеокарты, для процессора Intel 8086) ", т.е. кто-либо пишет программу, решает забить в AX, например, 1234 и потом вызвать подпрограмму для перевода числа в десятичную систему и вывода его на экран(без прерываний, повторюсь)) вот что получилось из трудов:
Код:
mov ax,0B800h mov es,ax mov di,0
std
mov cx,10 Repeat: xor dx,dx div cx
xchg ax,dx
add al,'0' stosb inc di xchg ax,dx or ax,ax jne Repeat
и далее сами вопросы. Если пользователь вносит в AX число, то использовать его уже нельзя чтобы не "испортить", т.е. надо воспользоваться push и pop, насколько я понимаю? push ax и далее код подпрограммы. Следующее это цикл. строка "or ax,ax" была написана с расчетом того, что она будет сравнивать AX нулем и далее если не равно,
то запускать цикл заново. как мне объяснили, она не проверяет, а обнуляет?бред...не могу понять...
Выражаю огромную признательность заранее!
Отправлен: 29.10.2009, 22:24
Вопрос задал: Trivi, Посетитель
Всего ответов: 2 Страница вопроса »
Отвечает Airyashov, Студент :
Здравствуйте, Trivi. и далее сами вопросы. Если пользователь вносит в AX число, то использовать его уже нельзя чтобы не "испортить", т.е. надо воспользоваться push и pop, насколько я понимаю? - обычно хорощо когда процедура не портит регистры, но в данном случае программист решает что сохранить что нет.
Код:
Следующее это цикл. строка "or ax,ax" была написана с расчетом того, что она будет сравнивать AX нулем и далее если не равно, то запускать цикл заново. как мне объяснили, она не проверяет, а обнуляет?бред...не могу понять...
- она не обнуляет (обнулит xor) она выставит флаги в соответствии со значением в ax, будут там ноль, поднимет флаг ZF в логике кода вроде все верно (если поменя
ть std на cld), только число будет задом наперед
Приведенный код при автодекременте (std) будет писать в одно и то же место. Если поменять на cld, то, действительно, будет писать задом наперед.
-----
∙ Отредактировал: Лысков Игорь Витальевич, Модератор
∙ Дата редактирования: 30.10.2009, 09:53 (время московское)
Ответ отправил: Airyashov, Студент
Ответ отправлен: 29.10.2009, 23:36
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 256011
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Следующее это цикл. строка "or ax,ax" была написана с расчетом того, что она будет сравнивать AX нулем и далее если не равно, то за
пускать цикл заново. как мне объяснили, она не проверяет, а обнуляет?
Все правильно написано. Только команда не сравнивает с нулем, а делает логическое ИЛИ содержимого регистра AX самого с собой, при этом устанавливаются флаги результата. В итоге, переход на метку Repeat будет, если в AX не 0. (Хотя внешне получается, что сравнивается с 0). С той же целью можно было использовать AND или TEST. Вы перепутали с командой XOR, которая, действительно, обнуляет.
Удачи в освоении ассемблера!
Приложение:
----- Удачи!
Ответ отправил: Лысков Игорь Витальевич, Модератор
Ответ отправлен: 30.10.2009, 01:00 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Абонент Skype: igorlyskov
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 256015
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.