- •2005 Задание
- •Содержание
- •1. Индивидуальное задание.
- •1. Подготовить для аналитической части реферативный материал на тему:
- •2. Задача для разработки алгоритма и программной реализации на Эмуляторе микро-эвм см-1800
- •2. Аналитическая часть
- •2.1. Кодирование чисел в микропроцессорах.
- •2.2. Формы хранения чисел со знаком (фиксированная точка)
- •2.3. Двоичная арифметика
- •2.4. Арифметика чисел в прямом, обратном и дополнительном кодах.
- •3. Практическая разработка
- •3.1. Описание алгоритма
- •3.4. Листинг программы.
- •4. Описание средств вычислительной техники
- •5. Выводы
- •6. Литература
4. Описание средств вычислительной техники
1. Компьютер Intel Pentium 4, 1500 Mhz.
2. Память 192 Mb RAM.
3. Видеокарта Rodeon, 64Mb видеопамяти.
4. Монитор Samsung SyncMaster 550b с разрешением 1024x768 HiColor.
5. Стандартная клавиатура.
6. "Мышь".
7. Windows 2000Me.
5. Выводы
Была составлена программа формирования массива модулей чисел исходного массива (с адреса 500016), формирующая результат в массиве с адреса 600016. Программа располагается в памяти с ячейки 400016.
Возможны другие варианты реализации алгоритма данной задачи.
1. Например, можно было бы не использовать пару H, L во второй части программы; тогда нужно было бы рассматривать сначала младший байт исходного числа, инвертировать его, прибавлять 1, смотреть, нет ли переноса; если бы он был, пришлось и инвертировать старший байт, и отнимать от него 1, а потом все записать. Использование пары H, L значительно упрощает эту процедуру: мы заносим инвертированные байты в эти регистры, а потом от этой пары прибавляем 1.Следовательно, программа получается на несколько байт меньше и нагляднее. 2. Опять таки, если не использовать пару H, L можно было бы также сначала загрузить младший байт исходного числа, отнять 1 (команда SUI), заслать содержимое А и флагов в стек (PUSH PSW), инвертировать содержимое А, сделать переход к старшему байту числа, извлечь содержимое регистра флагов из стека, загрузить старший байт, отнять 00h, но с учетом того, был ли заем, инвертировать его и записать. 3. Можно было бы построить программу так, чтобы мы начинали не со старшего байта, а с младшего, и тогда нам пришлось бы делать лишние преобразования в первой части программы, но зато была бы короче вторая: следовательно, эти пути решения данного алгоритма практически равносильны.
Часть команд можно заменить другими, например, когда мы проверяли знак числа, можно было бы использовать также команды ADI 80h (сложение содержимого А с 80h) и RAL (циклический сдвиг содержимого А на один разряд влево). Инвертировать байты можно было бы с помощью команды CMA, но команда XRI показывает саму сущность инвертирования, так что я считаю ее более приемлемой для данного случая.
Результаты выполнения программы
|
Адрес16 |
Константа16 |
Адрес16 |
Константа16 |
|
6000 |
EB 3F |
600А |
DE 4A |
|
6002 |
00 59 |
600С |
EE 65 |
|
6004 |
01 00 |
600Е |
02 07 |
|
6006 |
61 3F |
6010 |
11 OD |
|
6008 |
00 00 |
6012 |
D0 7F |
6. Литература
Система команд микроЭВМ СМ-1800 и основы программирования в кодах: Метод. указания/СпбТИ., 1992. Составители Р.И. Белова и В.Н. Гиляров.
Майоров В.Г., Гаврилов А.И. «Практический курс программирования микропроцессорных систем» - М.: Машиностроение. 1989.
Операционная система СПО-1800. Монитор.: Метод. указания к лабораторной работе/СпбТИ., 1987. Составители Р.И. Белова, В.Н. Гиляров, Н.Н. Парамонова.
Коган В.М. «Электронные вычислительные машины и системы: Уч. пособие для вузов. – 3-е издание, перераб. и доп. – м.: Энергоатомиздат. 1991.
1Такой перенос называется круговым или циклическим.
