Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Глава 3
Интерфейс с языками высокого уровня
Эта глава будет полезна как программистам, пишущим на языках высокого уровня, так и тем, кто предпочитает использовать для разработки приложений ассемблер. Программисты, пишущие на языках высокого уровня, применяют ассемблерные вставки и целые, отдельно скомпилированные модули для улучшения параметров своих приложений. Программисты-ассемблершики часто используют в свою очередь логические структуры и выражения, свойственные языкам высокого уровня. Материал этой главы будет полезен и тем, и другим. Вначале мы рассмотрим наиболее часто используемые конструкции языков высокого уровня в ассемблерной интерпретации, а затем покажем, каким образом разработанные фрагменты программного кода можно объединять с программами на языках высокого уровня, используя для этого отдельно скомпилированные модули на ассемблере. Следует сказать, что все языки высокого уровня имеют, как правило, встроенный ассемблер, однако рассмотрение его использования для оптимизации программ отложим до главы 6.

Конструкции высокого уровня на языке ассемблера
Сначала рассмотрим оптимизацию программ на языках высокого уровня с помощью ассемблера, т. к. многие задачи успешно решаются с помощью ассемблерных процедур.

Анализ программ, написанных на языках высокого уровня, позволяет найти их слабые места, прежде всего, в нерациональном использовании инструкций выбора и циклических вычислений. Также значительно снижают производительность программ обработка больших массивов данных, строк и математические вычисления. Ни один компилятор ни в одном языке высокого уровня, как бы он ни оптимизировал программу по быстродействию или по размеру исполняемого модуля, не в состоянии устранить избыточность и неоптимальность кода. Это касается даже компилятора фирмы Intel с неплохими, казалось бы, характеристиками оптимизации на уровне команд процессора.

Наиболее легко поддаются оптимизации на ассемблере циклические вычисления, такие конструкции, как if-else, while, r e p e a t - u n t i l , case. Как правило, оптимизация инструкций выбора и циклов основана на использовании команд сравнения и условных переходов в зависимости от результата сравнения. В общем виде это можно представить так:
cmp operandi, operand2
Jcond labell
<операторы 1>
jmp label2
labell:
<операторы 2>
label2:

Здесь operandi и operand2 — переменные и/или выражения, Jcond — оператор условного перехода (je, ji, jge, jz или другой).
Любые, сколь угодно сложные конструкции языка высокого уровня можно представить в виде комбинаций операторов условных переходов и операторов сравнения, причем, несколькими способами. Далее мы рассмотрим варианты реализации конструкций языка высокого уровня в контексте практического применения. Начнем с инструкции выбора if.

Инструкция If
Одиночная инструкция if предназначена для выполнения команды или блока команд в зависимости от того, истинно или нет заданное условие. На С + + такая инструкция будет иметь вид:
if (условие)
{
<операторы>
}

На языке Pascal и, соответственно, в Delphi фигурные скобки заменяются операторами begin и end, а сама инструкция if будет выглядеть следующим образом:
if (условие) then
begin
<операторы>
end


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru