Чёт я запутался с директивами

Тема в разделе "WASM.BEGINNERS", создана пользователем ajak, 6 май 2008.

  1. ajak

    ajak New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2007
    Сообщения:
    463
    Не могу поять отличие Public от Extern. То они вместе исп. то по отдельности.
    И ещё как собрать следующие модули а то чётне получается
    ==================================================
    #include <stido.h>
    int first = 1,
    second=2,
    third=0;
    void main(void)
    {

    printf("Add");
    add_ext();
    printf(third);
    }
    ======================
    .model medium
    extrn first:word, second:word, third:word
    .code
    _add_ext proc far ; Заметьте что здесь с подчёркиванием функция!!!
    mov ax, first
    add ax, second
    mov third, ax
    _add_ext endp
    end
     
  2. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    В С-шном куске надо объявить вашу асмовую ф-ю

    extern void add_ext();

    или
    extern "C" void add_ext();

    От этого зависит как С будет искать вашу ф. и как будет удалять параметры из стека.

    В асмовой ф. в конце нужно ret писать.

    После скомпиления обоих модулей смотрим в объектники как называются все эти first, second, ..., add_ext в обоих и добиваемся одинакового написания. Или юзаем линкер допускающий переименование (например wlink).

    public - экспорт имени.
    extrn - импорт имени.
    proc - сложный макрос. Включает экспорт имени.

    Как-что манглится смотрите в объектниках.