Архив категории ‘Оптимизация с помощью ассемблера’

Пример простой программы

    На этом шаге мы приведем пример простой программы, иллюстрирующей изложенный материал.     Приведем пример программы, выполняющей простые арифметические дейтсвия.     Листинг 1. Calcul.cpp //Программа выполняет различные арифметические действия, //написанные на ассемблере. #include <stdio.h> #include <iostream.h> int summa(int a, int b) {// return a+b; int s; asm { mov ax, a add ax, b mov […]

Использование прерываний. Написание процедур обработки прерываний

    На этом шаге мы рассмотрим написание процедур обработки прерываний.     Вдобавок к вызовам функций DOS и BIOS вы можете писать свои собственные процедуры обработки прерываний. Для упрощения процесса в Borland C++ используется ключевое слово interrupt, преобразующее функцию типа void в обработчик прерывания. В программах на C и C++ можно написать функцию - обработчик прерывания […]

Использование прерываний. Вызов функций BIOS

    На этом шаге мы рассмотрим вызов функций BIOS.     Ещё один набор процедур обеспечивает ввод-вывод для отдельных компонентов компьютера. Набор обработчиков прерываний и другие процедуры хранятся в ПЗУ и известны под названием BIOS (базовая система ввода-вывода). Чаще всего эти процедуры вызываются с помощью программных инструкций прерывания.     Предупреждение. Процедуры BIOS выполняют критические операции над […]

Использование прерываний. Обращение к функциям DOS

    На этом шаге мы рассмотрим обращение к функциям DOS.     С помощью встроенного ассемблера BASM в операторе asm можно легко вызвать функцию DOS. Используйте прием, продемонстрированный в листинге 1, в котором отображается строка "Welcome to BASM!$" двумя способами: с помощью функции C и процедуры DOS, выводящей строку.     Листинг 1. BASMWELC.CPP (Вызов DOS для […]

Использование прерываний.

    На этом шаге мы рассмотрим использование прерываний.     Прерывания останавливают выполнение программы, затем какое-то время выполняются некоторые действия, после чего вновь возобновляется выполнение программы с того же места, на котором она была прервана. Компьютерные устройства могут вырабатывать сигнал прерывания, чтобы уведомить компьютер о таких внешних событиях, как нажатие на клавишу или щелчок мыши. Процедура […]

Написание внешних модулей TASM

    На этом шаге мы рассмотрим написание внешних модулей TASM.     Следующие программы демонстрируют, как писать внешние ассемблерные модули. Для изучения этого раздела вам необходимо установить Turbo Assembler.     В листинге 1 вызывается функция Timer() для доступа к счетчику времени в компьютере, который хранится по адресу 0000:046c и регулярно обновляется процедурой BIOS. Однако не спешите […]

Написание встраиваемого кода BASM. Использование утилиты H2ASH

    На этом шаге мы рассмотрим использование утилиты H2ASH.     Наиболее трудоемкий процесс в написании внешних ассемблерных модулей - разработка интерфейса с внутренней структурой данных программы. Ассемблер не предназначен для выполнения операций над структурами, массивами, строками C, а также классами C++, однако вы можете воспользоваться несколькими "трюками" для доступа к объектов этих и других типов […]

Написание внешних модулей на Турбо ассемблере

    На этом шаге мы рассмотрим написание внешних модулей на Турбо ассемблере.     Встраиваемые операторы BASM особенно подходят для небольших оптимизаций - несколько инструкций здесь, несколько там, или же в отдельной функции, которую необходимо ускорить. Более продуктивная работа на ассемблере требует дополнительных возможностей автономного Турбо ассемблера (Turbo Assembler), поставляемого Borland отдельно.     TASM - замечательный […]

Написание встраиваемого кода BASM. Доступ к членам структуры

    На этом шаге мы рассмотрим доступ к членам структуры.     Встраиваемые операторы asm могут ссылаться на члены структур по имени. Однако следует быть осторожным и различать, когда инструкциям необходимо значение, а когда адрес (относительное смещение члена структуры).     Предположим, вы объявили структуру TPoint с двумя целочисленными членами x и y. С помощью typedef (необязательно […]

Написание встраиваемого кода BASM. Доступ к переменным

    На этом шаге мы рассмотрим доступ к переменным.     В операторах asm можно ссылать по имени на локальные, глобальные и регистровые переменные. Можно также непосредственно ссылаться на параметры функций. Конечно, может потребоваться использование спецификаторов WORD PTR или BYTE PTR для загрузки 16- и 8-битовых значений в регистры. Для целочисленной переменной или параметра count инструкция […]