![](/user_photo/1334_ivfwg.png)
- •Министерство образования Российской Федерации
- •Введение
- •Задание на курсовое проектирование
- •Описание иллюстративного процессора
- •4. Описание операций
- •4.1 Операция №1 Умножение двух элементов массива
- •4.1.1 Блок-схема
- •4.1.2 Псевдокод гипотетического процессора
- •4.1.3 Код Ассемблера процессора i8086
- •4.2 Операция №2 Сложение всех элементов массива
- •4.2.1 Блок-схема
- •4.2.2 Псевдокод гипотетического процессора
- •4.2.3 Код Ассемблера процессора i8086
- •4.3 Операция №3 Переход к подпрограмме с передачей параметров через стек
- •4.3.1 Блок- схема
- •4.3.2 Псевдокод гипотетического процессора
- •4.3.3 Код Ассемблера процессора i8086
- •5. Карты инфопотоков для операции №2
- •6. Временная диаграмма обменов для операции №2
- •7. Заключение
- •8. Библиографический список
4. Описание операций
В начале программы определяем некоторые константы. К ним относятся:
1) Постоянная единица в регистре RE служит для упрощения увеличения или уменьшения счетчиков.
2) В паре регистров RB:RC хранится адрес начала массива, будем считать, что данные в оперативной памяти располагаются сразу после кода программы.
Данные в массиве двухбайтовые, целые и положительные числа.
Операция №1, умножение двух элементов массива.
Из-за отсутствия у теоретического процессора команды умножения будем производить умножение в цикле. Счетчик цикла равен первому множителю, при каждом шаге цикла прибавляем к сумме второй множитель. Регистры R3:R4 используются для хранения первого множителя, регистры R5:R6 для хранения второго множителя. Произведение записывается в оперативную память после массива. Блок-схема и коды приведены на странице 10
Операция №2, сложение всех элементов массива.
Результаты суммирования будут находится в тройке регистров R3:R4:R5, в регистр R6 используется как счетчик. Результат записывается в память после массива. Блок-схема и коды приведены на странице 14
Операция №3, Переход к подпрограмме с передачей параметров через стек.
Как пример используем подпрограмму сложения двух элементов массива.
Регистры R3:R4 используются для хранения первого слагаемого, регистры R5:R6 для хранения второго слагаемого. Результат сложения записывается в оперативную память после массива.
Блок-схема и коды приведены на странице 17
4.1 Операция №1 Умножение двух элементов массива
4.1.1 Блок-схема
4.1.2 Псевдокод гипотетического процессора
Адрес ячейки |
Машинный код |
Псевдокод |
Комментарии |
|
|
|
Инициализация переменных |
2200 |
6E |
LRI RE |
В RE постоянную единицу |
2201 |
01 |
01 |
|
2202 |
6B |
LRI RB |
|
2203 |
22 |
22 |
|
2204 |
6C |
LRI RC |
RB:RC адрес начала массива |
2205 |
A4 |
A4 |
|
|
|
|
Операция №1 |
2206 |
60 |
LRI R0 |
Определяем адрес первого множителя |
2207 |
04 |
04 |
R0=04(3 элемент) |
2208 |
3B |
MOV r1 from RB |
|
2209 |
5C |
MOV r2 from RC |
|
220A |
82 |
ADD R2 |
|
220B |
02 |
MOV r0 to R2 |
|
220C |
E0 |
XOR R0 |
|
220D |
91 |
ADC R1 |
|
220E |
01 |
MOV r0 to R1 |
|
220F |
1F |
MOV r0 from RF |
R3:R4 первый элемент |
2210 |
03 |
MOV r0 to R3 |
|
2211 |
F5 |
IHL |
|
2212 |
1F |
MOV r0 from RF |
|
2213 |
04 |
MOV r0 to R4 |
|
2214 |
60 |
LRI R0 |
Определяем адрес второго множителя |
2215 |
06 |
06 |
R0=06(4 элемент) |
2216 |
3B |
MOV r1 from RB |
|
2217 |
5C |
MOV r2 from RC |
|
2218 |
82 |
ADC R2 |
|
2219 |
02 |
MOV r0 to R2 |
|
221A |
E0 |
XOR R0 |
|
221B |
91 |
ADC R1 |
|
221C |
01 |
MOV r0 to R1 |
|
|
1F |
MOV r0 from RF |
R5:R6 второй элемент |
221E |
05 |
MOV r0 to R5 |
|
221F |
F5 |
IHL |
|
2220 |
1F |
MOV r0 from RF |
|
2221 |
06 |
MOV r0 to R6 |
|
2222 |
3B |
MOV r1 from RB |
Указатель в начало массива |
2223 |
5C |
MOV r2 from RC |
|
2224 |
60 |
LRI R0 |
Определяем адрес произведения |
2225 |
0A |
0A |
|
2226 |
91 |
ADD R4 |
|
2227 |
01 |
MOV r0 to R4 |
|
2228 |
E0 |
XOR R0 |
|
2229 |
91 |
ADC R3 |
|
222A |
01 |
MOV r0 to R3 |
В аккумуляторе находится значение R3:R4 |
222B |
1F |
MOV r0 from RF |
Начало цикла
|
222C |
86 |
ADD R6 |
Сложить аккумулятор с R6 |
222D |
0F |
MOV r0 to RF |
Обратно в память |
222E |
F5 |
IHL |
Увеличение указателя |
222F |
1F |
MOV r0 from RF |
|
2230 |
95 |
ADC R5 |
Сложить аккумулятор с R5 и переносом |
2231 |
0F |
MOV r0 to RF |
|
2232 |
F5 |
IHL |
Увеличение указателя |
2233 |
15 |
MOV r0 from R5 |
|
2234 |
AE |
SUB RE |
Вычесть из аккумулятора RE |
2235 |
05 |
MOV r0 to R5 |
|
2236 |
7D |
JAN |
Если Асс не ноль то на |
2237 |
22 |
22 |
начало цикла |
2238 |
2В |
2В |
|