Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2012, 18:46   #11
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

Уже не знаю что делать. Все перепробовал. Может исходник работы с glut есть? Код маленький и где-то косяк.
Код:
mov    eax,[esp]
         mov    ebx,[esp+8]
         invoke glutInit,eax,ebx
на C++
Код:
glutInit(&argc, argv);
ну в первом варианте в [esp] находится адрес argc, а [esp+8] находится начало массива. Что не так - ума не приложу.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 20.11.2012, 19:06   #12
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

ну, я бы предположил, что-то в таком духе
Код:
LEA eax, [esp+4]
PUSH DWORD PTR [esp+8]
PUSH eax
CALL glutInit
увидел код, который "стянули": там все правильно, только каст выглядит странно dword esp+8.
Код:
PUSH DWORD PTR [esp+8]
LEA eax, [esp+8]
PUSH eax
CALL glutInit

Последний раз редактировалось f.hump; 20.11.2012 в 19:26.
f.hump вне форума Ответить с цитированием
Старый 20.11.2012, 19:34   #13
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

Все равно вылетает.
Код:
lea eax, [esp+4]
         push DWORD[esp+8]
         push eax
         call glutInit

         invoke glutInitWindowSize,400,400
         invoke glutInitWindowPosition,100,100
         invoke glutInitDisplayMode,2
         invoke glutCreateWindow,'Test Asm OpenGL';
         invoke glutMainLoop
         invoke MessageBox,0,0,0,0
         invoke Sleep,5000
         invoke ExitProcess,0
Цитата:
увидел код, который "стянули": там все правильно, только каст выглядит странно dword esp+8.
Давайте определимся. Вы для MASM или для FASM пишете? Просто после ввода вашего кода хватаю ошибку invalid expression. В моем случае нужно убрать PTR и все компилируется, но вылетает(В программе обнаружена ошибка и т.д.).

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 20.11.2012 в 19:58.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 20.11.2012, 21:58   #14
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

сори, я пишу для MASM.

ну, я думаю должен быть способ протрейсить прогу, посмотреть память, регистры, и в каком месте происходит креш.
f.hump вне форума Ответить с цитированием
Старый 21.11.2012, 19:23   #15
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

Кроме того, что ошибка при вызове этой функции и того, что она классифицируется как illegal instruction я ничего узнать не смог. Сейчас выполнял, такую инструкцию в с++
Код:
сout<<&argc<<"\n"<<argv<<"\n";
и у меня получилось: первая 0044FEB8, вторая 00104768. Разница не в 8 байт.
Где вообще находятся эти переменные? Я не очень понимаю, то, что делаю.
---
Ошибка лежала под носом.
Код:
         mov    eax,[esp+8]
         mov    eax,[eax]
         lea    ebx,[esp+8]
         invoke  glutInit,eax,ebx

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 21.11.2012 в 19:49.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 22.11.2012, 09:13   #16
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от Mikl___ Посмотреть сообщение
Обнуляют структуру pfd, в Windows ES=CS=DS=SS поэтому о значении в сегментных регистрах не беспокоятся, если бы заполнение шло командами STOSB тогда делить размер структуры на 4 было бы не нужно, а здесь сразу по 4 байта одной командой, что в 4 раза быстрее
И эта скорость может оказать медвежью услугу, если размер структуры не делится на 4 нацело. Например, для структуры размером 10 байт два последних байта не будут очищены. Так что, при таком подходе, желательно проверять наличие "вытолкнутых" бит при смещении и добавлять лишнюю итерацию очищения.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбор кода 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