Вызов функции из Си - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Использую Visual Studio 2012 (другой, к сожалению, не разрешается). Пытаюсь вызвать функцию fopen, передавая параметры через стек. Но на эту строчку он ругается:
push "key.txt"
Ошибка 1 error C2414: недопустимое число операторов Ошибка 2 error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "первый операнд"; обнаружено "bad token" Как это исправить?

Решение задачи: «Вызов функции из Си»

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

Объяснение кода листинга программы

  1. Объявлены две переменные: — fname (строка) - имя файла, который необходимо открыть. Значение переменной - 'key.txt'. — fmode (строка) - режим открытия файла. Значение переменной - 'r'.
  2. В блоке .code: — Начинается выполнение кода. — Сначала две переменные, в которых содержатся адреса переменных fname и fmode, помещаются в стек. — Затем вызывается функция fopen. — После выполнения функции fopen, значение функции возвращается в регистр eax. — Далее, значение регистра eax (которое теперь содержит дескриптор файла) добавляется к значению esp (базовый адрес стека), увеличенному на 8 (чтобы отнять от него 4 байта, так как в стеке указатели хранятся). — В результате, в стеке будет храниться дескриптор файла.
  3. Код не содержит обработки ошибок, поэтому предполагается, что при возникновении ошибки, программа завершится сгенерировав исключение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.625 из 5