![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 | |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
![]()
Приветствую всех форумчан. Вопрос ради спортивного интереса. В примерах FASM есть приложение использующее OpenGL. Инициализация проходит следующим образом
Код:
Код:
Первые две получает дескриптор формы. Третья заносит в регистр edi указатель на структуру pfd Четвертая. Вот тут сомневаюсь. Я думаю, что размер структуры PIXELFORMATDESCRIPTOR делится на два сохраняется в ecx, если так, то зачем? В пятой ecx присваивается 0. rep повторяет команду stosd столько раз, сколько будет если размер структуры pfd поделить на 2. Записывая в каждые 4 байта 0. После углубленного письменного анализа в голову пришла идея, что этот код тупо заполняет нулями структуры pfd. Уже лучше. Тогда не пойму зачем размер структуры делить на 2? И за одно, раз так получилось, спрошу принцип работы stosd. Цитата:
![]() Заранее благодарен. P.S. Теперь непонятные места буду именно так разбирать, только на листочке. ![]() |
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,370
|
![]()
Делится не на 2 а на 4 (два сдвига вправо). А делается это потому что в дальнейшем исползуется инструкция stosD, т.е. записываем по 4 байта за раз. Кстати, этот фокус прокатит *только* для структур, чей размер кратен 4 байтам.
ES используется либо задав явно префикс ES: либо (как в данном случае) просто сказано, что инструкция работает *всегда* через ES. |
![]() |
![]() |
![]() |
#3 | |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]() Цитата:
Последний раз редактировалось Mikl___; 20.08.2012 в 12:06. |
|
![]() |
![]() |
![]() |
#4 | |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,370
|
![]() Цитата:
Если знать историю будет понятно зачем, иначе как бы вы скоопировали данные из одного сегмента в другой? LODS работает по DS STOS работает по ES. |
|
![]() |
![]() |
![]() |
#7 |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
_PROGRAMM_
на самом деле строки Код:
Код:
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,370
|
![]() |
![]() |
![]() |
![]() |
#10 |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
![]()
Вспомнил, что была у меня такая тема, поэтому не стал создавать новую. Они тематически похожи с моим вопросом. Тоже инициализация, только glut.
Есть такой код. Код:
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Разбор кода CSharp | zxzLeejacKzxz | C# (си шарп) | 4 | 13.06.2012 07:25 |
Разбор кода | Arhit | Помощь студентам | 3 | 22.01.2012 16:34 |
Разбор кода Delphi | cv0l04b | Помощь студентам | 3 | 07.01.2012 13:39 |
Разбор куска кода. | Alexcomeback | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 05.04.2011 18:14 |
Разбор кода. С++ | TIT0 | Помощь студентам | 0 | 27.12.2010 11:17 |