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

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


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

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

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

_Ayl_
Статус: Студент
Рейтинг: 1404
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 1144
∙ повысить рейтинг »
vladisslav
Статус: 5-й класс
Рейтинг: 835
∙ повысить рейтинг »

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

Номер выпуска:1274
Дата выхода:04.11.2009, 14:00
Администратор рассылки:Лысков Игорь Витальевич, Модератор
Подписчиков / экспертов:436 / 65
Вопросов / ответов:1 / 2
IRC-канал по теме:#assembler

Вопрос № 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 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Лысков Игорь Витальевич, Модератор :
    Здравствуйте, Trivi.
    Программа в приложении

    © Цитата:
    Если пользователь вносит в AX число, то использовать его уже нельзя чтобы не "испортить", т.е. надо воспользоваться push и pop, насколько я понимаю?
    Вы правы. Чтобы сохранить содержимое регистра, можно воспользоваься push pop.
    © Цитата:
    Следующее это цикл. строка "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 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


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

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

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

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

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

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

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


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

    В избранное