Взаимосвязь языков C и ассемблера (ASM_R2)

Посмотреть архив целиком

Раздел 2: Особенности данных


2.1 Разделение данных


Inline операторы asm имеют свободный доступ к переменным и структурам С и C++ - одно из самых привлекательных преимуществ метода inline по сравнению с подходом посредством внешних модулей. Самое интересное в типах данных ассемблера и С++, что dq может использоваться для создания инициализированных переменных двойной длины с плавающей точкой в языке ассемблера, но в Turbo Assembler отсутствуют директивы для непосредственного создания переменных с плавающей точкой.

В операторах asm можно ссылаться на переменные типов С++. Например:

unsigned char initial

initial = 'T'

asm mov dl, [initial] /*Загрузка символа в dl*/

asm mov ah, 2 /* Пересылка символа в ДОС */

asm int 21h /* Стандартная выходная функция */

Беззнаковая символьная переменная initial загружается оператором asm в dl. Так как и dl, и беззнаковые символьные данные имеют длину один байт, нет необходимости в ссылке использовать определитель Byte, хотя его применение и не будет ошибкой:

asm mov dl, [Byte ptr initial]


2.2 Объявление ассемблерных данных


Можно объявить переменные для использования только ассемблерными операторами. Например, чтобы создать 16-битовое слово с именем TwoBytes и загрузить значение переменной в сх, можно написать:

asm TwoBytes db 1, 2

int main()

{

asm mov cx, [Word ptr TwoBytes]

return 0

}

Переменная TwoBytes объявляется в сегменте данных программы (снаружи функции), с использованием директивы db, чтобы хранить в памяти 2 байта (1 и 2). Оператор ассемблера затем загружает TwoBytes в сх. Определитель Wordptr необходим для ссылки на TwoBytes как на 16-битовое слово.

Поскольку TwoBytes объявляется в операторе asm, на эту переменную нельзя ссылаться в тексте программы С или C++. Поэтому, если только не требуются отдельные переменные для ассемблерных инструкций, следует объявлять их обычным образом и ссылаться на них из ассемблерного модуля.


2.3 Разделение кода


Ассемблерные операторы inline могут вызывать функции С и C++, а операторы С и C++ обращаться к функциям, написанным полностью на ассемблере. Вся эта взаимосвязь будет хорошо рассмотрена в данном курсовом проекте.

8




Случайные файлы

Файл
174307.rtf
185388.rtf
115756.rtf
147650.rtf
17624-1.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.