Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Задание1 Ознакомится с теоретической частью

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 30.5.2024

Практическая работа 5 «Структура и реализация циклов»

Задание1.  Ознакомится с теоретической частью. Ввести и проработать примеры 1, 2, 3.

Циклы, позволяющие выполнить некоторый участок программы многократно, в любом языке являются одной из наиболее употребительных конструкций. В системе команд МП 86 циклы реализуются, главным образом, с помощью команды loop (петля), хотя имеются и другие способы организации циклов. В большинстве случаях число шагов в цикле определяется содержимым регистра СХ, поэтому максимальное число шагов составляет 64 К.

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

Организация цикла с помощью команды LOOP (Первый способ).

Команда loop (анг. петля) выполняет декремент содержимого регистра СХ (счетчик), и если оно не равно 0, осуществляет переход на указанную метку вперед или назад в том же программном сегменте в диапазоне - 128... + 127 байт. Обычно метка помещается перед первым предложением тела цикла, а команда loop является последней командой цикла. Содержимое регистра СХ рассматривается как целое число без знака, поэтому максимальное число повторений группы включенных в цикл команд составляет 65536 (если перед входом в цикл СХ=0). Команда не воздействует на флаги процессора.

Команда

Назначение

Процессор

LOOP метка

Организация циклов

8086

Пример1.  Организация циклического перехода (со счетчиком в регистре cx) на языке Assembler:

1

org 100h

; начало СОМ-файла

2

begin:

; метка начала кода программы

3

mov cx,10

; загружаем в (регистр-счетчик) CX количество повторов (отсчет будет идти от 10 до 0)

4

Label1:

; создаем метку (Label - метка).

5

mov ah,9

; помещаем номер функции DOS "вывод строки (9)" в регистр АН.

6

mov dx,offset String

; помещает в регистр DX смещение метки String относительно начала сегмента данных

7

int 21h

; функция DOS "вывод строки"

8

loop Label1

; оператор loop уменьшает на единицу CX и, если он не равен нулю, переходит на метку Label1 (строка 4)

9

ret

; функция DOS "завершить программу"

10

string db 'privet $'

; строка  содержащая выводимые данные.

11

end begin

; метка окончания кода программы

В строке (3) загружаем в CX количество повторов (отсчет будет идти от 10 до 0). В строке (4) создаем метку (Label - метка). Далее (строки (5) - (8)) выводим сообщение. И в строке (8) оператор loop уменьшает на единицу CX и, если он не равен нулю, переходит на метку Label1 (строка (4)). Таким образом, строка будет выведена на экран десять раз. Когда программа перейдет на строку (9), регистр CX будет равен нулю.

Организация цикла с помощью команды JMP (Второй способ).

Команда jmp передает управление в указанную точку того же или другого программного сегмента. Адрес возврата не сохраняется. Команда не воздействует на флаги процессора.

Команда jmp имеет пять разновидностей:

переход прямой короткий (в пределах - 128... + 127 байтов);

переход прямой ближний (в пределах текущего программного сегмента);

переход прямой дальний (в другой программный сегмент);

переход косвенный ближний;

переход косвенный дальний.

Все разновидности переходов имеют одну и ту же мнемонику jmp, хотя и различающиеся коды операций. Во многих случаях транслятор может определить вид перехода по контексту, в тех же случаях, когда это невозможно, следует использовать атрибутные операторы (short - прямой короткий переход; near ptr - прямой ближний переход; far ptr - прямой дальний переход; word ptr - косвенный ближний переход; dword ptr - косвенный дальний переход).

Команда

Назначение

Процессор

JMP метка

Безусловный переход

8086

 Пример 2.

1

org 100h

; начало СОМ-файла

2

begin:

; метка начала кода программы

3

label1:

; создаем метку

4

mov ah,9

; помещаем номер функции DOS "вывод строки (9)" в регистр АН.

5

mov dx,offset String

;помещает в регистр DX смещение метки String относительно начала сегмента данных

6

int 21h

; функция DOS "вывод строки"

7

jmp Label1

; переход на строку с меткой Label1

8

add cx,12

; прибавить к значению регистра cx число 12 (данная команда не выполняется)

9

dec cx

; уменьшить значение регистра cx на 1 (данная команда не выполняется)

10

ret

; функция DOS "завершить программу"

11

string db "PRIVET",13,10,'$'

; cтрока с содержащая выводимые данные.

12

end begin

; метка окончания кода программы

В результате работы программы будет зациклен блок строк (2) - (6).

Организация цикла с помощью команд DEC и JNZ (Третий способ).

С помощь этих операторов можно создавать циклы, которые будут работать быстрее оператора Loop. Комбинированная работа команд DEC и JNZ уменьшает содержимое регистра CX на 1 и выполняет переход на метку, если в CX не равен нулю.

Команда DEC, кроме того, устанавливает флаг нуля во флаговом регистре в состояние 0 или 1. Команда JNZ затем проверяет эту установку.

