Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Виртуальная память Windows XP




В Windows XP каждый пользовательский процесс имеет собственное виртуальное адресное пространство. Длина виртуального адреса составляет 32 бита, поэтому у каждого процесса есть 4 Гбайт виртуального адресного пространства. Нижние 2 Гбайт предназначены для кода и данных процесса; верхние 2 Гбайт обеспечивают доступ (ограниченный) к памяти ядра. Виртуальное адресное пространство с подкачкой страниц по требованию содержит страницы фиксированного размера D Кбайт на машине Pentium 4). Каждая виртуальная страница может находиться в одном из трех состояний: свободна (free), зарезервирована (reserved) или выделена (committed). Свободная страница в текущий момент не используется, и обращение к ней вызывает ошибку отсутствия страницы. Когда процесс начинается, все его страницы находятся в свободном состоянии до тех пор, пока программа и начальные данные не будут отображены на свое адресное пространство. Если код или данные отображены в страницу, то такая страница является выделенной. Обращение к выделенной странице будет успешным, если страница находится в основной памяти. Если страница отсутствует в основной памяти, произойдет ошибка, и операционной системе придется вызывать нужную страницу с диска. Виртуальная страница может находиться и в зарезервированном состоянии. Это значит, что страница остается недоступной для отображения до тех пор, пока резервирование не будет отменено. Помимо атрибутов состояния, страницы имеют и другие атрибуты (например, указывающие на возможность чтения, записи и выполнения).

Windows XP позволяет отображать файлы прямо на области виртуального адресного пространства. Если файл отображен на адресное пространство, его можно считывать или записывать путем обычных обращений к памяти. Windows XP позволяет двум и более процессам одновременно отобразить один и тот же файл, возможно, на разные виртуальные адреса.

 

6. Интерфейс ассемблера с языками высокого уровня, ассемблерные вставки, особенности использования отдельных ассемблерных модулей в современных средах программирования для языков C++, Object Pascal.

Применение:-для повышения производительности критических мест программы -для прямого доступа к оборудованию

Ассемблерные вставки. Первый и самый простой вариант заключается в использовании ассемблерных вставок. MS Visual C++ (и другие) поддерживает директиву __asm, позволяющую включать ассемблерный код непосредственно в текст программы на C++. Данный подход весьма удобен. Во-первых, программист из ассемблерной вставки может обращаться по именам к переменным C++, в том числе к локальным и параметрам функций. Во-вторых, не нужно учитывать особенности компоновки объектных модулей, именования функций и соглашения о передаче параметров. Разворот битов в заданном однобайтовом числе:

int turn (unsigned char b){

unsigned char res;

__asm{

mov al,b;помещаем исходный байт в al

mov bl,0;а здесь будет результат

mov ecx,8;цикл будет на 8 итераций

L1:

shr al, 1;выдвигаем младший бит в CF

rcl bl, 1;задвигаем бит из CF в bl

loop L1

mov res, bl;результат в возвращаемую перем-ю

}

return res;

}

Подключение ассемблерного модуля. Второй вариант интеграции ассемблера с C++ заключается в разработке отдельного ассемблерного модуля и компиляции его в объектный файл, код из которого присоединяется к исполняемому файлу на этапе компоновки. Здесь нужно учитывать некоторые моменты. 1. Отключение декорирования имён. Для этого объявляем прототип функции в C++ с помощью директивы extern “C”. 2. В C++ при создании объектного файла в начало всех идентификаторов добавляет знак подчеркивания. Также необходимо учитывать порядок расположения параметров в стеке при вызове функций и порядок их освобождения. Чтобы всё это выполнялось автоматически, достаточно в директиве.model указать спецификатор языка C. Файл myfunc.asm:

.486

.model flat, c

.code

;функция разворачивает биты в байте

;входной байт - в стеке, результат будет в al

turn PROC b:BYTE

mov bl,b;помещаем исходный байт в bl

mov eax,0;а здесь будет результат

mov ecx,8;цикл будет на 8 итераций

L1:

shr bl, 1;выдвигаем младший бит в CF

rcl al, 1;задвигаем бит из CF в bl

loop L1

ret

turn ENDP

end

Файл bturn.cpp:

#include <iostream>

using namespace std;

extern "C" unsigned char turn (unsigned char c);

int main(){

unsigned int i;

cin >> i;

i = turn(i);

cout << i <<endl;

return 0;

}

Далее идёт подключение *.obj к проекту и сборка.

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных