Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 388
от 11.10.2002, 13:00

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 1471
Отправлено ответов: 4590
Активность: 312.0 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


Письмо читателя Edward Samokhvalov


Здравствуйте!
Меня зовут Edward Samokhvalov. Я являюсь подписчиком вашей рассылки на Кипре. Я уверен, что здесь допольно много людей, которые тоже на нее подписаны. Было бы неплохо встретиться!
Я живу в городе Nicosia. Тел.: 99555346
email: edsam@spidernet.com.cy.

Дорогие товарищи! Откликнитесь, пожалуйста! Создадим программерскую тусовку на Кипре!


Edward Samokhvalov (zeleniy_kot@yahoo.com)


Комментарий Администратора

Вперед, Кипр!!!


 Список экспертов, ответы которых опубликованы в данном выпуске

freeseacher
Статус: Опытный
Общий рейтинг: 106.56
Телефон: 8(3832)366362
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 156.31
[Подробней >>]
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 131.96
[Подробней >>]
 
Portnov
Статус: Профессиональный
Общий рейтинг: 119.63
URL: Мой сайтик...
[Подробней >>]
Biv
Статус: Доверительный
Общий рейтинг: 116.66
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 132.63
URL: моя рассылка по Protected Mode
[Подробней >>]
 
DiGiT[old]
Статус: Доверительный
Общий рейтинг: 111.83
[Подробней >>]
ASMодей
Статус: Опытный
Общий рейтинг: 122.25
[Подробней >>]
Dron
Статус: Профессиональный
Общий рейтинг: 117.91
URL: Операционная система с нуля!
[Подробней >>]
 
Gibbel
Статус: Профессиональный
Общий рейтинг: 108.28
URL: Страничка обо мне и моих друзьях
[Подробней >>]
Bob Johnson
Статус: Опытный
Общий рейтинг: 151.94
[Подробней >>]
Артём Шегеда
Статус: Профессиональный
Общий рейтинг: 116.66
URL: Пристанище неодинокого программиста
[Подробней >>]
 
Sensey
Статус: Профессиональный
Общий рейтинг: 125.53
URL: Страничка рассылки по Паскаля...
Телефон: +38 (0572) 41-76-04 дом.
[Подробней >>]
Beeblebrox
Статус: Профессиональный
Общий рейтинг: 114.28
URL: Beeblebrox / TMA HomePage
[Подробней >>]
LIFO
Статус: Опытный
Общий рейтинг: 131.5
Телефон: 8 01710 24758
[Подробней >>]
 
igorash
Статус: Профессиональный
Общий рейтинг: 118.44
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1426. Здравствуйте второй раз, уважаемые эксперты. Хотелось бы поблагодарить за обалденные ответы эксперт... (ответов: 12)
Вопрос № 1427. Здравствуйте, эксперты! Пишу игрушку под ДОС (типа Xonix). Не подскажите ли алгоритм хаотичного пере... (ответов: 6)
Вопрос № 1428. Здравствуйте господа эксперты! Не подскажите где можно взять отладчик на Ассемблер и какой лучше, и ... (ответов: 2)
Вопрос № 1429. Доброе время суток уважаемые Эксперты! Спасибо вам, что не оставили мою просьбу без внимания. Но у м... (ответов: 1)
Вопрос № 1430. Здравствуйте, многоуважаемые! подскажите плииз где взять макрос invoke если я его переделать хочу? Е... (ответов: 2)
Вопрос № 1431. Привет masquer! Большое спасибо за доходчивый ответ по поводу изменения шрифтов. Но не могли бы вы... (ответов: 1)
Вопрос № 1432. На WinME не можешь установить SI тогда тебе прямая дорога на http://www.wasm.zite.ru/ Зайди туда, та... (ответов: 6)

Вопросов: 7, ответов: 30


 Вопрос № 1426

Здравствуйте второй раз, уважаемые эксперты.
Хотелось бы поблагодарить за обалденные ответы экспертов Portnov, Sensey, masquer и Bob Johnson. (может быть сейчас у вас в рубрике «Благодарности» число «0» изменится на единицу).
И хочу задать вам следующию партию вопросов.
1. Правильно ли я понял: в байте 256 комбинаций. Часть из них отдана под символы, а часть – под ассемблерные команды, только эти команды занимают по два байта. Вот процессор считывает один байт, и как он догадается что это: символ или часть двухбайтовой ассемблерной команды? Просто хочу ясности.

