Как правильно написать на 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д