Лаба №2, вариант 4 - Составление простых программ в кодах команд (1084828)
Текст из файла
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ РАДИОТЕХНИКИ, ЭЛЕКТРОНИКИ И АВТОМАТИКИ
(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
Отчет по лабораторной работе №2
«Составление простых программ в кодах команд»
Выполнил:
Студент группы ВВ-7-06
Иванов Р.И.
Вариант 4
Москва, 2009г.
Цель лабораторной работы заключается в освоении команд процессора и приобретении навыков составления простых программ в кодах команд.
Структурная схема микропроцессора:
Задание №1
Составить программу вычисления выражения:
N = ∑ai = a1+a2+a3+…+a40
где аi – число натурального ряда, начиная с “1”.
N = ∑ai = 1+2+3+…+40 = 820(10) =334(16)
40(10) = 28(16)
0000 16 RG_D := 0;
0001 00;
0002 1E RG_E := 28;
0003 3C;
0004 26 RG_H := 0;
0005 00;
0006 2E RG_L := 0;
0007 00;
0008 19 ((H)(L)) := ((H)(L)) + ((D)(E));
0009 1D; RG_E := RG_E-1;
000A C2; //условный переход в ячейку с адресом 000C+000B
//по ненулевому результату
000B 08;
000C 00;
000D 76; //Остановка
Задание №2
Составить программу вычисления выражения:
N = ∑ai = a1+a2+a3+…+a17
где аi – произвольные числа из ячеек памяти.
N = ∑ai =
=1A+5B+BB+CC+AC+ //2A8
+BC+91+56+BF+BA+ //31C
+23+10+18+AA+01+ //4В
+11+BE //CF
=6DE(16)
RG_C := 11;
RG_H := 00;
RG_L := 0C;
RG_A := 00;
0000 86 RG_A := RG_A + ((H)(L));
0001 D2; //условный переход в ячейку с адресом 0003+0002 по
//отсутствию переполнения
0002 05;
0003 00;
0004 14 RG_D := RG_D + 1;
0005 23 ((H)(L)) := ((H)(L)) + 1;
0006 0D RG_C := RG_C – 1;
0007 C2; //условный переход в ячейку с адресом 0009+0008
//по ненулевому результату
0008 00;
0009 00;
000A 5F RG_E := RG_A;
000B 76; //Остановка
17 чисел для сложения:
000C 1A;
000D 5B;
000E BB;
000F CC;
0010 AC;
0011 BC;
0012 91;
0013 56;
0014 BF;
0015 BA;
0016 23;
0017 10;
0018 18;
0019 AA;
001A 01;
001B 11;
001C BE;
Задание №3
Составить программу для пересылки массива данных размерностью 17 из одной области ОЗУ в другую.
RG_B := 00;
RG_C := 20;
RG_D := 00;
RG_E := 32;
RG_H := 11;
0000 0A RG_A := ((B)(C));
0001 12 ((D)(E)) := RG_A;
0002 0B ((B)(C)) := ((B)(C)) - 1;
0003 1B ((D)(E)) := ((D)(E)) - 1;
0004 25 RG_H := RG_H-1;
0005 C2; //условный переход в ячейку с адресом 0007+0006
//по ненулевому результату
0006 00;
0007 00;
0008 76; //Остановка
17 чисел для переноса:
0010 1A;
0011 5B;
0012 BB;
0013 CC;
0014 AC;
0015 BC;
0016 91;
0017 56;
0018 BF;
0019 BA;
001A 23;
001B 10;
001C 18;
001D AA;
001E 01;
001F 11;
0020 BE;
17 перенесенных чисел:
0021 1A;
0022 5B;
0023 BB;
0024 CC;
0025 AC;
0026 BC;
0027 91;
0028 56;
0029 BF;
002A BA;
002B 23;
002C 10;
002D 18;
002E AA;
002F 01;
0031 11;
0032 BE;
Задание №4
Составить программу для пересылки массива данных размерностью 13 из одной области ОЗУ в другую. После пересылки массив должен расположиться в обратном порядке.
RG_B := 00;
RG_C := 20;
RG_D := 00;
RG_E := 21;
RG_H := 11;
0000 0A RG_A := ((B)(C));
0001 12 ((D)(E)) := RG_A;
0002 0B ((B)(C)) := ((B)(C)) - 1;
0003 13 ((D)(E)) := ((D)(E)) + 1;
0004 25 RG_H := RG_H-1;
0005 C2; //условный переход в ячейку с адресом 0007+0006
//по ненулевому результату
0006 00;
0007 00;
0008 76; //Остановка
17 чисел для переноса:
0010 1A;
0011 5B;
0012 BB;
0013 CC;
0014 AC;
0015 BC;
0016 91;
0017 56;
0018 BF;
0019 BA;
001A 23;
001B 10;
001C 18;
001D AA;
001E 01;
001F 11;
0020 BE;
17 перенесенных чисел:
0021 1A;
0022 5B;
0023 BB;
0024 CC;
0025 AC;
0026 BC;
0027 91;
0028 56;
0029 BF;
002A BA;
002B 23;
002C 10;
002D 18;
002E AA;
002F 01;
0031 11;
0032 BE;
Задание №5
Составить программу умножения однобайтных двоичных чисел.
2110*2110 = 44110
1516*1516= 1B916, ответ в ((H)(L))
RG_B := 08;
RG_E := 15;
RG_L := 15;
0000 7D RG_A := RG_L;
0001 1F Сдвиг A;
0002 6F RG_L := RG_A;
0003 D2; //условный переход в ячейку с адресом 0005+0004
//по отсутствию переполнения
0004 09;
0005 00;
0006 7B RG_A := RG_E;
0007 84 RG_A := RG_A + RG_H;
0008 67 RG_H := RG_A;
0009 7C RG_A := RG_H;
000A 1F Сдвиг A;
000B 67 RG_H := RG_A;
000C 7D RG_A := RG_L;
000D 1F Сдвиг A;
000E 6F RG_L := RG_A;
000F 05 RG_B := RG_B-1;
0010 C2; //условный переход в ячейку с адресом 0012+0011
//по ненулевому результату
0011 03;
0012 00;
0013 76; //Остановка
Результат: ((H)(L)) = 01B9
Задание №6
Составить программу деления однобайтных двоичных чисел.
RG_H / RG_L = RG_H
2410/310=810 1816/316=816
RG_B := 09; RG_H := 18; RG_L := 03;
0000 7C RG_A := RG_H;
0001 17 Сдвиг A;
0002 67 RG_H := RG_A;
0003 05 RG_B := RG_B-1;
0004 CA ; //условный переход в ячейку с адресом 0006+0005
// по нулевому результату
0005 1B;
0006 00;
0007 7B RG_A := RG_E;
0008 17 Сдвиг A;
0009 95 RG_A := RG_A - RG_L;
000A F2; //условный переход в ячейку с адресом 000C+000B
// по положительному результату
000B 16;
000C 00;
000D 85 RG_A := RG_A + RG_L;
000E 5F RG_E := RG_A;
000F D2; //условный переход в ячейку с адресом 0011+0010
// по отсутствию переноса
0010 00;
0011 00;
0012 3F; //invert «C»
0013 C3; //безусловный переход в ячейку с адресом 0015+0014
0014 00;
0015 00;
0016 5F RG_E := RG_A;
0017 37; //установка «C»
0018 C3; //безусловный переход в ячейку с адресом 001A+0019
0019 00;
001A 00;
001B 76; //Остановка
Результат: RG_H = 08
Задание №7
Составить программу вычисления следующего выражения: N = (a+b) – (c*d). Числа однобайтные. При составлении программы использовать команду обращения к подпрограммам, а в качестве подпрограммы – программу из задания 5.
HL = (C + D) – (L * E)
RG_E := 15;
RG_L := 10;
RG_C: = FA;
RG_D:= 10;
RG_H:= 00;
0000 7D RG_A := RG_L;
0001 1F Сдвиг A;
0002 6F RG_L := RG_A;
0003 D2; //условный переход в ячейку с адресом 0005+0004
//по отсутствию переполнения
0004 09;
0005 00;
0006 7B RG_A := RG_E;
0007 84 RG_A := RG_A + RG_H;
0008 67 RG_H := RG_A;
0009 7C RG_A := RG_H;
000A 1F Сдвиг A;
000B 67 RG_H := RG_A;
000C 7D RG_A := RG_L;
000D 1F Сдвиг A;
000E 6F RG_L := RG_A;
000F 05 RG_B := RG_B-1;
0010 C2; //условный переход в ячейку с адресом 0012+0011
//по ненулевому результату
0011 03;
0012 00;
0013 C9; // return
0100 06 RG_B := 8;
0101 08;
0102 CD; //вызов подпрограммы умножения
0103 00;
0104 00;
0105 7A RG_A := RG_D;
0106 81 RG_A := RG_A + RG_C;
0107 06 RG_B := 0;
0108 00;
0109 D2; //условный переход в ячейку с адресом 090B+090A
// по отсутствию переноса
010A 0D;
010B 01;
010C 04 RG_B := RG_B + 1;
010D 4F RG_C := RG_A;
010E 7D RG_A := RG_L;
010F 2F; //invert RG_A
0110 6F RG_L := RG_A;
0111 7C RG_A := RG_H;
0112 2F; //invert RG_A
0113 67 RG_H := RG_A;
0114 23 ((H)(L)) := ((H)(L)) + 1;
0115 09 ((H)(L)) := ((H)(L)) + ((B)(C));
0116 76; //Остановка
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.