Вызов процедуры на языке ассемблер из программы на Си - Assembler

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

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

Всем здравствуйте! может сможете мне помочь, тут такая вот беда случилась... Мне нужно написать функцию на ассемблере и вызывать ее в программе на СИ. Задание такое: удалить все пробелы при просмотрела строки с права налево. Программа вроде написана, но при тестировании, выдает ошибку (смотри скрин). Не знаю что делать, помогите. используется соглашение _cldecl текст основной программы на Си
#include <stdio.h>
#include <conio.h>
#include <locale.h>
 
extern "C" char *st(char *str, int l);
 
void main()
{
    int l = 0;
    setlocale(LC_CTYPE, "Russian");
    char str[100];
    char *str1;
    str1 = new char[100];
    FILE *f = fopen("data.txt", "r");
    int i,flag = 0;
    for (i = 0; !feof(f); i++)
    {
        fscanf(f, "%c", &str[i]);
    }
    l = i;
    str[i-1] = '\0';
    for ( i = 0; str[i] != '\0' && flag==0; i++)
    {
        if (str[i] == ' ') flag = 1;
    }
    if (flag == 0) printf("%s", str);
    else
    {
        str1=st(str, l);
    }
    _getch();
}
.386                        ;Архитектура
.MODEL FLAT        ;Плоская модель памяти соглашение о вызовах
 
.DATA                         ;Сегмент данных
BUF DB  100 DUP (?)
LENS DD  ?
VAL DB 0
 
.CODE                             ;Сегмент кода
_st PROC
POP LENS
POP ESI
 
ADD ESI, LENS
 
MOV ECX, LENS
MOV EDI, OFFSET BUF
CHECK:
    MOV DL,' '
    MOV AL,[ESI]
    CMP DL,AL
    JE @END
    MOV [EDI],AL
    INC EDI
    @END:
    DEC ESI
LOOP CHECK  
MOV EAX,EDI
RET
_st ENDP
END

Решение задачи: «Вызов процедуры на языке ассемблер из программы на Си»

textual
Листинг программы
MOV EAX,offset buf

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

  1. Переменная EAX используется для хранения адреса буфера.
  2. Команда MOV используется для перемещения значения offset buf в EAX.
  3. Значение offset buf является смещением относительно начала буфера, где хранится информация, которую нужно передать в процедуру на языке ассемблера.

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

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