'

Лекция №1

Понравилась презентация – покажи это...





Слайд 0

Лекция №1 Определение ассемблера; программа на ассемблере; основные функции ассемблера; структура объектного модуля.


Слайд 1

Литература Л. Бек. Введение в системное программирование – М:Мир, 1988; В. Юров. Assembler, практикум – СПб:Питер, 2001; А.Молчанов. Системное программное обеспечение. Учебник для вузов – СПб:Питер, 2003; А.Молчанов. Системное программное обеспечение. Лабораторный практикум – СПб:Питер, 2005.


Слайд 2

План выполнения программа на ассемблере: Ассемблер- это программа, которая воспринимает на входе программу на языке ассемблера и создает эквивалентную ей программу на машинном языке вместе с информацией для загрузчика.


Слайд 3

ОСНОВНЫЕ ФУНКЦИИ АССЕМБЛЕРА: Преобразование мнемонических кодов в их эквиваленты на машинном языке; Преобразование символических операндов в эквивалентные им машинные адреса; Построение машинных команд; Преобразование констант во внутреннее представление; Формирование и запись объектного модуля; Выдача листинга.


Слайд 4

Листинг программы Turbo Assembler Version 3.1 03/03/09 22:37:15 Page 1 first.ASM 1 0000 model small 2 0000 .stack 80h 3 0000 .data 4 0000 0002 a1 dw 2h 5 0002 0010 a2 dw 10h 6 0004 .code 7 0000 B8 0000s start: mov ax,@data 8 0003 8E D8 mov ds,ax 9 0005 A1 0000r mov ax,a1 10 0008 03 06 0002r add ax,a2 11 000C B8 4C00 mov ax,4c00h 12 000F CD 21 int 21h 13 end start


Слайд 5

заголовок - содержит имя программы, начальный адрес, длину и определяет структуру программы; тело - содержит машинные команды и данные ; запись конца – отмечает конец программы, определяет точку входа. Структура объектного модуля


Слайд 6

Функции двухпроходного ассемблера: 1 просмотр – определение имен Назначение адресов для всех предложений исходной программы; запоминание адресов всех меток в таблице символов; выполнение некоторых директив, связанных с распределение памяти (db, dw, dd, equ, org, assume).


Слайд 7

Функции двухпроходного ассемблера: 2 просмотр – трансляция команд и генерация объектного кода Трансляция команд; генерация данных в соответствии с их форматами; выполнение остальных директив транслятора (public, extrn); формирование объектного модуля и листинга.


Слайд 8

Реализация 1-го просмотра Определяется начальное значение счетчика адреса Loc; используется таблица кодов операций Optab (код, машинный эквивалент, длина и формат команды) для распределения памяти; создаются таблица символов Symtab (символ, тип, значение) и таблица перекрестных ссылок Cref (ссылка, номера операторов создания и использования).


Слайд 9

Реализация 2-го просмотра Используются форматы машинных команд из Optab и адреса ссылок из Symtab для генерации машинных команд; при формировании листинга информация выбирается из Loc, Optab, Symtab и промежуточного файла из 1-го просмотра.


Слайд 10

Лекция №2 Машинно-независимые характеристики ассемблера; пример ассемблирования программы.


Слайд 11

Машинно-независимые функции ассемблера Средства определения имен; Выражения в ассемблере; Сегментирование и связывание программ.


Слайд 12

Средства определения имен: директивы EQU и ORG Формат: имя EQU выражение где «выражение» - поименованная строковая константа, псевдоним или числовая константа. Пример: blksize equ 512 bufsize equ blksize*4 buflen equ bufsize


Слайд 13

Директива ORG Назначение: задание начального значения счетчика адреса или привязки символического имени к адресу Формат: ORG выражение где «Выражение» -константа или символический адрес Пример1: ORG 100h Пример2: start db 100h dup (0) ORG start


Слайд 14

2. Составление выражений в ассемблере Используются около 50 операций и директив: скобки (); арифметические операции: +, - , *, /; - «выражение»; двоеточие : - указание префикса замены сегмента, например, mov cx,es:[si+4]; dup – повторение размещения данных; логические операции: and , or, xor; byte, word – определение размера результата выражения, например, 1 байт или 2 байта; Far, near – приписывает атрибут дальности;


Слайд 15

Операции в выражениях условные операции: gt, ge, lt ,le, eq, nq, eq; Length –возвращение числа байт, выделенных под данные. Пример: msg db ‘hello’ array db 10 dup(0) L_msg= length msg ; =1 L_array=length array ; =10 seg, offset – выбор сегментной части адреса или смещения; this тип, где тип определяет размер операнда, - создание операнда, адрес которого равен текущему. Пример: p1 equ this word


Слайд 16

Операции в выражениях Label – определение символического имени и задание его тип. Пример: p1 Label word тип ptr выражение приписывание выражению указанного типа. Пример, mov byte ptr [si],10


Слайд 17

3. Сегментирование и связывание модулей Модули должны быть связаны: -по управлению; -по данным. Средства связи: адрес или аргумент. Аргумент - это ссылка на некоторые данные, которые требуются для выполнения функции данного модуля, но размещены вне этого модуля. Аргументы делятся на формальные и фактические. Замещение формального параметра в модуле происходит за счет передачи в него соответствующего фактического аргумента.


Слайд 18

Способы передачи аргумента в модуль через регистр; через общую память ; через стек; с помощью директив extrn и public.


Слайд 19

3. Сегментирование программ Используются директивы: segment; ends; assume; public; extrn; model, .data, .code, .stack и т.д.


Слайд 20

Пример связывания двух модулей. Start–процедура, определенная в A1.asm и вызываемая в главном модуле A2.asm A1.asm .code Public start Start proc near ………. Ret Start endp end start A2.asm .code extrn start:near entry proc far Mov ax,@data Mov ds,ax Call start Ret entry endp end entry


Слайд 21

Замечания к примеру Т.к. имена сегментов в модулях одинаковы, то: можно в А1 не загружать ds; процедура Start может быть near.


Слайд 22

Листинг программы Turbo Assembler Version 3.1 03/03/09 22:37:15 Page 1 first.ASM 1 0000 model small 2 0000 .stack 80h 3 0000 .data 4 0000 0002 a1 dw 2 5 0002 000a a2 dw 10 6 0004 .code 7 0000 B8 0000s start: mov ax,@data 8 0003 8E D8 mov ds,ax 9 0005 A1 0000r mov ax,a1 10 0008 03 06 0002r add ax,a2 11 000C B8 4C00 mov ax,4c00h 12 000F CD 21 int 21h 13 end start


Слайд 23

Листинг программы (таблица символов) Turbo Assembler Version 3.1 03/03/09 22:37:15 Page 2 Symbol Table Symbol Name Type Value Cref (defined at #) ??DATE Text "03/03/09" ??FILENAME Text "first " ??TIME Text "22:37:15" ??VERSION Number 030A @32BIT Text 0 #1 @CODE Text _TEXT #1 #1 #6 @CODESIZE Text 0 #1 @CPU Text 0101H @CURSEG Text _TEXT #3 #6 @DATA Text DGROUP #1 7 @DATASIZE Text 0 #1 @FILENAME Text FIRST @INTERFACE Text 00H #1 @MODEL Text 2 #1 @STACK Text DGROUP #1 @WORDSIZE Text 2 #3 #6 A1 Word DGROUP:0000 #4 9 A2 Word DGROUP:0002 #5 10 START Near _TEXT:0000 #7 13


Слайд 24

Описание сегментов и групп Groups & Segments Bit Size Align Combine Class DGROUP Group STACK 16 0080 Para Stack STACK _DATA 16 0004 Word Public DATA _TEXT 16 0011 Word Public CODE


Слайд 25

MAP-файл Start Stop Length Name Class 00000H 00010H 00011H _TEXT CODE 00020H 00023H 00004H _DATA DATA 00030H 000AFH 00080H STACK STACK Program entry point at 0000:0000


Слайд 26

Лекция №3 Машинно-зависимые функции ассемблера; Встроенные имена TASM.


Слайд 27

Машинно-зависимые функции ассемблера: форматы машинных команд и данных; способы адресации; информация о перемещении программ. Для реализации этих функций используются: таблица кодов операций, таблица символов, счетчик распределения памяти.


Слайд 28

форматы машинных команд и данных Ассемблер генерирует машинные команды и данные в форматах, определенных для конкретного типа ЭВМ. Адреса могут быть 16- или 32-разрядные.


Слайд 29

2. Способы адресации Физический адрес памяти представляется в виде: сегмент + смещение. В зависимости от типа операнда возможны варианты : - вычисление смещения прямого адреса, - косвенная адресация, - непосредственный операнд, -указание сегментного регистра по умолчанию или явно. (формирование байта mod r/m, префиксов)


Слайд 30

Формирование адреса перехода Зависит от: типа операнда в команде перехода; указания перед адресом модификатора. При этом адрес перехода находится: в команде (прямой переход); в регистре или ячейке памяти (косвенный).


Слайд 31

Модификаторы near ptr и far ptr для прямого перехода ; word ptr и dword ptr для косвенного перехода. Пример для команды безусловного перехода jmp: формат команды: jmp [модификатор] адрес_перехода


Слайд 32

Внутрисегментный переход: прямой короткий m1: Jmp short ptr m2; m1, m2 - 1байт ….….. (m2-m1)?127 б m2: Или m1: ; (m1-m2)? -128 б ….….. m2: Jmp short ptr m1;


Слайд 33

Внутрисегментный переход: прямой ((m2-m1) >128) m1: ….. m2: jmp m1; адрес-2 байта


Слайд 34

Косвенный внутрисегментный переход (адрес-2байта)


Слайд 35

Прямой межсегментный переход


Слайд 36

3. Информация о перемещении Объектная программа, содержащая информацию о модификации адресов, называется перемещаемой. При трансляции определяются относительные адреса операндов; Транслятор не знает фактический адрес загрузки, следовательно не может настроить адреса; Изменяемые адреса должны быть помечены при трансляции; Транслятор в заголовке объектного модуля формирует информацию для загрузчика о структуре модуля и модификации адресов.


Слайд 37

Встроенные имена tasm Turbo Assembler Version 3.1 03/03/09 22:37:15 Page 2 Symbol Table Symbol Name Type Value Cref (defined at #) ??DATE Text "03/03/09" ??FILENAME Text "first " ??TIME Text "22:37:15" ??VERSION Number 030A @32BIT Text 0 #1 @CODE Text _TEXT #1 #1 #6 @CODESIZE Text 0 #1 @CPU Text 0101H @CURSEG Text _TEXT #3 #6 @DATA Text DGROUP #1 7 @DATASIZE Text 0 #1 @FILENAME Text FIRST @INTERFACE Text 00H #1 @MODEL Text 2 #1 @STACK Text DGROUP #1 @WORDSIZE Text 2 #3 #6 A1 Word DGROUP:0000 #4 9 A2 Word DGROUP:0002 #5 10 START Near _TEXT:0000 #7 13


Слайд 38

Типы встроенных имен Текстовое значение пример: nnn db ??time; Числовое значение Пример: if ??version gt 100h переменная-псевдоним, т.е. синоним имени Пример: assume cs:@code


Слайд 39

Примеры встроенных имен tasm $ - счетчик адреса, служит для ссылки на его текущее значение; @code - альтернативное имя сегмента; @codesize - определяет модель памяти для кодового сегмента: 0 - small,compact (ближний указатель на процедуру) 1 - для всех остальных (дальний указатель памяти); @curseg - псевдоним текущего сегмента; @datasize - определяет модель памяти для данных: 0 - tiny, small. Встроенные переменные начинаются с «??», псевдонимы - с «@».


Слайд 40

Лекция №4 Структура заголовка obj-файла; Опции TASM; Макропроцессор.


Слайд 41

Структура записи заголовка obj-файла для macro assembler and Microsoft C Compiler Заголовок состоит из записей переменной длины +-----------------------------------------------------------------+ |Длина Содержимое | +------------------------------------------------------------------+ | BYTE Тип записи | +------------------------------------------------------------------+ | WORD Число байт в записи, включая | | контрольную сумму , но не включая | | тип записи | +-----------------------------------------------------------------+ | .... Данные записи .... | | (смотреть подробно описание типов) | +-----------------------------------------------------------------+ | BYTE контрольная сумма | +----------------------------------------------------------------+


Слайд 42

Байт типа записи | 80 Module name | | 8A End of module | | 8C External symbols | | 8E | | 90 Public symbols | | 92 | | 94 Line number info | | 96 Segment/Group symbols | | 98 Info for specific seg | | 9A Info for specific group | | 9C Relocation list | | 9E | | A0 Segment data | | A2 Duplicated Segment Data |


Слайд 43

Пример: запись описания Public- ссылок (90) Для каждой ссылки - своя запись. Формат полей данных : +----------------------------------------------------------------+ | BYTE Zero | +-----------------------------------------------------------------+ | BYTE Segment number in which symbol | | is defined | +-----------------------------------------------------------------+ | BYTE Length of symbol | +-----------------------------------------------------------------+ |(Length) | I BYTES Public Symbol Name | +-----------------------------------------------------------------+ | WORD Offset where symbol defined | +-----------------------------------------------------------------+ | BYTE Zero | +-----------------------------------------------------------------+


Слайд 44

Запись спецификации сегмента (98) Запись определяет атрибуты комбинирования, границу выравнивания для сегмента +----------------------------------------------------------------+ | BYTE Комбинирование/выравнивание | определяется побитно как 0AAXPS00 | | где AA тип выравнивания: | | 00=AT специфическое | | выравнивание | | 01=BYTE граница | | 10=WORD граница | | 11=PARAGRAPH граница | | X неизвестен, | | P public- сегмент, | | S stack- сегментt, | +----------------------------------------------------------------+ | WORD Размер сегмента в байах | +---------------------------------------------------------------+ | BYTE Номер сегмента | +---------------------------------------------------------------+ | BYTE | +---------------------------------------------------------------+ | BYTE Обычно 1 | +---------------------------------------------------------------+


Слайд 45

Опции tasm Формат команды: TASM [опции] имя_asm [,имя_obj] [,имя_lst] [,имя_crf] или TASM имя_asm [,имя_obj] [,имя_lst] [,имя_crf] [опции] или TASM имя_asm ,,, [опции]


Слайд 46

Опции tasm При распределении памяти ассемблер размещает сегменты : - в алфавитном порядке имен сегментов; - в порядке их описания в программе. /а – установить алфавитный порядок следования сегментов; /s – установить порядок следования сегментов как в исходном коде ( по умолчанию); /с – вставить таблицы перекрестных ссылок (cref) в листинг;


Слайд 47

Опции tasm (продолжение) /dsym[=val] - определить символ sym=0 или sym= значение val; пример: tasm abc.asm /dmax=10 /dmin=0 /jдиректива - определить начальную директиву ассеблера; пример: tasm abc.asm /jjumps /iпуть – установить путь включаемых файлов; пример: tasm abc /id:\include


Слайд 48

Опции tasm (продолжение) /l – сформировать файла листинга (.lst); /h или /? – вывод подсказки; /ml – отличать прописные и строчные символы в именах при анализе операторов программы; /mx – отличать прописные и строчные символы в общих и внешних именах; /mu – преобразовать все символы в именах в прописные; /m[число_проходов] - max число проходов, обычно tasm– однопроходный, по умолчанию - 5; пример: tasm /m2 abc


Слайд 49

Опции tasm (продолжение) /n - не включать таблицу символов в листинг; /t - не показывать сообщения об успешной трансляции; /zi - помещать отладочную информацию в объектный файл для турбо-отладчика.


Слайд 50

Макропроцессоры Процесс замены макрокоманды в исходном модуле на соответствующую группу операторов называется макрорасширением. Выполняется макропроцессором. Используются в разных языках, например, в СИ++: #define width 80 Основная функция макропроцессора – замена одной группы символов на другую. Механизм его работы не связан с архитектурой ЭВМ.


Слайд 51

Однопросмотровый макропроцессор Для выполнения макрорасширения макропроцессор строит три таблицы: макроопределений DEFTAB (прототипы и тела макроопределения); имен макроопределений (для каждого имени – указатели на начало и конец в DEFTAB); аргументов для каждого макроопределения (заполняется при распознавании макрокоманд);


Слайд 52

Особенности макропроцессора: генерация уникальных меток (LOCAL); объединение параметров (&); условные макрорасширения (if, ifb, ifnb и др.) ; ключевые параметры (REQ); макрооперации; вложенные макросы (ведется счетчик уровня вложенности).


Слайд 53

Лекция №5 Оверлеи в ассемблере


Слайд 54

Оверлейные структуры программ Оверлейная программа имеет древовидную структуру: Для оверлейной программы не создается PSP.


Слайд 55

Вызов оверлея в ассемблере Вызов из одной программы другой выполняется через int 21h с функцией 4Вh . Данная функция загружает в память программу без передачи управления на ее точку входа. Способ вызова задается в регистре al: 0 - программа; 3 – оверлей. Исходные данные в момент вызова: ds:dx - указывает на строку, содержащую путь к файлу оверлея, в коде asciiz; es:bx - указывает на блок параметров ebp размером в 4 байта.


Слайд 56

Блок параметров (ebp) состоит из двух полей по 2 байта: адрес загрузки оверлея (номер параграфа); Фактор привязки адресов.


Слайд 57

Выделение памяти под оверлей Существует два способа: системный запрос через int 21h с функцией 48h; в bx записывается требуемое число параграфов, в ax выдается начальный адрес выделенного блока; выделение памяти в программе.


Слайд 58

Фактор привязки Определяет константу (сегментную часть адреса) для модификации адресов оверлея после его загрузки в память


Слайд 59

Лекция №6 Загрузчики; функции абсолютного загрузчика; машинно-зависимые функции загрузчика.


Слайд 60

Основные понятия Загрузчик - системная программа, выполняющая загрузку программы пользователя. Загрузка - процесс, обеспечивающий размещение программы в оперативной памяти для использования.


Слайд 61

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


Слайд 62

Функции загрузчиков и редакторов связи Загрузчики выполняют функции: перемещения; загрузки. Редакторы связи выполняют функции: перемещения; связывания; загрузки.


Слайд 63

Загрузчики Общая схема обработки программы: Загрузочный модуль Исполнительный модуль


Слайд 64

Функции абсолютного загрузчика запись объектной программы в ОП; передача управления на адрес начала ее исполнения. Последовательность действий: -определить размер программы ( из заголовка); -разместить объектный код по заданному адресу; -определить точку входа (из записи-конца) и передать на нее управление.


Слайд 65

Машинно-зависимые функции загрузчика Загрузчики, обеспечивающие перемещение программ называются относительными или перемещающими. Основные функции: перемещение; связывание.


Слайд 66

Функция перемещения (1) Модификация адреса заключается в добавлении к нему начального адреса загрузки программы. Способы передачи информации о перемещении: 1. создание специальной записи - модификатора, которая задает начальный адрес и длину изменяемого поля; например, в MS DOS создается таблица настройки адресов


Слайд 67

Функция перемещения (2) 2. создание маски перемещения; с каждым словом программы связан разряд перемещения, все разряды образуют маску. Пример: 1111 1111 1100 - маска F F C из 12 разрядов Маска хранится вместе с объектным модулем.


Слайд 68

Функция перемещения (3) 3. Аппаратные средства перемещения. Все ссылки по памяти рассматриваются как относительные с базовым адресом, Например, в процессорах фирмы intel, в машинах IBM 370


Слайд 69

Функция связывания Неопределенные внешние ссылки называются неразрешенными внешними ссылками. Исходные данные : таблица внешних имен, адрес загрузки программы, начальный адрес сегмента.


Слайд 70

Функция связывания I просмотр - разрешение внешних ссылок, распределение памяти; II просмотр – перемещение и связывание программ, загрузка в память. Рассмотрим на примере объединения трех модулей A,B,C.


Слайд 71

I просмотр – распределение памяти А extrn B1 адрес_A=адрес_загр public A1 call B1 A1 proc ………… B public B1 адрес_B=адрес_A+длина_А B1 proc ………….. extrn A1 адрес_C= адрес_B+ длина_B C call A1


Слайд 72

Таблица внешних символов


Слайд 73

Таблица внешних символов


Слайд 74

Лекция №7 атрибуты директивы segment; машинно-независимые функции загрузчика: автопоиск; управление процессом загрузки; оверлейные структуры.


Слайд 75

Директива segment Формат: имя segment атрибуты Пример: АВС segment para public ‘code’ Атрибуты: выравнивание, комбинирования, класс сегмента, размер сегмента 1) выравнивание: границы - byte (1б), word (2б), para (16б), page (256б), mempage (4кб);


Слайд 76

Атрибут директивы segment -комбинирование 2) Комбинирование – показывает как комбинировать одноименные сегменты. Принимает значения: PRIVATE - не объединять; PUBLIC – объединять; COMMON - располагать по одному адресу; AT ХХХ - располагать по абсолютному адресу параграфа ХХХ; STACK – соединять все сегменты и вычислять адрес относительно SS.


Слайд 77

Атрибуты директивы segment - класс сегмента и размер сегмента 3) класс сегмента – определяет порядок следования сегментов при собирании ; 4) размер сегмента – влияет на порядок формирования физического адреса: use16, use32. Замечание. Все сегменты в группе используют один и тот же начальный адрес (группа определяются через директиву GROUP).


Слайд 78

Машинно-независимые функции загрузчика Автопоиск в библиотеках; Управление процессом загрузки; Оверлейные структуры.


Слайд 79

1. Автопоиск в библиотеках Библиотека состоит из оглавления и разделов. Библиотеки подключаются с помощью специальных директив или параметров. Пример : # include<stdio.h> - поиск в стандартной библиотеке; #include “ABC.h” - поиск в текущей директории


Слайд 80

Пример: автопоиск в СИ Стандартные библиотеки используются автоматически. Директории obj-файлов задаются в меню “Options/Directories/Output directory”. Последовательность поиска файлов в директориях - в порядке перечисления, текущая просматривается в последнюю очередь. Для подключения других библиотек их имена задаются в меню “Options/Directories/Library directories”


Слайд 81

Возможны варианты: а) дополнительные входные файлы загрузчика; б) опции редактора связей; в) управление выходной информацией. 2. Управление процессом загрузки


Слайд 82

