Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


ЛАБОРАТОРНАЯ РАБОТА 3 - Передача управления в программе



 

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

 

Методические рекомендации по выполнению лабораторной работы

Рано или поздно последовательное выполнение любой программы прекращается и появляются точки, где необходимо решить куда и как передать управление. Иногда такая необходимость связана с каким-нибудь условием, а иногда бывает просто необходимо “уйти” в другое место. В языке ассемблера место, куда необходимо передать управление, определяется меткой. Метка – это символическое имя, обозначающее определенную ячейку памяти, предназначенное для использования в качестве операнда в командах передачи управления

Команды передачи управления делятся на группы:

- команды организации цикла

- команды безусловной передачи управления;

- команды условной передачи управления.

Команды организации цикла

LOOP – команда организации цикла со счетчиком в регистре CX.

LOOP метка

Количество повторений цикла задается значением в регистре СХ перед входом в последовательность команд, составляющих тело цикла

Алгоритм работы: выполняется декремент содержимого регистра CX, затем анализ регистра CX. Если CX=0, то управление передается следующей за LOOP команде, а если CX > 0, то – метке, которая указана в качестве операнда LOOP.

Выполнение команды не влияет на состояние флагов.

Команды безусловной передачи управления:

1. Команда безусловного перехода - JMP метка;

2. Вызов процедуры и возврата из процедуры - CALL имя_процедуры и RET;

3. Вызов программных прерываний - INT номер_прерывания, возврат из программных прерываний – IRET и команда INTO - прерывание, если переполнение.

Команды условной передачи управления:

1. Команды перехода по результату команды сравнения: CMP операнд1, операнд2

Алгоритм работы: выполняется вычитание (операнд1- операнд2), затем в зависимости от результата выставляются флаги, операнд1 и операнд2 не изменяются (то есть результат не запоминается).

  JE операнд1 = операнд2 JNE операнд1 < > операнд2
Без знака Со знаком Критерий условного перехода  
JB/JNAE JL/JNGE операнд1 < операнд2  
JBE/JNA JLE/JNG операнд1 < = операнд2  
JA/JNBE JG/JNLE операнд1 > операнд2  
JAE/JNB JGE/JNL операнд1 => операнд2  
               

 

2. Команды перехода по состоянию определенного флага

JC (JNC) метка_перехода
JP (JNP) метка_перехода
JZ (JNZ) метка_перехода
JS (JNS) метка_перехода
JO (JNO) метка_перехода

3. Команды перехода по содержимому регистра СХ

JCXZ метка_перехода

Порядок выполнения работы

Задана программа пересылки массива байтов А на место массива байтов В.

sseg segment  
  db 128 dup(? )
sseg ends  
dseg segment  
A db 1, 2, 3, 4, 5
B db 5 dup(? )
dseg ends  
cseg segment  
  assume ss: sseg, cs: cseg, ds: dseg
start:    
  mov ax, dseg
  mov ds, ax
  mov si, 0
  mov cx, 5
M1:    
  mov al, A[si]
  mov B[si], al
  inc si
  loop M1
     
  mov cx, 5
  mov si, 0
M2:    
    mov ah, 2h
    mov dl, B[si]
    int 21h
    inc si
    loop M2
    mov ah, 4ch
    int 21h
  cseg ends  
    end start
           

 

Задания:

 

1. Перед выводом массива В на экран вывести текстовую строку: ”Это второй массив В”, т.е. на экране должно быть:

Это второй массив В 1 2 3 4 5

Элементы массива вывести через пробелы (или запятую).

2. Измените количество элементов в массивах, введите необходимые изменения в программу.

1) Измените данную программу, организовав в теле программы лишь один цикл.

2) Изменить данную программу в программу для пересылки массива слов.

3) Напишите программу для преобразования массива байтов в массив слов.

 

; сегмент данных  
A db 1, 2, 3, 4, 5, 6
B dw 3 dup(? )
; сегмент кодов  
(ваша программа).

 

4) Разработать программу сложения двух массивов байтов A и B, сумму сохранить в массиве C, взяв за основу рассмотренные примеры.

