{{notification.text}}

MirGames

Студент
03.01.10 18:23
0
В общем, как мне передать в glVertex3f действительные числа? Пишу на ассемблере. Win32. Masm.
Все попытки заюзать действительные числа заканчиваются этим:
real or BCD number not allowed
В общем, не знаю, что и делать. Подскажите, пожалуйста.
#1
Швец, жнец, на дуде игрец
03.01.10 18:31
0
На http://wasm.ru/ куча примеров использования OpenGL + Asm. Например вот.
P.S. MASM выкинуть :)
Отредактировано: 03.01.10 18:34
#2
Студент
03.01.10 19:45
0
Nikita Baksalyar
Спасибо. Действительно, есть пример :). Так же хотелось бы узнать, а как можно сгенерировать случайное число? Только не самому (или, если самому, то так, что бы это было достаточно просто), а с использованием какой-нибудь левой библиотеки от masm'а.
#3
Студент
03.01.10 19:48
0
Цитата
invoke glNormal3f,0.0,0.0,1.0

С какого??? С какого??? Ну как так они сделали-то в статье? Я в ужасе *ninja*
#4
Швец, жнец, на дуде игрец
03.01.10 20:02
0
Цитата(Pierre Kurochkin @ 3.01.2010 - 17:48) [snapback]100863[/snapback]
С какого??? С какого??? Ну как так они сделали-то в статье? Я в ужасе *ninja*

Я ж говорю — MASM надо выкинуть :)
Он уже устаревший да и вообще кошмарный. Flat Assembler (fasm) сейчас объективно лучший.

Цитата
Так же хотелось бы узнать, а как можно сгенерировать случайное число?

Совершенно также как и на C.
Вызовом функции rand() из библиотеки msvcrt.

И все же — почему ассемблер? :)
Отредактировано: 03.01.10 20:18
#5
Студент
03.01.10 20:24
0
Nikita Baksalyar
Цитата(Podust @ Сегодня, 16:02)
[snapback]100864[/snapback]
Вызовом функции rand() из библиотеки msvcrt.

Лол. У самого как раз такая идея была :) А другое варианты есть? Что бы, хотя бы нативно асмовская либа была?


Цитата(Podust @ Сегодня, 16:02)
[snapback]100864[/snapback]
И все же — почему ассемблер? :)

Да сам я, если честно, ассемблеру применения не нахожу вообще (разве что драйвера для устройств, и то, хз, почему их надо фигачить именно на ассемблере, а не асм-вставками).
Я же юзаю только из-за того, что это курсач.
#6
Студент
03.01.10 20:27
0
Попутно, может, объяснишь, какой сейчас есть смысл юзать асм вообще?
#7
Швец, жнец, на дуде игрец
03.01.10 20:33
0
Цитата(Pierre Kurochkin @ 3.01.2010 - 18:24) [snapback]100865[/snapback]
А другое варианты есть? Что бы, хотя бы нативно асмовская либа была?

Нативная либа и асм — понятия не очень совместимые.
Там ведь по сути одинаковый с MS VC++ компоновщик :)
По этой причине и будет логично использовать msvcrt.
Но если надо именно на Асме — то по запросу "assembler pseudo random number generation" находится кучка ссылок. Вот тут вроде то, что нужно.

Цитата
разве что драйвера для устройств

Да как бы они уже тоже давно на C ;)
#8
Швец, жнец, на дуде игрец
03.01.10 20:41
0
Цитата(Pierre Kurochkin @ 3.01.2010 - 18:27) [snapback]100867[/snapback]
Попутно, может, объяснишь, какой сейчас есть смысл юзать асм вообще?

В основном используют в системном программировании — первое, что на ум приходит — загрузчики ОС, размер которых обычно ограничен 512 байтами :) Еще встроенные системы и микроконтроллеры (хотя и там на C можно).

Разумеется, смысл есть в использовании инлайн-вставок для оптимизации (см. MMX и SSE).
На сегодня — не более того.

Не затрагиваю всяких больных людей, которые пишут программы полностью на ассемблере :)
#9
Студент
03.01.10 21:08
0
Nikita Baksalyar
Хм. А может, кинешь ссылку. Как я могу прогу на Си кинуть в загрузочную зону? ХОтя бы дискеты? Есть у меня как раз ноут дл ятакого дела :) 32 mb ram, 200 mhz и т.п. конфа. Очень хотелось бы на нём поэкспериментировать вплане системного программирования :)

Цитата(Podust @ Сегодня, 16:41)
[snapback]100869[/snapback]
загрузчики ОС, размер которых обычно ограничен 512 байтами :)

Почему нельзя прыгнуть (jmp) в незагрузочную область? И т.о. уже через "загручик загрузчика" ОС исполнять код на Си?
#10
Швец, жнец, на дуде игрец
03.01.10 21:15
0
Цитата(Pierre Kurochkin @ 3.01.2010 - 19:08) [snapback]100870[/snapback]
Почему нельзя прыгнуть (jmp) в незагрузочную область?

Так ведь загрузчик это самое и делает. 512 байт вполне хватает на то, чтобы загрузить ядро ОС (которое уже может быть написано в частности на C) в память и сделать jmp.
Загрузчик с дискеты — вообще ничего сложного. Пример (загружает и исполняет kernel.bin).
#11
Студент
03.01.10 21:20
0
Nikita Baksalyar
Ничего не ясно :) Буду разбираться. После сессии. Спасибо.
#12
Швец, жнец, на дуде игрец
03.01.10 21:29
0
Цитата(Pierre Kurochkin @ 3.01.2010 - 19:20) [snapback]100872[/snapback]

Ничего не ясно :) Буду разбираться. После сессии. Спасибо.

На форуме неудобно :) Могу рассказать подробнее в Jabber/ICQ, если нужно.
ICQ в профайле, Jabber - n.baksalyar@jabber.ru.
#13
04.01.10 03:52
0
Простейший рандом - это одна глобальная переменная и пара арифметических операций. Конкретные операции (и главное - константы) можешь посмотреть в дельфи, system.pas. Ну или аналогичном сорце от libc.
Цитата(petyakurochkin @ Вчера, 20:08)
[snapback]100870[/snapback]
Почему нельзя прыгнуть (jmp) в незагрузочную область? И т.о. уже через "загручик загрузчика" ОС исполнять код на Си?

Потому что эту область нужно сперва загрузить. Биос загружает загрузочный сектор (512 байт минус таблица разделов) в ОЗУ и передает ему управление. Дальше уже загрузчик должен загружать в память дальнейший код. Собственно, у большинства нынешних загрузчиков 512-байтный начальный кусок только подгружает основную часть загрузчика и передает ей управление. Например у винды это c:\ntldr.
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}