2а). Дополнительные входные файлы загрузчика Задание дополнительных параметров, позволяющих изменить стандартный процесс загрузки. Для этого используются: специальный командный язык, например, include имя_модуля delete имя_модуля отдельный файл.


Слайд 83

Файл проекта в СИ В СИ для придания свойств зависимой трансляции используется специальный технологический прием: для каждого модуля составляется файл -заголовок (header) с описанием экспортируемых объектов. header вставляется в текст каждого модуля -импортера при помощи препроцессора.


Слайд 84

Файл – заголовок содержит: Прототипы экспортируемых функций, включающие описания типов возвращаемого значения и выходных параметров; описания глобальных переменных, определенных с атрибутом extern; описания макроопределений, используемых для связи с модулем; файлы, содержащие описания, нужные для трансляции данного модуля.


Слайд 85

Файл-проект (.PRJ) содержит: перечень всех исходных модулей и используемых на этапе сборки библиотек и OBJ-файлов; зависимости между файлами (т.е. необходимость перетрансляции одного при изменении другого. Используется: при собирании программы командой Link, для поддержки автоматической согласованности модулей при помощи команд Make и Build.


Слайд 86

Команды, используемые в среде ВСС при компоновке модулей: make - перекомпилирует все файлы проекта, для которых нет obj- файлов или дата устарела; build - компилирует все файлы, которые указаны в файле-проекте; Обе команды по завершении запускают link. link – из obj – файлов и стандартных библиотек создает exe –файл. Все команды работают с текущим именем проекта из меню Project/project name.


Слайд 87

2б). Опции загрузчика В турбо Pascal: Опции команды tlink рассмотрим позже.


Слайд 88

2в). Управление выходной информацией В среде TurboPascal в меню compile/ destination есть переключатели: disk - загрузочный модуль сохранять на диске; mem - загрузочный модуль оставить в оперативной памяти.


Слайд 89

3. Оверлейная структура программ Древовидная структура программ. Узлы дерева называются сегментами. Корневой сегмент загружается в ОП сразу и остается до окончания выполнения программы, остальные – при обращении к ним. Процесс – это программа, которая выполняется под управлением OS. Он состоит из кодов программы, данных и информации о состоянии процесса.


Слайд 90

Управление процессами в Си Можно управлять процессом из программы, используя функции управления процессом. Прототипы объявлены в process.h Функции SPAWN и EXEC создают новый процесс. SPAWN возвращает управление из порожденного процесса к родителю, а EXEC – нет. Ключи компилятора для оверлея: BCC –Y имя_глав_прог -Yo список_вспом_модулей


Слайд 91

Лекция №8 Опции TLINK; структура exe - файла; загрузка DOS-приложений; COM-программы.


Слайд 92

Формат команды TLINK TLINK obj-файлы[,exe-файл][,map-файл][,lib-файл] Местоположение опций в команде: tlink /опции ... или tlink obj-файл……. /опции


Слайд 93

Опции команды TLINK /x - отменяет формирование map-файла; /m - в map включить имена с атрибутом public; /s - подробная карта сегментов; /i – инициализировать все сегменты; /l – включить номера строк исходного кода;


Слайд 94

Опции TLINK /n - не использовать стандартные библиотеки; /d - предупреждение о дубликатах имен библиотеках; /с - регистр букв в символьных именах имеет значение; /3 – обработка 32-разрядных сегментов кода; /v {+/-} - включить/отключить отладочную информацию для всех символических имен (/v+ или /v-) ; /t - создать загрузочный модуль в виде com-файла; /оn - создать оверлей n-го уровня.


Слайд 95

Response-файл Response-файл – это текстовый файл, который содержит параметры для компоновщика tlink. При вызове его имя указывается через @. Например, создан файл fr: Main wd+ tx,fin fmap Lib1 lib2 Вызов: tlink @fr


Слайд 96

Структура exe-файла EXE-файл строится компоновщиком и состоит из двух частей: заголовок загрузочного модуля; тело загрузочного модуля (или образ задачи). Заголовок - управляющая информация для загрузки. Он состоит из двух частей: -стандартной; -переменной.


Слайд 97

Стандартная часть заголовка


Слайд 98


Слайд 99


Слайд 100

Таблица настройки адресов (THA) Имеет переменную длину. Количество элементов ТНА задано в заголовке файла по смещению 06 -07. Каждый элемент занимает 4 байта: 2 байта – смещение адреса настройки; 2 байта – сегментная часть адреса.


Слайд 101

Настройка адресов В области памяти, выделенной для загрузки программы, строится PSP. Стандартная часть заголовка файла считывается в рабочую область памяти. Определяется длина тела загрузочного модуля по данным из заголовка. Определяется сегментный адрес загрузки программы ( адрес начального сегмента). Загрузочный модуль считывается в начальный сегмент.


Слайд 102

Настройка адресов (продолжение) THA порциями считываются в рабочую область. Для каждого элемента к полю сегмента прибавляется базовый сегментный адрес. По этому адресу в памяти прибавляют тот же базовый адрес. Устанавливаются значения сегментных регистров (ip и sp, cs и ss, es и ds ). Управление передается по адресу CS:IP


Слайд 103

Загрузка DOS-программ. При запуске программы ОС выполняет следующие действия: выделяет память (операцию 48h); размещает в начальном сегменте PSP; загружает программу функцией Exec (4Вh для 21h прерывания); устанавливает значения системных регистров; освобождает неиспользуемую память функцией 49h.


Слайд 104

Особенности COM - файлов Занимают один физический сегмент памяти; не требуют привязки адресов, т.к. хранятся том виде, в котором загружаются в память; не имеют заголовка; все адреса вычисляются относительно начала кодового сегмента.


Слайд 105

Правила написания COM - программ первый оператор программы ORG 100h; в директиве assume все сегментные регистры указывают на один и тот же сегмент; данные программы размещают в конце кодового сегмента после команд возврата управления системе; стековый сегмент не определяют; редактируют программу с ключем: tlink /t имя


Слайд 106

Лекция №9 Обнаружение ошибок при передачи информации; терминология Windows; настраивающий и динамический загрузчики; форматы Win-файлов; отличительные особенности программирования под Win32.


Слайд 107

Обнаружение ошибок при передачи информации Существуют методы обнаружения ошибок целостности информации, основанные на избыточности информации: посимвольный контроль четности (поперечный); поблочный контроль четности (продольный); вычисление контрольных сумм; контроль цикличности избыточным кодом (CRC).


Слайд 108

Терминoлогия Windows Модулем называют программу, данные и ресурсы, которые собираются в определенный файл. Модуль является представлением в памяти информации, находящейся в файле на диске. Эта информация считывается в память и из нее создается модуль. Выполняемый модуль – один из источников модуля.Он имеет сегменты кода, данных и ресурсы. Другой источник – dll-файл.


Слайд 109

DLL Динамически подключаемые библиотеки (dynamic link libraries, DLL) являются хранилищем общедоступных процедур в среде Windows. Структурно dll представляет собой обычную программу, включающую специфические элементы, например код инициализации.


Слайд 110

Код инициализации Выполняет необходимые действия по инициализации dll-библиотек при наступлении определенных событий. Наличие необязательно. Если есть, то разрабатывается с учетом определенных требований.


Слайд 111

DLL-файл DLL-файл необязательно имеет расширение dll . Примеры DLL : файлы шрифтов .fon и .fot, хотя содержат только ресурсы; драйверы устройств (.drv); файлы ядра Windows (user.exe, krnlx86.exe, gdi.exe). Важно, чтобы exe и dll были в формате выполняемого файла (NE, PE). Такой формат определяет отдельные сегменты. Каждый сегмент может быть размещен и загружен отдельно от других.


Слайд 112

Типы загрузчиков: настраивающий и динамический. Настраивающий загрузчик Статическое связывание происходит тогда, когда редактор связей может найти адрес вызова в указанных obj или lib – файлах. В адресную часть команды помещается корректный адрес. Далее запись настройки не нужна.


Слайд 113

Динамический загрузчик Динамическое связывание происходит тогда, когда редактор связей не может знать адрес вызова в настраиваемой команде. Настройки адресов не выполняются до тех пор, пока нужная программа или dll не загрузится в память. Динамическое связывание выполняет внутренняя функция SegReloc() модуля KERNEL, вызываемая функцией loadModule(). Редактор связей помещает информацию в exe- или dll-файлы, указывая загрузчику Win настройки, которые необходимо выполнить. Загрузчик Win выполнит все настройки в сегменте во время загрузки этого модуля в память.


Слайд 114

Форматы выполняемых файлов для Win-приложений. Старый заголовок oldheader


Слайд 115

WININFO Это большая структура, которая описывает различные характеристики приложения, а также содержит указатели на сегменты кода, ресурсы и другие таблицы.


Слайд 116

WINHEADER


Слайд 117

Пояснения к таблицам 1,2 Таблица сегментов содержит характеристики сегментов кода и данных (смещение, длину, минимальный размер выделяемый сегменту). Таблица ресурсов. Ресурсы создаются редактором ресурсов. Компилируются во внутреннее представление в файл .RES, затем копируются компоновщиков в exe-файл.


Слайд 118

Пояснения к таблицам 3-6 Таблица резидентных имен. Перечислены все экспортируемые функции файла. Таблица ссылок на модули - просто список смещений, адресующий в файле имена импортируемых модулей. Таблица импортированных имен - имена модулей, используемых exe-файлом. Таблица входов. Все элементы таблицы точек входов пронумерованы, начиная с 1. Эти целочисленные номера используются для ссылки на точки входа другими модулями.


Слайд 119

Пояснения к таблицам 7,8 Таблица нерезидентных имен экспортируемых функций исполняемого модуля. Сегменты кода и данных. В конце – таблица настройки адресов.


Слайд 120

Типы исполняемых файлов NE ( New Executable) – 16-битное приложение. Размер сегмента 64 кб. Из программ можно вызывать функции DOS через вызов спец. функции Dos3Call. Их называют «сегментированными выполняемыми файлами. Не поддерживается в Win XP. PE (Portable Executable) – 32-битное приложение Win32 и dll. Модель памяти flat, размер сегмента кода и данных до 4 гб.


Слайд 121

Отличительные особенности DOS-программ от Windows-приложений.


Слайд 122

Особенности программирования на ассемблере под Win32 1. Отсутствует startup кода. 2. Гибкая система адресация памяти . 3. Доступность больших объемов виртуальной памяти. 4. Развитый сервис ОС, разнообразие API-функций. 5. Многообразие и доступность средств созданий интерфейса с пользователем. 6. Развитие средств ассемблера, аналогичных ЯВУ: а)макроопределения вызова процедур; б)возможность введения шаблонов процедур .


Слайд 123

Лекция №10 Формальные языки и грамматики; форма Бэкуса – Наура; распознаватели.


Слайд 124

Цепочка символов и ее длина Цепочка символов – произвольная упорядоченная конечная последовательность символов, записанных один за другим. Обозначается:?, ?, ?. Упорядоченная последовательность символов, следовательно, цепочка определяется составом символов, их количеством и порядком символов. Пример: abc,cba,acb. Количество символов в цепочке ? называется длиной цепочки и обозначается |?|.


Слайд 125

Операции над цепочками Конкатенация двух цепочек ? и ? это дописывание второй в конец первой. Обозначается ??. Пример: если ? = аб и ? = вг, то ??=абвг. Обладает свойством ассоциативности: (??)?= ?(??). Цепочка – конкатенация подцепочек. Не обладает свойством коммутативности: ?? ???. 2. Подстановка (замена) – это замена подцепочки на любую произвольную цепочку. Пример: пусть ? = аб и ? = вг и ?=??. Заменим ? на ? = дд. Получим ?? = абдд.


Слайд 126

Операции над цепочками 3. Обращение цепочки –это запись цепочки в обратном порядке (?R). Для операции обращения справедливо равенство ? ??: (??)R = ?R?R 4. Итерация цепочки n раз (n >0) – это конкатенация цепочки самой с собой n раз. Пример: ? ?: ?1 =?, ?2 =??, ?3=???. 5. Пустая цепочка ?– это цепочка, не содержащая ни одного символа.


Слайд 127

Понятие языка Язык – это заданный набор символов и правил, устанавливающих способы комбинации этих символов для записи осмысленных текстов. Алфавит – это счетное множество допустимых символов языка. Обозначим V. Цепочка ? над алфавитом V: ?(V) , если в нее входят только символы, принадлежащие множеству символов V.


Слайд 128

Формальное определение языка Если V - алфавит, то V+ - множество всех цепочек над алфавитом V без ?. V* - множество всех цепочек над алфавитом V, включая ?. Справедливо равенство V* =V+ ?{?}. Языком L над алфавитом V: L(V) называется некоторое счетное подмножество цепочек конечной длины из множества всех цепочек над алфавитом V. Цепочку символов языка называют предложением языка. Из определения: 1) множество цепочек языка не обязательно конечно, 2) длина цепочки ничем неограничена.


Слайд 129

Способы задания языков В общем случае для задания языка можно : Перечислить все допустимые цепочки языка. Указать способ порождения цепочек языка (задать грамматику языка). Определить метод распознавания цепочек языка.