2. Что находится в отладчике AFDPRO в окнах с номером «1» (окно справа) и с номером «2» (в левом нижнем углу). Вернее, что в них находится, мне в тумане ясно (наверное это опкоды - спасибо эксперту Portnov’у), но чем эти опкоды могут помочь программисту, и зачем эти опкоды писать два раза, т.к. содержимое окна «1» мало чем отличается от содержимого окна «2».
3.Правильно ли я понял: весь жесткий диск поделён на сегменты и в каждом сегменте количество байтов одинаково, и где – то спереди «висит табличка» с его номером. А этот номер тоже занимает место. И если это не так, то как процессор определяет номер сегмента?
4. Правильно ли я понял: на жестком диске отведено какое – то место для хранения данных в регистрах ax, bx, и т.д. То есть они (регистры) в единственном экземпляре на весь компьютер. Или они есть в каждом сегменте? Например выполняется одновременно несколько программ, и если регистры в единственном экземпляре, то как они (программы) делят между собой эти регистры?
5. И последнее. Мне тут пришла мысль (о чудо!), что с помощью отладчика наверное можно прочитать весь жесткий диск. Например, при установке какой – нибудь понтовой программы требуется ввести пароль. И где – то в этой программе есть истинный пароль. Так вот можно ли с помощью отладчика прочитать его в виде HEX – кодов, перевести в обычные символы и ввести правильный пароль? Так наверное и делаются СRACK’и.

Двухмерное спасибо, если прочитали письмо и трёхмерное спасибо, если ответите.
С уважением. Алексей.



Вопрос отправлен: 06.10.2002, 15:16
Отправитель: Алексей

[Следующий вопрос >>] [Список вопросов]

Отвечает freeseacher

Приветствую Вас, Алексей!
Вот знаешь твой вопрос случайно попался... сразу вспомнился я сам когда все это изучал :)
Сразу скажу мысли ты ловишь, но не все...
1. Далеко не все инстукции 2 байтовые! Двухбайтовыми они стали когда однобайтовых не хватило. (например inc, dec, nop, ... досих пор один байт едят ) так что это ты зря...

2. Процу поровну что это данные или опкоды так что если ты вдруг текстовый файл в com переименуешь можно и комп повесить и вообще всякую бяку сделать... :( был тут один кадр так он чуть ли на принтере что-то не распечатал. :)
Кстати при написание многих СЕРЬЕЗНЫХ програм (вирусы, защищалки, и тд) тебе придется твой код представлять данными и при этом им кидаться как будто текстом.
3. ADF на вскидку не помню но кажется там просто дамп(кусок) памяти можетя и не прав. на сколько я помню винт он не показывает
4. Иногда, когда программеру уже не нужны скучные компиляторы и он начанает писать сразу опкодами наличие дампа может помочь ему в поисках оптимального кода... Просто, там видно, что кусок проги не гармонично смотриться :) но это уже из области почти ....
5. Вот с жеским на прямую не работал... не пришлось пишу банально через int, в порты писать не повезло, так что как там с винтом дела обстоят не скажу.
6. Место есть не нажестком диске... я много раз запускал компы вообще без них и работал только с cd а там точно некуда писать на 2x cd :) "место" на самом деле вшито в проц. И регистров он знает поболее чем основные(все это придет к тебе со временем)
7. Про многозадачность написано много посиди почитай это в 3 словах не объяснить а писать много....
8. Не так все просто с Кракерами... и не в жестких дисках там проблемы... и не с регистрами... вот про это точно писать долго! хочешь пообщаться по этому поводу? мой номер аси есть, мыльник тожа.
А вообще спроси себя готов ли ты к такому уровню конкретизации компа который дает асм или тебе проще будет много не знать??? :)

Ответ отправлен: 06.10.2002, 16:01
Отправитель: freeseacher


Отвечает masquer

Приветствую Вас, Алексей!
1. Да в байте 2^8 комбинаций бит, т.е. 256, но насчет того что там отведено - неверно. Точнее, это зависит от многих условий - код это или данные. Команды процесооров х86 могут иметь длину от 1 байта до нескольких десятков. Туманно объяснил, но так оно и есть.
2. Этим отладчиком не пользуюсь - не знаю. Опкоды, тебе, в общем-то и знать не обязательно, можно и без них, просто каждая ассемблерная инструкция имеет свой опкод, например ret - C3, nop - 90, rdtsc - 0f31 и т.д.
3. Все зависит от таблицы разделов - FAT12, FAT16, FAT32, NTFS и т.д. Более детально сложно рассказывать - слишком общий вопрос.
4. Нет, регистры относятся к внутренностям процессора, и они только в одном экземпляре. В многозадачных ОС применяется понятие контекста - для каждой задачи свой регистровый набор.
5. Теоретически - можно, практически - автор такой программки старается затруднить этот процесс.

Ответ отправлен: 06.10.2002, 18:50
Отправитель: masquer


Отвечает Dark_Lord

Приветствую Вас, Алексей!
1) В принципе, не совсем правильно. в байте действительно 256 комбинаций, но не одна из них не отдана под символы!! А команды могут быть однобайтовыми, двух-,трёх- и до огромных команд! Дело в том, что схожие команды имеют одинаковый первый байт (а иногда даже первые несколько битов) а последующие байты содержат подробную информацию о команде! А в символы байты превращаются благодаря видео-карте, там есть знакогенератор, в котором к каждому байту присваевается битовая маска, которая и выводится на экран вместо реального байта!
2)В AFDPRO эти окна напрямую отображают память! Любую её часть, и в каждом окне можно установить отдельный кусок памяти! Это очень удобно при переписи строк из одного места в другое, в двух окнах можно увидеть и то, откуда идёт перепись и то, куда!
3) Жёсткий диск здесь ни причём, сегменты и всё подобное находится в памяти компьютера! А регистры непосредственно в процессоре!
4) А ты думал как проги ломаются?!
Надеюсь всё понятно, если что не понятно спрашивай!

Ответ отправлен: 06.10.2002, 17:09
Отправитель: Dark_Lord


Отвечает Portnov

Добрый день, Алексей!
Вы свалили в одну кучу сегментацию памяти, разбиение жесткого диска на секторы и регистровую модель процессора, а это все совсем разные вещи. В принципе, мне понравилось как BrokenSword ответил, поэтому сейчас объяснять еще раз не стану. Но если что-то не понятно будет из этого объяснения - пишите portnov@mdv.ru, помогу разобраться.
С уважением, Portnov.

Ответ отправлен: 07.10.2002, 18:29
Отправитель: Portnov


Отвечает Biv

Доброе время суток, Алексей!
1) Ассемблерные команды могутзанимать от 1-го до 6-ти байт. для процессора нет разницы между символом и командой, просто программа (ехе-шник, например), стройтся таким образом, что "данные" не смогут "выполнится" случайно.
2) Фиг знает.
3) Образно выражаясь, несомненно, так и есть.
4) Регистры - небольшая поименованная область ВЫСОКОСКОРОСТНОЙ памяти микропроцессора. В случае с ах, bx и т.д. это регистры размером в 2 байта. Но есть расширенные регистры: eax, ebx, ecx и т.д. И САМОЕ главное регистры находятся внутри процессора и к харду они не имеют никакого отношения. Есть правда и в контроллере жесткого диска свои регистры, но это уже другой монолог.
Спасибо за внимание!

Ответ отправлен: 06.10.2002, 20:18
Отправитель: Biv


Отвечает Broken Sword

Доброе время суток, Алексей!
1. Нет не так. Представь что процессор - это автомобиль. Вот он может ездить по асфальтированным дорогам - это и есть код. Впринципе он конечно может заехать и в воду (вода - это данные), где благополучно утонет... Поэтому ему абсолютно все равно - он не думает где он в данный момент исполняет инструкции, все что попадает в конвеер инструкций - это команда. Т.е. фактически он как пылесос. Можно засосать гвоздей и они заклинят мотор (гвозди - это данные). Ну короче идею ты понял. Только программист может управлять этим автомобилем (пылесосом, как больше нравиться)
2. :) Хе хе... почему два окна? Действительно, одинаковые... Но ты можешь сделать так, чтоб одно показывало сегмент ES, а другое DS, или SS, вообщем, чтоб в одном окне не кувыркаться все время сделали два.
3. Не, на сегменты поделена оперативная память, а те сегменты, что на жестком диске - это сектора называются. Если ты про табличку дескрипторов сегментов памяти, то она существует только в защ. режиме, а если ты действиетльно про винт спрашиваешь, то там вообще все сектора повязаны на FAT
4. оооооо.... как все запущено.... нет, регистры находятся В ПРОЦЕССОРЕ, только при переключении задач в защ. режиме образ (слепок) почти всех регистров остается хранится в памяти (ито, на жестком диске только при страничной организации, а так они в оперативе хранятся).
5. Ну вообщем то так и есть :). Только не совсем... Прочитать весь жесткий и найти пароль - это разные две разные оперы. Если ты хочешь узнать все про свой жесткий диск, то лучше проги WinHEX тебе не найти. А про пароли и crack-и - извини, но пока рановато...
четырехкратное пожалуйста.

Ответ отправлен: 06.10.2002, 20:47
Отправитель: Broken Sword


