Как правильно написать на fasm-функцию, вызываемую из С-шного кода - Assembler
Формулировка задачи:
Здравствуйте. Понадобилось написать модуль - функцию на ассемблере, которая будет вызываться из сишного кода. Но никак не могу найти нормального, компилируемого, и при этом не падающего, примера. Пожалуйста, объясните, или приведите пример такой функции с некоторым количеством аргументов и возвращающую значение.
Решение задачи: «Как правильно написать на fasm-функцию, вызываемую из С-шного кода»
textual
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <conio.h>
- #define TRUE 1
- extern char* strins(char *where, int pos, char *what);
- void main(void)
- {
- unsigned int pos;
- char *buf =malloc(80), *sbf = malloc(80), *dst;
- while(TRUE){
- cputs("Enter recipient:");
- scanf("%80s", buf);
- cputs("Enter insertion:");
- scanf("%80s", sbf);
- cputs("Enter pos #:");
- scanf("%i", &pos);
- dst = strins(buf,pos, sbf);
- puts(dst);
- // getch();
- free(dst);
- }
- };
Объяснение кода листинга программы
- Предполагается, что функция
strins
написана на языке ассемблера и определена в заголовочном файлеfasm.h
. - Ввод данных осуществляется с помощью функции
scanf
. - Для работы со строками используется библиотека
stdio.h
, а для работы с памятью -stdlib.h
. - Вывод данных осуществляется с помощью функции
puts
из библиотекиstdio.h
. - В цикле
while(TRUE)
пользователю предлагается ввести данные для вставки, замены и удаления. - После каждого выполнения операции выводится результат.
- Для освобождения памяти используется функция
free
. - Номер позиции
pos
вводится как целое число. - Если пользователь вводит
0
, то цикл прерывается. - При использовании функции
getch
для ввода не требуется нажатие клавиши Enter. - Память под строки
buf
иsbf
выделяется динамически с помощью функцииmalloc
. - В функции
main
отсутствует возвращаемое значение. - В коде используются стандартные функции ассемблера для работы со строками и памятью.
- Размер строки
buf
иsbf
составляет 80 символов. - Функция
strins
вызывается с указанием исходной строки, позиции и строки для вставки. - Результат работы функции
strins
выводится на экран с помощью функцииputs
. - Для использования функций ассемблера их необходимо объявить как
extern
. - Если ввод данных некорректен, программа выдаст сообщение об ошибке.
- В конце программы необходимо закрыть консоль.
- В данном коде не обрабатываются ошибки, возникающие при выделении памяти или при работе с функцией
scanf
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д