Слайд 130

Основные определения Синтаксис языка – это набор правил, определяющих допустимые конструкции языка. Он задает набор цепочек символов, которые принадлежат языку. Семантика языка задает смысловое значение предложений языка, т.е. всех допустимых цепочек языка. Лексика – это совокупность слов языка. Лексема – это конструкция, состоящая из элементов алфавита и не содержащая в себе других конструкций. Грамматика – это способ построения предложений языка, т.е. математическая система, определяющая язык.


Слайд 131

Формальное определение грамматики Грамматика определяется как совокупность четырех объектов: G={Vt, Vn, P, Z}, Vt - множество терминальных символов грамматики; Vn - множество нетерминальных символов грамматики; P - множество правил грамматики вида ?>?; Z - начальный символ языка (входит в множество Vn). Правило (или продукция) – это упорядоченная пара цепочек символов (?,?) . Записывается в виде ?>? или ?::=?. Пример: <read> ::=READ(<список>) <список> ::=ID|<список>, ID


Слайд 132

Примеры грамматик для целых десятичных чисел со знаком G={Vt, Vn, P, Z} G1({0,1,2,3,4,5,6,7,8,9,+,-},{<число>,<чс>,<цифра>}, P1,<число>), где правила P1: <число>> <чс> l + <чс> l - <чс> <чс> > <цифра> l <чс> <цифра> <цифра> > 0 l 1 l 2 l 3 l 4 l 5 l 6 l 7 l 8 l 9 G2 ({0,1,2,3,4,5,6,7,8,9,+,-},{S,T,F},P,S), где правила P: S> T l +T l -T T> F l TF F> 0 l 1 l 2 l 3 l 4 l 5 l 6 l 7 l 8 l 9


Слайд 133

Форма Бэкуса - Наура Во множестве правил грамматики могут быть несколько правил, определяющих одинаковые левые части: ?>?1, ?>?2, ?>?3, … ?>?n. Тогда эти правила объединяются: ?>?1l?2 l ?3 … l ?n. Такую форму записи называют ФБН. В ней все нетерминальные символы берутся в угловые скобки, например, <read>::=READ(<список>)


Слайд 134

Другие способы задания правил грамматики Использование метасимволов: ( ) – означает, что в данном месте может стоять только одна цепочка; [ ] – цепочка необязательна; { } – цепочка может не встречаться, быть 1 раз или много раз. Запись в графической форме виде диаграмм.


Слайд 135

Распознаватели Распознаватель - это специальный автомат для определения принадлежности цепочки символов некоторому языку. Задача распознавателя – по исходной цепочке определить ее принадлежность заданному языку. Распознаватели – это один из способов определения языка. Они являются частью компилятора.


Слайд 136

Компоненты распознавателя Лента для входной цепочки и считывающая головка; Устройство управления (УУ), которое имеет набор состояний и конечную память; Внешняя (рабочая) память.


Слайд 137

Операции распознавателя Чтение очередного символа; сдвиг входной цепочки на заданное число символов (вправо или влево); доступ к рабочей памяти для чтения или записи информации; преобразование информации в памяти, изменение состояния УУ.


Слайд 138

Начальное и конечное состояние распознавателя Начальная конфигурация - головка на первом символе, внешняя память пуста или содержит определенную информацию); конечные конфигурации - головка за концом цепочки. Распознаватель допускает входную цепочку символов, если из начальной конфигурации может перейти в одну из конечных за определенное число тактов (шагов).


Слайд 139

Лекция №11 Виды распознавателей; Классификация грамматик по Хомскому; Классификация языков; Классификация распознавателей; Цепочки вывода.


Слайд 140

Виды распознавателей в зависимости от типа считывающего устройства: Односторонние и двусторонние. Односторонние (левосторонние) – считывают цепочку слева направо без возврата назад. Двусторонние – допускают перемещение по ленте от начала к концу и возврат назад к уже прочитанным символам.


Слайд 141

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


Слайд 142

Виды распознавателей в зависимости от типа внешней памяти (ВП): без внешней памяти - используется только конечная память УУ; с ограниченной внешней памятью - размер ВП зависит от длины входной цепочки. Зависимость - линейная, полиномиальная, экспоненциальная. Организация ВП - стек, очередь, список. с неограниченной внешней памятью - ВП с произвольным методом доступа.


Слайд 143

Задача разбора текста программ На основании имеющейся грамматики некоторого языка построить распознаватель этого языка. Заданная грамматики и распознаватель должны быть эквиваленты, т.е. определять один и тот же язык. Распознаватель должен установить тип ошибки в программе и место ее возникновения.


Слайд 144

Классификация грамматик по Хомскому (по структуре их правил): тип 0 – с фразовой зависимостью G={Vt, Vn, P, Z}, V= Vt?Vn, правила вида: ?>?, где ??V+,??V*. Самый общий тип. Практического применения не имеет. Т


Слайд 145

Классификация грамматик по Хомскому - тип 1 контекстно-зависимые (КЗ), правила вида: ?1А?2 > ?1??2, где ?1,?2?V*, А?Vn, ??V+, нетерминальный символ может заменяться цепочкой символов в зависимости от контекста: неукорачивающие грамматики, правила вида: ?> ?, где ? ,??V+ , l?l?l?l.


Слайд 146

Классификация грамматик по Хомскому тип 2 - контекстно-свободные (КС), правила вида: А >?, где А?Vn, ??V+ . Их иногда называют неукорачивающими (НКС). Почти эквивалентный им класс – укорачивающие КС - грамматики (УКС). Разница – в правой части правил УКС может быть пустая цепочка. Используются при описании синтаксических конструкций языков программирования.


Слайд 147

Классификация грамматик по Хомскому - тип 3 - регулярные грамматики. Для левосторонних правила: А>В? или А>?, где А,В?Vn, ??Vt* , Для правосторонних правила: А>?В или А>?, где А,В?Vn, ??Vt* . Используются для описания простейших конструкций (идентификаторов, констант).


Слайд 148

Классификация языков Тип языка выбирается по максимально возможному типу грамматики. Тип 0 – с фразовой зависимостью. Для распознавания цепочек требуются очень мощные вычислительные ресурсы, аналогичные машине Тьюринга. Тип 1 – контекстно-зависимые (КЗ). Время распознавания зависит экспоненциально от длины цепочки символов. В компиляторах не используются.


Слайд 149

Классификация языков Тип 2 -контекстно-свободные (КС). Лежат в основе синтаксических конструкций ЯП. Время распознавания зависит от длины цепочки символов полиномиально (2, 3 степень). Тип 3 - регулярные языки. Самых используемый тип в ВС. На их основе строятся языки ассемблеров, командные процессоры. Время распознавания линейно зависит от длины цепочки символов.


Слайд 150

Классификация распознавателей (по сложности алгоритма работы в зависимости от типа языка) Недетерминированный двусторонний автомат с неограниченной ВП для языков с фразовой зависимостью (тип 0). Недетерминированный двусторонний автомат с линейно ограниченной ВП для контекстно-зависимых языков (тип 1).


Слайд 151

