|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.10.2009, 11:47 | #1 |
Форумчанин
Регистрация: 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++". Предпочитаю читать её в оригинале.
|
29.10.2009, 11:57 | #2 |
equ asm
Участник клуба
Регистрация: 02.05.2009
Сообщений: 1,605
|
Может быть надо вставить дерективу, которая будет указывать о том, что можно использовать сопроцессор : .287 , .387 или .8087.
Или я вас не так понял и вы все еще пытаетесь умножать с помощью imul. Если это так, тогда вам нужно использовать инструкции самого сопроцессора : fmul (умножение), fld (загрузка числа),fstp(выгрузка числа в память).
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4 Последний раз редактировалось Goodwin98; 29.10.2009 в 12:00. |
29.10.2009, 15:27 | #3 |
Форумчанин
Регистрация: 02.04.2008
Сообщений: 358
|
real это разве не 6 байт, тогда при работе с fpu нужно преобразовывать к double например
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666 mail: airyashov(а)inbox.ru |
04.11.2009, 10:06 | #4 |
Форумчанин
Регистрация: 29.10.2009
Сообщений: 259
|
Ни могли бы Вы уточнить, как сделать такое преобразование и как затем число типа double поместить в стек сопроцессора? И если не затруднит, подскажите как потом работать с загруженными в стек числами(с помощью регистров St или по-другому).
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как числа в двоичном виде вывести в столбик по 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 |