@watmag

Почему в данном коде не работают остальные модели памяти (работает только модель памяти flat)?

Здравствуйте
Пишу программу на 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. Любой другой тип не работает. Подскажите, пожалуйста, как правильно выбирать модель памяти для программы и почему остальные типы не работают и как сделать так, чтобы работали остальные типы ?
Заранее спасибо за ответ.
  • Вопрос задан
  • 436 просмотров
Решения вопроса 2
@nirvimel
Так у вас же 32-битный код. Все эти "модели памяти" и различия между ними - это все из мира 16-бит. В мире 32-бит модель задает ОС, прикладная программа ничего с этим не может поделать.
Ответ написан
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
Потому что в них нет необходимости. "Модели памяти" были введены от безысходности, от невозможности адресовать всю область памяти одним регистром чтобы хоть как-то дать возможность программисту адресовать память и для того, чтобы обьем exe файла выходил меньше. Идея com-файлов и модели памяти .TINY оттуда же. Если только не для МК программируете, про "модели памяти" можно спокойно забыть - она всегда будет .FLAT
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы