- •Лабораторный практикум
- •Тема: Система команд процессоров и методы адресации
- •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)
A) Абсолютная адресация
адрес |
код |
мнемокод |
комментарий ; ##### Y:=(A/B - C*F)*E ##### |
00 |
40 |
in 0 |
; ввод, данные с клавиатуры поступают в порт 0 и ;запиcываются в региср rA |
01 |
18 24 |
stor a,A |
; запомнить содержимое rA по символич-му адресу A |
03 |
41 |
in 1 |
; ввод В, данные с клавиатуры поступают в порт 1 и ;запиcываются в региср rA (предыдущее содержание ;регистра rA перезаписывается на новое). |
04 |
18 25 |
stor a,B |
; запомнить содержимое rA по символическому адресу B |
06 |
42 |
in 2 |
; ввод С в порт 2 |
07 |
18 26 |
stor a,C |
; запомнить операнд С по символическому адресу C |
09 |
43 |
in 3 |
; ввод F в порт 3 |
0a |
18 27 |
stor a,F |
; запомнить операнд F по символическому адресу F |
0c |
44 |
in 4 |
; ввод E в порт 4 |
0d |
18 28 |
stor a,E |
; Запомнить операнд E по символическому адресу E |
0f |
11 24 |
load b,A |
; загрузить операнд A в rB |
11 |
90 01 |
mui A,1 |
; расширить знак (преобразовать слово в двойное слово) |
13 |
98 25 |
dvm a,B |
; (rA,rB)/B-> частное в rB, остаток в rA |
15 |
19 29 |
stor b,tmp |
; запомнить результат деления по адресу tmp (Y:=A/B) |
17 |
11 26 |
load b,C |
; загрузить операнд C в rB |
19 |
88 27 |
mum a,F |
;умножить (rB)*(F)-> (rA,rB), результат помещается в ;rB <-(С*F) |
1b |
10 29 |
load a,tmp |
; в ra загрузить операнд tmp (Y:=A/B) |
1d |
69 |
sbr a,b |
; вычесть из (rA) (rB) (Y= A/B - С*F) |
1e |
0a |
mov b,a |
; скопировать результат в rB |
1f |
88 28 |
mum a,E |
; (rB)*(E) -> (rA,rB) умножение производится на ;операнд регистра ra так как операнд Y помещается в ;два регистра rA и rB, а при умножении мы всегда ;должны указывать первым регистр rA |
21 |
09 |
mov a,b |
; скопировать результат из rB в rA так как вывод в порт ;можно сделать только из регистра rA |
22 |
4d |
out 5 |
; вывести результат в 5 порт |
23 |
f8 |
stop |
; стоп |
24 |
00 |
A: .ds 1 |
; ячейка памяти для A (резервирование ячеек памяти ;обязательно для размещения аргументов) |
25 |
00 |
B: .ds 1 |
; --//-- B |
26 |
00 |
C: .ds 1 |
; --//-- C |
27 |
00 |
F: .ds 1 |
; --//-- F |
28 |
00 |
E: .ds 1 |
; --//-- E |
29 |
00 |
tmp: .ds 1 |
; --//-- tmp |
При написании программы необходимо обязательно соблюдать синтаксис, иначе программа не будет работать! Коды и адреса автоматически указываются при компилировании программы, для этого необходимо программу загрузить в ASSEMBLP. При успешной компиляции формируется файл с расширением .mod. Если такой файл не сформирован, необходимо открыть файл с расширением .LST и проанализировать ошибки. Для проверки работоспособности программы ее нужно загрузить в модель ALTMAINF.
(В примере дано А=8, В=2, С=3, F=4, Y=4 результат выведен в порт №5) В программе в 12 командах используется абсолютная адресация к операндам в памяти. Программа является неперемещаемой, т.е. при переносе программы в другие адреса памяти для восстановления ее работоспособности необходимо скорректировать коды 12 команд. Для программы, предназначенной для решения какой-либо реальной задачи, количество таких команд, естественно, будет значительно выше, со всеми вытекающими последствиями. Попробуем сократить число команд с абсолютными адресами и построить перемещаемую программу для вычисления того же выражения, используя относительную адресацию. Поскольку в модели ЭВМ-2 нет команд загрузки регистров содержимым счетчика адреса команд, то, по крайней мере одна команда (первая) будет содержать абсолютный адрес - адрес начала программы, относительно которого будут адресоваться все другие команды программы.