Учебный курс Архитектура ЭВМ и язык ассемблера Лекция 4 заместитель министра связи и массовых коммуникаций РФ, старший преподаватель Северов Дмитрий Станиславович.

Презентация:



Advertisements
Похожие презентации
Определение констант для размещения их компилятором в составе инструкций языка Определение числовых констант: имя = значение PI= V_size = 5 M_size.
Advertisements

Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 2 ФакультетМТС Курс3 Семестр6 Форма контролязачет Лекции14 часов Лабораторные работы12 часов.
Директивы сегментации. Упрощенные директивы сегментации. Лекция доцента кафедры ИВТ ГрГУ кандидата технических наук Ливак Е.Н.
Учебный курс Архитектура ЭВМ и язык ассемблера Лекция 3 заместитель министра связи и массовых коммуникаций РФ, старший преподаватель Северов Дмитрий Станиславович.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 4 Трансформация логической модели в программный код Лекции читает кандидат технических.
Архитектура ЭВМ Практика 3. Линейные программы на языке ассемблера.
Организация циклов в Ассемблере. Цикл – это многократно повторяющаяся последовательность операторов.
Процессоры Intel в защищенном режиме. Недостатки реального режима Невозможно адресовать пространство памяти свыше 1-го Мб Невозможно работать с массивами,
Файловая переменная. Файл – совокупность данных, записанная во внешней памяти под определенным именем. Любой файл имеет три характерные особенности: уникальное.
Программирование на Ассемблер к.т.н., доц. Красов А.В. Лекция 7 ФакультетМТС Курс3 Семестр6 Форма контролязачет Лекции14 часов Лабораторные работы12 часов.
Скриптовые языки на примере Perl. Языки программирования Скриптовые Программа (или ее бай-код) интерпретируется Зачастую более высокий уровень абстрагирования.
Учебный курс Принципы построения и функционирования ЭВМ Лекция 10 Типы адресации. Стеки. Процессоры. ОЗУ. профессор ГУ-ВШЭ, доктор технических наук Геннадий.
Массивы Материалы к урокам по программированию. МАССИВ это УПОРЯДОЧЕННАЯ последовательность данных ОДНОГО ТИПА. Массивы относятся к структурированным.
Лекция 9 Функции. Массивы-параметры функции Передача массива в функцию Пример: void array_enter(int a[], int size) { int i; for (i = 0; i < size; i++)
N – входной блок (64 бита) X – раундовый ключ (32 бита) H – таблица замен.
Познакомиться с основными понятиями языка Pascal 2.
Файл это поименованная область диска. Чтобы записать информацию в файл надо проделать следующие операции 1.Открыть файл 2.Вывести данные в файл 3.Закрыть.
Файловый тип данных Turbo Pascal Операции для работы с файлами 11 класс.
Лекция 4 Программирование на Паскале. Элементы языка Турбо Паскаль 7.0. Типы данных. Управляющие конструкции.
Файловый тип данных Файл – это область памяти на внешнем носителе, в которой хранится некоторая информация. В языке Паскаль файл представляет собой последовательность.
Транксрипт:

Учебный курс Архитектура ЭВМ и язык ассемблера Лекция 4 заместитель министра связи и массовых коммуникаций РФ, старший преподаватель Северов Дмитрий Станиславович

Активационные записи: стековые фреймы Состав – Параметры – Точка возврата – Сохранённые регистры – Локальные переменные Типичные действия – аргументы – в стек – вызвать процедуру – EBP – в стек – ESP – в EBP – локальные – в стек – – вернуться/восстановить CS:EIP SS:ESP Остальной контекст Модели памяти – TINY – SMALL – MEDIUM – COMPACT – LARGE – HUGE – FLAT Описатель ЯВУ – BASIC – C – FORTRAN – PASCAL – STDCALL – SYSCALL Тип стека 2

HUGE Модели памяти IA-16 TINY SMALL COMPACT MEDIUM LARGE Данные и код вместе < 64KIB Сегменты (CS, DS, SS и ES) - совмещены Исключительно относительные адреса. Код (CS) отдельно от данных (DS, SS и ES) Исключительно относительные адреса Код < 64KIB, данные < 1MIB Допустимы абсолютные адреса для данных, Только относительные адреса для кода. Данные < 64KIB, Код < 1MIB Допустимы абсолютные адреса для кода, Только относительные адреса для данных. Данные и код < 1MIB Допустимы абсолютные адреса для кода и данных Статическое данное < 64KIB (ограничено) Данных и кода < 1MIB Допустимы абсолютные адреса для кода и данных Статическое данное < 1MIB< 3

C C Описатели ЯВУ SDTCALLPASCAL Размещение в стеке Обратное Прямое Возвращает стек обратно Вызываемый ret ?? SDTCALL Вызывающий Вызываемый add esp,?? ret ?? PASCAL 4

Рекурсия TITLE Calculating a Factorial INCLUDE Irvine32.inc.code main PROC push 12 ; вычислим 12! call Factorial ReturnMain: call WriteDec ; display it call Crlf exit main ENDP Factorial PROC push ebp mov ebp,esp mov eax,[ebp+8]; get n cmp eax,0 ; n < 0? ja L1 ; yes: continue mov eax,1 ; no: return 1 jmp L2 L1: dec eax push eax ; Factorial(n-1) call Factorial ReturnFact: mov ebx,[ebp+8]; взять n mul ebx L2: pop ebp ret 4 Factorial ENDP END main ; еax=еax*еbx ; очистить стек 5

Некоторые отличия режимов Размер сегментов Совмещение сегментов Доступность сегментных регистров Ограничения базово-индексной адресации – RM: [bx+si],[bx+di],[bp+si],[bp+di] Счётчик по умолчанию Вычисление линейного адреса 6

+ + Вычисление адресов в режиме PM Логический адрес Селектор(16) Смещение(32) Линейныйадрес(32) Дескриптор сегмента – Начало Каталог(10)Таблица(10)Смещение(12) – Уровень привилегий Таблица дескрипторов Дескриптор сегмента GTDR/LDTR(32) Страничный каталог Эл-т каталога(32) CR3(32) Таблица страниц Эл-т таблицы(32) Физический адрес(32) – Тип, способ доступа – Присутствие – Гранула – Длина GDT – общие сегменты LDT – сегменты, специфические для задачи 7

Массивы и строки Присвоить массив – Установить начала источника и получателя в регистрах DS:ESI, ES:EDI – Установить направление изменения адресов командами CLD, STD – Установить количество пересылок в регистре ECX – Многократно выполнить пересылку командой с префиксом: rep movsb rep movsw, rep movsd Префиксы для строк: repz/repe repnz/repne Сравнить cmps ? сканировать scas ? сохранить stos ? загрузить lods ? 8

mov Двумерные массивы TITLE Two-Dimensional Table INCLUDE Irvine32.inc (Table2.asm).data tableB BYTE 10h, 20h, 30h, 40h, 50h 60h, 70h, 80h, 90h, 0A0h BYTE RowSiZe = 5.code main PROC 0B0h, 0C0h, 0D0h, 0E0h, 0F0h ebx,(1*RowSiZe); 1-индекс строки mov esi, 2 al,tableB[ebx + esi] ; 2-индекс столбца ; AL = 80h exit main ENDP END main 9

Структуры Определение типа COORD STRUCT X WORD ? Y WORD ? COORD ENDS RECTANGLE STRUCT UpperLeft COORD LowerRight COORD RECTANGLE ENDS Определение переменной.data point1 COORD AllPoints COORD 3 DUP Обращение. code mov point1.X, 1 mov (COORD PTR AllPoints[edi]).X,ax add edi, TYPE COORD mov (Rectangle PTR [esi]).UpperLeft.Y, 10 10

Объединения Определение типа Integer Union D DWORD W WORD B BYTE Integer ENDS RECTANGLE STRUCT UpperLeft COORD LowerRight RECTANGLE ENDS 0 COORD Определение переменной. data val3 Integer Обращение. code mov val3.B, al mov val3.W, ax mov val3.D, eax 11

Макрокоманды Определение mPutchar MACRO char:REQ push eax mov al,char call WriteChar pop eax ENDM Вызов mov al,A mov ecx,20 L1: mPutchar al inc al loop L1 С данными mWrite MACRO text LOCAL string.data string BYTE text,0 push edx mov edx,OFFSET string call WriteString pop edx ENDM Вложенные mWriteLn MACRO text mWrite text call CrLf ENDM 12

Условное ассемблирование Если IF выражение IFB IFIDN, IFDEF имя …а также IFNB IFIDNI IFDIF IFDIFI IFNDEF То ELSE Завершить ENDIF EXITM Проверка аргументов Значения по умолчанию аргумент := Операторы в выражении LT GT EQ NE LE GE Подстановка значения & Вычисление выражения % Обозначение текста Обозначение символа ! 13

Макрофункции Определение IsDefined MACRO symbol IFDEF symbol EXITM ;; Истина ELSE EXITM ;; Ложь ENDM Вызов … RealMode=1 … IF IsDefined( RealMode ) mov mov ds,ax ENDIF 14

Блоки повторения По условию. data val1 = 1 val2 = 1 DWORD val1 DWORD val2 val3 = val1 + val2 WHILE val3 LT 0F h DWORD val3 val1 = val2 val2 = val3 val3 = val1 + val2 ENDM По количеству. data ival = 10 REPEAT 100 DWORD ival ival = ival + 10 ENDM Для каждого в списке. data … SEMESTER STRUC Courses COURSE 6 DUP() NumCourses WORD ? SEMESTER ENDS FOR semName, semName SEMESTER ENDM Для каждго символа. data Delimiters LABEL BYTE FORC code, > BYTE &code ENDM 15

Пробелы в «пунктире» лекций Создание 16-ти разрядных программ DOS Программирование с функциями BIOS Использование средств программирования Примеры и задачи 16

Терминал Windows Специальное связывание – LINK … /SUBSYSTEM:CONSOLE Две модели – две группы функций ввода-вывода – Простейшая, канальная, потоковая Очереди символов – Низкоуровневая Входной буфер – очередь записей о событиях ввода Буфер экрана – двумерный массив данных и атрибутов отображаемого текста Две кодировки – ASCII/ANSI A – Unicode W Два набора наименований типов данных Разрушаются: EAX, EBX, ECX, EDX 17

Терминал Windows (продолжение) Дескрипторы терминала из SmallWin.inc – Стандартного канала ввода: STD_INPUT_HANDLE – Стандартного канала ввода: STD_OUTPUT_HANDLE – Стандартного канала диагностики: STD_ERROR_HANDLE. data inputHandle DWORD ?. code INVOKE GetStdHandle, STD_INPUT_HANDLE mov inputHandle,eax Необходимые дополнительные действия – Получить дескриптор – Сохранить, установить, восстановить режим 18

– – – – – – Терминальные функции Согласование типов ОС и ассемблера 43 (сорок три) функции по Ирвайну: операции с … –––––––– окнами терминалами дескрипторами буферами записями режимами символами атрибутами кодировками курсорами 19

0 Вывод на консоль TITLE Пример консольного приложения Win32 #1 (Console1.asm) INCLUDE Irvine32.inc.data endl EQU ; Признак конца строки message \ BYTE " Console1.asm ",endl BYTE "Это пример вывода на консоль.",endl BYTE "WriteConsole системы Win32.",endl BYTE " ",endl messageSize = ($-message) consoleHandle DWORD 0 bytesWritten DWORD ?.code main PROC INVOKE GetStdHandle, STD_OUTPUT_HANDLE mov consoleHandle,eax INVOKE WriteConsole, consoleHandle,; DWORD- Дескриптор устройства вывода ADDR message,; PTR BYTE - Адрес строки messageSiZe,; DWORD- Длина строки ADDR bytesWritten,; PTR WORD - Адрес кол-ва выведенных INVOKE ExitProcess,0 main ENDP END main ; DWORD- Зарезервировано 20

0 Чтение с консоли TITLE Программа чтения с консоли INCLUDE Irvine32.inc BufSiZe = 80.data bufferBYTE BufSiZe DUP(?),0,0 stdInHandle DWORD ? bytesRead DWORD ?.code main PROC INVOKE GetStdHandle, STD_INPUT_HANDLE mov stdInHandle,eax INVOKE ReadConsole, ; stdInHandle, ;DWORD- дескриптор устройства ввода ADDR buffer, ;PTR BYTE – адрес массива для ввода BufSiZe - 2, ;DWORD– максимальное кол-во вводимых ADDR bytesRead,; PTR DWORD – адрес кол-ва введённых mov esi,OFFSET buffer mov ecx,16 mov ebx,TYPE buffer call DumpMem exit main ENDP END main ; DWORD- зарезервировано 21

Файловый ввод-вывод CreateFile – Открытие/создание файлов CloseHandle – Закрытие файлов ReadFile – Чтение файлов WriteFile – Запись файлов SetFilePointer – Перемещение файлового указателя 22

?; Функции времени и даты 20 (двадцать) : операции с … – локальным и мировым временем – различными форматами системным DOS штампом файла SYSEMTIME STRUCT wYear WORD 4 цифры wMonthWORD?;1-12 wDayOfWeek WORD?;0-6 wDay wHour wMinute wSecond WORD ???????? ;;;;;;;; wMillisec WORD?;0-999 SYSEMTIME ENDS 23

– – – Часть оконных примитивов Структуры сложных данных – Точка Область экрана Системное сообщение Класс окна Необходимые процедуры – MessageBox : Вывод текста в граф.режиме – WinMain : Инициализация граф.приложения – WinProc : Обработка системных событий – ErrorHandler : Обработка ошибок (необяз.) 24

Оконный сценарий.386.model flat,STDCALL INCLUDE GraphWin.inc.data ; Определим структурную переменную, описывающую класс окна. code WinMain PROC ; Определим дескриптор текущего процесса ; Загрузим образы пиктограммы и курсора программы. ; Зарегистрируем класс окна ; Создадим основное окно программы ; - если ошибка, отобразим сообщение и остановимся ; Отобразим окно на экране и обновим его содержимое ; Выведем приветственное сообщение ; Создадим цикл обработки сообщений ; Получим новое сообщение из очереди ; Если в очереди больше нет сообщений, остановимся ; Отправим сообщение на обработку процедуре WInProc нашей программы WinMain ENDP WinProc PROC, ; Эта процедура обрабатывает некоторые сообщения, посылаемые системой Windows нашему приложению. ; Щелчок левой кнопкой мыши? ; Окно создано? ; Окно закрыто? ; Обработка сообщений выполняется стандартной процедурой системы WIndows. WinProc ENDP ; ErrorHandler PROC ; Получим код ошибки ; Определим адрес текстового сообщения об ошибке ; Отобразим сообщение об ошибке ; Освободим память, c cообщением об ошибке ErrorHandler ENDP END WinMain 25

Памятка интерфейса с ЯВУ Соглашения о присвоении имён – Компилятором ЯВУ – Компилятором ассемблера Модель памяти Соглашение о вызове процедур – Сохраняемые регистры – Передача аргументов Метод: регистры, стек, память, иное Порядок: сначала первый или последний Способ: значение, ссылка, иное – Восстановление стека – Возврат результата Имена внешних идентификаторов, сегментов Соглашение о конструкции сложных данных 26

– – – – – – Ассемблерные вставки Visual C++ Можно Обращаться к регистрам Обращаться к меткам и переменным С++ Обращаться к параметру функции по имени Смешивать синтаксис литералов Использовать операторы PTR,LENGTH,SIZE,TYPE Загружать адрес командой LEA Нельзя – определять данные директивами – использовать операторы кроме разрешённых выше определять адрес директивой OFFSET – использовать макроопределения – обращаться к сегментам по имени 27