Отвечает --- Нет данных ---

Доброе время суток, Алексей!
Ты правильно понял одним байтом можно задать только 256 комбинаций от 0h до 0ffh. Процессор неделит байты на команды и данные. Процессор просто берет из памяти байт независимо команда это или байт и выполняет его. Также запомни команда необязательно два байта есть команды и в один байт, например hlt=0f4h. Жесткий диск (или гибкий) поделен на стороны диска, треки(дорожки), секторы. К ним можно обращатся в ДОСе функциями 13h прерывания.
Содержания регистров хранятся в центральном процессоре. Иначе бы терялось содержимое регистров при форматировании жесткого диска.
Есть такие программы, типа DISKEDIT она входит в состав NORTON UTILITES. С его помощью можно посмотреть содержание магнитных дисков компьютера. Но чтобы посмотреть содержимое программы, легче воспользоваться дизассемблерами, например мне нравится интерактивный дизассемблер IDA. Программу не так просто сломать как ты думаешь, она может же и шифровать пароль, но все же НЕТ такой программы которую нельзя сломать.

Ответ отправлен: 06.10.2002, 21:44
Отправитель: --- Нет данных ---


Отвечает DiGiT[old]

Добрый день, Алексей!
1. не правильно. Есть таблицы символов в которых сопоставлены кодам ну например если байт, то 256 символов.(АСКИИ)
А кодовые инструкции тоже кодируются комбинациями, тока не обязательно байтом.
3. Таблица не висит, а просто рассчитывается его местоположение. А на сегменты не совсем. На цилиндры и секторы. А в данное время преобразование к формату цилиндр-сектор берет на себя биос.
4. не понятно. Читай доку какую-нить, а то бред какой- то.
5. Я тебя огорчу. Весь диск можно прочитать и хекседитом. А лучше своей прогой :))
ЗЫ ну никто не говорит что пароль хранится в виде символов, он хранится в виде зашифрованной билиберды.

Ответ отправлен: 07.10.2002, 06:31
Отправитель: DiGiT[old]


Отвечает ASMодей

Приветствую Вас, Алексей!

Обычно я на такие вопросы не отвечаю, так как не знаешь,
что ответить: посылать учить информатику вроде бы не вежливо
(все-таки человек ждет ответа), а чтобы ответить нужно
полностью описать устройство и работу компьютера, что займет
кучу времени и места. Но это письмо письмо меня проняло до
глубины души, поэтому попробую ответить:
Начну с чествертого вопроса.
Регистры находятся не на жестком диске, а встроены в процессор.
При переключении задач (программ) процессор сохраняет регистры
в памяти в сегменте состояния задачи и загружает в себя регистры
следующей задачи. Таким образом у кажной программы оказывается
свой набор регистров, которым ни с кем делиться не нужно.
Теперь первый вопрос.
Значит так, в памяти у компьютера находится куча байт
и процессору абсолютно наплевать, что у тебя в этих байтах
закодировано: программа, картинка, музыка или еще что.
Процессор просто последовательно выполняет команды, которые
он берет из того адреса на который указывают его регистры CS:EIP.
А анализировать, что находится в памяти - команды или данные
должна программа (или програмист ;).
Второй вопрос.
В AfdPro в окнах 1 и 2 отображается содержимое памяти компьютера.
А уже что означает это содержимое (опкоды команд или какие-то
данные) ты должен решать сам.
Третий вопрос.
В общем правильно, только жесткий диск поделен на секторы, а
секторы сгруппированы в кластеры, номера которых заданы в FAT.
И еще замечание: процессор не работает с жестким диском!!!
Это делают программы.
Пятый вопрос.
Самая здравая мысль этого вопроса. Да именно так и делаются
CRACK'и. Но ты описал простейший способ хранения паролей.
На самом деле пароль обычно хранится в зашифрованном виде или
его вообще может не быть в теле программы (тебе наверное
встречались программы к которым подходят несколько паролей?)


Ответ отправлен: 07.10.2002, 09:10
Отправитель: ASMодей


Отвечает Dron

Доброе время суток, Алексей!
1. Какое-то в корне не верное представление... символы - это символы, а коды команд - это коды команд... символом является любой код от 0 до 255... а код команды по длине может меняться от 1 до 4 байт... не считая префиксов и операндов... то есть строка текста - это тоже некий набор машинных команд, которые скорее всего логически не верны, но тем не менее могут быть выполнены.
3. на жестком диске не сегменты, а сектора. В контексте файловых систем несколько секторов обычно объединяются в кластеры или блоки... таблицы кластеров или блоков конечно храняться. и занимают вполне определенное место на диске.
4. какая связь между регистрами ax и bx и жестким диском?
5. в открытом виде пароли обычно никто не пишет. обычно они хешируются, кодируются, короче всячески скрываются от глаз. в хорошей программе этого не разглядишь.


