Извините за ламерский вопрос.. есть такая вот структура Код (Text): struct Command id dd ? argument dd ? ; Pointer to null-terminated string ends Я передаю указатель на неё в процедуру и там хочу обратиться к строке argument. т.е. как бы обратиться по указателю через его указатель Код (Text): proc performCommand command_:dword ; разумеется это не работает, т.к. компилятор считает что в стэке структура а не указатель mov ebx, [command_ + Command.argument] endp Как быть ? можно ли напрямую обратиться к структуре ну например через dword ptr[command] Мне приходиться пока делать так : Код (Text): mov eax, [command_] mov ebx, [eax + Command.argument] ; В ebx указатель на argument но это не удобно, поскольку значение в регистрах может поменяться скажем после вызова какой-либо проц-ы Заранее спасибо
gershkovich Код (Text): mov ebx,[command_] mov ebx, [ebx + Command.argument] одной командой загрузить в ebx то что нужно не получится, т.к. надо дважды разыменовывать: Код (Text): *(*commad_ + Command.argument) /* на Си */ т.е. на асм-псевдокоде [[command_] + Command.argument], а за 1 раз не получится так.
Это как? Код пожалуйста в пример. Если бы это было правдой, регистры бы вообще не использовались. А так, с каждым потоком связан свой контекст.
only он наверное имел ввиду под "проц-ы" процедуры, которые изменяют регистры. Хотя согласен - если пишешь на асме, то с эти надо мерится, перед вызовом функции сохранять нужные регистры, которые могут изменится. Пытаться обходится без регистров - не очень умная идея, потому что с регистрами работает проц быстрее, чем с памятью.
gershkovich Как раз ebx не меняется при вызове ф-ии, по крайней мере WinAPI. Кроме того не меняются esi, edi, ebp. А если это собственная ф-ия, то нужно либо использовать регистр, который она не меняет, либо сохранять значение указателя в стеке или переменной.
Спасибо за разъяснение. Да. Действительно надо использовать регистры. По другому никак. Я посмотрел какой код генерит Delphi (через его дебагер) - он так и поступает. ЗЫ под "проц-ы" я понимал "процедуры"