Аналогично командам JMP и LOOP операнд в команде JNZ содержит значение расстояния между концом команды JNZ и адресом перехода (Label1), которое прибавляется к командному указателю. Это расстояние должно быть в пределах от - 128 до +127 байт.

Следующий пример будет работать так же, как и Пример №1, только быстрее.

Пример 3

org 100h

; начало СОМ-файла

begin:

; метка начала кода программы

mov cx,10

; загружаем в (регистр-счетчик) CX количество повторов (отсчет будет идти от 10 до 0)

Label1:

; создаем метку (Label - метка).

mov ah,9

; помещаем номер функции DOS "вывод строки (9)" в регистр АН.

mov dx,offset String

;помещает в регистр DX смещение метки String относительно начала сегмента данных

int 21h

; функция DOS "вывод строки"

dec cx

; оператор DEC уменьшает на единицу CX и, если он не равен нулю, переходит на метку Label1

jnz Label1

; условный переход на строку с меткой Label1

ret

; функция DOS "завершить программу"

string db 'priver ',13,10, '$'

; строка с содержащая выводимые данные

end begin

; метка окончания кода программы

Задание 2. Ввести и проанализировать работу программу, выводящую на экран все ASCII-символы (16 строк по 16 символов в строке).

org 100h

; начало СОМ-файла

begin:

; метка начала кода программы

mov cx,256

; задаем значение счетчика (256 символов)

mov dl,0

; первый символ - с кодом 00

mov ah,2

; номер функции DOS "вывод символа"

cloop: int 21h

; вызов DOS

inc dl

; увеличение DL на 1 - следующий символ

test dl,0Fh

; если DL не кратен 16

jnz continue_loop;

; продолжить цикл,

push dx

; иначе: сохранить текущий символ

mov dl,0Dh

; вывести CR

int 21h

; вызов DOS

mov dl,0Ah

; вывести LF

int 21h

; вызов DOS

pop dx

; восстановить текущий символ

continue_loop:

; метка

loop cloop

; продолжить цикл

ret

; завершение СОМ-файла

end begin

; метка окончания кода программы

Здесь с помощью команды LOOP оформляется цикл, выполняющийся 256 раз (значение регистра СХ в начале цикла). Регистр DL содержит код символа, который равен нулю в начале цикла и увеличивается каждый раз на 1 командой INC DL. Если значение DL сразу после увеличения на 1 кратно 16, оно временно сохраняется в стеке и на экран выводятся символы CR и LF, выполняющие переход на начало новой строки. Проверка выполняется командой TEST DL,0Fh - результат операции AND над DL и 0Fh будет нулем, только если младшие четыре бита DL равны нулю, что и соответствует кратности шестнадцати.

Задание 3

Набрать и проверить работоспособность программы с условными переходами (JNZ)

Набрать и проверить работоспособность программы с условными переходами (JE)

Набрать и проверить работоспособность программы с безусловным переходом (JMP)

Задание 4

1.  Напишите программу, выводящую на экран слово "!!!!!!!!!! Hello!!!!!!!!!!" используя команды циклических переходов (3 варианта).

2.  Напишите программу расчета суммы всех значений от 0 до 14.

org 100h

mov cx, 0

mov ax, 0

mov bl, 14

start:

add cl

cmp cl, bl

inc cl

jbe start

hlt

Это набросок,  а вы попробуйте организовать еще вывод на экран




1. Обоснование развития скотоводства в агрофирме
2. м 1995 Защитники- Центральные- Романенко Геннадий Тревисм 1995 Мирошниченко Максим Тревисм 199
3. на тему Иностранные инвестиции в России- современное состояние проблемы и пути решения
4. Наш дом. RU Результаты регионального конкурсного тура в Москве Дата- 16 января 2014 года
5. 3000 практических советов для дома Анна Евгеньевна Батурина3000 практических советов для дома
6. Уметь ответить на основные вопросы раздела
7. Геодезические методы анализа высотных и плановых деформаций инженерных сооружений
8. Аксиологический аспект характеризует такое свойство сознания
9. Основы языка ssembler 3Работа с массивами и стеком на языке ассемблера 3
10. Нормы права
11. Смольный собор 15 марта суббота
12. і І тому рівень матеріальнотехнічної бази оплати праці працівників цих установ в значній мірі залежить від
13. Как я изучаю языки Като Ломб Как я изучаю языки Наталья Федченко fedchenkon@mil
14. I ПРАКТИЧЕСКОЕ ПРЕДЛОЖЕНИЕ Мое конкретное предложение для ближайшего будущего и одновременно повод для
15. Тема 1 Транспортное обслуживание туристов 1
16. Тема-
17. Текст как единица перевода
18. Весь цвет Кибернета
19. Назначение агрегата
20. Задание Варианты ответов Верный ответ Введение в политологию