Классификация распознавателей Недетерминированный односторонний автомат с магазинной (стековой) ВП (МП - автомат) и детерминированный односторонний автомат с магазинной (стековой) ВП (ДМП–автомат) для контекстно-свободных языков (тип 2). Недетерминированный односторонний автомат без ВП (конечный автомат КА) для регулярных языков (тип 3).


Слайд 152

Примеры грамматик для целых десятичных чисел со знаком G={Vt, Vn, P, Z} G1({0,1,2,3,4,5,6,7,8,9,+,-},{S,T,F},P1,S), где правила P1: S> T l +T l -T T> F l TF F> 0 l 1 l 2 l 3 l 4 l 5 l 6 l 7 l 8 l 9 G2({0,1,2,3,4,5,6,7,8,9,+,-},{S,T},P2,S), где правила P2: S> T l +T l -T T > 0 l 1 l 2 l 3 l 4 l 5 l 6 l 7 l 8 l 9 l 0Т l 1Т l 2Т l 3Т l 4Т l 5Т l 6Т l 7Т l 8Т l 9Т Грамматика G1 относится к типу 2, G2 - к типу 3. Язык L, заданный G1, G2 относится к типу 3.


Слайд 153

Вывод Выводом называется процесс порождения предложений языка на основе правил грамматики, определяющей язык. Цепочка ?=?1??2 называется непосредственно выводимой из цепочки ?=?1??2 в грамматике G={Vt, Vn, P,S}, V= Vt?Vn, ?1,?,?2 ?V* ,??V+ , если в грамматике G ? правило : ?>? ?Р. Обозначается: ???.


Слайд 154

Цепочка вывода Цепочка ? называется выводимой из цепочки ? (??* ?), если выполняется одно из условий: ? непосредственно выводима из ? (???); ? такая ?, что ? выводима из ? и ? непосредственно выводима из ? (??*? и ???). Последовательность непосредственно выводимых цепочек называется цепочкой вывода. Если вывод выполняется за несколько шагов, то ? называется нетривиально выводимой (??+?).


Слайд 155

Сентенциальная форма грамматики Вывод называется законченным, если на основе цепочки ?, полученной в результате вывода, нельзя больше сделать ни одного шага вывода. Цепочка ? называется конечной. Цепочка ? называется сентенциальной формой грамматики, если она выводима из целевого символа грамматики S: S?* ? . Язык L, заданный грамматикой G, - это множество всех конечных сентенциальных форм грамматики.


Слайд 156

Эквивалентность грамматик Две грамматики G1,G2 называются эквивалентными, если эквивалентны заданные ими языки L(G1)=L(G2). Они имеют пересекающиеся Vt1, Vt2 (Vt1?Vt2?? ), а Vn1, Vn2, P1, P2, S1, S2 могут сильно отличаться. Пример: G1({0,1,2,3,4,5,6,7,8,9,+,-},{S,T,F},P1,S) G2({0,1,2,3,4,5,6,7,8,9,+,-},{S,T},P2,S)


Слайд 157

Лекция №12 Трансляторы, компиляторы, интерпретаторы; Основные функции компилятора; Лексический анализ; Синтаксический разбор; Семантический контроль.


Слайд 158

Определения Транслятор – программа, которая переводит программу с исходного языка в эквивалентную ей программу на результирующем языке. Компилятор – транслятор, который переводит исходную программу в эквивалентную ей программу на машинном языке. Интерпретатор - программа, которая воспринимает исходную программу на входном языка и выполняет ее.


Слайд 159

Задача компилятора Задача компилятора состоит в поиске соответствия предложений исходного текста грамматическим структурам языка и генерации соответствующего кода для каждого предложения.


Слайд 160

Основные функции компилятора Лексический анализ – это распознавание и классификация лексем. Синтаксический разбор – это анализ входных предложений на соответствие конструкциям языка программирования. Семантический контроль смысловой контроль предложений. Генерация объектного кода.


Слайд 161

Схема работы компилятора


Слайд 162

Лексический анализ Определение программы на языке Pascal: <программа>::=PROGRAM <имя> VAR <список описаний> BEGIN <предложения языка> END.


Слайд 163

Лексический анализ. Упрощенная грамматика Pascal


Слайд 164

Синтаксическое дерево для оператора <read>


Слайд 165

Синтаксическое дерево


Слайд 166

Таблица кодов лексем Пример программы на языке Pascal: PROGRAM TEST; VAR SUM: INTEGER; BEGIN READ (SUM); END.


Слайд 167

Таблица лексического разбора Строка исходной Тип лексемы Спецификатор программы лексемы 1 1 22 ^TEST 2 2 22 ^SUM


Слайд 168

Таблица идентификаторов. Состав информации Для переменных: Имя; тип данных; область памяти, связанная с переменной. Для констант: значение; тип данных. Для функций: имя; количество и типы формальных аргументов; тип возвращаемого аргумента; адрес кода функции.


Слайд 169

Учет особенностей языка программирования В языке СИ: i+++j анализируется как (i++)+(j), а не (i)+(++j); В Фортране: do 10 i=1,10 – оператор цикла; do 10 i=1.10 – оператор присваивания; do 10 i – идентификатор; do 10 i=1 – неоднозначная конструкция.


Слайд 170

2. Синтаксический анализ Используются: матрица предшествования; дерево грамматического разбора.


Слайд 171

Матрица предшествования для грамматики языка Pascal


Слайд 172

Методы грамматического разбора В соответствии с порядком построения дерева грамматического разбора: Нисходящие (сверху вниз). Начинают с корня дерева, и наращивают узлы дерева в соответствии с синтаксисом. Восходящие (снизу вверх). Начинают с конечных узлов дерева (листьев), и пытаются объединить их (в соответствии с синтаксисом) для построения узлов более высокого уровня, пока не достигнут корня дерева.


Слайд 173

Метод операторного предшествования (восходящий) Анализ пар последовательно расположенных операторов. Устанавливаются отношения предшествования между любыми терминальными символами (лексемами): ??, ??, = Отношения предшествования должны были заданы однозначно. Пример: А+В*С-D 1). + ?? * 2). * ?? - Тогда для выражения отношения предшествования: ?? ??, т.е. В*С выполняется ранее других.


Слайд 174

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


Слайд 175

Пример разбора предложения методом операторного предшествования READ ( ID ) = ?? ?? Выбирается фрагмент, заключенный в ?? ?? для распознавания в терминах грамматики. ID – нетерминальный символ, обозначим <N1>. Операции отношения устанавливаются между терм. символами, т.е. между ( и ). Получим READ (<N1>), эта конструкция соответствует правилу вывода <read>, обозначим его <N2>.


Слайд 176

Лекция №13 Машинно-зависимые особенности компилятора; машинно-независимые особенности – распределение памяти под переменные.


Слайд 177

Машинно-зависимые особенности Машинно-зависимая оптимизация; Генерация кода.


Слайд 178

Генерация кода Выполняется на основе дерева грамматического разбора. Для каждой грамматической конструкции определен алгоритм генерации кода. Подпрограммы находятся в стандартной библиотеке компилятора. После генерации каждого фрагмента, модифицируется указатель свободной памяти (счетчик адреса). Все фрагменты объектной программы связываются редактором связей.


Слайд 179

Машинно-зависимая оптимизация Выполняется с использованием промежуточной формы программы, которая может реализована, например, в виде 3-х адресных команд: КОП Операнд1 Операнд2 Результат Операторы переставляются для исключения ненужных операций запоминания и загрузки регистров. Однако, не все зависит от компилятора. Pentium II до 70% времени тратит на анализ, декодирование и вычисление границ инструкций.


Слайд 180

Оптимизация в свете развития процессоров Для увеличения быстродействия процессора производители применяли: наращивание тактовой частоты процессора; оптимизацию исполнительных цепей; многопроцессорные системы; суперскалярную архитектура процессора; параллелизм в микропроцессорах.


Слайд 181

Подробнее о некоторых способах. Оптимизация исполнительных цепей. Оптимизацировали исполнительные цепи так, чтобы большее число команд исполнялось за один такт процессора. Вводилиь новые инструкции и векторные операции ( технологии MMX и 3DNew). К настоящему моменту CISC и RISC архитектуры процессоров исчерпали себя, достигнув сопоставимой производительности.


Слайд 182

Сравнение архитектур процессоров CISC (complex instruction set) процессоры выполяют инструкцию за 3 такта. Особенности: малое количество регистров; сложные команды переменной длины; сложное поле адресации; правила оптимизации сложные, со многими исключениями. Лучшие компиляторы используют потенциал процессора наполовину.


Слайд 183

Сравнение архитектур процессоров RISC (reduced instruction set) процессоры – за 1 такт до четырех команд. много регистров общего назначения; небольшой набор инструкций; однозначные методы оптимизации. Недостаток - отсутствие совместимости с предшествующими типами процессоров.


Слайд 184

Суперскалярную архитектура У Pentium Pro два конвейера. Однако, распараллеливание потока команд не всегда эффективно. Например:


Слайд 185

Параллелизм в микропроцессорах EPIC (explicitly parallel instruction) архитектура. Положена в основу 64- разрядных процессоров. Заимствовала лучшие идеи RISC и CISC архитектур: фиксированная длина инструкций; ограниченное число адресаций памяти; жесткое разбиение команд на группы. Это позволяет объединять инструкции в слова для параллельного исполнения и гарантирует непротиворечивость ситуации.


Слайд 186

Многопроцессорные системы Присутствуют в любом компьютере, имеются сопроцессоры для управления: графикой на графической карте; на кэш-контроллере ЖД; заданиями для вывода на печать. Роль OS. Существует два направления: Симметричная (с сервером) – OS выполняет блокировку и активизацию списка задач; ассимметричная за каждым процессором закреплена определенная функция.


Слайд 187

Машинно-независимые особенности Распределение памяти; Структурированные переменные; Машинно-независимая оптимизация кода; Использование блочных конструкций языка программирования.


Слайд 188

Распределение памяти Статический метод; Динамический. Сначала о статическом методе, при котором выделение памяти происходит на стадии компиляции программы.


Слайд 189

Для переменных и констант транслятору необходимо знать: описание и определение; область видимости (диапазон доступа): время жизни (связывание); Рассмотрим на примере языка С++. Описание задает тип переменной. Определение указывает сущность, к которой переменная относится ( объем памяти, значение, функция).


Слайд 190

Описание переменных Пример:


Слайд 191

Диапазон доступа Определяет как “далеко” конкретное имя “видно” в единице трансляции. Локальный – переменная известна в пределах блока ее определения (автоматические переменные); Глобальный – известна во всем файле, начиная с места определения (статические); Диапазон доступа прототипа функции – в пределах круглых скобок, содержащих аргументы;


Слайд 192

Диапазон доступа (продолжение) Диапазон доступа класса – для переменных, объявленных в классе; Диапазон доступа пространства имен. Эти два – только для С++.


Слайд 193

Связывание Определяет способ использования имени в единицах трансляции: внешнее – в разных файлах; внутреннее – в пределах одного файла; без связывания - имена автоматических переменных.


Слайд 194

Лекция №14 Структурированные переменные; машинно-независимая оптимизации; обработка блочных конструкций языка программирования.


Слайд 195

Классы памяти переменных. Автоматические переменные Это переменные, объявленные внутри блока или функции. Они создаются в момент передачи управления функции или блоку. Память освобождается при выходе из функции или блока. Пример: int main ( ) { int a=5; { int b=10; ……. } } Переменные размещаются в стеке или регистре. Ключевые слова: auto, register


Слайд 196

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


Слайд 197

Примеры переменных статического класса с разным типом связывания Внешнее связывание: int global=100; int main ( ) { ….. }


Слайд 198

Примеры статических переменных Внутреннее связывание: Static int abc=100; int main ( ) { ….. } Без связывания: void funct (int n) {Static int c=100; ….. }


Слайд 199

Константы Пример: Const float pi=3.14; константа, определенная таким образом, часто не занимает память, т.е. может использоваться как непосредственный операнд. Константа инициируется при ее описании.


Слайд 200

Способы хранения переменных


Слайд 201

Динамическое распределение памяти Для выделения и освобождения памяти используются операторы: new ( в С – malloc() ) и delete. К таким переменным неприменимы правила диапазона доступа и связывания. Заключение. При работе с переменными компилятор выделяет три фрагмента памяти: для автоматических, статических и динамических переменных.


Слайд 202

Структурированные переменные Структурированные переменные –это массивы, строки, записи, множества, например, char abc[2][3], float array [10]. Для многомерных массивов в языках программирования существуют разные методы их хранения в памяти – по строкам (в Си) или по столбцам (в Фортране). Для переменных границ массивов компилятор образует описатель массива.


Слайд 203

Машинно-независимая оптимизация кода реализована в виде опций компилятора удаление общих подвыражений; удаление инвариантов циклов; например, for (int m=1; m<=k; m++) { a[m]=b[n+5]**2/123+a[m-1] } Замена менее эффективных операций более эффективными; например, вместо t(i)=2**i ? t(i)=t(i-1)*2.


Слайд 204

Обработка блочных конструкций языка программирования Пример: PROCEDURE A; VAR I,J,K: INTEGER; …….. PROCEDURE B; VAR X,Y: REAL; ……. END {B}; ……. END {A}; ……….


Слайд 205

Обработка блочных конструкций языка программирования Для работы с блоками компилятор считает уровень вложенности блоков. Для этого создается таблица: Переменные одного блока располагаются в области инициализации, которая порождается при входе в блок.


Слайд 206

Интерпретаторы Интерпретатор - программа, которая воспринимает исходную программу на входном языка и выполняет ее. Особенности: исполняют исходную программу последовательно по мере поступления на вход интерпретатора; отсуиствует фаза оптимизации; на фазе генерации машинные команды не записываются в объектный файл; часто внутреннее представление программы реализуется в виде польской инверсной записи; применяются для языков, допускающих трансляцию за 1 проход.


Слайд 207

Преимущества интерпретаторов: независимость исполнения программы от архитектуры целевой вычислительной системы. На современном этапе развития широко применяются в глобальных сетях и сети Интернет.


Слайд 208

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


Слайд 209

Развитие отладчиков определялось: появлением интегрированных сред программирования; появлением возможностей аппаратной поддержки средств отладки во многих системах программирования.


×

HTML:





Ссылка: