Здравствуйте
Пишу программу на tasm
.model flat, C; 1 segm
; сегмент данных
.data
count DW 2, 0
; сегмент кода
.code
laba proc C, source:qword, result:qword
mov ecx, dword ptr [result]
;загружаем адрес переменной result
FLD qword PTR [ecx] ;загружаем значение переменной result, используя ее адрес
;загружаем адрес переменной source
FLD source ;загружаем значение переменной source, используя ее адрес
FLD1 ; загружет 1 в ст0
FADD ST[0],ST[1]; 1+a
FSQRT
FSTP ST[2]; rezultat v st2
FLD1;
FSUB ST[0],ST[1]
FSQRT
FST ST[1]
FLD ST[2]
FPATAN;вычисляет арктангенс, принимает 2 переменнве ст 0 и ст1
FIMUL count
FSTP qword PTR [ecx]; ;заносим результат (ST[0]) в переменную result и выталкиваем значение из регистра ST[0]
RET ;выходим из подпрограммы
laba endp
end
Данная функция должна вызываться через код на языке C
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
extern "C"
{
void laba(double a, double &b);
}
void main()
{
double a = 0;
double b = 0;
scanf("%lf", &a);
laba(a, b);
printf("%.10lf\n", b);
}
программа работает только с моделью памяти flat. Любой другой тип не работает. Подскажите, пожалуйста, как правильно выбирать модель памяти для программы и почему остальные типы не работают и как сделать так, чтобы работали остальные типы ?
Заранее спасибо за ответ.