На этом шаге мы приведем пример простой программы, иллюстрирующей изложенный материал. Приведем пример программы, выполняющей простые арифметические дейтсвия. Листинг 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 инструкция […]