![](/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.2.3 Код Ассемблера процессора i8086
.MODEL small ;Модель памяти
.STACK 100h ;Стек
.DATA ;Сегмент данных
mas dw 13,11,0,4,2; Массив
sum db 3 dup(?)
.CODE ;Сегмент кода
main:
mov ax, @data ;Инициализация среды
mov ds, ax
mov cx, 0005h ;Цикл
mov di, offset mas ;Смещение массива
xor ax, ax
xor dx, dx
add:
mov bx, [di] ;Перемещение в аккумулятор исходного
;значения
add ax, bx ;Сложение
adc dx, 0000h ;Учет переноса
inc di ;Инкремент указателя
loop add ;Конец цикла
mov bx, offset sum ;Смещение суммы
mov [bx], al ;В память младший разряд
mov [bx+1], ah ;В память старший разряд
mov [bx+2], dl ;Перенос в память
mov ax, ac00h ;Конец программы
int 21h
end main
4.3 Операция №3 Переход к подпрограмме с передачей параметров через стек
4.3.1 Блок- схема
4.3.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 |
|
|
|
|
Операция №3 |
2206 |
60 |
LRI R0 |
Определяем адрес первого слагаемого |
2207 |
08 |
08 |
R0=08(5 элемент) |
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 |
02 |
02 |
R0=02(2 элемент) |
2216 |
3B |
MOV r1 from RB |
|
2217 |
5C |
MOV r2 from RC |
|
2218 |
82 |
ADC R2 |
|
2219 |
02 |
MOV r0 to R2 |
|
|
E0 |
XOR R0 |
|
221B |
91 |
ADC R1 |
|
221C |
01 |
MOV r0 to R1 |
|
221D |
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 |
7F |
JMS |
Переход |
2225 |
|
22 |
на подпрограмму |
2226 |
|
2А |
|
2227 |
|
JMP |
Переход на конец |
2228 |
|
22 |
после возврата |
2229 |
|
3D |
|
222A |
60 |
LRI R0 |
Подпрограмма: Определяем адрес суммы |
222B |
0A |
0A |
|
222C |
91 |
ADD R2 |
|
222D |
01 |
MOV r0 to R2 |
|
222E |
E0 |
XOR R0 |
|
222F |
91 |
ADC R1 |
|
2230 |
01 |
MOV r0 to R1 |
|
2231 |
14 |
MOV r0 from R4 |
Сложение младших байтов |
2232 |
86 |
ADD R6 |
|
2233 |
0F |
MOV r0 to RF |
Младший байт в память |
2234 |
F5 |
IHL |
|
2235 |
13 |
MOV r1 from R3 |
Сложение старших байтов |
2236 |
95 |
ADC R5 |
с учетом переноса |
2237 |
0F |
MOV r0 to RF |
Старший байт в память |
2238 |
F5 |
IHL |
|
2239 |
E0 |
XOR R0 |
|
223A |
90 |
ADC R0 |
Перенос в третий байт, если перенос существует |
223B |
0F |
MOV r0 to RF |
|
223С |
F8 |
RET |
Возврат |
223D |
|
|
Конец операции |