Ответ отправлен: 07.10.2002, 10:50
Отправитель: Dron


Отвечает Gibbel

Доброе время суток, Алексей!
Ты не совсем правильно все понял:
1. Один байт может иметь значение от 0 до 255. Все эти значения могут быть восприняты как данные, в частности как набор символов, так и как код. Процессор выполняет команду, считывая ячейку памяти по адресу CS:(E)IP. В этом случаее он распознает значение ячейки памяти как код операции. В то же время он может адресоваться к той же ячеке памяти при выполнении команды, если на нее указывает один из операндов. В этом случае ячейка распознается как данные. Команды, к сведению, бывают не только двубайтовые но и однобайтовые, и пятибайтовые, и т.д....
Дальше, похоже, ты путаешь оперативную память и жесткий диск.
3. Оперативная память условно делиться процессором на сегменты. В реальном режиме (в защищенном все сложнее) никаких "табличек" перед сегментами нет. Длина каждого сегмента равна 65536 байт. При обращении к памяти в программе используются сегментные регистры, которые содержат адрес необходимого сегмента. То есть, допустим, у нас регистр DS=0F000h. Тогда, минимальный адрес ячейки памяти, который попадает в этот сегмент будет 0F0000h, а максимальный 0FFFFFh.
А если о жестком диске, ровно как и других дисках, то там не сегменты, а сектора, которым действительно предшествуют заголовки... Но об этом читай в соответствующей документации, так как тема эта слишком обширная, чтоб освещать ее здесь.
4. Регистры храняться только внутри процессора. Учитывая твой уровень знаний, я думаю тебе рано задумываться о многозадачности. Но, скажу по секрету, регистры просто сохраняются/восстанавливаются при смене задач.
5. Просто так пароль не валяется ни в одной "понтовой" программе. И, скорее всего, для его получения тебе придется разбираться в ее коде...

Ответ отправлен: 07.10.2002, 11:27
Отправитель: Gibbel


Отвечает Bob Johnson

Здравствуйте, Алексей!
Не, не, не...
Давай по порядку. В одном байте 8 бит, т.е. действительно 2^8 = 256 различных комбинаций или чисел. КАЖДОЕ число соответствует своему символу - это не зависит от процессора - есть таблица кодов ASCII (American Standard Code for Information Interchanging, кажется), которая это определяет. Скажем, символу пробел соответствует код 32, а цифре "1" - 49. Команды процессора тоже представляют собой те же байты, команды могут иметь различную длину (от 1 до 15 байт). В принципе, каждый байт команды является каким-то символом.
Процессор не знает, что такое текст вообще - для него любой байт, находящийся по адресу CS:(E)IP является командой! А вот задачей программиста является разделить в памяти команды и данные, чтобы процессор выполнял именно команды, а не текстовую строку, которую программист решил использовать как-то в своих целях. Пример - вот у нас есть кусок асм-файла:
mov ah, 9
mov dx, offset txt1
int 21h
mov ax, 4c00h
int 21h
txt1 db 'Hello, people!$'
Здесь вначале распологаются команды, а потом - строка (txt1). Процессор начинает выполнять программу сверху - попадает на код команды mov ah, 9, затем - mov dx, и т.д. При этом последний int 21h передаетс окончательно управление ДОСу и процессор не доходит до "выполнения" строки txt1. А вот если бы мы поставили строку txt1 вначале (т.е. сверху) - тогда процессор попытался бы выполнить ее (т.е. выполнить команды, коды которых соответствуют символам строки txt1) - тогда была бы ошибка (или зависание).
3. Весь жесткий диск ФИЗИЧЕСКИ (т.е. независимо от процессора и операционной системы) поделен на сектора. Обычно объем сектора - 512 байт. У каждого сектора есть свой "адрес" - номер цилиндра (трек), головки и номер сектора. Процессор переводит номер требуемого сектора в номера цилиндра, головки и сектора и передает эти параметры контроллеру жесткого диска. Тот, в свою очередь, передает данные самому диску и диск производит требуемую операцию.
4. Регистры находятся внутри процессора. Они там в единственном экземпляре. Работу двух программ одновременно (т.е. мультизадачность) организует операционная система - она сохраняет регистры процессора в оперативной памяти компьютера для каждого запущенного приложения, таким образом приложение даже не знает, что кроме него в системе запущены еще программы.
5. В общем, ход мыслей верный. С помощью отладчика ты действительно можешь посмотреть, как программа обрабатывает пароль и постараться найти правильный пароль или просто обойти защиту, но на самом деле все гораздо сложней.


