- •Лабораторный практикум
- •Тема: Система команд процессоров и методы адресации
- •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)
В) вариант программы с использованием только регистров и стековой памяти
адрес |
код |
мнемокод |
комментарий |
|
|
|
|
00 |
40 |
in 0 |
; ввод C в rA |
01 |
0a |
mov b,a |
; (rA) -> (rB) |
02 |
41 |
in 1 |
; ввод F в rA |
03 |
80 |
mur a,a |
; (rB)*(rA)->(rA,rB) (C*F, результат в паре рег. rA,rB) |
04 |
42 |
in 2 |
; ввод E |
05 |
20 |
push a |
; (rA)(sp) : сохранить E в стеке |
06 |
21 |
push b |
; (rB)(sp) : сохранить результат C*F в стеке |
07 |
43 |
in 3 |
; ввод B |
08 |
20 |
push a |
; (rA)(sp) : сохранить B в стеке |
09 |
44 |
in 4 |
; ввод A |
0a |
0a |
mov b,a |
; (rA) -> (rB) |
0b |
90 01 |
mui a,1 |
; распространение знака |
0d |
9c 81 |
dvm a,1(sp) |
; (rA,rB)/((sp)+1), умножение операнда rA на ;верхушку стека, частное в rB,остаток в rA : (A/B) |
0f |
28 |
pop a |
; (sp)(rA) : B вытолкнуть из стека в rA |
10 |
28 |
pop a |
; (sp)(rA) : C*F вытолкнуть из стека в rA (операнд в регистре rA перезаписывается) |
11 |
6a |
sbr b,a |
; (rB)-(rA) -> (rB): (A/B - C*F) |
12 |
28 |
pop a |
; (sp)(rA) : вытолкнуть из стека E в rA |
13 |
80 |
mur a,a |
; (rB)*(rA) - >(rA,rB) (A/B - C*F)*E |
14 |
09 |
mov a,b |
; переслать результат из rB в rA |
15 |
4d |
out 5 |
; Вывести результат в порт 5 |
16 |
f8 |
stop |
; oстанов |
В результате получили полностью перемещаемую программу, в которой для хранения исходных данных и промежуточных результатов используются только регистры и ячейки стека. Т.е. под данные не задействована ни одна ячейка памяти. Это полностью перемещаемый вариант программы. Проверим ее с теми же исходными данными (А=8, В=2, С=3, F=4, результат Y=4 выведен в порт №5). Очередность ввода данных определена алгоритмом вычисления C-F-E-B-A.
Тема: Команды сравнения и переходов
Для выполнения данного лабораторного практикума необходимо дополнить свои знания изучением следующих команд.
Сравнение регистров: CMR R1,R2. Признак результата устанавливается в соответствии с операцией (R1)-(R2). Содержимое регистров не изменяется.
Сравнение непосредственное: CMI R,I. Признак результата устанавливается в соответствии с операцией (R1)-I. Содержимое регистров не изменяется.
Группа команд переходов: В зависимости от трехразрядного кода условия возможны следующие переходы:
безусловный переход JMP;
переход по минусу JN;
переход по нулю JZ;
переход по плюсу JP;
переход по переполнению JV;
переход по не минусу JNN;
переход по не нулю JNZ;
переход по не плюсу JNP;
Проверяется состояние регистра признаков. Если бит, соответствующий условию перехода, установлен, в программный счетчик заносится адрес перехода.
Переход к подпрограмме: CALL А или CALL D(B). Адрес следующей за CALL команды заносится в вершину стека, в программный счетчик заносится адрес подпрограммы.
Возврат из подпрограммы: RET. Из вершины стека извлекается адрес возврата и записывается в программный счетчик
Организация цикла: LOOP R,A или LOOP R,D(B). Из содержимого регистра R вычитается 1. Если результат операции не равен нулю, осуществляется переход по адресу А или (B)+D. Если результат операции равен нулю, выполняется команда, следующая за командой организации цикла.
Группа команд переходов может быть условно поделена на несколько подгрупп :
•подгруппа команд безусловных переходов;
•подгруппа команд условных переходов;
•подгруппа команд организации циклов;
•подгруппа команд организации подпрограмм;
•подгруппа команд работы с прерываниями
Подгруппа команд безусловных переходов в простейшем случае может состоять из единственной команды безусловного перехода, обеспечивающей нарушение естественного хода выполнения программы. Команда является однооперандной, в качестве операнда тем или иным способом указывается адрес перехода. Выполнение команды с точки зрения процессора сводится к записи операнда команды в программный счетчик (PC).
Подгруппа команд условных переходов обеспечивает ветвления в программе в зависимости от состояния регистра флагов. Выполнение процессором команд ветвления заключается в следующем. После дешифровки команды проверяется установка соответствующих битов в регистре признаков, например, если в регистр команд процессора поступает команда "переход по отрицательному результату", то проверяется состояние флага N (флаг отрицательного результата). Если соответствующий бит в регистре флагов установлен в единицу, то осуществляется переход по заданному операндом команды адресу, т.е. выбирается адрес, закодированный в поле операндов в команде, и помещается в программный счетчик. Если соответствующий бит (ы) в регистре флагов не установлен (ы), то естественный ход программы не нарушается, PC изменяется обычным образом и указывает на команду, следующую за командой перехода.
Рассмотрим применение команд сравнений и переходов на примере вычисления выражения:
0 ,при X < 0
Y:= X ,при 0 < X< 1
X4 ,при X > 1
адрес |
код |
мнемокод |
комментарий |
|
|
|
|
00 |
40 |
in 0 |
;ввод X |
01 |
b0 00 |
cmi a,0 |
;сравнить (rA) c 0 (установить регистр флагов) |
03 |
b9 0f |
jn lab1 |
;переход на метку lab1:, если установлен признак N ;(X<0), если нет, то выполнять следующую команду |
05 |
b0 01 |
cmi a,1 |
;сравнить (rA) c 1 (установить рег.флагов по (rA)-1) |
07 |
bf 11 |
jnp lab2 |
;переход на метку lab2:, если установлен признак P, ;т.е. X<=1, если нет, то выполнять следующую ;команду |
09 |
38 |
xchg |
; (rA) (rB) обмен содержимого rA и rB |
0a |
81 |
mur a,b |
; (rB)*(rB) -> (rA,rB) : X*X (умножение содержимо-;го регистра rA на операнд регистра rB соответствует ;возведению в квадрат операнда регистра rB так как ;при прозведении целая часть операнда rA находится ;во втором слове, т.е. в rB) |
0b |
81 |
mur a,b |
; (rB)*(rB) -> (rA,rB) : (X*X)*(X*X) |
0c |
38 |
xchg |
;(rA)(rB) : теперь результат в (rA) |
0d |
b8 11 |
jmp lab2 |
;безусловный переход на вывод результата |
0f |
30 00 |
lab1: mvi a,0 |
;X=0 |
11 |
49 |
lab2: out 1 |
; вывод результата в порт №1 из rA |
12 |
f8 |
stop |
|
В данной программе использованы команды сравнения CMI - сравнить содержимое регистра и непосредственный операнд, а также команды переходов: JN - переход по минусу; JNP - переход по неположительному результату; JMP - безусловный переход.
Проверка для Х=2, Y=10h или 16d.
Теперь рассмотрим организацию циклов в программах на машинном уровне с использованием различных способов, а именно: по схеме цикла с предусловием (цикл, в котором условие находится перед телом цикла, а сам цикл выполняется до тех пор, пока условие не станет ложным) и по схеме цикла с постусловием (условие цикла располагается после тела цикла). Причем организацию цикла по второй схеме рассмотрим в двух вариантах: реализация с помощью команд сравнений и переходов и с помощью команды организации цикла со счетчиком.