Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C++ Builder 6 и процедура на asm'e

548
04 ноября 2009 года
Maximillian_Cavalera
157 / / 16.08.2007
Всем привет!
Я написал процедуру на ассемблере и добавил её в проект на BCB6. При компиляции я получаю ошибку [Tasm Error] calc.asm(2): Invalid model type
Вот отрывок из кода процедуры
Код:
.386
.model small, C, use32
.stack 256
public _calc_func
.code
main:
_calc_func proc C near u:dword, i:word, v:dword, j:word, w:dword
    local k:byte
    push si
    cld
    push ds
    pop es
    xor al, al


Вот так я подключаю её к С++
extern "C" void calc_proc(BYTE* u, WORD i, BYTE* v, WORD j, BYTE w);
Помогите решить проблему!
1
04 ноября 2009 года
kot_
7.3K / / 20.01.2000
Разве эта модель адресации может быть использована под Windows?
590
04 ноября 2009 года
Gigahard
223 / / 03.04.2006
Вроде как model flat нужно использовать. И вызов stdcall.
1
04 ноября 2009 года
kot_
7.3K / / 20.01.2000
Ну так про то и речь. Об этом собственно и кагбы намекает компилятор - но афтор намеки игнорирует и тему на форуме создает.
548
04 ноября 2009 года
Maximillian_Cavalera
157 / / 16.08.2007
Модель flat так же выдаёт ошибку
7
05 ноября 2009 года
@pixo $oft
3.4K / / 20.09.2006
Кхм.А каким способом ЭТО связывается с основной программой?Описание я,положим,вижу,и как она в основной программе описывается,тоже.А вот как это всё выглядит изначально?Хотелось бы увидеть код целиком,насколько это возможно
Ещё можно Юрова почитать,у него есть про это

При использовании модели flat та же ошибка?
P.S.Не помню,чтоб была модель "C".Также можно попробовать исключить "use32" и посмотреть,что из этого получится
548
05 ноября 2009 года
Maximillian_Cavalera
157 / / 16.08.2007
Вот код:
Код:
.386
.model flat, C, use32
.stack 256
public _calc_func
.code
main:
_calc_func proc C near u:dword, i:word, v:dword, j:word, w:dword
    local k:byte
    push si
    cld
    push ds
    pop es
    xor al, al
    lea di, w
    mov cx, i
    add cx, j
rep stosb
    xor di, di
    mov cx, j
loop1:
    push cx
    cmp byte ptr v[di], 0
    je  end_loop1

    xor si,si
    mov cx, i
    mov k, 0
multiplication:
    mov al, byte ptr u[si]
    mul byte ptr v[di]
    xor dx, dx
    add di, si
    mov dl, byte ptr w[di]
    sub di, si
    add ax, dx
    xor dx, dx
    mov dl, k
    add ax, dx
    aam
    mov k, ah
    add di, si
    mov byte ptr w[di], al
    sub di, si
    inc si
    loop multiplication
    mov al, k
    add di, si
    mov byte ptr w[di], al
    sub di, si
end_loop1:
    inc di
    pop cx
    loop loop1
    pop si
_calc_func endp
end main


У Юрова описывается как скомпилить консольную версию через компилятор командной строки для С++, мне нужно использовать мою процедуру на ассемблере в WinForms приложении.
14
06 ноября 2009 года
Phodopus
3.3K / / 19.06.2008
Чудо! Ты хоть понимаешь зачем нужно use32, чем flat отличается от small, как используются сегментные регистры в защищенном режиме, чем edi оличается от di а esi от si и, наконец, как будет работать rep stosb?
Иди учить матчасть с самого начала!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог