Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1




НазваниеКонспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1
страница2/41
Дата публикации03.03.2013
Размер5.22 Mb.
ТипКонспект
uchebilka.ru > Информатика > Конспект
1   2   3   4   5   6   7   8   9   ...   41

Лекция 2

^ Основы создания

приложений

на языке ассемблера
Материал этой главы посвящен основам создания программ на языке ассемблера, известном также как язык символического кодирования. Язык ассемблера явля­ется одним из самых сложных, поскольку требует знания аппаратно-программ­ной архитектуры процессора и особенностей его функционирования. Сложная внутренняя структура, разнообразные форматы команд, многочисленные режимы адресации процессоров Intel х8б ограничивают возможности разработки слож­ных и объемных программ на языке ассемблера.

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

Для разработки программ на ассемблере создана масса инструментальных средств, но мы будем использовать макроассемблер MASM фирмы Microsoft, включающий в себя несколько утилит. Выбор макроассемблера MASM в качест­ве среды разработки сделан исходя из следующих соображений:

  • MASM является наиболее популярной средой программирования на ас­семблере;

  • последние версии макроассемблера MASM (7.10jcxxx) позволяют работать с мультимедийными расширениями (SIMD), которые поддерживаются по­следними поколениями процессоров. Это является очень важным факто­ром, поскольку очень мало компиляторов ассемблера поддерживают эти технологии;

  • соглашения и форматы файлов, принятые в MASM, поддерживаются боль­шинством компиляторов языка ассемблера;

  • стандарты и соглашения, принятые в MASM, полностью совместимы с те­ми, что приняты в наиболее популярных средах разработки (Microsoft Visual C++ .NET и Borland Delphi 2005). Это свойство позволяет включать скомпилированные макроассемблером объектные файлы в программы, разработанные на языках высокого уровня.


Популярный компилятор TASM, к сожалению, более не поддерживается, и его развитие закончилось несколько лет назад. Серьезным недостатком этого компи­лятора при всей его привлекательности является невозможность работы с совре­менными архитектурами процессоров Intel, поддерживающими технологии па­раллельной обработки данных (SIMD).

Хочу уточнить, что мы будем создавать и анализировать программы и проце­дуры с использованием компилятора ассемблера версий не ниже б.14дхсс, а при рассмотрении технологий SIMD —не ниже 7.10-хах Очень удобен для этих це­лей свободно распространяемый пакет программ MASM32, содержащий помимо компилятора версии 6.14 также редактор исходных текстов и несколько полез­ных утилит. На момент написания книги текущей версией MASM32 является 8.2.

Рассмотрим более подробно процесс ассемблирования программ с помощью макроассемблера МASM. Должен заметить, что ассемблирование программ прак­тически не различается для версий 6.14.rm: и выше.

Пакет MASM фирмы Microsoft включает в себя основные программы, необхо­димые для создания, отладки и сопровождения программ на языке ассемблера. Процесс создания и выполнения программ на языке ассемблера состоит из двух шагов:

  1. Ассемблирование (assembling) исходного текста программы в объектный файл. Файл, содержащий исходный текст программы на ассемблере, имеет расширение ASM, а получаемый в результате ассемблирования объектный файл — расширение OBJ.

  2. Компоновка полученного объектного файла вместе с другими объектными файлами и/или библиотеками в исполняемый файл (с расширением ЕХЕ).

Ассемблирование исходного текста выполняет утилита ml.exe, входящая в со­став макроассемблера, а сборку всей программы — утилита link.exe. Эти утилиты могут как выполняться из командной строки, так и включаться в состав про­граммных сценариев. Как ml, так и link принимают множество параметров, часть из которых рассматривается далее.

В состав макроассемблера включен ряд других очень полезных программ, но мы сосредоточим внимание только на утилитах ml и link, поскольку именно они будут использованы при разработке программ и процедур в этой книге. Читате­ли, заинтересованные в более глубоком изучении возможностей макроассембле­ра MASM, легко обнаружат полные описания всех программ пакета в Интернете.

После того как исходный текст ассемблерной программы разработан, можно указать специальные условия для его ассемблирования при помощи директивы OPTION. Эта директива имеет несколько параметров, позволяющих управлять про­цессом ассемблирования программы.

Проанализируем более подробно каждый из этапов создания программ на языке ассемблера.
^ 1 Ассемблирование исходного текста
Программа ml.exe выполняет два последовательных действия при создании ис­полняемого файла программы. Во-первых, она обеспечивает трансляцию исход­ного текста программы в промежуточный объектный файл. Во-вторых, ml.exe вызывает программу link.exe, которая компонует объектные файлы и библиотеки в единую выполняемую программу.

В процессе трансляции исходного текста программы выполняются следующие действия:

  1. Анализируются директивы условного ассемблирования, и в случае истин­ности указанных в них условий выполняются те или иные шаги.

  2. Разворачиваются макросы.

  3. Вычисляются константные выражения, такие, например, как mydata and 10h, при этом выражения замещаются вычисленными значениями.

  4. Декодируются команды и операнды, не находящиеся в памяти. Например, на этом шаге будет декодирована команда mov AX, 10, поскольку она не име­ет операндов, расположенных в памяти.

  5. Сохраняются смещения переменных в памяти как смещения относительно сегментов, в которых эти переменные расположены.

  6. Сегменты и их атрибуты размещаются в объектном файле.

  7. В объектном файле сохраняются перемещаемые адреса (relocatable addresses).

  8. При необходимости создается файл листинга.

  9. Непосредственно программе link.exe передаются некоторые директивы (на­пример, INCLUDELIB и D0SSE6).

Директивы условного ассемблирования более подробно описаны в руководстве по макроассемблеру MASM 6.14 фирмы Microsoft.


    1. ^ Компоновка программ


После успешной трансляции исходного текста ассемблерной программы резуль­тат в виде объектного файла передается компоновщику link.exe. Компоновщик может связать несколько объектных файлов в один исполняемый ЕХЕ-файл. При этом все сегменты, определенные в программе, группируются в соответствии с инструкциями, содержащимися в объектном файле. Вся информация о разме­щении сегментов записывается в заголовок исполняемого файла.

Здесь следует упомянуть о том, что структура программы (не только на ас­семблере) определяется несколькими факторами:

  • архитектурой процессора;

  • особенностями той операционной системы, под управлением которой эта программа будет выполняться;

  • правилами работы выбранного компилятора — разные компиляторы предъ­являют разные требования к исходному тексту программы.



Например, исходный текст простой 16-разрядной программы, выводящей стро­ку str на экран в операционной системе MS-DOS, может выглядеть так:
assume CS:code. DS:data

code segment

start:

mov AX. data

mov DS. AX

mov AH. 09h

mov DX. offset str

int 21h

mov AX. 4C00h

int 21h

code ends

data segment

str DB "Test strings"

data ends

end start
Эта программа выполняется только в операционной системе MS-DOS и не работает в таких операционных системах, как Windows 2000 и Windows XP, по­скольку структура исполняемого файла не соответствует требованиям, выдвигае­мым этими операционными системами. Чтобы программа могла вывести строку на экран, например, в Windows XP, требуется кардинальным образом изменить структуру программы.

Кроме этого, программы для операционных систем MS-DOS и Windows тре­буют задания различных параметров компилятора и компоновщика, что вызвано различной организацией операционных систем MS-DOS и Windows. Операци­онная система MS-DOS использует 16-разрядную модель памяти в реальном ре­жиме, в то время как Windows XP, например, 32-разрядный защищенный режим с линейной адресацией памяти. Далее мы проанализируем основные параметры компилятора ml.exe и компоновщика link.exe макроассемблера MASM для созда­ния различных типов приложений.

Трансляцию файлов с расширением ASM можно выполнить из командной строки:
ml /с /coff имя_файла.asm
Созданный при помощи этой команды объектный файл имеет формат COFF. Если параметр /coff не задан, то форматом созданного объектного файла бу­дет OMF.

Компоновщик link.exe оперирует с OBJ-файлами как в формате COFF, так и в формате OMF, при этом выполняется автоматическое преобразование формата файла из OMF в COFF. Обычно при генерации исполняемых файлов использу­ется формат COFF. Кроме того, и это очень важно, если файл объектного модуля должен применяться в приложении, написанном на Visual C++ .NET, то формат его обязательно должен быть COFF. В то же время при применении объектного файла в приложении, разработанном в Borland Delphi 2005, единственным вос­принимаемым форматом является OMF.

Для того чтобы из объектного файла создать исполняемый файл, работающий в MS-DOS, следует выполнить командную строку
link /со имя_файла.obj
Здесь следует учитывать то, что версия компоновщика link.exe должна поддер­живать генерацию 16-разрядных приложений MS-DOS. Использование 32-раз­рядных компоновщиков приведет к ошибке создания ЕХЕ-файла.

Для генерирования 32-разрядных ЕХЕ-файлов следует использовать коррект­ную версию компоновщика, при этом командная строка должна выглядеть так:
link /SUBSYSTEM:WINDOWS /ОРТ:N0REF имя_файла.obj
достаточно для компиляции исходных текстов ассемблерных программ и процедур, представленных в книге. Более под­робная информация о пакете MASM доступна в Интернете, а также в многочис­ленных литературных источниках.

В последующих главах мы рассмотрим структуру данных и синтаксис команд макроассемблера MASM.
Лекция 3

Структура программы на языке ассемблера. Синтаксис языка

ассемблера

Язык ассемблера, называемый также языком символического кодирования, пред­ставляет собой машинный язык в символической форме, которая более понятна и удобна программисту. Сложная внутренняя структура, разнообразные форма­ты команд, многочисленные режимы адресации процессоров Intel ограничивают возможности разработки сложных и объемных программ на языке ассемблера. Однако в любых сложных программах всегда существуют критические секции, требующие интенсивных и быстрых вычислений, которые приходится разраба­тывать не на языке высокого уровня, а на ассемблере. Разработка программ на языке ассемблера требует хороших знаний архитек­туры всей системы, включая режимы адресации данных, структуры памяти и си­стемы команд процессора. Поэтому анализ возможностей ассемблера мы будем проводить в тесной взаимосвязи с архитектурой процессоров Intel Pentium. Напомню, что мы рассматриваем язык ассемблера, основанный на разработке фирмы Microsoft версии 6.14 и выше. Он включает в себя множество параметров, команд и директив, анализ которых займет много времени. Поэтому здесь будут рассмотрены только наиболее важные языковые конструкции, без знания кото­рых создавать программы невозможно. Для такого анализа нужно четко пони­мать, как данные представляются в компьютере и каковы общие принципы их обработки, поэтому начнем именно с этого.
^ 1. Представление данных в компьютере
В основе работы компьютера лежат понятия бита и байта — именно они представля­ют данные и команды в памяти. Минимальной единицей информации в компьюте­ре является бит. Бит может принимать одно из двух значений: 0 или 1 — и является составным элементом для более информативных единиц данных. Минимальный объем информации, к которому имеется доступ в памяти компьютера, составляет один байт (8 двоичных разрядов, или битов), при этом говорят о байтовой орга­низации памяти (хотя теоретически память может быть организована и по-дру­гому). Все байты оперативной памяти нумеруются, начиная с нуля. Местополо­жение каждого байта в памяти характеризуется его номером или, по-другому, адресом. Схематически байт представляет собой структуру данных, изображен­ную на рис. 1.



Рис. 1. Представление байта
Старший бит байта имеет номер 7, младший — 0. В оперативной памяти маши­ны байты данных располагаются по возрастанию адресов (рис. 2).



^ Рис. 2. Адресация памяти
Исключение составляет специальная область памяти, называемая стеком, — в ней байты данных располагаются в сторону убывания адресов. Более подробно мы рассмотрим стек в последующих главах.

Редко случается так, что для представления данных требуется один байт. Во многих случаях данные нужно представить большим числом байтов. Если данные можно представить двумя байтами, то говорят, что они представлены словом. О данных, требующих для представления 4 байта, говорят, что они имеют размерность двойного слова. Наконец, данные могут быть представлены восемью (учетверенное слово) или шестнадцатью (двойное учетверенное слово) байтами. Во всех этих случаях расположение байтов соответствует правилу: младший байт располагается по младшему адресу, а старший байт — по стар­шему (рис. 3).

Нумерация байтов в обычных, двойных и учетверенных словах начинается с младшего (нулевого) байта и заканчивается 1, 3 и 7-м байтом соответственно. В документации часто используется такой способ расположения байтов, когда старшие байты располагаются слева, а младшие — справа.



Рис. 3. Представление данных различной размерности в памяти
Крайний слева байт принято называть старшим, а крайний справа — млад­шим. Такой порядок расположения байтов связан с обычной для нас формой записи чисел, когда в многоразрядном числе слева находятся старшие разряды, а справа — младшие. Следующее число опять начнется со старшего разряда и за­кончится младшим. Однако в памяти компьютера данные располагаются в более естественном порядке непрерывного возрастания номеров байтов, и, таким обра­зом, каждое слово или двойное слово в памяти начинается с младшего байта и за­канчивается старшим (см. рис. 4).



Рис 4. Расположение байтов двойного слова
Вкратце напомню, как интерпретируются числовые данные в компьютере. Ком­бинируя двоичные цифры (биты), можно представить любое числовое значение. Значение двоичного числа определяется относительной позицией каждого бита и наличием единичных битов. Рассмотрим восьмибитовое число (байт), пред­ставленное следующим образом:
10100101
Поскольку мы имеем дело с двоичной системой счисления, то это число мож­но представить так:
1 х 27 + 0 х 26 + 1 х 2s + 0 х 24 + 0 х 23 + 1 х 22 + 0 х 21 + 1 х 2°.
Значение этого числа в десятичной системе равно 165. Таким образом, любое двоичное число, имеющее п разрядов, можно представить в виде
k х 2"-1 + k x 2"-2 + ... + k x 2°.
Здесь k может принимать одно из двух значений: 0 или 1. Разрядность п двоич­ного числа определяется архитектурой системы и обычно кратна восьми. Сразу замечу, что мы рассматриваем двоичное представление целых чисел, являющееся базисом для понимания вычислительных операций с любыми другими типами чисел, такими, например, как вещественные числа или, в терминологии ассембле­ра, «числа с плавающей точкой».

В арифметических операциях задействованы положительные и отрицатель­ные целые и вещественные числа, поэтому необходимо каким-то образом раз­личать их знаки. Знак двоичного числа указывается старшим или, как его назы­вают, знаковым битом числа. Положительные числа имеют в старшем разряде нулевой бит, а отрицательные числа — единичный. Отрицательные двоичные числа выражаются двоичным дополнением, то есть для представления отрица­тельного двоичного числа необходимо инвертировать все его биты и к результату прибавить 1.

В следующем примере находится двоичное представление числа -61. Поло­жительное число 61 представляется как 00111101, а процесс преобразования по­казан далее:
11000010 (инверсия числа 61)
+

00000001

11000011 (-61)
Несколько слов об операции сложения. Она выполняется по простым прави­лам:
+ 0 = 0

+ 0 = 1 0+1 = 1

1 + 1=0+1 (бит переноса)
1   2   3   4   5   6   7   8   9   ...   41

Похожие:

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций для студентов заочной формы обучения направления 080201 (Информатика)
Предлагаемый конспект лекций представляет собой пособие по предмету “Теория информации”, который читается в Сумском государственном...

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций 2007 Экология. Конспект лекций. Для студентов специальностей...
Экология. Конспект лекций. Для студентов специальностей 080201 «Информатика», 090220 «Оборудование химических производств и предприятий...

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций по дисциплине информационные и телекоммуникационные...

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций по дисциплине “
«Компьютерная инженерия», специальности 091501 «Компьютерные сети и системы», 091502 «Системное программирование»

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций по курсу Выбранные вопросы информатики (часть 2)...
Точно так же как художник может выбирать для рисования различные инструменты, программист, создающий аплет Java, может выбирать различные...

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций по дисциплине “Статистика в машиностроении ” для студентов специальности
Конспект лекций предназначен для самостоятельного изучения студентами теоретической части курса “ Статистика в машиностроении ” (для...

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций по дисциплине “ основы защиты информации” для направления...
Министерство образования и науки украины восточноукраинский государственный университеТ

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций по курсу Начертательная геометрия
Конспект лекций по курсу начертательная геометрия (для студентов заочной формы обучения всех специальностей академии). Сост. Лусь...

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций и методические указания к выполнению контрольной работы к изучению курса
Конспект лекций и методические указания к выполнению контрольной работы по курсу “Проектирование специальных станочных и контрольных...

Конспект лекций по курсу Системное программирвание для специальности Информатика Лекция 1 iconКонспект лекций по курсу «Организация производства»
Конспект лекций по курсу «Организация производства» (для студентов и слушателей заочной формы обучения фпоизо специальностей 050100...

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
uchebilka.ru
Главная страница


<