Содержание отчета. Лабораторная работа № 4. ИЗУЧЕНИЕ КОМАНД БЕЗУСЛОВНЫХ ПЕРЕХОДОВ




3.4.1 Запустить симулятор и ввести подготовленную программу.

3.4.2 Проанализировать формат команда выборки элемента из массива.

3.4.3 Ввести в память исходные массивы.

3.4.4 Выполнить один цикл программы в пошаговом режиме. Результаты наблюдений заносить в таблицу типа табл. 1.4.

3.4.5 Если программа выполняется правильно установить точку останова в конце цикла. Выполнить программу в автоматическом режиме с точками останова. Состояния регистров записывать в таблицу.

Содержание отчета

В отчете должны быть представлены схема алгоритма, текст программы и результаты их трассировки в форме табл.1.4.

 

а) б)

 

MOV DS,0400 ; определение основного сегмента данных 4050h первый массив
MOV ES,04200 ; сегмент для результатов :  
MOV CX,10 ; число циклов :  
MOV BX,00 ; база первого и третьего массивов :  
MOV BP,10 ; база второго и четвертого массивов    
MOV SI,00 ; начальный индекс    
repeat:   4060h второй
MOV AL, [BX+SI+50] ; чтение элемента первого массива : массив
ADD ES: [0], AL ; накопление первой суммы :  
ADC ES: [1], 00 ; учет переноса :  
MOV AL, [BP+SI+50]      
ADD ES: [2], AL ; накопление второй суммы 4070h третий
ADC ES: [3], 00 ; учет переноса : массив
MOV AX, [BX+SI+70]   :  
ADD ES: [4], AL ; накопление третьей суммы :  
ADC ES: [5], 00 ; учет переноса    
MOV AX, [BP+SI+70]   4080h четвертый
ADD ES: [6], AL ; накопление четвертой суммы : массив
ADC ES: [7], 00 ; учет переноса :  
INC SI ; новый индекс :  
LOOP repeat ; повторять до исчерпанная массивов    
      :
      :
      1-я сумма  
    :  
    :  
      4-я сумма  
       

Рис.3.1. Пример программы обработки массивов(а) заданных картой памяти (б)


Лабораторная работа № 4

ИЗУЧЕНИЕ КОМАНД БЕЗУСЛОВНЫХ ПЕРЕХОДОВ

Краткие сведения

Синтаксис команд безусловного перехода в языке ассемблера микропроцессора 80х86 определяется следующим образом:

<команда безусловного перехода>::= JMP tab <адрес перехода>;

<адрес перехода>::= <имя регистра>|! адрес записан в регистре

<константа>|! прямая адресация

[{<базовый регистр> +},<индексный регистр>{+<смещение>}] |! подобно! адресации данных, см. лаб. № 3

FAR <сегментный адрес>:< смещение в новом сегменте>;! межсегментный прямой

! переход

 

В отличие от команд условных переходов исполнительный адрес перехода дает не смещение, а собственно физический адрес команды, которая будет исполняться.

Безусловные переходы используются в разнообразных ситуациях:

- объединение программных блоков, находящихся в различных частях памяти, например, вследствие раздельного написания разными программистами:

- обход части памяти, занятой «жестко» привязанными фрагментами программы или таблицами

- в случаях, когда некоторый программный блок может выполняться после нескольких других блоков

- реализация ветвлений по нескольким направлениям.

 

Приведем несколько примеров:

 

Пример 1.

Требуется реализовать фрагмент программы, эквивалентный оператору языка PASCAL

IF w THEN e1 ELSE e2;

где w- некоторое условие, e1 и e2 - операторы.

Примерная структура программы для реализации оператора “if - then - else” представлена на рис 4.1.а. Схематическое представление алгоритма представлено на рис 4.1.б. Далее здесь не будем раскрывать способов вычисления условий или реализацию операторов

e1 и e2.

Если условие, проверяемое оператором Jxx (xx - любой из возможных признаков перехода - см. лаб.раб № 1) не выполнено, выполняется последовательность операторов, реализующая блок е1, иначе осуществляется переход на начальный адрес последовательности операторов, реализующей е2. Обратите внимание на то что после выполнения е1 в подобных конструкциях необходимо введение команды безусловного перехода, с тем чтобы обойти фрагмент памяти, занятый блоком е2.

 


а) Б)

 

Jxx adr1; проверка условия

:

:; реализация е1

:

JMP adr2; выход на прдолж.

adr1::

:;реализация е2

:

adr2::; ПРОДОЛЖЕНИЕ

 

Рис 4.1 Ветвление по одному условию; а -примерная структура программы, б- схема алгоритма

 

 

Обычно в подобной программе используют прямое задание адреса перехода.

Косвенная и более сложные способы адресации используется в тех случаях, когда вычисляется сам адрес перехода, в частности если в зависимости от условий управление может передаваться одному из нескольких возможных адресов, такое переключение соответствует, например, оператору CASE языке PASCAL:

 

Сase W of

0: A1;

1: A2;

2: A3;

3: A4;

end;

 

где W - переменная задающая номер варианта;

A1 – А4 - операторы.

Схема алгоритма выполнения оператора Сase и его интерпретация в языке ассемблера семейства 80х86 приведены на рис.4.2.

Все фрагменты программы, обеспечивающие выполнение операторов А1 - А4 начинаются в текущем сегменте, причем их внутрисегментные адреса занесены в таблицу (по два байта на адрес), начинающуюся с относительного адреса (базовый адрес - ВР) равного 1000 в порядке возрастания номеров. Прибавив удвоенное W к базовому адресу таблицы получим адрес адреса команды перехода. Этот переход исполняется последним оператором ассемблерной программы рис.4.2.

 


 

 

  ; к этому моменту W вычислено и ; находится в АХ MOV CX, 02 MOV BP, 1000 ROL AX, CX MOV SI,AX JMP FAR [BP+SI]   org 1000 dw <стартовый адрес А1> dw <стартовый адрес А2> dw <стартовый адрес А3> dw <стартовый адрес А4>

 

Рис. 4.2 Схема алгоритма выполнения оператора Сase и его интерпретация в языке ассемблера

 

Подготовка к работе

4.2.1 Изучить команды безусловных переходов процессоров семейства 80х86.

4.2.2 Приготовить тексты программ и ручную прокрутку исполнения алгоритмов в соответствии с индивидуальными заданиями выбираемыми преподавателем из п.4.3.

4.2.3 Приготовить таблицы для записи результатов выполнения работы.

Индивидуальные задания

Варианты индивидуальных заданий сведены в таблицу 4.1.

В таблице обозначено:

В первой колонке - номер варианта

Во второй колонке - структура программы, где

1. Программа начинается с оператора типа “if-then-else”, за которым следует оператор типа “Сase”.

2. Программа в целом соответствует структуре “Сase”, но в первой ветви оператора выполняется оператор типа “Сase”.

Предполагается что условия переходов вычислены до входа в создаваемый фрагмент программы и размещены в регистрах: AH равно нулю или единице и задает путь решения в операторе типа “if-then-else”, a AL - целым и задает путь исполнения в операторе типа “Сase”.

В колонке “локализация” определено место в памяти, в которое следует поместить фрагменты программы, вычисляющие соответствующие блоки, причем Е1 означает блок, выполняемый если условие анализируемой оператором “if” истинно, Е2 - если ложно, А1- А4 - блоки, исполняемые в операторе “Сase”. Символ “R” в этой колонке означает локализацию в сегменте основной программы, а “O” - в произвольном другом сегменте. Напомним, что Е2 всегда расположено сразу за командой условного перехода.

Колонки “Содержание блоков” определяют выражения, которые должны быть вычислены внутри каждого из блоков в соответствии с нижеприведенным списком. Пропуск в ветви А1 означает, что здесь выполняется оператор типа “if-then-else”, формулы для вычисления в соответствующих ветвях заданы в колонках Е1 и Е2.

 

Таблица 4.1

Структура программы Условие в IF Локализация Содержание блоков
  Е1 А14 Е1 Е2 А1 А2 А3 А4
    AH >= 0 R O            
    AH = 0 O R            
    AH <> 0 O R            
    AH < 0 R O            
    AH =< 0 R O     -      
    AH = 0 R O     -      

 

Список вычисляемых выражений:

 

1. z = r2 + s2; 5. z = r2 - rs + s2;
2. z = (r + s) / (r-s); 6. z = r2/(s+2)
3. z = r/s + s/r +10; 7. z = rs / (r+1)
4. z = r (s+15)  

Результат формируется в BX; исходные аргументы - в памяти.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: