Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Чемпионы рейтинга экспертов в этой рассылке Номер выпуска: | 1331 | Дата выхода: | 06.05.2010, 11:00 | Администратор рассылки: | Лысков Игорь Витальевич, Модератор | Подписчиков / экспертов: | 292 / 60 | Вопросов / ответов: | 1 / 1 | IRC-канал по теме: | #assembler | Вопрос № 178140: Доброго времени суток дорогие эксперты: Требуется с помощью ТАСМ реализовать решение задачи: Написать программу (и прокомментировать её) для выполнения арифметической операции умножение над 2мя вещественными числами представленных в расширенно... Вопрос № 178140: Доброго времени суток дорогие эксперты: Требуется с помощью ТАСМ реализовать решение задачи: Написать программу (и прокомментировать её) для выполнения арифметической операции умножение над 2мя вещественными числами представленных в расширенном формате.
Хар-ки: 1) процессор intel core 2 solo CPU U3500 2) window vista home premium 32х разрядная 3) Turbo Assembler Version 4.1 в папке asm находится файл TASM поэтому думаю он предпочтителен 4) вычисления производить в сопроцессоре
Спасибо за внимание! Отправлен: 01.05.2010, 10:46 Вопрос задал: Юдин Евгений Сергеевич, 1-й класс Всего ответов: 1 Страница вопроса » Отвечает amnick, 10-й класс : Здравствуйте, Юдин Евгений Сергеевич.
Насколько я понимаю, расширенный формат вещественных чисел соответствует типу long double в С (10-байтовые вещественные числа). Приведенная ниже функция умножения предназначена для вызова из программ для DOS, модель памяти COMPACT или LARGE (дальние указатели на данные).
Код: ; 178140a.asm ; умножение 2-х вещественных чисел, представленных в расширенном формате. ; TASM, сопроцессор
locals @@ .model compact, C .386
.code public mulx
.8086 ; переключаем на 8086, чтобы TASM сгенерировал ; PUSH BP/MOV BP,SP вместо ENTER
; long double mulx( const long double* p1, const long double* p2 ); proc mulx arg @@p1: dword, @@p2: dword uses si ; регистр SI нужно с охранять
LES si,[@@p1] ; указатель на первый сомножитель
; При генерации кода для 8086/8087 TASM вставляет инструкции WAIT ; перед каждой инструкцией сопроцессора.
.386
; Переключив на 80386/80387, мы исключаем ненужные для современных ; процессоров инструкции
fld tbyte ptr ES:[si] ; загружаем первый сомножитель в стек сопроцессора LES si,[@@p2] ; указатель на второй сомножитель fld tbyte ptr ES:[si] ; загружаем второй сомножитель в стек сопроцессора fmulp st(1),st ; результат умножения - на вершине стека сопроцессора .8086 ; переключаем на 8086, чтобы TASM сгенерировал POP BP вместо LEAVE ret endp mulx
end
Компиляция: tasm -m2 -zn -mx %1
В приложении приведена тестовая программа для Borland C++. Для сборки создайте проект, в который поместите файл исходника (178140.с) и 178140a.obj.
Успехов! Приложение: |