Ответ отправлен: 07.10.2002, 13:18
Отправитель: Bob Johnson


 Вопрос № 1427

Здравствуйте, эксперты!
Пишу игрушку под ДОС (типа Xonix). Не подскажите ли алгоритм хаотичного перемещения монстра по экрану (так чтобы он бегал по всему экрану равномерно), а то с помощью random он бегает по линейным траекториям от одного края к другому и пока он в одном конце экрана игрок может делать все что хочет в другом, хотя его скорость меньше чем у монстра. Может передвигатся вверх/вниз, вправо/влево.
Заранее благодарен.



Вопрос отправлен: 06.10.2002, 19:15
Отправитель: EraSer (eraser99@tut.by)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Приветствую Вас, EraSer!
Можно применить теорию вероятности - когда определяешь перемещение монстра, используй не просто рнд, а с поправкой на вероятность, т.е. туда, где твой монстр уже был (это может быть и отдельная точка игрового поля или блок размером х*у точек) вероятность перемещения должна быть меньше, а где еще не был - больше.
Можно случайным образом задавать точки на игровом поле, к которым должен переместиться монстр. Когда монстр достигает такую точку, по рнд генерируются координаты следующей. Перемещение монстра - можно по прямой линии с небольшими случайными отклонениями. При этом можно следующую точку задавать недалеко от предыдущей, тогда получится, что монстр часто меняет направление движения.


Ответ отправлен: 07.10.2002, 23:28
Отправитель: Bob Johnson


Отвечает masquer

Приветствую Вас, EraSer!
Это в смысле чтобы под углом от стенок отскакивал - строится вектор (прямая) по которому идет движение, при встрече постороннего предмета, если это динамический - складываешь его и свой вектор, получаешь результирующий, если статический (стенка), считаешь угол отражения. Кажется так...

Ответ отправлен: 06.10.2002, 19:32
Отправитель: masquer


Отвечает Артём Шегеда

Добрый день, EraSer!

Попробуй использовать сплайны по 4-м точкам получится достаточно красиво. Как именно - не знаю, но зная координаты двух предыдущих точек и двух следующих, можно расчитать траекторию движения к предпоследней точке. Достигнув ёё, берёшь случайную точку и процедура повторяется.
Кроме того, можно использовать ускорения по координатам: каждую секунду берёшь новое ускорение по одной координате (ax или ay), а дальше - физика:
Vx := Vx + ax;
Vy := Vy + ay;
X := X + Vx;
Y := Y + Vy;


Ответ отправлен: 07.10.2002, 15:11
Отправитель: Артём Шегеда


Отвечает DiGiT[old]

Здравствуйте, EraSer!
так чего проще строишь случайную величину которая принимает 4 значения. пусть 1 - влево,2 вправо и т.д. Чтобы ее построить делишь весь промежуток твоего рандома на 4 части и смотришь куда попало твое значение.

Ответ отправлен: 07.10.2002, 06:19
Отправитель: DiGiT[old]


Отвечает Sensey

Приветствую Вас, EraSer!
С помощью рандом он у тебя должен дергаться на одном месте... Если ты в каждом шаге игры определяешь направление движения, как положено делать...
Я делал так:
массивы поведений монстров, например из 10 элементов:
Агрессивный:
{atack,atack,atack,atack,atack,atack,atack,atack,atack,atack}
Не совсем агрессивный
{atack,atack,atack,atack,atack,atack,atack,rand,rand,rand}
Случайный
{rand,rand,rand,rand,rand,rand,rand,rand,rand,rand}
Трусливый
{Escape,Escape,Escape,Escape,Escape,Escape,rand,rand,rand,rand}
И каждому монстру присваивал свой тип поведения
А потом в шаге игры делал так
if Tип_поведения[random(10)]=atack then приблизится_к_противнику()
if Tип_поведения[random(10)]=rand then случайно_переместиться()
if Tип_поведения[random(10)]=Escape then отбежать()

Пример:
Получается, что если монстр не_совсем_агрессивный, то он 7 раз приблизится к игроку, а 3 раза случайно двинется...


Ответ отправлен: 07.10.2002, 11:54
Отправитель: Sensey


Отвечает Beeblebrox

Доброе время суток, EraSer!
Берешь рандом, оставляешь в нем младшие 2 бита и интерпретируешь их как 4 направления

