Файл: Отчет по лабораторным работам по дисциплине Вычислительные машины сети и системы.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 08.02.2024
Просмотров: 29
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Лабораторная работа №6 (Изучение использование стека и подпрограмм. Организация внутрисегментных и межсегментных переходов)
Задание:
Цель работы: приобретение навыков использования команд безусловного перехода для организации внутрисегментных и межсегментных переходов и стека при написании ассемблерных программ и вставок, получение представления об особенностях обработки данных, команд и режимах доступа к данным при организации переходов и использовании стека.
Выполнение работы
-
Написать простейшую программу либо на языке ассемблера либо используя ассемблерную вставку, используя знания полученные в 1 и 2 лабораторной работе. -
Описать сегмент стека, в котором зарезервировать 30 ячеек, занятых нулями. -
Описать два сегмента данных: в первом определить массив из семи однобайтовых чисел; во втором – определить массив из семи однобайтовых элементов, первоначально занятых нулями, а также две однобайтовые ячейки для хранения минимального и максимального элементов массива соответственно. -
Программы нахождения минимального, максимального элементов массива, а также реверсирования массива оформить в виде процедур ближнего вызова. -
Реверсирование массива реализовать с использованием стека. -
Результаты работы каждой процедуры поместить в другой сегмент данных в соответствующие ячейки. При этом переход в другой сегмент необходимо выполнить один раз в конце основной программы, после чего переписать в него данные из соответствующих регистров. -
Написать отчет о проделанной работе.
Список литературы
1.Максимов Н.В., Партыка Т.Л., Попов И.И Архитектура ЭВМ и вычислительных систем. —М.: Форум, 2008. — 512с.
2.Гук.М.Ю. Аппаратные средства РС. Энциклопедия. –ЗАО «Питер», 2008.
3.Жмакин А.П. Архитектура ЭВМ. — BHV-Санкт-Петербург, 2008 г. . — 320 с.
4.Крейгон Р. Архитектура компьютеров и ее реализация. — М.: Мир, 2004.
— 412с
5.Демидович Е.М. Программирование на Си. Минск: Из-во Университет-
ское, 2005 г.
6.Демидович Е.М.. Программирование на ассемблере. Минск: Из-во Университетское, 2003г.
7.Кулаков В.И. Программирование внешних устройства. Издательский дом
―Питер‖, 2004
8.Гук М.И, Юров В.С.Процессоры Pentium 4 Athlon и Duron.Издательский дом ―Питер‖, 2001.
9.Касаткин А.И. Управление ресурсами. Мн.: Высшая школа,1992.
10.Касаткин А.И. Системное программирование Мн.: Высшая школа,1993 г. 11.Гордеев А.В. Операционные системы. Учебник для ВУЗов. 2-е изд. Спб.,
Питер, 2005.
12.Юров В.И. Assembler. Учебник для ВУЗов. СПб., Питер, 2005.
13.Грегори К. Использование VisualC++ 6. Специальное издание. М., СПб., К., изд. дом ―Вильямс‖, 2000.
14.Таненбаум Э. Современные операционные системы. Спб, Питер, 2004. 15.Григорьев В.Л. Видеосистемы ПК фирмы IBM. -М.: Радио и связь, 1993.
16.Гук М. Процессоры Intel: от 8086 до Pentium II. - СПБ.: Питер, 1998.
17.Гук М.Г. Аппаратные интерфейсы ПК. Энциклопедия. - СПб.: Питер,
2006. – 1072 с.
18.Гук М.Г. Шины PCI, USB и FireWire. Энциклопедия. - СПб.: Питер, 2005.
– 540 с.
19.Петров С.В. Шины PCI, PCI Express. Архитектура, дизайн, принципы функционирования. – СПб.: БХВ, 2006. – 416 с.
20.Гук М.Г. Дисковая подсистема ПК. СПб: Питер, 2001. - 336 с.
21.Гук М.Г. Интерфейсы устройств хранения: ATA, SCSI и другие. Энциклопедия. СПб.: Питер, 2006. – 448 с.
22.Агуров П.А. Практика программирования USB. СПб.: БХВ, 2005. – 624 с. 23.Колесниченко О.Г., Шишигин И. В. Аппаратные средства РС, 5-е изд.
СПб.: БХВ, 2005. – 1152 с..
24.Морисита И. Аппаратные средства МикроЭВМ: Пер. с япон. М.: Мир,
1988.
25.Щелкунов Н.Н., Дианов А.П. Микропроцессорные средства и системы. М.: Радио и связь, 1990.
26.Фрир Дж. Построение вычислительных систем на базе перспективных микропроцессоров : Пер. с англ. М.: Мир, 1990.
27.Фридмен М., Ивенс Л. Проектирование систем с Микрокомпьютерами: Пер с англ. М.: Мир, 1986..
28.«Микропроцессоры» кн.1, кн.2, кн.3. Под ред. Преснухин. Минск, Высшая школа, 1987.
29.Клингман Э. Проектирование микропроцессорных систем: Пер. с англ.
М.: Мир, 1980.
30.Шпаковский Г.И. Организация параллельных ЭВМ и супер скалярных процессоров: Учебное пособие. Мн.: Белгосуниверсит, 1996.
31.Скорик В.Н. и др. Мультимикропроцессорные системы // К.: «Техника»,
1989.
32.Корнеев В.В., Киселев А.В. Современные микропроцессоры. 3-е изд. -
М.:НОЛИДЖ, 2003. -448 с. (А4).
33.David Patterson, John Hennecy. Computer Architecture A Quantitative Approach. 3-ed edition. Morgan Kaufmann Publishers.
34.David Patterson, John Hennecy. Computer Architecture A Quantitative Approach. 4-th edition. Morgan Kaufmann Publishers.
35.Patterson, Hennessy. Computer Organization and Design. The Hardware/Software Interface. Morgan Kaufmann Publishers.
36.Воеводин В.В., Воеводин Вл. В. Параллельные вычисления. – СПб.: БХВ-Петербург, 2004. – 608с.
37.Хамахер К., Вранешич З., Заки С. Организация ЭВМ. 5-е изд. –
СПб.:Питер, 2003. – 848 с.
38.SPEC CPU2006 Benchmark Descriptions
39.Mark Smotherman, Understanding EPIC Architectures and Implementations.
40.Alpha Architecture Handbook Version 4
41.MIPS IV Instruction Set Version 3.2
42.Power ISA Version 2.04
43.The SPARC Architecture Manual Version 9
44.Intel Itanium Architecture Software Developer’s Manual
45.Intel® 64 and IA-32 Architectures Optimization Reference Manual
46.AMD64 Architecture Programmer`s Manual
47.Intel Compiler 10 Reference Manual
48.Sun Microsystems OpenSPARC T1 Microarchitecture Specification
49.Manish Shah, Jama Barreh, and others. UltraSPARC T2: A Highly-Threaded, Power-Efficient, SPARC SOC, Sun Microsystems
50.Скляров В.А. Методическая разработка по применению персональных ЭВМ в учебном процессе и в научных исследованиях для студентов всех специальностей. «Управление ресурсами ПЭВМ", Мн.: ротопринт МРТИ, 1989 г.
51.Прерывания операционной системы. Мн.: ротопринт МРТИ, 1989 г. 52.Алгоритмические языки Си и Паскаль. Мн.: ротопринт МРТИ, 1989 г.
53.Cмит В.Э., Джонсон М.Т. Архитектура и программирование микропроцессора INTEL 80386. -М.: СП "Конкорд", 1992.
54.Бродин В.Б., Шагурин И.И. Микропроцессор i486. Архитектура, программирование, интерфейс. - М.: "Диалог-МИФИ", 1993.
55.Ларионов А.М., Горнец Н.Н. Периферийные устройства в вычислительных системах: Учеб. пособие для вузов.– М.: Высш.шк., 1991.– 336 с.
56.Григорьев В.Л. Архитектура и программирование арифметического сопроцессора.– М.: Энергоатомиздат, 1991.– 208 с.
57.Нортон П. Программно-аппаратная организация IBM PC: Пер. с англ.– М.: Радио и связь, 1992.– 336 с.
58.Венгер В.А. и др. Аппаратура персональных компьютеров и ее програм-
мирование. IBM PC/XT/AT и PS/2. -М.: Радио и связь, 1995.
59.Руководство по архитектуре IBM PC AT/ Ж.К.Голенкова, А.В. Заблоцкий, М.Л.Мархасин и др.; Под общ.ред. М.Л.Мархасина. -Мн.:ООО
«Консул», 1992.
60.Таненбаум Э. С. Архитектура компьютера. 5-е изд. (+CD). СПб.: Питер,
2007 – 848 с.
61.Несвижский В.И. Программирование устройств SCSI и IDE. СПб.: БХВ,
2003. – 586 с.
62.Комиссарова В.А. Программирование драйверов для Windows. СПб.:
БХВ, 2007. – 256 с.
63.Магда Ю.А. Аппаратное обеспечение и эффективное программирование.
СПб.: Питер, 2007. – 352 с.
64.Солдатов В.С. Программирование драйверов Windows. Третье издание.
М.: Бином, 2006. – 480 с.
65.Самарин А.В. Жидкокристаллические дисплеи. Схемотехника, конструкция и применение. М.: Солон, 2002. – 304 с.
66.Морс С.П., Алберт Д.Д. Архитектура микропроцессора i80286: Пер. с. англ. М.: Радио и связь, 1990
67.Гук М. Процессоры Intel: от 8086 до Pentium II, С. Пб.: Питер, 1997.
68.Гук М. Процессоры Pentium II, Pentium Pro, и просто Pentium. С. Пб.:
ПитерКом, 1999.
69.Лю Ю-Чжен, Гибсон Г. Микропроцессоры семейства 8086/8088. Архитектура, программирование и проектирование микрокомпьютерных систем: Пер. с англ. М.: Радио и связь, 1987.
70.Цифровой процессор обработки сигналов TMS320c10 и его применение / Под ред. А.А. Ланнэ. Л.: ВАС, 1990
71.Шпаковский Г.И. Параллельные микропроцессоры для ЦОС и МД. -Мн.:
БГУ,2000. -196 с.(А5).
72.Шагурин И.И., Бердышев Е.М. Процессоры семейства INTEL P6, Pentium 2,3, Celeron и др. Архитектура программирование, интерфейс. СПРАВОЧНИК. -М.: Горячая линия/Теле ком, 2000. -248 с.(А5).
73.Кулаков В. Программирование на аппаратном уровне. Спец. справочник.
-СПб:Питер, 2001. -490 с. (А4).
74.Алгоритмы и процессоры цифровой обработки сигналов. – СПб.: БХВ-
Петербург, 2003. – 464с.
75.Kongetira, P. Aingaran, K. Olukotun, K. Niagara: a 32-way multithreaded Sparc processor. Micro IEEE. March-April 2005, Volume: 25, page 2129.
76.NVIDIA CUDA™ Programming Guide - NVIDIA Corp.
77.Таненбаум Э. Архитектура компьютера: 4-е изд. СПб.: Питер, 2005.
Голенкова Ж.К., Заболоцкий А.B., Мархасин М.Л. и др. Руководство по архитектуре IBM PC AT/ Под общ. ред. М.Л.Мархасина. - Мн.: ООО «Консул», 1992.-949с.: ил.
78.Кулаков В. Программирование на аппаратном уровне: Специальный справочник. – СПб.: Питер, 2001.- 496 с.: ил.
Левкин Г.Н., Левкина В.Е. Введение в схемотехнику ПЭВМ IBM PC/AT. -М.: Изд-во МПИ, 1991..
79.Дженнингс. Ф. Практическая передача данных. Модемы, сети и протоколы. -М.: Мир, 1989.
80.Григорьев В.Л. Видеосистемы ПК фирмы IBM. - М.: Радио и связь, 1993.- 192 с.: ил.
81.Новиков Ю.В., Калашников О.А., Гуляев С.Э. Разработка устройств сопряжения для персонального компьютера типа IBM PC: Практическое пособие. -М.: ЭКОМ, 2000. – 224 с.
82.Юров В. Assembler. – СПб.: Питер, 2001.- 624 с.: ил.
83.Курейчик К.П., Дорощук Е.А. Электронное комплекс «Архитектура персональных ЭВМ». Мн.: БГУИР, кафедра ЭВМ, 2006.
84.Кобяк И.П. Архитектура компьютерных систем. Учебное пособие по курсу ТиП и СИФО ЭВМ для студентов специальностей Т10.03.00.Минск, 2001.
85.Лосич В.А., Радишевский В.А. Основы теории операционных систем. Учебное пособие по курсу ―Системное программное обеспечение‖ для студентов специальности Т 10.03.00 ―Вычислительные машины, системы и сети‖. Мн., БГУИР, 2001.
86.Технология проектирования программного обеспечения ЭВМ: учеб. пособие для студентов специальности I-40 02 01 «Вычисл. машины, системы и сети» всех форм обучения / А.В.Отвагин. – Мн.: БГУИР, 2005. – 56 с.: ил.
87.Курмаз М.А. Лабораторный практикум по дисциплине "Периферийные устройства ЭВМ" с разделом "Интерфейсы ЭВМ" для студентов специальности 1 - 40 02 01 "Вычислительные машины, системы и сети" всех форм обучения.
88.Петровский А.А., Микропроцессорные средства и системы: Лаб. практикум по для студ. спец. I-40 02 01 «Вычислительные машины, системы и сети» всех форм обуч. – Мн.: БГУИР, 2006. – 51 с.
89.Электронный учебно-методический комплекс по курсу «Микропроцессорные средства и системы» для всех форм обучения по специальности I- 40 02 01.
90.Добулевич А.А. Методы и устройства повышения производительности процессоров: лабораторный практикум по курсу АВПП. – Мн.: БГУИР,
2001. – 54с.
90.Добулевич А.А. Исследование эффективности конвейеризации в микро процессорных системах. Лабораторный практикум. – Мн. БГУИР, 2003
Приложение
// Программа, в которой создается два числовых массива одинакового размера. Вычисляет сумму попарных произведений элементов этих массивов. Данная программа содержит ассемблерную вставку.
#include
#include
using namespace std;
// Константа для указания максимальной длинны массивов
constexpr unsigned int ARR_SIZE = 10;
constexpr unsigned int MAX = 15;
constexpr unsigned int MIN = -5;
void task()
{
// Объявление переменных
int result = 0;
unsigned int counter = 0;
int arr_a[ARR_SIZE], arr_b[ARR_SIZE];
cout << "a b\n";
// Инициализация массивов случайными значениями
for (int i = 0; i < ARR_SIZE; i++)
{
arr_a[i] = MIN + rand() % MAX;
arr_b[i] = MIN + rand() % MAX;
cout << arr_a[i] << " " << arr_b[i] << endl;
}
// Ассемблерная вставка
_asm {
BEGIN:
mov eax, 4 // перемещение указателя с шагом 4 байта
mul counter
mov ebx, eax
mov eax, dword ptr arr_a[ebx]
imul dword ptr arr_b[ebx]
add result, eax
inc counter
mov eax, counter
cmp eax, ARR_SIZE
jne BEGIN
}
// Вывод результатов вычислений на ассемблере
cout << "result: " << result << endl;
// Проверка вычислений на корректность с помощью С++
int cpp_result = 0;
for (int i = 0; i < ARR_SIZE; i++)
{
cpp_result += arr_a[i] * arr_b[i];
}
// Вывод результатов вычислений на С++
cout << "cpp_result: " << cpp_result << endl;
}
int main()
{
// Случайное зерно для генератора
srand((unsigned int)time(NULL));
// Основной код
task();
}
// Lab2.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//
#include
#define _CRT_SECURE_NO_WARNINGS
#include
#define N 3 // Кол-во строк
#define M 4 // Кол-во столбцов
// Инициализация переменных
int menu;
FILE* F1;
FILE* F2;
int mas[N][M]; // Массив матрицы
int indi[M]; // Массив индексов i
int indj[M]; // Массив индексов j
int min[M]; // Массив локальных минимумов
int k = 0; // Счетчик локальных минимумов
int count = 0; // Счетчик матриц
int main()
{
// Проверка на доступ к файлам
if ((F1 = fopen("F1.txt", "w")) == NULL) {
printf("Error! File doesn'r exist.");
return 1;
}
if ((F2 = fopen("F2.txt", "w")) == NULL) {
printf("Error! File doesn'r exist.");
return 1;
}
// Замкнутый цикл с постусловием
do
{
// Пользовательское меню
printf("Choose action:\n");
printf("[1] Enter matrix.\n");
printf("[2] Exit.\n");
scanf("%d", &menu);
switch (menu) {
case 1:
// Ввод элементов матрицы
printf("Enter matrix elements:\n");
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
printf("a%d%d = ", i, j);
scanf("%d", &mas[i][j]);
}
}
count++;
// Запись матриц(-ы) в файл F1
fprintf(F1, "Номер матрицы: %d\nМатрица:\n", count);
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
fprintf(F1, "%d", mas[i][j]);
}
}
fprintf(F1, "\n\n");
// Поиск локального минимума
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if ((mas[i][j] < mas[i + 1][j]) && (mas[i][j] < mas[i][j + 1]) && (mas[i][j] < mas[i - 1][j]) && (mas[i][j] < mas[i][j - 1])) {
int ry1 = mas[i][j];
// Ассемблерная вставка:
// Определение и запись локального минимума
_asm {
mov esi, k
mov eax, ry1
mov ebx, i
mov ecx, j
inc esi
mov indi[esi], ebx
mov indj[esi], ecx
xor ebx, ebx
xor ecx, ecx
mov k, esi
mov min[esi], eax
xor eax, eax
xor esi, esi
}
}
}
}
// Запись сведений матриц(-ы) в файл F2
fprintf(F2, "№ матрицы: %d\n", count);
fprintf(F2, "Кол-во минимумов: %d\nЗначения: ", k);
for (int i = 0; i < k; i++) {
fprintf(F2, "[%d] ", min[i]);
}
fprintf(F2, "\nИндексы: ");
for (int i = 0; i < k; i++) {
fprintf(F2, "[%d][%d] ", indi[i], indj[i]);
}
fprintf(F2, "\n\n");
break;
case 2:
// Условие для выхода из цикла
menu = 2;
break;
}
system("pause");
system("cls");
} while (menu != 2);
return 0;
}