'

Лекция №1

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





Слайд 1

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


Слайд 2

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


Слайд 3

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


Слайд 4

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


Слайд 5

Листинг программы 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


Слайд 6

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


Слайд 7

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


Слайд 8

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


Слайд 9

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


Слайд 10

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


Слайд 11

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


Слайд 12

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


Слайд 13

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


Слайд 14

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


Слайд 15

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


Слайд 16

Операции в выражениях условные операции: 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


Слайд 17

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


Слайд 18

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


Слайд 19

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


Слайд 20

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


Слайд 21

Пример связывания двух модулей. 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


Слайд 22

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


Слайд 23

Листинг программы 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


Слайд 24

Листинг программы (таблица символов) 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


Слайд 25

Описание сегментов и групп 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


Слайд 26

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


Слайд 27

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


Слайд 28

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


Слайд 29

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


Слайд 30

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


Слайд 31

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


Слайд 32

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


Слайд 33

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


Слайд 34

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


Слайд 35

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


Слайд 36

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


Слайд 37

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


Слайд 38

Встроенные имена 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


Слайд 39

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


Слайд 40

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


Слайд 41

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


Слайд 42

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


Слайд 43

Байт типа записи | 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 |


Слайд 44

Пример: запись описания 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 | +-----------------------------------------------------------------+


Слайд 45

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


Слайд 46

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


Слайд 47

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


Слайд 48

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


Слайд 49

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


Слайд 50

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


Слайд 51

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


Слайд 52

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


Слайд 53

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


Слайд 54

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


Слайд 55

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


Слайд 56

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


Слайд 57

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


Слайд 58

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


Слайд 59

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


Слайд 60

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


Слайд 61

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


Слайд 62

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


Слайд 63

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


Слайд 64

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


Слайд 65

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


Слайд 66

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


Слайд 67

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


Слайд 68

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


Слайд 69

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


Слайд 70

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


Слайд 71

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


Слайд 72

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


Слайд 73

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


Слайд 74

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


Слайд 75

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


Слайд 76

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


Слайд 77

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


Слайд 78

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


Слайд 79

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


Слайд 80

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


Слайд 81

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


Слайд 82

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


Слайд 83

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


Слайд 84

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


Слайд 85

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


Слайд 86

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


Слайд 87

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


Слайд 88

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


Слайд 89

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


Слайд 90

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


Слайд 91

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


Слайд 92

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


Слайд 93

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


Слайд 94

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


Слайд 95

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


Слайд 96

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


Слайд 97

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


Слайд 98

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


Слайд 99


Слайд 100


Слайд 101

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


Слайд 102

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


Слайд 103

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


Слайд 104

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


Слайд 105

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


Слайд 106

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


Слайд 107

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


Слайд 108

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


Слайд 109

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


Слайд 110

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


Слайд 111

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


Слайд 112

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


Слайд 113

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


Слайд 114

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


Слайд 115

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


Слайд 116

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


Слайд 117

WINHEADER


Слайд 118

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


Слайд 119

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


Слайд 120

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


Слайд 121

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


Слайд 122

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


Слайд 123

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


Слайд 124

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


Слайд 125

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


Слайд 126

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


Слайд 127

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


Слайд 128

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


Слайд 129

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


Слайд 130

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


Слайд 131

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


Слайд 132

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


Слайд 133

Примеры грамматик для целых десятичных чисел со знаком 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


Слайд 134

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


Слайд 135

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


Слайд 136

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


Слайд 137

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


Слайд 138

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


Слайд 139

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


Слайд 140

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


Слайд 141

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


Слайд 142

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


Слайд 143

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


Слайд 144

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


Слайд 145

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


Слайд 146

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


Слайд 147

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


Слайд 148

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


Слайд 149

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


Слайд 150

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


Слайд 151

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


Слайд 152

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


Слайд 153

Примеры грамматик для целых десятичных чисел со знаком 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.


Слайд 154

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


Слайд 155

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


Слайд 156

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


Слайд 157

Эквивалентность грамматик Две грамматики 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)


Слайд 158

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


Слайд 159

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


Слайд 160

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


Слайд 161

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


Слайд 162

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


Слайд 163

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


Слайд 164

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


Слайд 165

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


Слайд 166

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


Слайд 167

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


Слайд 168

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


Слайд 169

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


Слайд 170

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


Слайд 171

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


Слайд 172

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


Слайд 173

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


Слайд 174

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


Слайд 175

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


Слайд 176

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


Слайд 177

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


Слайд 178

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


Слайд 179

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


Слайд 180

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


Слайд 181

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


Слайд 182

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


Слайд 183

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


Слайд 184

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


Слайд 185

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


Слайд 186

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


Слайд 187

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


Слайд 188

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


Слайд 189

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


Слайд 190

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


Слайд 191

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


Слайд 192

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


Слайд 193

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


Слайд 194

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


Слайд 195

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


Слайд 196

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


Слайд 197

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


Слайд 198

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


Слайд 199

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


Слайд 200

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


Слайд 201

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


Слайд 202

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


Слайд 203

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


Слайд 204

Машинно-независимая оптимизация кода реализована в виде опций компилятора удаление общих подвыражений; удаление инвариантов циклов; например, 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.


Слайд 205

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


Слайд 206

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


Слайд 207

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


Слайд 208

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


Слайд 209

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


Слайд 210

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


×

HTML:





Ссылка: