Ассемблерные вставки

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Я тоже цитирую автора. Посмотри внимательнее второй мессейдж:
В том-то и дело, средствами С++ уже почти закончен новый тип данных. Повторяю - нужно решить немеренно большую систему. Время - главный фактор. То, что получается средствами С++, работает жутко медленно.
Кстати, я не говорил, что в asm'е больше типов, чем в C/C++. Я предложил использоваться asm лишь для ускорения работы программы. К сожалению в C/C++ нет прямого аналога loop и jc/jnc, которые будут неимоверно полезны при реализации функций.

И вообще не стоит спорить лишь потому, что делать нечего. :) Лучше что-нибудь дельное посоветуй человеку.
Andy
Сообщения: 238
Зарегистрирован: 17 фев 2004, 08:15
Откуда: Минск

Лучше что-нибудь дельное посоветуй человеку
Я же посоветовал. Написать класс для нового типа данных большого размера. Только я не вижу конкретных вопросов. Что не работает? Что медленно? Как можно советовать если не знаешь про что советовать? :)
Hawk
Сообщения: 216
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

Brainless head мог бы и поделиться потом алгоритмамиб как изучишь =)
Дрюль
Сообщения: 18
Зарегистрирован: 15 окт 2004, 16:14

Здравствуйте, товарищи! Я начинающий программер и у меня часто возникают проблемы. Например я писал ассемблерную вставку на Сях (Borland, 3.1), и использовал там метки, а компилятор выдавал сообщение об ошибке. Например мне нужно организовать цикл.
asm {
@10:
------
loop @10
}
Выдаётся: undefined label @10.

И ещё: может хоть кто-нибудь объяснит мне, в чём дело:
пишу:
asm
{
-----
}
выдаёт сообщение об ошибке;
пишу:
asm {
-----
}
опять ошибка!
пишу:
asm { -----
}
вот так оказывается правильно.
Вот такая вот фигня...
Дрюль
Сообщения: 18
Зарегистрирован: 15 окт 2004, 16:14

И ещё: кто нить умеет работать с видеопамятью на низком уровне? С линейной моделью и разрешением 320х200 я работать умею. А как быть, если надо чуточку побольше?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

По поводу первого: метка должна быть вынесена на пределы ассемблерной вставки:

Код: Выделить всё

asm mov cx, 10
loop_label:
asm{
   _do_somthisng_
   loop loop_label
}
По поводу второго вопроса: ничего не поделаешь. Вырианта только два, они придъявлены мною выше.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Дрюль
Сообщения: 18
Зарегистрирован: 15 окт 2004, 16:14

Благодарю. Я тут только что попробовалб получилось. А как быть со вложенными циклами?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Можно cx сохранять в стеке, а можно loop заменить на dec и je, используя для внешнего цикла cx, а для внутреннего dx (например).
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Дрюль
Сообщения: 18
Зарегистрирован: 15 окт 2004, 16:14

А если есть такая надобность (усложнить сущности)? В данный момент у меня базовый проект в колледже - компьютерная графика. Тема: моделирование трёхмерного объекта на низком уровне. Мне на асме придётся писать практически всё. Но формально проект должен быть на С++ и мне придётся писать вставками. Поэтому для меня жизненно важны вопросы: как задавать свою палитру в режиме 320х200 (с линейной моделью видеопамяти), как можно установить другой режим, и как с ним работать и т.п. (кстати, как всё это сделать?)
Ответить