Вызов функции из Си - Assembler
Формулировка задачи:
Здравствуйте.
Использую Visual Studio 2012 (другой, к сожалению, не разрешается). Пытаюсь вызвать функцию fopen, передавая параметры через стек.
Но на эту строчку он ругается:
Ошибка 1 error C2414: недопустимое число операторов
Ошибка 2 error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "первый операнд"; обнаружено "bad token"
Как это исправить?
push "key.txt"
Решение задачи: «Вызов функции из Си»
textual
Листинг программы
.data fname db 'key.txt',0 fmode db 'r',0 ; буковки могут быть разные: ; r - чтение ; r+ - чтение/запись ; w - запись ; t - текстовый режим ; b - двоичный режим ; a - добавление, запись в хвост файла .code push addr fmode push addr fname call fopen add esp,8
Объяснение кода листинга программы
- Объявлены две переменные: — fname (строка) - имя файла, который необходимо открыть. Значение переменной - 'key.txt'. — fmode (строка) - режим открытия файла. Значение переменной - 'r'.
- В блоке .code: — Начинается выполнение кода. — Сначала две переменные, в которых содержатся адреса переменных fname и fmode, помещаются в стек. — Затем вызывается функция fopen. — После выполнения функции fopen, значение функции возвращается в регистр eax. — Далее, значение регистра eax (которое теперь содержит дескриптор файла) добавляется к значению esp (базовый адрес стека), увеличенному на 8 (чтобы отнять от него 4 байта, так как в стеке указатели хранятся). — В результате, в стеке будет храниться дескриптор файла.
- Код не содержит обработки ошибок, поэтому предполагается, что при возникновении ошибки, программа завершится сгенерировав исключение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д