- •Министерство образования Российской Федерации
- •Введение
- •Задание на курсовое проектирование
- •Описание иллюстративного процессора
- •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.3 Код Ассемблера процессора i8086
MODEL small ;Модель памяти
.STACK 100h ;Стек
.DATA ;Сегмент данных
mas dw 13,11,0,4,2; Массив
sum db 3 dup (0)
.CODE ;Сегмент кода
main:
mov ax, @data ;Инициализация среды
mov ds, ax
mov ax, [bx+04h] ;В аккумулятор первый множитель
mov dx, [bx+06h]
mov cx, ax ;Цикл
mov bx, offset sum ;Смещение массива
add:
add [bx], ax ;Результат обратно в память
adc [bx+1],[bx+1] ;Учет возможного переноса
loop add ;Конец цикла
mov ax, ac00h ;Конец программы
int 21h
end main
4.2 Операция №2 Сложение всех элементов массива
4.2.1 Блок-схема
4.2.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 |
|
|
|
|
Операция №2 |
2206 |
66 |
LRI R6 |
Счетчик |
2207 |
05 |
05 |
|
2208 |
3B |
MOV r1 from RB |
Указатель в начало массива |
2209 |
5C |
MOV r2 from RC |
|
220A |
63 |
LRI R3 |
|
220B |
00 |
00 |
|
220C |
64 |
LRI R4 |
|
220D |
00 |
00 |
|
220E |
65 |
LRI R5 |
|
220F |
00 |
00 |
|
2210 |
1F |
MOV r0 from RF |
Начало цикла |
2211 |
85 |
ADD R5 |
Сложение |
2212 |
05 |
MOV r0 to RF |
|
2213 |
F5 |
IHL |
|
2214 |
1F |
MOV r0 from RF |
|
2215 |
84 |
ADC R4 |
Учет переноса |
2216 |
04 |
MOV r0 to R4 |
|
2217 |
F5 |
IHL |
|
2218 |
E0 |
XOR R0 |
|
2219 |
83 |
ADC R3 |
|
221A |
03 |
MOV r0 to R3 |
|
221B |
16 |
MOV r0 from R6 |
|
221C |
AE |
SUB RE |
Уменьшение счетчика |
221D |
16 |
MOV r0 to R6 |
|
221E |
7D |
JAN |
Если Асс не ноль, то |
221F |
22 |
22 |
переход на |
2220 |
10 |
10 |
начало цикла |
2221 |
60 |
LRI R0 |
Определение адреса |
2222 |
0F |
0F |
общей суммы |
2223 |
3B |
MOV r1 from RB |
Указатель в начало массива |
2224 |
5C |
MOV r2 from RC |
|
2225 |
82 |
ADD R2 |
|
2226 |
02 |
MOV r0 to R2 |
|
2227 |
E0 |
XOR R0 |
|
2228 |
91 |
ADC R1 |
|
2229 |
01 |
MOV r0 to R1 |
Запись |
222A |
15 |
MOV r0 from R5 |
суммы |
222B |
0F |
MOV r0 to RF |
в память |
222C |
F5 |
IHL |
|
222D |
14 |
MOV r0 from R4 |
|
222E |
0F |
MOV r0 to RF |
|
222F |
F5 |
IHL |
|
2230 |
13 |
MOV r0 from R3 |
|
2231 |
0F |
MOV r0 to RF |
Конец операции |