СИ - не вижу результата асемблеровской вставки

Тема в разделе "WASM.BEGINNERS", создана пользователем Nachin, 14 окт 2009.

  1. Nachin

    Nachin New Member

    Публикаций:
    0
    Регистрация:
    9 окт 2009
    Сообщения:
    12
    Прошу Вас помочь!!! Не могу понять: почему не вижу результата работы функции. Заранее спасибо!
    Вывожу на экран значение r, а оно пусто :dntknw:(((

    Программа:

    #include<stdio.h>
    #include<conio.h>
    #include<iostream.h>

    char *asmfunc(char *S, char c)
    {
    char *r = 0;

    L0:
    asm {
    mov SI,S;
    mov DL,c;
    }

    L1:
    asm {
    mov AL,0;
    add AL,[SI];
    je L3;
    xor AL,DL;
    je L2;

    add SI,1;
    jmp L1;
    }

    L2:
    asm {mov r,SI;}


    L3:

    return r;

    }



    void main ()
    {
    char ss[200], sim, sim1, r;
    int i;


    printf ("\n vvedite text s tochkoi: \n");

    for (i=0; ((sim=getchar()) !='.'); i++) ss=sim;
    ss='\0';

    //printf ("\n vyvesti ss=%s",ss);



    printf ("\n vvedite simvol sim=");
    scanf ("%s",sim1);


    asmfunc(ss,sim1);


    printf ("\n r=%c",r);

    getch ();
    }
     
  2. Nachin

    Nachin New Member

    Публикаций:
    0
    Регистрация:
    9 окт 2009
    Сообщения:
    12
    Забыл пояснить, что функция ищет первое вхождение указанного символа с в строку S.
     
  3. Nachin

    Nachin New Member

    Публикаций:
    0
    Регистрация:
    9 окт 2009
    Сообщения:
    12
    это первая моя лабораторная работа с асемблеровскими вставками на Си. готовая функция была дана в лабораторной работе. необходимо было определить ее действие и вставить ее в Си.
     
  4. Clear__Energy

    Clear__Energy New Member

    Публикаций:
    0
    Регистрация:
    30 янв 2009
    Сообщения:
    432
    Как мне надоело повторять: учишься ради "корочки" - учись тому, ы чём хоть немного понимаешь.
    В вузах не дают заданий, которых студент решить не в состоянии, на основе полученного материала. Кури лекции, включай голову.
    Best regards, your Clear_Energy :3
     
  5. Nachin

    Nachin New Member

    Публикаций:
    0
    Регистрация:
    9 окт 2009
    Сообщения:
    12
    Ладно Вам, не наезжайте, я ведь прошу помощи. А в лекциях этого нет. Дано на самостоятельное изучение, для ознакомления.
     
  6. Nachin

    Nachin New Member

    Публикаций:
    0
    Регистрация:
    9 окт 2009
    Сообщения:
    12
    А задание было такое: Дана функция с ассемблеровской вставкой, нужно было определить, что она делает и написать программку на СИ с ее использованием. Как я понял, эта функция ищет вхождение символа в строку. А может я не правильно разобрался. В main я ввожу строку и символ, и отпраляю их в функцию, хочу увидеть результат работы этой функции.
     
  7. Nachin

    Nachin New Member

    Публикаций:
    0
    Регистрация:
    9 окт 2009
    Сообщения:
    12
    Вы не правы, я не претендую на великого программиста совсем, я только учусь. Не хотите помочь и указать на ошибки, не пишите. Оттачивайте свое перо в других темах.
    А я буду ждать помощи от тех, кто готов помочь.

     
  8. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Когда функция возвращает значение, это значение записывается в переменную через оператор присвоения:
    Код (Text):
    1. r=asmfunc(...);
    Но в вашем случае это не скомпилируется, так как есть несоответствие типов: функция возвращает char*, а тип r это char. Надо определить r таким вот образом:
    Код (Text):
    1. char* r;
    Далее, как снежный ком: теперь printf(...) не будет работать (адрес строки не выводится через %с, а через %s) и его надо изменить:
    Код (Text):
    1. printf ("\n r=%s",r);
    И последнее: sim1 вводится через %s - опять несоответствие типов. Для ввода только одного символа просто getchar():
    Код (Text):
    1. sim1=getchar();
    Из книг советую самые основы: Керниган и Ричи.

    P.S. Кстати, что будет если символ не найден? r вернётся как NULL и попадёт в printf(). Некоторые библиотеки C напечатают "NULL", а некоторые нет - и программе конец!
     
  9. reversecode

    reversecode Guest

    Публикаций:
    0
    Nachin
    я и не говорю что вы великий программист
    и не оттачиваю свое перо
    я вам указал ошибки
    но учитывая что вы не знаете
    не именно чуть чуть а вообще языка программирования
    должны были побежать сразу же за книгами и учить учить учить как еще говорил дедушка ленин
    а если хотите что бы за вас сделали вашу лабораторную работу
    есть раздел коммерц
    где за деньги вам поможет каждый

    когда область видимости переменных вообще не соответсвует вашему заданию
    а область видимости переменных проходят на первом или втором уроке по программированию
    то вы видитесь мне заядлывам двоешником который не хочет учиться и не будет
    и помогать такому многие не захотят
     
  10. Nachin

    Nachin New Member

    Публикаций:
    0
    Регистрация:
    9 окт 2009
    Сообщения:
    12
    Огромное спасибо за разъяснение! Я понял свои ошибки