; сегмент данных  
A db 1, 2, 3, 4
B db 5, 6, 3, 1
C db 4 dup(? )

 

3. Заданы два массива байтов А и В, в третий массив нужно выбрать максимальные элементы, сравнивая поэлементно. Напишите программу, любой ваш вариант принимается.

; в сегменте данных  
A DB 7, 5, 9, 3
B DB 4, 8, 2, 6
C DB 4 dup(? )

 

После выполнения вашей программы на экране мы должны получить следующий результат:

Массив С 7 8 9 6

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

Массив С 4 5 2 3

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

; в сегменте данных  
A DB 9, 8, 7, 6, 5, 4

В результате будем иметь:

Максимальный элемент массива А – 9.

А результат этот получился после запуска вашего EXE-файла.

6. Измените предыдущую программу для поиска минимального элемента в заданном массиве байтов.

И, естественно, результат будет другой:

Минимальный элемент массива А – 4.

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

7. Задан массив А.

 

A DB 1, 1, -2, -4, 6
  DB 2, -5, 2, -2, 5
  DB 3, -3, -3, 4, 4
  DB 5, -5, 6, -7, 7

 

В данной области памяти требуется заменить все отрицательные элементы массива на нулевые байты, т.е.

1 1 0 0 6

2 0 2 0 5

3 0 0 4 4

5 0 6 0 7

Напишите программу и результат не заставит себя долго ждать.

 

Основная литература – 1[], 2[], 3[], 4 [].

 

Контрольные вопросы:

 

 

ЛАБОРАТОРНАЯ РАБОТА 4 – Разработка программ с использованием различных групп команд процессора

 

Цель работы: изучить организацию работы с отдельными битами, изучить общие свойства цепочечных команд, команд двоично-десятичной арифметики

Методические рекомендации по выполнению лабораторной работы

Команды сложения

ADD - команда сложения. Формат команды: ADD приемник, источник.

ADС - команда сложения с переносом. Формат команды: ADС приемник, источник.

При исполнении команды сложения ADD результат заносится в операнд источник. При исполнении команды ADC результат также заносится в операнд источник, но при сложении используется флаг переноса CF.

Состояние флагов после выполнения команд ADD и ADC: могут измениться значения CF, PF, AF, ZF, SF, ОF.

ААА - ASCII коррекция результата сложения. Команда ААА корректирует результат сложения для представления в кодах ASCII. Она преобразует содержимое регистра AL в правильную неупакованную десятичную цифру.

Команда используется в следующем контексте:

add AL, BL

aaa

DAA - десятичная коррекция результата сложения Команда DAA корректирует сложение для представления в десятичной форме. Она преобразует содержимое регистра AL в две правильные упакованные десятичные цифры. Используется в контексте.

add AL, BL

daa

Команды AAA и DAA не требуют наличия операндов, т.к. предполагают, что корректируемое значение находится в регистре AL.

INC – увеличение операнда на 1. Формат команды: INC операнд

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

Состояние флагов после выполнения команды: меняются PF, AF, ZF, SF, ОF.

Команды вычитания.

SUB - команда вычитания. Формат команды: SUB приемник, источник

SBB - команда вычесть с заемом. Формат команды: SBB приемник, источник

Использование команд SUB и SBB аналогичны командам сложения. Воздействуют на те же 6 флагов.

AAS - ASCII коррекция результата вычитания. Команда AASкорректирует результат вычитания для представления в кодах ASCII.

DAS - десятичнаякоррекция результата вычитания. Команда DASкорректирует результат вычитания для представления в десятичной форме.

Команды AAS и DAS аналогичны командам AAA и DAA. Используются в контексте:

sub AL, BL или sub AL, BL

aas das

DEC – уменьшение опенанда на 1. Формат команды: DEC операнд

Команда DEC вычитает единицу из содержимого регистра или ячейки памяти.

NEG - команда изменения знака операнда. Формат команды: NEG операнд

Команда вычитает значение операнда из нулевого значения. Пусть значение содержимого регистра AL нужно вычесть из 100. Так как цифра 100 не может служить операндом приемником, то запись

sub 100, AL

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

neg AL

add AL, 100

Состояние флагов после выполнения команды: меняются значения OF, SF, ZF, AF, PF и СF = 1, если операнд ненулевое число, в противном случае они равны нулю.

СМР - Команда сравнения. Формат команды: СМР приемник, источник

Команда вычитает источник из приемника и в зависимости от результата, устанавливает флаги, операнды приемник и источник не меняются.

Состояние флагов после выполнения команды: меняются значения OF, SF, ZF, AF, PF и СF.

 

Команды умножения

MUL - Команда умножения чисел без знака. Формат команды: MUL источник.

IMUL - Команда целого умножения чисел со знаком. Формат команды: IMUL источник.

Источником может быть регистр общего назначения или ячейка памяти размером в байт, слово или двойное слово.

В качестве второго операнда используется содержимое регистров AL (для байтов), AX (для слов) или EAX (для двойных слов). Произведение имеет двойной размер и возвращается следующим образом: умножение байтов возвращает 16-битовое произведение в регистрах АН (старший байт) и AL (младший байт); умножение слов возвращает 32-битовое произведение в регистрах DX (старшее слово) и АХ (младшее слово); умножение двойных слов возвращает 64-битовое произведение в регистрах EDX (старшее двойное слово) и EАХ (младшее двойное слово).

Состояние флагов после выполнения команды MUL:

CF = OF = 0, если старшая половина произведения равна нулю, в противном случае они равны единице.

Состояние флагов после выполнения команды IMUL:

CF = OF = 0, если старшая половина произведения представляет собой лишь расширение знака младшей половины, в противном случае они равны единице.

ААМ – ASCII коррекция результата умножения. Команда преобразует результат предшествующего умножения байтов в два правильных неупакованных десятичных операнда.

Команды деления.

DIV - Команда деления без знака. Формат команды: DIV источник

IDIV - Команда деления чисел со знаком. Формат команды: IDIV источник

Делитель размером в байт, слово или двойное слово находится в регистре общего назначения или в ячейке памяти. Делимое должно иметь двойной размер, оно извлекает из регистров АН и АL (при делении на 8-битовое число), из регистров DX и AX (при делении на 16-битовое число) или из регистров EDX и EAX (при делении на 32-битовое число). Результат возвращается следующим образом: если источник представляет собой байт, то частное возвращается в регистр AL, а остаток в регистр АН. Если источник представляет собой слово, то частное возвращается в регистр АХ, а остаток - в DX и если источник представляет собой двойное слово, то частное возвращается в регистр EАХ, а остаток - в EDX.

AAD - ASCII коррекция результата деления. Исполняется непосредственно перед операцией деления. Команда преобразует неупакованное делимое в двоичное число и загружает его в регистр AL.

 


Поделиться:



Популярное:

  1. I. Психологическая сущность управления.
  2. IV. Государственная политика в области управления и развития рынка недвижимости
  3. Linux - это операционная система, в основе которой лежит лежит ядро, разработанное Линусом Торвальдсом (Linus Torvalds).
  4. VI. Педагогические технологии на основе эффективности управления и организации учебного процесса
  5. Автоматизированные системы управления
  6. Автоматический выключатель управления (АВУ-045)
  7. Авторитарный стиль управления
  8. Адамс Б. Эффективное управление персоналом: Сделайте так, чтобы ваши служащие работали с максимальной отдачей, - М: АСТ Астрель, 2008. – 367 с.
  9. Административная итоговая контрольная работа по окружающему миру за 1 класс
  10. Административная ответственность органов и должностных лиц местного самоуправления
  11. Административно-правовая организация управления в области занятости населения, труда и социальных вопросов.
  12. Административно-правовая организация управления в области финансовой деятельности и кредитования.


Последнее изменение этой страницы: 2016-04-11; Просмотров: 874; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.049 с.)
Главная | Случайная страница | Обратная связь