Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2009, 11:47   #1
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
Вопрос Действительные числа в TurboAssembler

В этом году начал изучать встроенный Ассемблер Турбо Паскаля(TASM). Сдал одну арифметическую задачу с натуральными числами, а на действительных числах серьёзно "завис". Пишу в Паскале следующий программный код со вставкой кода Ассемблера:

program zd;
uses crt;
var S,KorenIzTrex,a:real; code,kol:integer;
begin
clrscr;
kol:=0;
KorenIzTrex:=sqrt(3);

repeat
if kol=0 then
writeln('Введите число A')
else
writeln('Число А должно быть больше нуля, исправте и введите другое число');
readln(a)
kol:=1;
until a>0

asm
MOV Ax,a;

IMUL a;

IMUL KorenIzTrex;

IDIV 4;

MOV S,Ax;
end;

end.


Если переменную "а" обозначить, как в вышенаписанном коде, типом real, то машина пишет:"Error 155: Invalid combination of opcode and operands.", но это и понятно, т.к. регистр Ах может принимать лишь натуральные числа. Если же задать переменную "a" типом integer, тогда машина пишет туже самую ошибку, только на строчку "IMUL KorenIzTrex", ну это опять таки понятно - пытаюсь умножить регистр Ax на действительное число. Чтобы провести необходимые операции с действительными числами, в коде Ассемблера необходимо подключить сопроцессор, пишу после слова "asm" функцию для подключения сопроцессора "FINIT", но снова вылазит таже самая ошибка.
Подскажите, что неправильно в моём коде и как загрузить в один из регистров ST(0)..ST(7) действительные числа?
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Mixim вне форума Ответить с цитированием
Старый 29.10.2009, 11:57   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Может быть надо вставить дерективу, которая будет указывать о том, что можно использовать сопроцессор : .287 , .387 или .8087.

Или я вас не так понял и вы все еще пытаетесь умножать с помощью imul. Если это так, тогда вам нужно использовать инструкции самого сопроцессора : fmul (умножение), fld (загрузка числа),fstp(выгрузка числа в память).
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 29.10.2009 в 12:00.
Goodwin98 вне форума Ответить с цитированием
Старый 29.10.2009, 15:27   #3
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

real это разве не 6 байт, тогда при работе с fpu нужно преобразовывать к double например
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 04.11.2009, 10:06   #4
Mixim
Форумчанин
 
Регистрация: 29.10.2009
Сообщений: 259
Вопрос

Цитата:
Сообщение от airyashov Посмотреть сообщение
real это разве не 6 байт, тогда при работе с fpu нужно преобразовывать к double например
Ни могли бы Вы уточнить, как сделать такое преобразование и как затем число типа double поместить в стек сопроцессора? И если не затруднит, подскажите как потом работать с загруженными в стек числами(с помощью регистров St или по-другому).
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Mixim вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как числа в двоичном виде вывести в столбик по 4 числа? Equalizer Общие вопросы C/C++ 11 27.09.2009 14:15
Действительные числа Ximer Помощь студентам 2 09.03.2009 14:52
Даны натуральные числа m,n. Посчитать сумму m последнего числа n. лялька Паскаль, Turbo Pascal, PascalABC.NET 6 25.12.2008 15:22
Даны действительные числа а1,...,а24. Получить последовательность в1,...,в10, где Наталья111 Фриланс 7 23.12.2008 11:40
ДАНЫ 4 ЧИСЛА X Y Z W составит программу найти произведение все положительные нечетные числа Woland-itn Паскаль, Turbo Pascal, PascalABC.NET 3 23.03.2008 21:49