Ответ отправлен: 07.10.2002, 13:27
Отправитель: Beeblebrox


 Вопрос № 1428

Здравствуйте господа эксперты!
Не подскажите где можно взять отладчик на Ассемблер и какой лучше, и если можно то IP-адрес для перекачки по FTP.
Заране благодарю.
Сергей.



Вопрос отправлен: 06.10.2002, 21:07
Отправитель: Черухин Сергей

[Следующий вопрос >>] [Список вопросов]

Отвечает Dark_Lord

Доброе время суток, Черухин Сергей!
Для дос - Codeview
Для Windows - W32Dasm!

Ответ отправлен: 07.10.2002, 22:52
Отправитель: Dark_Lord


Отвечает LIFO

Приветствую Вас, Черухин Сергей!
Softice - свежак здесь
http://home.btconnect.com/drzhivago/softice/x-nuss01.zip
http://home.btconnect.com/drzhivago/softice/x-nuss02zip
(40 метров)

Ответ отправлен: 06.10.2002, 23:45
Отправитель: LIFO


 Вопрос № 1429

Доброе время суток уважаемые Эксперты!
Спасибо вам, что не оставили мою просьбу без внимания.
Но у меня опять возникли проблемы.
В приложении приводится процедура с ассемблерной вставкой и код основной программы, которая вызывает эту процедуру.
В общем, причина возникновения зависания понятна.
В процедуре происходит зацикливание проги и комп вешается.
Идёт непрерывный опрос АЦП, а вернее FIFO, на готовность. Но оно почему-то не готово. И это дело повторяется бесконечное число раз.
Мы хотели сделать красивый интерфейс для нашей программы в C++Builder.
Есть такая же программа, но сделанная с помощью Borland C++ как EasyWin. Она работает, как не странно.
Все процедуры взятые оттуда.
Может, кто сможет, чем помочь. Буду рад любому совету.
У нас стоит Windows 98.
Рифат.


Приложение:


