Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВМСС_лабораторные.doc
Скачиваний:
80
Добавлен:
07.06.2015
Размер:
4.19 Mб
Скачать
          1. Контрольные вопросы

  1. Назовите основные инструкции сравнения.

  2. Назовите способы адресации, используемые в командах вашей программы.

  3. Назовите количество тактов, за которые выполняются инструкции сравнения.

  4. Можно ли использовать цикл REPEAT, если в теле цикла несколько команд?

  5. Можно ли использовать цикл DO, если в теле цикла одна команда?

  6. Можно ли использовать циклы DOиREPEAT, если заранее неизвестно количество итераций цикла?

  1. Лабораторная работа №5. Работа со стеком.

          1. Цель работы

Изучить и приобрести практические навыки со стеком.

          1. Содержание работы

Стеком называют область программы для временного хранения произвольных данных. Данные можно сохранять и в сегменте данных, однако в этом случае для каждого сохраняемого на время данного надо заводить отдельную именованную ячейку памяти, что увеличивает размер программы и количество используемых имен. Удобство стека заключается в том, что его область используется многократно. Стек традиционно используется, например, для сохранения содержимого регистров, используемых программой, перед вызовом подпрограммы, которая, в свою очередь, будет использовать эти же регистры процессора. Исходное содержимое регистров извлекается из стека после возврата из подпрограммы. Отличительной особенностью стека является своеобразный порядок выборки содержащихся в нем данных: в любой момент времени в стеке доступен только верхний элемент, т.е. элемент, загруженный в стек последним. Выгрузка из стека верхнего элемента делает доступным следующий элемент.

Элементы стека располагаются в области памяти, отведенной под стек, начиная со дна стека (т.е. с его максимального адреса) по последовательно уменьшающимся адресам. Адрес верхнего, доступного элемента хранится в регистре-указателе стека.

К основным операциям работы со стеком относятся.

  • PUSH - помещает на вершину стека (TOS) значение операнда. Предыдущее значение, находящееся на вершине стека перемещается на один уровень вниз.

  • POP - извлекает значение из вершины стека в операнд, перемещает все содержимое стека на один уровень вверх.

Синтаксис написания арифметических инструкций приведен в приложении А, таблица 8.

    1. 5.1 Помещение в стек

          1. Примеры помещения в стек

PUSHW1;

Помещает в вершину стека значение регистра W1 (16-ти битный режим).

PUSH.DW1;

Помещает в вершину стека значения регистров W1:W2 (32-х битный режим).

    1. 5.2 Извлечение из стека

          1. Примеры извлечения из стека

POPW1;

Извлекает значение из вершины стека в регистр W1

POP.DW1;

Извлекает значения из вершины стека в регистры W1:W2 (двойное извлечение).

Пример программы, реализующий арифметическую функцию: e = (a + b) * (c-1) / (d+2) с ограничением числа используемых регистров.

.include "p33FJ256GP710.inc"

.equ a, 0x800

.equ b, 0x802

.equ c, 0x804

.equ d, 0x806

.equ e, 0x808

.text

.global __reset

__reset:

; - Инициализация переменных

mov #1, W2

mov W2, a ; a:=1

mov #2, W2

mov W2, b ; b:=2

mov #3, W2

mov W2, c ; c:=3

mov #4, W2

mov W2, d ; d:=4

; - Реализация арифметической функции

mov a, W2 ; W2:=a

mov b, W4 ; W4:=b

add W2, W4, W2 ; W2:=W2+W4

push W2 ; поместить в вершину стека значение W2

mov c, W2 ; W2:=c

mov #1, W4 ; W4:=1

sub W2, W4, W2 ; W2:=W2-W4

pop W4 ; извлечь из вершины стека значение в W4

mul.ss W2, W4, W2 ; W2:W3=W2*W4

push.d W2 ; поместить в вершину стека значение W2:W3

mov d, W2 ; W2:=d

mov #2, W4 ; W4:=2

add W2, W4, W4 ; W4:=W2+W4

pop.d W2 ; извлечь из стека значение в W2:W3

repeat #17

div.s W2, W4 ; W0:W1=W2/W4

mov W0, e ; e:=W0

nop

.end

В рассмотренной программе операции производятся с использованием двух регистров W2 иW4. Использование дополнительных регистровW0 иW3 обусловлено спецификой командMUL.SSиDIV.S.