- •Лабораторный практикум
- •Тема: Система команд процессоров и методы адресации
- •A) Абсолютная адресация
- •Б) относительная адресация
- •В) вариант программы с использованием только регистров и стековой памяти
- •Тема: Команды сравнения и переходов
- •Первый вариант:
- •Второй вариант:
- •Третий вариант:
- •Варианты заданий к лабораторной работе
- •Тема: Организация подпрограмм и внутренние механизмы передачи параметров
- •А) Передача параметров через регистры
- •B) Пример передачи параметров через общую область памяти.
- •C) Передача параметров через стек.
- •D) Передача параметров через таблицу адресов
- •Варианты заданий для лабораторной работы
- •Тема: Организация прерываний
- •Тема: Введение в архитектуру ibm pc
- •Тема: Трансляция, компоновка и отладка программ
- •Тема: Режимы адресации
- •Тема: Программирование ветвлений и циклов
- •Тема: Арифметические операции целочисленной обработки информации
- •Тема: Программирование операций ввода-вывода
- •Приложение 1 Функциональная модель микроЭвм-2
- •Приложение 2.
- •2.1.1. Представление чисел и перевод из одного счисления в другое.
- •2.1.2. Сложение положительных чисел
- •2.1.3. Сложение и вычитание чисел со знаком
- •2.2.1. Преобразование двоичных чисел в десятичные
- •2.2.2. Преобразование десятичных чисел в двоичные
- •2.3. Двоично-десятичная система счисления
- •2.4. Восьмеричная система счисления
- •2.5. Шестнадцатеричная система счисления
- •Приложение 3 Программная модель микропроцессора Intel (Pentium III)
- •Приложение 4 Система команд микропроцессора Intel 8086
- •Приложение 5 Коды ascii (диапазон 0-127)
Варианты заданий для лабораторной работы
Варианты заданий для лабораторной работы выбираются из таблицы 3.
Таблица 3
-
№ п/п
задание
1
Y= min(A,B,C)*min(F,D,E) + min(K,N,L);
2
Y= min(B2+K2,A), где B=min(C,D), K=min(E2/2,F);
3
Y= min(A,B,C)-max(F,D,E)/ min(K,N,L);
4
Y= max(A,B,C)-min(F,D,E)/ min(K,N,L);
5
Y= P(X2) - P(X-1) +P(X), где P(Z)=azn-an+1;
6
Y= AZN+BQP+CO(N/2);
7
Y=XP(A,D) + ZP(B,E) /GP(C,K) , где P(S,K)=S2/K + D - 1;
8
Y= X(AB/C) - P(D/K);
9
Y= (A+B)ZN/DKP+CS(N/2);
10
11
12
13
Y= F(1) - F(T) +F2(S-T) - F3(1) , где F(X)=ax2+bx+c;
14
Y= F(A,B,C) + F(D,E,K), где F(X,N,M)= XN – M2;
15
Y= min(F(A,B,C),F(D,E,K) + max(F(D,E,K),F(L,Q,G)), где F(X,N,M)= XN – M2;
16
Y=F(S,T) + max(F(F(S+T,S*T),S*T2), F2(S-T,S/T)), где F(A,B)=(A2+1)/B
17
Y= F(A,B,C)/ F(D,E,K) + F(D,E,K), где F(X,N,M)= XN – M2;
18
Y=A!+(B-C)!/F!;
19
Y= F(1,1)+F(S,T) + max(F(F(S+T,S*T),S*T2), F2(S-T,S/T)), где F(A,B)=(A2+B)/A
20
Y= F(1)* F(T) +F2(S-T)/ F3(1) , где F(X)=ax2+bx+c;
21
Y= F(A,B,C)* F(L,J,Q) + F(D,E,K), где F(X,N,M)= XN – M2;
22
Y= F(S,T) + max(F(S-T,S*T),F2(S-T,S+T)) +F(1,1), где
F(A,B)= (B2+1)/A;
23
Y= min(F(1),..., F(n))N + min(C(1),..., C(k))K
24
Y= (max(A,A+B) * max(A,B+C))/(1+ max(A+B*C,D));
25
Y= F(1) - F(S+T) +F2(S-T) - F3(1) , где F(X)=ax2+bx+c;
Тема: Организация прерываний
Цель лабораторной работы:
Данная лабораторная работа посвящена знакомству с аппаратными и программными прерываниями и механизмами их обработки.
Задание к лабораторной работе:
- изучить соответствующий теоретический материал, используя конспекты и литературу;
- на примере функциональной модели ЭВМ-2 ознакомиться с командами организации и обработки аппаратных и программных прерываний;
- для заданного варианта задания реализовать программу с использованием прерываний; программа должна обеспечивать ввод исходных данных и вывод результатов через программные прерывания, а так же модификацию некоторых полей программы через аппаратные прерывания;
- оформить отчет по лабораторной работе.
Пример реализации программы
Ниже рассматривается уже известная программа вычисления суммы степеней, к которой добавлен небольшой отладчик, работающий в режиме прерываний и позволяющий в любой момент времени в ходе выполнения программы изменить содержимое регистров модели и любой ячейки памяти, после чего продолжить выполнение программы с точки прерывания.
адрес |
код |
мнемокод |
комментарий |
|
|
|
|
00 |
|
.org 08 |
; вектоp пpеpывания для выхода в отладчик |
08 |
b0 |
.db 0b0 |
|
09 |
|
.org 10 |
; начало программы с адреса 10h |
10 |
40 |
in 0 |
; ввод z |
11 |
0a |
mov b,a |
; |
12 |
41 |
in 1 |
; ввод n |
13 |
19 39 |
stor b,z |
; запомнить z |
15 |
31 01 |
mvi b,1 |
; |
17 |
19 3b |
stor b,I |
; i:=1 |
19 |
31 00 |
mvi b,0 |
; |
1b |
19 3a |
stor b,Y |
; Y:=0 |
1d |
20 |
cycl: push a |
; сохранить счетчик цикла |
1e |
20 |
push a |
; зарезервировать ячейку стека для zi |
1f |
10 3b |
load a,I |
|
21 |
20 |
push a |
; записать в стек текущее значение I |
22 |
10 39 |
load a,z |
|
24 |
20 |
push a |
; записать в стек значение z |
25 |
c0 3c |
call power |
; вызов п/п вычисления степени |
27 |
28 |
pop a |
; извлечь z из стека |
28 |
28 |
pop a |
; извлечь i из стека |
29 |
29 |
pop b |
; извлечь zi из стека и записать в rB |
2a |
59 3a |
adm b,Y |
; Y:=Y+ZI |
2c |
19 3a |
stor b,Y |
; запомнить новое значение Y |
2e |
60 01 |
adi a,1 |
; I:=I+1; |
30 |
18 3b |
stor a,I |
; запомнить новое значение I |
32 |
28 |
pop a |
; восстановить счетчик цикла из стека |
33 |
e0 1d |
loop a,cycl |
; замкнуть цикл |
35 |
10 3a |
load a,Y |
; в rA - Y |
37 |
4a |
out 2 |
; вывести результат в канал 2 |
38 |
f8 |
stop |
|
39 |
00 |
Z: .ds 1 |
|
3a |
00 |
Y: .ds 1 |
|
3b |
00 |
I: .ds 1 |
|
3c |
31 01 |
power: mvi b,1 |
; p:=1 - результат изначально равен 1 |
3e |
14 83 |
load a,3(sp) |
; в rA - показатель степени- счетчик цикла |
40 |
20 |
intcyc: push a |
; сохранить счетчик цикла |
41 |
8c 83 |
mum a,3(sp) |
; p:=p*z |
43 |
28 |
pop a |
; восстановить из стека счетчик цикла |
44 |
e0 40 |
loop a,intcyc |
; замкнуть цикл |
46 |
1d 84 |
stor b,4(sp) |
; запомнить y:=zi |
48 |
c8 |
ret |
; возврат в вызывающую программу |
; Пример очень маленкого отладчика программ для модели ЭВМ 2.
; обеспечивает корректировку содержимого ячеек памяти и регистров
; функция 0 - завершение работы;
; функция 1 - корректировка регистров
; функция 2 - корректировка содержимого памяти
; отладчик получает управление через внешнее прерывание 0
; (вектор прерывания - 08)
b0 |
|
.org 0b0 |
; отладчик размещается с адреса B0 |
b0 |
f0 |
di |
; запpетить пpеpывания |
b1 |
20 |
push a |
; (ra)¯(sp) сохранить rA в стеке |
b2 |
21 |
push b |
; (rB)¯(sp) сохранить rB в стеке |
b3 |
40 |
fun: in 0 |
; ввести номер функции |
b4 |
b0 00 |
cmi a,00 |
; номер функции 0 ? |
b6 |
ba c2 |
jz exit |
; на завершение работы отладчика |
b8 |
b0 01 |
cmi a,01 |
; номер функции 1 ? |
ba |
ba c6 |
jz reg |
; на модификацию регистров |
bc |
b0 02 |
cmi a,02 |
; номер функции 2 ? |
be |
ba d4 |
jz mem |
; на модификацию ячеек памяти |
c0 |
b8 b3 |
jmp fun |
; иначе повтор ввода номера функции |
c2 |
29 |
exit: pop b |
; (sp)(ra) Восстановить rA |
c3 |
28 |
pop a |
; (sp)(rB) восстановить rB |
c4 |
e8 |
ei |
; разрешить прерывания |
c5 |
d8 |
rin |
; возврат из прерывания |
; модификация содержимого регистров программы
c6 |
14 82 |
reg: load a,02(sp) |
; (rA) - содержимое rA из стека |
c8 |
48 |
out 0 |
; (rA) -> port 0 |
c9 |
14 81 |
load a,01(sp) |
; (rA) - содержимое rB из стека |
cb |
49 |
out 1 |
; (rA) -> port 1 |
cc |
40 |
in 0 |
; ввести новое содержимое (rA) |
cd |
1c 82 |
stor a,02(sp) |
; запомнить новое содержимое rA |
cf |
41 |
in 1 |
; ввести новое содержимое rB |
d0 |
1c 81 |
stor a,01(sp) |
; запомнить новое содержимое rB |
d2 |
ba b3 |
jz fun |
; перейти на ввод номера функции |
; модификация содержимого ячеек памяти программы
d4 |
40 |
mem: in 0 |
; ввод ядреса модифицируемой ячейки |
d5 |
0a |
mov b,a |
; |
d6 |
14 40 |
load a,00(b) |
; (rA) <- содержимое ячейки с адр в (rB) |
d8 |
48 |
out 0 |
; вывод содержимого яч. памяти в канал 0 |
d9 |
40 |
in 0 |
; ввод обновленного содержимого ячейки |
da |
1c 40 |
stor a,00(b) |
; и запись по относительному адресу |
dc |
ba b3 |
jz fun |
; переход на ввод фукции
|
Варианты заданий к лабораторной работе
Варианты заданий к лабораторной работе выбираются из таблицы 3.