Как правильно написать на 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);
    }
};

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

  1. Предполагается, что функция strins написана на языке ассемблера и определена в заголовочном файле fasm.h.
  2. Ввод данных осуществляется с помощью функции scanf.
  3. Для работы со строками используется библиотека stdio.h, а для работы с памятью - stdlib.h.
  4. Вывод данных осуществляется с помощью функции puts из библиотеки stdio.h.
  5. В цикле while(TRUE) пользователю предлагается ввести данные для вставки, замены и удаления.
  6. После каждого выполнения операции выводится результат.
  7. Для освобождения памяти используется функция free.
  8. Номер позиции pos вводится как целое число.
  9. Если пользователь вводит 0, то цикл прерывается.
  10. При использовании функции getch для ввода не требуется нажатие клавиши Enter.
  11. Память под строки buf и sbf выделяется динамически с помощью функции malloc.
  12. В функции main отсутствует возвращаемое значение.
  13. В коде используются стандартные функции ассемблера для работы со строками и памятью.
  14. Размер строки buf и sbf составляет 80 символов.
  15. Функция strins вызывается с указанием исходной строки, позиции и строки для вставки.
  16. Результат работы функции strins выводится на экран с помощью функции puts.
  17. Для использования функций ассемблера их необходимо объявить как extern.
  18. Если ввод данных некорректен, программа выдаст сообщение об ошибке.
  19. В конце программы необходимо закрыть консоль.
  20. В данном коде не обрабатываются ошибки, возникающие при выделении памяти или при работе с функцией scanf.

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

6   голосов , оценка 3.667 из 5
Похожие ответы