|
|
|
Курсант |
|
||||
Опытный Профиль Группа: Участник Сообщений: 338 Регистрация: 21.2.2009 Где: Балашиха или Воро неж Репутация: нет Всего: 4 |
Всем привет! Решил освоить язык ассемблера... Пока есть небольшие проблемы с синтаксисом. Накорябал вот такой вот исходник:
Всё работает. Теперь хочу попробовать вызвать функцию, но не с помощью макроса proc, а хардкорно, с помощью адреса. Т.е. пытаюсь изменить код следующим образом:
Но компилятор ругается на call [routine], мол, error: operand size not specified. Вопрос: что я делаю не так. Ну и вообще хотелось бы взять несколько уроков по ассемблеру у более опытных товарищей. С помощью TeamViewer. За вознаграждение |
||||
|
|||||
JAPH |
|
||||
Опытный Профиль Группа: Участник Сообщений: 312 Регистрация: 8.1.2007 Где: Ленобласть Репутация: 5 Всего: 23 |
Дело в том, что в fasm метка и обозначает адрес, поэтому, чтобы вызвать процедуру по метке, достаточно написать
Тогда код скомпилируется. Но работать пока не будет, поскольку когда routine вызовет MessageBoxA, она некорректно передаст ей параметры, ведь на стеке окажется адрес возврата к команде, следующей за call routine. Поэтому нужно переписать эту процедуру, например, так:
О квадратных скобках в fasm можно думать как об операторе разыменования * в С. Если нужно получить значение по адресу a, пишут [a]. Если при этом размер этого значения не удается понять по контексту (по размеру второго операнда или по директиве, с которой была объявлена метка а), то его можно указать явно, например, dword [a]. -------------------- Что непонятно - спрашиваем |
||||
|
|||||
Правила форума "Asm для начинающих" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для начинающих | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |