Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОЭВМиС.Метод.Лабы

.pdf
Скачиваний:
13
Добавлен:
13.03.2016
Размер:
355.85 Кб
Скачать

Содержание

 

Содержание..........................................................................................................................................

1

Условия сдачи лабораторных работ..................................................................................................

2

Лабораторная работа № 1: Измерение производительности компьютера ....................................

2

Ход работы.......................................................................................................................................

2

Содержание отчета..........................................................................................................................

3

Лабораторная работа №2: Изучение команд ассемблера во встроенном DEBUG .......................

3

Справочный материал.....................................................................................................................

3

Порядок работы...............................................................................................................................

4

Контрольные задания......................................................................................................................

5

Лабораторная работа №3: Подмена обработчика прерывания.......................................................

5

Справочная информация ................................................................................................................

6

Порядок работы...............................................................................................................................

6

Описание используемых функций.................................................................................................

8

Функция inport.............................................................................................................................

8

Функция outport...........................................................................................................................

8

Контрольные вопросы ....................................................................................................................

8

Лабораторная работа №4: Прерывания процессора ........................................................................

8

Порядок выполнения работы.........................................................................................................

9

Содержание отчета........................................................................................................................

10

Справочная информация ..............................................................................................................

10

Обслуживание прерываний......................................................................................................

10

Список прерываний...................................................................................................................

11

Лабораторная работа №5: Способы адресации..............................................................................

12

Порядок выполнения работы.......................................................................................................

12

Контрольные вопросы и задания.................................................................................................

13

Содержание отчета........................................................................................................................

14

Справочная информация ..............................................................................................................

14

Регистровый режим...................................................................................................................

14

Непосредственный ....................................................................................................................

14

Прямой .......................................................................................................................................

15

Регистровый косвенный (базовый или индексный)...............................................................

15

Регистровый косвенный со смещением (базовый или индексный) .....................................

16

Базовый индексный со смещением .........................................................................................

17

Лабораторная работа №6: Изучение команд MMX ........................................................................

17

Порядок выполнения работы.......................................................................................................

17

Листинг программы – примера на языке C (Microsoft Visual C++ 6.0) ...................................

18

Содержание отчета........................................................................................................................

20

Контрольные вопросы к отчету...................................................................................................

20

Варианты заданий .........................................................................................................................

20

Справочная информация ..............................................................................................................

21

Регистры.....................................................................................................................................

21

Префиксы...................................................................................................................................

21

Распаровка (paring)....................................................................................................................

22

Типы данных..............................................................................................................................

22

Краткое описание команд.........................................................................................................

24

Список литературы ...........................................................................................................................

26

Условия сдачи лабораторных работ

1)Выполнение лабораторных работ в установленные учебным планом сроки (В отдельных случаях – по договоренности с преподавателем);

2)Написание отчета в соответствии с установленными требованиями;

3)Защита лабораторной работы:

a.Проверка преподавателем отчета

b.Ответы на дополнительные вопросы преподавателя. Работа считается засчитанной, при ответе на 4 вопроса из 5.

4)Все лабораторные работы должны быть сданы до экзамена/зачета. В противном случае, студент до экзамена не допускается.

Лабораторная работа № 1: Измерение производительности компьютера

Цель работы: Изучение зависимостей в производительности компонентов системы.

Задачи работы: Измерение производительности компьютера, сопоставление полученных данных.

Используемые программные средства: тестовая программа SiSoftware Sandra

SiSoftware Sandra дает различную информацию о различных компонентах компьютера и ОС. Получите интересующие вас данные. Дополнительно изучите данные информационных и тестовых модулей.

Ход работы

1)Запустите SiSoftware Sandra

2)В открывшемся окне выберите арифметический тест процессора. Нажмите F5. Происходит тестирование процессора. Сравните ваш процессор с другими эталонными процессорами. Сделайте вывод о причинах несоответствия характеристик тестируемого процессора характеристикам эталонных процессоров.

3)Запустите мультимедийный тест процессора. Нажмите F5. Сравните с эталонными процессорами. Сделайте вывод исходя из данных о наличии мультимедийных расширений команд процессора.

4)Тест файловой системы. Нажмите F5. Сравните с эталоном, сделайте вывод.

5)Тест пропускной способности памяти. Сравните сводки результатов по целым числам и по числам с плавающей точкой. Сделайте вывод о скорости алгоритмов работы с целыми числами и числами с плавающей точкой.

6)Запустите тест кэш-памяти. Нажмите F5. Найдите на графике точку первого перегиба. Сравните ее с размером кэш-памяти первого уровня. Найдите точку второго перегиба. Сравните с размерами кэш-памяти

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

Содержание отчета

1)Результаты всех измерений

2)Результаты сравнения, информацию о конфигурации компьютера, выводы

3)Графики производительности

Лабораторная работа №2: Изучение команд ассемблера во встроенном DEBUG

Цель: Познакомиться с основными командами языка Assembler

Задачи: Научиться писать несложные программы в интерактивном режиме в среде Debug.

Используемые программные средства: консольная программа debug.exe

Справочный материал

Ассемблер (от англ. assemble — собирать) — компилятор с языка ассемблера в команды машинного языка.

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

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

Дизассемблер — транслятор, преобразующий машинный код в программу на языке ассемблера.

По режиму работы с пользователем делятся на:

1)Автоматические

2)Интерактивные

Примером автоматических дизассемблеров может служить Sourcer. Такие дизассемблеры генерируют готовый листинг, который можно затем править в текстовом редакторе. Пример интерактивного — IDA. Он позволяет изменять правила дизассемблирования, весьма удобный инструмент для исследования программ.

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

Обычно используется параллельно с отладчиком.

Порядок работы

1)Запустите MS Windows.

2)Запустите DEBUG (Пуск – Выполнить – DEBUG Enter)

3)Вы увидите стандартное приглашение DEBUG “-“

4)Наберите “?” и нажмите клавишу Enter

5)Нам интересны несколько команд программы DEBUG:

a.Assemble A [address] – записать команды ассемблера в память

b.Dump D [range] – показать область памяти

c.Register R – показать текущее состояние регистров процессора

d.Trace T [=address][value] – выполнить программу, вызов без параметров повлечет выполнение одной команды

6)Запишем несколько команд ассемблера. Для этого наберем команду “A

7)Появилось приглашение вида ХХХХ:100, показывающее адрес команды и смещение.

8)Пишем следующий код, отделяя строки клавишей Enter

mov ax, 100 mov bx, 150 add ax, bx xor bx, bx

9)Нажимаем Enter 2 раза и выходим из режима ассемблирования

10)Посмотрим содержимое регистров, выполнив команду “R”. Как мы видим,

всреде DEBUG все регистры общего назначения перед выполнением программы обнулены.

a.Вводим команду Trace (“T”), тем самым выполняем одну команду (mov ax, 100), обратите внимание, как изменяется регистр IP

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

12)Аналогично выполним все остальные команды, обращая внимание на их действие, т.е. выполним команду trace (“T”) еще три раза.

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

Команда

Операнд А

Операнд Б

Результат А

Результат Б

mov

ax

100

100

 

mov

bx

150

150

 

add

ax,

bx

250

150

xor

bx

bx

0

0

mov

bx

10

10

 

add

ax

bx

260

10

sub

bx

2

 

 

xor

bx

bx

 

 

mov

bx

3

 

 

and

ax

10

 

 

or

ax

5

 

 

shr

ax

1

 

 

shl

ax

1

 

 

div

bx

 

 

 

14)Выходим из DEBUG командой “Q

Примечание: Как действует оператор деления div

В нашем случае делимое в AX, делитель - любой регистр, результат: целая честь в AX, остаток в DX. Внимание!

1)Если делитель размером в один байт, то после операции частное помещается в AL, а остаток - в AH.

2)Если делитель размером в одно слово, то делимое должно быть расположено в паре регистров DX:AX (младшая часть делимого в AX). После операции частное помещается в AX, а остаток - в DX

3)Если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров EDX:EAX (младшая часть делимого находится в EAX.) После операции частное помещается в EAX, а остаток -

в EDX.

Контрольные задания

1)Запишите последовательность операторов ассемблера, устанавливающую и сбрасывающую необходимый бит в регистре BX (к примеру, 1ый, 5ый и 6ой биты).

2)Напишите последовательность операторов ассемблера, быстро выполняющую деление числа на степень двойки (примечание: любое число может быть представлено суммой степеней двойки. Подумайте, как можно выполнить деление числа на любое другой при помощи битовых операций на ассемблере).

Лабораторная работа №3: Подмена обработчика прерывания

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

прерывания клавиатуры.

Используемые программные средства: Borland C++ 3.1

Справочная информация

Прерывание (англ. interrupt) — сигнал, сообщающий процессору о совершении какого-либо асинхронного события. При этом выполнение текущей последовательности команд приостанавливается, и управление передаётся обработчику прерывания, который выполняет работу по обработке события и возвращает управление в прерванный код.

Виды прерываний:

Аппаратные (англ. IRQ Interrupt Request) — события от периферийных устройств (например, нажатия клавиш клавиатуры, движение мыши, сигнал от таймера, сетевой карты или дискового накопителя) — внешние прерывания, или события в микропроцессоре

— (например, деление на ноль) — внутренние прерывания;

Программные — инициируются выполняемой программой, то есть уже

синхронно, а не асинхронно. Программные прерывания могут служить для вызова сервисов операционной системы.

Обработчики прерываний обычно пишутся таким образом, чтобы время их обработки было как можно меньшим.

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

Вектор прерывания — ячейка памяти, содержащая адрес обработчика прерывания.

Перехват прерывания — изменение обработчика прерывания на свой собственный.

Вектора прерываний объединяются в таблицу векторов прерываний. Местоположение таблицы зависит от типа и режима работы микропроцессора.

Порядок работы

1) Запустите Borland С++ и наберите нижеприведенный исходный код программы

#include <stdio.h>

#include <dos.h>

#include <conio.h>

#define INTR 0x09 // Прерывание вызванное системным таймером

#ifdef __cplusplus #define __CPPARGS ...

#else

#define __CPPARGS

#endif

void interrupt ( *oldhandler)(__CPPARGS); int count=0;

int flag = 1; char buffer[20];

void interrupt handler(__CPPARGS)

{

// увеличиваем глобальный счетчик

 

// printf("%d",count++);

 

 

 

char port60;

// задаем переменные в один байт для портов

 

 

char port61;

 

 

 

 

char ascii[] = {' ', ' ','1','2','3','4','5','6','7','8','9','0'};

//

«дозволенные» символы

 

 

 

 

port60 = inportb(0x60); // прочли скэн-код

 

 

port61 = inportb(0x61);

 

 

 

outportb(0x61,port61 | 0x80);

 

 

outportb(0x61,port61 & 0x7f);

 

//

printf(" %x \n",port60);

 

 

if(port60 != 1)

 

 

 

 

{

 

 

 

 

if(port60 == 0x1c)

// если Enter

 

 

{

 

 

 

puts("Нажали на Enter. Вот содержимое буфера."); for(int i = 0; i < count; i++)

{

printf("%c",buffer[i]);

}

printf("\nТеперь буфер пуст."); count = 0;

}

if(count < 15) // если не больше 15 символов

{

if(port60 > 1 && port60 < 12) buffer[count++] = ascii[port60];

}

 

 

else puts("Буфер переполнен");

// иначе сообщаем об ошибке

}

 

 

else

 

 

flag = (port60 == 1)? 0:1;

// по Esc сбрасываем флаг

// вызываем старый обработчик oldhandler();

}

int main(void)

{

//сохраняем старый вектор прерывания oldhandler = getvect(INTR);

//устанавливаем новый обработчик прерывания setvect(INTR, handler);

//будем выполнять цикл пока число символов < 20 while(flag);

//printf("");

//восстановление старого вектора setvect(INTR, oldhandler);

return 0;

}

2)Обратите внимание на процедуру подмены вектора прерываний, разберите код процедуры обработчика. Постарайтесь оттрассировать программу и понять принцип ее действия до компиляции.

3)Откомпилируйте программу.

4)Введите несколько разрешенных символов и нажмите клавишу ENTER.

5)Повторите действия с количеством разрешенных символов >15 и Неразрешенными символами.

6)Ответьте на контрольные вопросы.

Описание используемых функций

Функция inport

Считывает байт из порта.

Синтаксис: int inport(int port);

Файл, содержащий прототип: dos.h

Описание inportb - это макрокоманда, которая считывает байт из порта, определяемого параметром port. Если вы подключили файл dos.h, то inportb рассматривается как макрокоманда, которая расширяется до встроенного кода. Если вы не включите dos.h, или отмените определение макрокоманды с помощью инструкции #undef, то получите функцию.

Возвращаемое значение: inportb возвращает прочитанное значение.

Функция outport

Производит вывод в порт байта.

Синтаксис: void outport(int portid, unsigned char value);

Файл, содержащий прототип: dos.h

Описание outportb - это макрокоманда, которая записывает значение параметра value в выходной порт, определяемый параметром portid.

При вызове outportb при указанном включаемом файле dos.h, то outportb рассматривается как макро, и расширяется во встроенный машинный код. Если вы не включаете файл dos.h, или если вы отменили outportb командой #undef, то получите функцию outportb.

Возвращаемое значение: Нет.

Контрольные вопросы

1)Что такое прерывание?

2)Для чего предназначен вектор прерываний?

3)В каком случае происходит возврат к старому обработчику клавиатуры?

4)Для чего сохраняется и восстанавливается в конце старый вектор прерываний?

5)Прерывание какого типа (программное или аппаратное) мы использовали?

Лабораторная работа №4: Прерывания процессора

Цель работы: Изучение прерываний BIOS и DOS

Задачи: Изучение работы прерываний на примере использования прерывания BIOS и DOS

Используемые программные средства: Borland C++ 3.1, Turbo Debugger (TD.EXE)

Порядок выполнения работы

1) В текстовом редакторе среды Borland C++ напишите программу, исходный текст которой приводится в листинге

#include <stdio.h> #include <dos.h>

void main()

{

//таблица векторов прерываний - чтобы можно было поставить точку

//остановки в отладчике

void interrupt (far * i0x10)(...) = getvect(0x10); void interrupt (far * i0x21)(...) = getvect(0x21); puts("");

//вывод через прерывание BIOS

_BX = 0x07; _CX = 40;

_AX = 0x0931; i0x10();

asm {

mov ah,9 mov bh,0 mov al,'2' mov cx,20 mov bl,0x07 int 0x10

}

puts("");

// вывод через прерывание DOS

_DL = '3';

_AH = 2; i0x21();

asm {

mov ah,2 mov dl,'4' int 0x21

}

_DL = '5'; _AH = 2;

geninterrupt(0x21);

}

2)Используя справочную информацию и подсказки Borland C++, составьте определение для незнакомых терминов (geninterrupt(), interrupt и т.п.)

3)Запустите программу, убедитесь, что на экране появился результат ее работы.

4)Загрузите программу в отладчик Turbo Debugger (TD.EXE).

5)Поставьте точки остановки (F2) в строки, отмеченные в листинге жирным шрифтом

6)Запустите программу (F9).

7)В первой точке остановки откройте окно состояния процессора (View – CPU), проведите трассировку программы (F7) до входа в обработчик прерывания. Запишите значения регистров CS и IP – это адрес программы обработчика прерывания BIOS 0x10. Поставьте точку остановки (F2) в окне CPU, чтобы в дальнейшем отслеживать все обращения к прерыванию

BIOS.

8)Нажмите F9, чтобы продолжить работу. Дойдите до строки mov ah,9 – второй точки остановки.

9)В окне программы нажимайте F8 для пошагового выполнения программы до строки int 0x10. Убедитесь, что вызов прерывания ведет в ранее поставленную в окне CPU точку остановки.

10)Перейдите в окно программы, поставьте точки прерывания в строке, отмеченной специальным шрифтом.

11)Нажимайте F9, пока не остановитесь на ней. Обратите внимание, что вызов функции puts ведет, в конечном итоге, к нескольким вызовам прерывания 0x10.

12)Используя окно CPU и F7, найдите точку входа в обработчик прерывания 0x21, запишите CS и IP.

13)Нажмите F9, убедитесь, что вызов прерывания 0x21 ведет к вызову прерывания 0x10.

14)Аналогично отработайте вызов прерывания в строке int 0x21.

15)Запустите (одновременно!) другую копию TD, убедитесь, что точки входа в обработчики прерываний не изменились.

Содержание отчета

1)Исходный текст программы с комментариями;

2)Описание используемых команд ассемблера, новых функций и ключевых слов C, объяснение смысла их действий и используемых операндов;

3)Полученные в результате исследования адреса обработчиков прерываний.

Справочная информация

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

Система BIOS (Basic Input/Output System) находится в ROM и управляет всеми прерываниями в системе. Содержит некоторые прерывания для вывода на экран дисковых операций ввода-вывода и печати.

Обслуживание прерываний

В компьютерах IBM PC ROM находится по адресу FFFF0H. При включении компьютера процессор устанавливает состояние сброса, выполняет контроль четности, устанавливает в регистре CS значение FFFFH, а в регистре IP - нуль. Первая выполняемая команда поэтому находится по адресу FFFF:0 или FFFF0, что является точкой входа в BIOS. BIOS проверяет различные порты компьютера для определения и инициализации подключенных устройств. Затем BIOS создает в начале памяти (по адресу 0) таблицу прерываний, которая содержит адреса обработчиков прерываний, и выполняет две операции INT 11H (запрос списка присоединенного оборудования) и INT 12H (запрос размера физической памяти).

Следующим шагом BIOS определяет, имеется ли на диске или дискете операционная система DOS. Если обнаружена системная дискета, то BIOS