Вопрос № 127244: Добрый день, уважаемые эксперты! Помогите пожалуйста с написанием кода 2х небольших программ:
1)Ввести число N. Вывести его N!(факториал). Выход по нажатию клавиши.(число N не очень большое: N<10)
2)Ввести символ и число. Вывести по диагон...Вопрос № 127256: Здравствуйте!
Начал понемногу изучать арифметический сопроцессор. Под DOS пробовал писать разные программки на MASM6.12, а сейчас решил попробовать, как это будет выглядеть во встроенном в Delphi_6 ассемблере.
Меня заинтересовало, как Delphi_...
Вопрос № 127.244
Добрый день, уважаемые эксперты! Помогите пожалуйста с написанием кода 2х небольших программ:
1)Ввести число N. Вывести его N!(факториал). Выход по нажатию клавиши.(число N не очень большое: N<10)
2)Ввести символ и число. Вывести по диагонали символ пирамидкой по уменьшению:
пример: ввели d и 5, получилось следующее:
ddddd
dddd
ddd
dd
d
т.е. при переходе на новую строку число выводимых символов уменьшается на 1.
---
Спасибо заранее большое, т.к. я знаю, что вы - мастера своего дела! Надеюсь на вашу поддержку.
Да, еще: вы не могли бы кроме кода программ выложить эти скомпиллированные задачки - а то у меня потерялись tasm и tkink...
В коде я постараюсь разобраться, а задачки - как наглядный пример.
Спасибо!
Отправлен: 14.03.2008, 06:30
Вопрос задал: Mamontenok (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Зенченко Константин Николаевич
Здравствуйте, Mamontenok!
Обе программы выполняются последовательно. Tasm 4.10
Удачи!
Приложение:
Прикреплённый файл: Загрузить >> Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа. --------- И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Профессионал) Украина, Киев Тел.: +380958380164 Адрес: Украина г.Киев ---- Ответ отправлен: 14.03.2008, 11:50 Оценка за ответ: 5 Комментарий оценки: Как и обещал, ставлю оценку за Ваш ответ)))
Сейчас прыгаю до потолка, задачи решены!
Спасибо!
Отвечает: Trulala
Здравствуйте, Mamontenok!
http://depositfiles.com/files/4124580
Приложение:
Ответ отправил: Trulala (статус: 1-ый класс)
Ответ отправлен: 15.03.2008, 02:14 Оценка за ответ: 5 Комментарий оценки: Спасибо Вам огромное!!! Очень рад, что наконец-то смогу сдать и объяснить эти задачи! Надеюсь на Вашу помощь в дальнейшем! С уважением, Мамонтёнок!
Вопрос № 127.256
Здравствуйте!
Начал понемногу изучать арифметический сопроцессор. Под DOS пробовал писать разные программки на MASM6.12, а сейчас решил попробовать, как это будет выглядеть во встроенном в Delphi_6 ассемблере.
Меня заинтересовало, как Delphi_6 обрабатываются исключительные ситуации.
Написал простейшую пробу (деление 1 на 0):
fld1
fldz
fdiv
Смотрю в пошаговом режиме окошки CPU и FPU. На строчке «fdiv» ничего никуда невылетает, правда, биты ZE, ES в регистре состояния арифметического сопроцессора устанавливаются в единицу. И что интересно, в последовательности инструкций в окне CPU ничего ведь не указано, как эту ситуацию обрабатывать. Тем не менее, все аккуратно переходит на исключение, как будто какой-то скрытый текст работает.
Хотелось бы хотя бы в общих словах знать, как Delphi_6 это обрабатывает
И как самому, непосредственно в своем коде, грамотнее всего отслеживать такие ситуации (ну, или как это обычно принято делать). Я имею в виду разные ситуации, например, логарифм или квадратный корень отрицательного числа и многое другое…
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Бартосик Феликс Михайлович! 1) Чтобы "вылетало", надо сначала разрешить сопроцессору сообщать о такой ситуации. Например, чтобы вылетало по делению на 0, надо сбросить бит ZM в слове управления. Т.е. надо писать ZM equ 0fffbh .data ControlWord dw 0 .code ;... fstcw ControlWord and ControlWord, ZM fldcw ControlWord
fld1 fldz fdiv
wait ; кроме этого, надо обязательно, чтобы отработалась команда wait ; (которая
предшествует практически любой команде сопроцессору) 2) Насчет Delphi... Видать смотрел не там... Delphi где-то, в другом месте, иницирует обработку исключительных ситуаций, которые работают как прерывания, поэтому ты и не видишь всего этого в своем коде. Если есть ассемблерный код ВСЕЙ программы, то поищи строку fs:[0]. 3) В заключение хочу предложить тебе посмотреть примеры в MASM32 (Если нет то обя
зательно поставь). Там есть примеры и на исключительные случаи. В приложение небольшой примерчик по мотивам того примера, что в MASM32
Приложение:
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Специалист)
Ответ отправлен: 17.03.2008, 12:14 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Теперь расковыряю как нибудь