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

21.7 Соглашения о вызове

Порядок размещения параметров в стеке и способ очистки стека составляет то, что называется соглашением о вызове.

Модификатор cdecl устанавливает соглашение о вызове языка С.

Модификатор pascal устанавливает соглашение языка Паскаль. Оно подразумевает, что параметры попадают в стек в порядке, обратном к порядку С, т.е. слева направо. Кроме того, очищает стек вызываемая функция, а не вызывающая, как в С. Вследствие этого функция с модификатором pascal не может иметь переменное количество параметров.

Чтобы передавать параметры функции через регистры, а не через стек, применяют модификатор _fastcall. Такая передача параметров возможна, если функция получает не более трех параметров типа char, int, long или коротких указателей.

21.8 Встроенный код ассемблера

С помощью ключевого слова asm можно вставлять в функции код ассемблера. Этот код может взаимодействовать с переменными и функциями, написанными на С, использовать метки. Синтаксис следующий:

asm оператор операнды ; или новая строка

Если надо разместить несколько операторов, их окружают фигурными скобками.

П р и м е р.

asm {

pop ax; pop ds

iret

}

21.9 Псевдорегистры

BorlandC имеет следующие ключевые слова для непосредственных операций над регистрами и флагами процессора:

_AX _AL _AH _SI _ES

_BX _BL _BH _DI _SS

_CX _CL _CH _BP _CS

_DX _DL _DH _SP _DS

_FLAGS

Эти ключевые слова могут рассматриваться как глобальные переменные.

Необходимо помнить, что некоторые операторы могут неявно изменять значение псевдорегистров. Например, такой код:

#include <dos.h>

char msg[] = "Hello!";

void f() {

_AX = 9;

_DX = FP_OFF(msg);

_DS = FP_SEG(msg);

geninterrupt(0x21);

}

не будет работать, т.к. присвоение значения регистру DX разрушит содержимое AX.

Литература

  1. Керниган Б., Ритчи Д. Язык программирования Си: Пер. с англ. —М.: Финансы и статистика, 1992. — 272 с.

  2. Страуструп Б. Язык программирования Си++. Часть 1. — Киев: "ДиаСофт", 1993. — 264 с.

  3. Страуструп Б. Язык программирования С++. Часть 2. — Киев: "ДиаСофт", 1993. — 296 с.

  4. Пол Ирэ. Объектно-ориентированное программирование с использованием Си++: Пер. с англ. — К.: НИПФ ДиаСофт Лтд, 1995. — 480 с.

  5. Подбельский В.В. Язык Си+: Учеб. пособие. — М.: БИНОМ, 1995. — 400 с.

  6. Бабэ Бруно. Просто и ясно о Borland C++. Пер. с англ. — М.: БИНОМ, 1995. — 400 с.

  7. Справочник по функциям Borland C++ 3.1\4.0.— К.: Диалектика, 1994. — 416 с.

  8. Справочник по классам Borland C++ 4.0. — К.: Диалектика, 1994. — 256 с.

  9. Жешке Р. Толковый словарь стандарта языка Си: — С.-Петербург: Питер, 1994. — 221с.

  10. Язык Си. Книга ответов: Пер. с англ. — М.: Финансы и статистика, 1994. — 160 с.

11. Шилд Г. Программирование на BorlandC++ для профессионалов: Пер. С англ. — Мн.: ООО "Попурри", 1998. — 800 с.

Содержание

GOTOBUTTON _Toc411920348 PAGEREF _Toc411920348 58

21.8 Встроенный код ассемблера ........................................................

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