Вопрос отправлен: 07.10.2002, 08:26
Отправитель: Рифат (orw@ngs.ru,abriofh@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Добрый день, Рифат!
Ну and на cmp ты поменял совсем зря... Работают они совсем по-разному. Для проверки бита лучше всего - test al, 40h - для 6-го бита.
Попробуй прогнать свой цикл в отладчике и посмотреть, что получится - какое значение будет прочитано из порта. Если оно отличается от должного - проверь инициализацию ADC и FIFO.


Ответ отправлен: 07.10.2002, 23:29
Отправитель: Bob Johnson


 Вопрос № 1430

Здравствуйте, многоуважаемые!
подскажите плииз
где взять макрос invoke если я его переделать хочу?
Если вы в курсе, подскажите как работает директива LOCAL И как динамически создавать необходимую структуру в стеке если эта директива требует быть сразу после proc, а я еще из стека процедуры не повытаскал переданные параметры...
и как эту LOCAL использовать в основной программе (после метки start: ) я лишние процедуры выделять не хочу.



Вопрос отправлен: 07.10.2002, 11:40
Отправитель: Samodelkin (transacter@narod.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Приветствую Вас, Samodelkin!
На счет invoke ничего не могу сказать, т.к. пользуюсь ТАСМом... А вот с LOCAL:
когда происходит вызов твоей процедуры, в стеке находятся последовательно: адрес возврата (АВ), параметр1 (П1), ... параметр2 (П2) ...
Обычно вначале процедуры стоит либо Enter либо push ebp; mov ebp, esp. В любом случае после этого в стеке творится следующее: ebp, AB, П1, П2 ... и ebp указывает на начало этой последовательности. Локальные перемернные также помещаются в стеке, но ниже адреса, куда указывает ebp. Это делается так:
push ebp
mov ebp, esp - это уже понятно
sub esp, _требуемый объем памяти_.
тогда в стеке получается следующая картина:
_память под локальные переменные_, ebp, AB, П1, П2 ... и ebp показывает на то место, где сохранен старый ebp.
При этом все параметры в любом месте внутри процедуры адресуются как [ebp + xx], а локальные перемнные - как [ebp - xx] и нет никаких проблем.
Возврат из процедуры осуществляется следующим образом:
mov esp, ebp; удаление из стека локальных переменных
pop ebp; восстановление старого ebp
ret
Вот кстати поэтому НИГДЕ внутри процедуры нельзя написать mov reg, offset _локальная переменная_, т.к. offset в данном случае - не число, а [ebp - xx], поэтому нужно писать: lea reg, _лок. переменная_.
А вот после метки Start тебе зачем локальные переменные? Тоже хочешь их в стек разместить? Тогда смотри приложение.
P.S.

Просьба к Олегу Калашникову!


А нельзя ли расширить по горизонтали элементы textarea в формах вопроса, приходящих к экспертам? Т.к. и не очень хорошо видно приложение к вопросу и не очень удобно набирать ответ (расширить можно было бы где-то до 750 пикс., т.к., наверное, у всех разрешение не ниже, чем 800х600)


Приложение:

Ответ отправлен: 07.10.2002, 23:29
Отправитель: Bob Johnson


Отвечает masquer

Доброе время суток, Samodelkin!
Вот что-то вроде invoke для STDCALL.
LOCAL? Ну компилятор считает, сколько места займут свои локальные переменные и на этом основании выделит фрейм в стеке, отмеряться все будет от ebp
В начале идет такая конструкция
push ebp
mov ebp, esp
Теперь, соответственно ebp+8 - у нас первый параметр, переданный функции и т.д. А локальные переменные будут иметь вид ebp-XX, где ХХ зависит от размерности переменной.

Приложение:

Ответ отправлен: 07.10.2002, 14:28
Отправитель: masquer


 Вопрос № 1431

Привет masquer!
Большое спасибо за доходчивый ответ по поводу изменения шрифтов. Но не могли бы вы подсказать как вызывать стандартный диалог изменения шрифта?



Вопрос отправлен: 07.10.2002, 12:14
Отправитель: Сергей

[Следующий вопрос >>] [Список вопросов]

Отвечает masquer

Добрый день, Сергей!
Только вот в рассылке вышло, ну да ладно...

Приложение:

Ответ отправлен: 07.10.2002, 13:20
Отправитель: masquer


 Вопрос № 1432

На WinME не можешь установить SI тогда тебе прямая дорога на http://www.wasm.zite.ru/
Зайди туда, тама есть статья специально для тебя, в которой говориться что на WinMe Si не могут поставить только ламеры! Так что ушастый лезь на сайт и и читай - попутного ветра!
Пока! поливай маму,
целуй кактус.


Приложение:


Вопрос отправлен: 07.10.2002, 12:56
Отправитель: Mantoe (xakxxx@rambler.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает ASMодей

Приветствую Вас, Mantoe!
С кем это ты разговариваешь? У меня вообще не WinME.
Пока! Маму поливать не советую - может и сгореть, а кактус
целуй на здоровье.


Ответ отправлен: 08.10.2002, 21:49
Отправитель: ASMодей


Отвечает Dark_Lord

Доброе время суток, Mantoe!
Что это такое?

Ответ отправлен: 07.10.2002, 22:55
Отправитель: Dark_Lord


Отвечает LIFO

Доброе время суток, Mantoe!
Ты этокому говоришь,дорогой?
Может это персональный вопрос вообще?


Ответ отправлен: 08.10.2002, 16:43
Отправитель: LIFO


Отвечает igorash

Здравствуйте, Mantoe!
А вообще-то этот сайт и создавался как ФАК, так что не надо тут насчет того что по нету надо рыться - вот люди роются и на сайт натыкаются... а вот задавать по 1000 раз один и тот же вопрос - тут уж по-моему ошибка в том, что нету здесь ссылочки на ресурс (на самое видное место надо поставить ее) где бы были указаны основные ошибки начинающих


Ответ отправлен: 07.10.2002, 14:00
Отправитель: igorash


Отвечает Bob Johnson

Здравствуйте, Mantoe!
Оригинально... А зачем столько эмоций?
А "лишний раз по сети не хотят поискать" - это ты не всегда прав, не у всех есть возможность долго находиться в интернете... Хотя иногда действительно лучше искать и найти самому.


Ответ отправлен: 07.10.2002, 23:29
Отправитель: Bob Johnson


Отвечает masquer

Добрый день, Mantoe!
А еще проще не мучиться, а норамльную ось заиметь - из 9х это 98SE, из NT - Win2k

Ответ отправлен: 07.10.2002, 13:21
Отправитель: masquer



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (41)
C / C++ (32)
Perl (5)
Delphi (18)
Pascal (22)
Basic / VBA (10)
Java / JavaScript (10)
PHP (9)
MySQL / MSSQL (11)
Пользователю
Windows 95/98/Me (37)
Windows NT/2000/XP (27)
"Железо" (33)
Поиск информации (14)
Администратору
Windows NT/2000/XP (13)
Linux / Unix (16)
Юристу
Гражданское право (7)
Семейное право (3)
Трудовое право (4)
КоАП (4)

Отправить вопрос всем экспертам выбранной рассылки.




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное