Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lec_asm_06_3495.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
178.18 Кб
Скачать

7. Взаимодействие языков Си и Ассемблера

7.1. Внутренняя структура программы на языке Си для ibm pc

Исполняемая программа на языке Си состоит из четырех областей: ко­манд, стека, статических данных и динамических данных.

Область команд содержит машинные команды. Стек используется для временного хранения данных и адресов возврата при вызовах подпрограмм. Область статических данных обеспечивает хра­нение значений переменных программы. В области динамических данных разме­щаются уже при исполнении программы дополнительные данные, которые могут понадобиться в процессе ее работы.

В первых версиях компиляторов Си доступная память распределялась так. Перед началом исполнения програм­мы однократно инициировался регистр CS как указатель на начало сегмента команд, а регистры ES, SS и DS инициировались как указатели на начало комбинации областей стека и данных.

Данная модель называется малой (в Борланд Си++ опция "Small").

Из-за фиксированных присваиваний регистрам сегментов в программах нельзя было иметь более 64 Кбайт для команд и 64 Кбайт в сумме для данных и стека.

Такие программы невелики и исполняются быстро, пос­кольку при их работе не требуются манипуляции с регистрами сегментов. Однако это не позволяет программисту получать доступ ко всем ресурсам компьютера IBM PC.

Более поздние компиляторы языка Си обеспечивают реализацию нескольких мо­делей распределения памяти. Перечислим модели, которые реализуются большинством из компиляторов.

Модель распределения памяти

Максимальный размер области команд, байт

Максимальный размер области данных, байт

Малая модель

64К

64К

Модель больших кодов

до 1М

64К

Модель больших данных

64К

до 1М

Большая модель

до 1М

до 1М

Под областью данных в табл. подразумевается область динамических данных. Размер области статических данных во всех моделях обычно не превышает 64 Кбайт. Ана­логично размер области стека также не превышает 64 Кбайт.

Модель больших кодов в Борланд Си++ задается опцией "Medium" –средняя. В этой модели размер области динамических данных по-прежнему не превышает 64 Кбайт, зато за счет манипулирования регистром CS размер сегмента команд (кодов) программы может составлять до 1 Мбайт.

Модель больших данных в Борланд Си++ задается опцией "Compact" – компактная. В этой модели вследствие манипулирования регистрами сегментов обеспечивается большая область динамических данных, но область команд остается ограниченной.

Большая модель памяти в Борланд Си++ задается опцией "Large" – большая. В этой модели и область команд, и область динамических данных могут расти вплоть до заполнения всей доступной памяти.

Модель распределения памяти задается на стадии компиляции путем указания соответствующих параметров при вызове компилятора языка Си или путем настроек интегрированной среды.

Каждое значение параметра, задающего модель распределения памяти, заставляет компилятор генерировать несколько иные машинные коды.

Если, например, задать модель больших кодов, то это может привести к тому, что компилятор будет генерировать вызовы процедур с атрибутом FAR.

Выбор модели больших данных может заставить компилятор генерировать команды, которые используют 4-байтовые адреса вместо 2-байтовых, как в случае малой модели.

Выбор модели зависит от требуемого приложения. Рекомендуется выбирать наименьшую возможную модель, которая удовлетворяет всем требованиям. Применение больших моделей влечет за собой увеличение размера области команд и замедление работы программы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]