рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Команды управления циклом

Команды управления циклом - раздел Компьютеры, Практическая работа №1 Архитектура ЭВМ и вычислительных систем С Помощью Команд Перехода Можно Реачизовать Любые Разветвления И Циклы. Напри...

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

а) if X>0 then S1 else S2

б) while X>0 do S

в) repeat S until X>0

где S, S1 и S2 - какие-то операторы, а X - знаковая переменная, реализуются по таким схемам (соответственно):

CMP X,0 BEG: CMP X,0 BEG: ---------- JLE L2 JLE FIN | S | ---------- ---------- ---------- | S1 | | S | CMP X,0 ---------- ---------- JG BEG JMP FIN JMP BEGL2: ---------- FIN: | S2 | ----------FIN: a) б) в)

Среди циклов на практике наиболее часто встречаются циклы с заранее известным числом повторений (for-циклы языка Паскаль), поэтому в систему команд многих ЭВМ обычно включают дополнительные команды, упрощающие реализацию подобных циклов и называемые командами управления циклом. Есть такие команды и в ПК, их мы сейчас и рассмотрим.

Команда LOOP

Пусть некоторую группу команд (тело цикла) надо повторить N раз (N>0). Тогда на ЯА этот цикл можно реализовать по такой схеме:

MOV CX,N ;CX - счетчик цикла (число повторений)

L: ... ;

... ; тело цикла

... ;

DEC CX ;СХ:=СХ-1

СМР СХ,0 ;СХ=0?

JNE L ;СХ<>0 а goto L

Как видно, в конце таких циклов всегда применяется одна и та же тройка команд. Учитывая это, в систему команд ПК была введена специальная команда, которая объединяет в себе действия этих трех команд:

Управление циклом по счетчику: LOOP <метка>

Действие этой команды можно описать так:

CX:=CX-1; if CX<>0 then goto <метка>

С помощью команды LOOP наш цикл запишется следующим образом:

MOV CX,N ;N>0

L: ... ;

... ; тело цикла

... ;

LOOP L

Как видно, получилось короче, да и работает команда LOOP быстрее этих трех команд. Поэтому, если можно, следует пользоваться командой LOOP.

Однако необходимо учитывать ряд особенностей этой команды.

Во-первых, команда LOOP требует, чтобы в качестве счетчика цикла обязательно использовался регистр СХ, при другом регистре команду применять нельзя.

Во-вторых, начальное значение для СХ должно быть присвоено до цикла, причем этому регистру надо присваивать ровно столько, сколько раз должен повторяться цикл - без всяких "плюс-минус единица". Например, если цикл должен выполняться 100 раз, то в регистр СХ надо записывать именно 100, а не 99 или 101.

В-третьих, поскольку команда LOOP ставится в конце цикла, тело цикла хотя бы раз обязательно выполнится. Поэтому для случая СХ=0 наша схема цикла не подходит. Так вот, если возможен вариант, что число повторений может быть и нулевым, то при СХ=0 надо сделать обход цикла:

MOV CX,N ;N>=0

JCXZ L1 ;CX=0 а L1

L: ... ;

... ; тело цикла

... ;

LOOP L

L1: ...

Именно ради осуществления таких обходов в ПК и была введена команда условного перехода JCXZ. В иных ситуациях она используется редко.

В-четвертых, как и команды условного перехода, команда LOOP реализует только короткий переход, поэтому расстояние от нее до начала цикла (метки L) не должно превышать 127-128 байтов (примерно 30-40 команд). Если цикл содержит больше команд, тогда команду LOOP использовать нельзя и надо реализовывать цикл по-иному.

Рассмотрим конкретный пример на использование команды LOOP. Пусть N -байтовая переменная со значением от 0 до 8 и надо в регистр АХ записать факториал этого числа: AX:=N! (отметим, что 8! = 40320 < 2 16).

Для решения этой задачи надо вначале положить АХ:=1, а затем N раз выполнить умножение AX:=AX*i, меняя i от 1 до 8. При этом следует учитывать, что при N=0 цикл не должен выполняться.

MOV AX,1 ;AX:=0!

MOV CL,N

MOV СН,0 ;CX:=N как слово (счетчик цикла)

JCXZ Fl ;при N=0 обойти цикл

MOV SI,1 ;i:=l

F: MUL SI ; (DX,AX):=AX*i (DX=0)

INC SI

LOOP F

F1:

Отметим, что в данном примере параметр цикла (i) можно было бы менять и в "обратном" направлении - от N до 1, а поскольку именно так меняется и регистр СХ, то этот регистр можно использовать не только как счетчик цикла, но и как параметр цикла (CX=i):

MOV AX,1

MOV CL,N

MOV CH,0 ;CX - и счетчик цикла, и параметр цикла

JCXZ Fl

F: MUL СХ

LOOP F

F1:

Однако такое совмещение ролей удается крайне редко, поэтому при реализации циклов регистр СХ обычно используется только как счетчик цикла (указывающий, сколько еще раз надо повторить цикл), а для параметра цикла приходится использовать иной регистр.

Команды LOOPE/LOOPZ н LOOPNE/LOOPNZ

Эти команды похожи на команду LOOP, т. е. заставляют цикл повториться столько раз, сколько указано в регистре СХ, однако они допускают и досрочный выход из цикла.

Цикл по счетчику и пока равно (пока ноль): LOOPE <метка> или LOOPZ <метка>

(Названия LOOPE и LOOPZ являются синонимами.) Действие этой команды можно описать так:

CX:=CX-1; If(CX<>0) and (ZF=1) then goto <метка>

Таким образом, эта команда совмещает в себе изменение счетчика цикла (регистра СХ) и условный переход, когда счетчик еще не нулевой и когда предыдущая команда выработала флаг нуля, равный 1. Причем этот переход - короткий.

Команда LOOPE используется для организации цикла с известным числом повторений, из которого возможен досрочный выход. До начала цикла в регистр СХ записывается число повторений. Сама команда LOOPE ставится в конец цикла (ее операнд - метка первой команды цикла), а перед ней помещается команда, меняющая флаг ZF (обычно это команда сравнения СМР). Команда LOOPE заставляет цикл повторяться СХ раз, но только если предыдущая команда фиксирует равенство сравниваемых величин (вырабатывает нулевой результат).

По какой именно причине произошел выход из цикла (по ZF=0) или СХ=0), надо проверять после цикла. Причем надо проверять флаг ZF (по команде JE/JZ или JNE/JNZ), а не регистр СХ, т. к. условие ZF=0 ("не равно") может появиться как раз на последнем шаге цикла, когда и регистр СХ стал нулевым.

Чаще всего команда LOOPE используется для поиска первого элемента некоторой последовательности, отличного от заданной величины. Пусть, к примеру, надо записать в регистр BL наименьшее число из отрезка [2, К], на которое не делится число N (К и N - байтовые переменные, 2<=K<N), или записать 0, если такого числа нет. Для этого будем последовательно делить N на числа 2, 3, ..., К и сравнивать остатки от деления с 0 - до тех пор, пока не найдется ненулевой остаток либо не будут исчерпаны все числа отрезка:

MOV DL,N

MOV DH,0 ;DX:=N как слово

MOV CL,K

MOV CH,0

DEC CX ;CX:=K-1 (счетчик цикла)

MOV BL,1
DV: INC BL ;очередное число из [2,К]

MOV AX,DX

DIV BL ;AH:=N mod BL

CMP AH,0 ;mod=0?

LOOPE DV ;цикл СХ раз и пока mod=0

JNE DV1 ;mod<>0 а DV1

MOV BL,0 ;нет искомого числа

DVl:

Еще одна команда ПК для организации циклов:

Цикл по счетчику и пока не равно (пока не ноль): LOOPNE <метка> или LOOPNZ <метка>

(Названия LOOPNE и LOOPNZ являются синонимами.)

Эта команда аначогична команде LOOPE/LOOPZ, но выход из цикла осуществляет при СХ=0 или ZF=1 (если предыдущая команда зафиксирована равенство, дача нулевой результат). Ее действие:

CX:=CX-1; if (CX<>0) and (ZF=0) then goto <метка>

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

Задание:

Даны три последовательности чисел а1, а2, ..., a9, b1, b2 ..., b9, с1, с2, ..., с9. Составьте новую последовательность d1, d2, …, d9, каждый элемент которой определяется по правилу di = max (аi, bi, сi), где i= 1,2, ...,9.

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

1. Составить алгоритм программы

2. Написать программу на языке Ассемблера

3. Отладить программу в Turbo Debbuger

4. Заполнить таблицу с ошибками:

Допущенная ошибка Сообщение об ошибке
     
     

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

1. На чем основан принцип работы команд условного перехода?

2. Какой регистр используется для программирования циклов со счетчиком?

3. Объясните принцип работы команды cmp.

4. Что может являться источником условия, на основании которого должно приниматься решение о том, куда будет передано управление командой условного перехода?

 

Практическая работа №9

Архитектура ЭВМ и вычислительных систем

Тема: Программирование ввода-вывода

Цель работы: Изучить функции ввода с клавиатуры и вывода на экран

Средства: Turbo Assembler, Turbo Debuger

Литература:

1. Фролов А.В., Фролов Г.В. Аппаратное обеспечение IBM PC. – М. «Диалог МИФИ»,1992г.

2. Юров В.И. Assembler. Практикум. – Спб.: Питер, 2001 г

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

Функции BIOS и DOS ввода с клавиатуры

Функция DOS 0Ah — Считать строку символов из STDIN в буфер

Ввод: АН = 0Ah DS:DX = адрес буфера
Вывод: Буфер содержит введенную строку

Для вызова этой функции надо подготовить буфер, первый байт которого содержит максимальное число символов для ввода (1 – 254), а содержимое, если оно задано, может использоваться как подсказка для ввода. При наборе строки обрабатываются клавиши Esc, F3, F5, BS, Ctrl-C/Ctrl-Break и т.д., как при наборе команд DOS (то есть Esc начинает ввод сначала, F3 восстанавливает подсказку для ввода, F5 запоминает текущую строку как подсказку, Backspace стирает предыдущий символ). После нажатия клавиши Enter строка (включая последний символ CR (0Dh)) записывается в буфер, начиная с третьего байта. Во второй байт записывается длина реально введенной строки без учета последнего CR.

Функция DOS 07h — Считать символ из STDIN без эха, с ожиданием и без проверки на Ctrl-Break

Ввод: АН = 07h
Вывод: AL = код символа

Функция DOS 06h — Считать символ из STDIN без эха, без ожидания и без проверки на Ctrl-Break

Ввод: АН = 07h DL = 0FFh
Вывод: ZF = 1, если не была нажата клавиша, и AL = 00 ZF = 0, если клавиша была нажата. В этом случае AL = код символа

Функция DOS 0Ch — Очистить буфер и считать символ

Ввод: АН = 0Ch AL = Номер функции DOS (01, 06, 07, 08, 0Ah)
Вывод: Зависит от вызванной функции

Функция 0Ch очищает буфер клавиатуры, так что следующая функция чтения символа будет ждать ввода с клавиатуры, а не использовать нажатый ранее и еще не обработанный символ. Например, именно эта функция используется для считывания ответа на вопрос «Уверен ли пользователь в том, что он хочет отформатировать диск?».

Функции BIOS и DOS вывода на экран

Функция DOS 02h — Записать символ в STDOUT с проверкой на Ctrl-Break

Ввод: АН = 02h DL = ASCII-код символа
Вывод: Никакого, согласно документации, но на самом деле: AL = код последнего записанного символа (равен DL, кроме случая, когда DL = 09h (табуляция), тогда в AL возвращается 20h).

Функция DOS 06h — Записать символ в STDOUT без проверки на Ctrl-Break

Ввод: АН = 06h DL = ASCII-код символа (кроме FFh)
Вывод: Никакого, согласно документации, но на самом деле: AL = код записанного символа (копия DL)

Эта функция не обрабатывает управляющие символы (CR, LF, HT и BS выполняют свои функции при выводе на экран, но сохраняются при перенаправлении вывода в файл) и не проверяет нажатие Ctrl-Break.

Функция DOS 09h — Записать строку в STDOUT с проверкой на Ctrl-Break

Ввод: АН = 09h DS:DX = адрес строки, заканчивающейся символом $ (24h)
Вывод: Никакого, согласно документации, но на самом деле: AL = 24h (код последнего символа)

Действие этой функции полностью аналогично действию функции 02h, но выводится не один символ, а целая строка.

Функция DOS 40h — Записать в файл или устройство

Ввод: АН = 40h ВХ = 1 для STDOUT или 2 для STDERR DS:DX = адрес начала строки СХ = длина строки
Вывод: CF = 0, АХ = число записанных байт

Эта функция предназначена для записи в файл, но, если в регистр ВХ поместить число 1, функция 40h будет выводить данные на STDOUT, а если ВХ = 2 — на устройство STDERR. STDERR всегда выводит данные на экран и не перенаправляется в файлы. INT 29h: Быстрый вывод символа на экран

Ввод: AL = ASCII-код символа

В большинстве случаев INT 29h просто немедленно вызывает функцию BIOS «вывод символа на экран в режиме телетайпа», так что никаких преимуществ, кроме экономии байт при написании как можно более коротких программ, она не имеет.

Функция BIOS INТ 10h, АН = 03 — Считать положение и размер курсора

Ввод: АН = 03 ВН = номер страницы
Вывод: DH, DL = строка и столбец текущей позиции курсора СН, CL = первая и последняя строки курсора

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

Функция BIOS INT 10h, АН = 0Eh — Вывести символ в режиме телетайпа

Ввод: АН = 0Eh ВН = номер страницы AL = ASCII-код символа

Символы CR (0Dh), LF (0Ah), BEL (7) интерпретируются как управляющие символы. Если текст при записи выходит за пределы нижней строки, экран прокручивается вверх. В качестве атрибута используется атрибут символа, находившегося в этой позиции.

Функция BIOS INT 10h, AH = 13h — Вывести строку символов с заданными атрибутами

Ввод: АН = 13h AL = режим вывода: бит 0 — переместить курсор в конец строки после вывода бит 1 — строка содержит не только символы, но также и атрибуты, так что каждый символ описывается двумя байтами: ASCII-код и атрибут биты 2 – 7 зарезервированы СХ = длина строки (только число символов) BL = атрибут, если строка содержит только символы DH,DL = строка и столбец, начиная с которых будет выводиться строки ES:BP = адрес начала строки в памяти

Функция 13h выводит на экран строку символов, интерпретируя управляющие символы CR (0Dh), LF (0Ah), BS (08) и BEL (07). Если строка подготовлена в формате символ, атрибут — гораздо быстрее просто скопировать ее в видеопамять, о чем рассказано в следующем разделе.

Задание: Вывести на середину экрана слово, введенное с клавиатуры.

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

  1. Написать PASCAL-программу и программу на ассемблере (их изобразить так, чтобы все конструкции программ соответствовали друг другу).
  2. Написать команды для ассемблирования, компоновки и запуска отладчика с отлаживаемой программой.
  3. Заполнить таблицу с ошибками:
Допущенная ошибка Сообщение об ошибке
     
     

 

 

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

  1. Какие шестнадцатеричные значения строки и столбца соответствуют нижнему правому углу экрана 25х40?
  2. Напишите команды для установки курсора по координатам: строка 12, столбец 8.

 

– Конец работы –

Эта тема принадлежит разделу:

Практическая работа №1 Архитектура ЭВМ и вычислительных систем

Архитектура ЭВМ и вычислительных систем... Тема Выполнение операций сложения и вычитания в обратном и дополнительном... Цель работы Научиться производить операции сложения и вычитания в дополнительных и обратных кодах...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Команды управления циклом

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

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

Числа с фиксированной точкой.
Запись числа с фиксированной точкой обычно имеет знаковый и цифровой разряды. Фиксированная точка означает, что на этапе конструирования ЭВМ было определено, сколько и какие разряды машинного слова

Числа с плавающей точкой.
Для представления чисел с плавающей точкой (ЧПТ) используется полулогарифмическая форма записи числа: N = ± mq ± p где q- основание системы счисления,

Умножение двоичных чисел
Применительно к двоичной ПСС наиболее известны следующие основные способы выполнения операций умножения: умножение начиная с младших разрядов множителя:

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

Тип ПЭВМ
В конце ПЗУ BIOS по адресу FF00:0FFE записан байт типа ПЭВМ. Специфицированы следующие 4 значения этого байта для машин фирмы IBM: 0xFF - IBM PC; 0xFE - XT; 0xFD - PCjr; 0xFC - AT. Для ПЭВМ других

Состав оборудования
Опеределять состав оборудования следует только после того, как мы определили тип ПЭВМ. Это обусловлено тем, что способы получения информации о составе оборудования различны для XT и для AT. Рассмот

Определение объема оперативной памяти
Методика определения объема памяти - такая же, как и определения списка оборудования. Объем ОЗУ (в Кбайтах) находится в области памяти BIOS по адресу 0040:0013 (2-байтное слово) и может быть получе

Команды сложения и вычитания
В ПК имеется несколько команд сложения и вычитания. Основными из них являются следующие: Сложение: ADD op1, op2Вычитание (subtract): SUB op1, op2 В этих к

Команды умножения
Если сложение и вычитание беззнаковых и знаковых чисел производятся по одним и тем же алгоритмам, то умножение чисел этих двух классов выполняется по разным алгоритмам, в связи с чем в ПК имеются д

Команды деления
Как и умножение, деление чисел без знака и со знаком также реализуется двумя командами: Деление целых без знака (divide): DIV ор Деление целых со знаком (integer

Изменение размера числа
Рассмотрим такую задачу. Пусть к числу из регистра ВХ надо прибавить число из регистра AL: BX:=BX+AL. Здесь требуется сложить слово с байтом, но в ПК нет команды сложения слова с байтом. Поэтому, п

Расширение байта до слова(convert byte to word): CBW
У этой команды местонахождение операнда и результата фиксировано: операнд всегда берется из AL, а результат всегда записывается в АХ. Команда записывает в регистр АН число 00h или 0FFh в зависимост

Логические команды
Логическим командам, которые, как следует из их названия, выполняют логические операции - отрицание, конъюнкцию и дизъюнкцию, присущ ряд общих черт. Во-первых, все они реализуют, как говор

Ор1 ор2
r8 i8, r8, m8 m8 i8,r8 r16 il6, rl6, ml6 m16 il6, rl6 Команда производит поразрядное логическое умножение операндов и записы-вает результат на место первого опер

Проверка: TEST opl,op2
Это аналог команды AND, но результат логического умножения никуда не записывается. Главное в команде TEST - установка флагов. Как уже было сказано, в логических командах интерес представляет только

Исключающее ИЛИ (exclusive OR): XOR opl,op2
Допустимые типы операндов - как в команде AND. И здесь результат записывается на место первого операнда, причем i-й бит результата равен 0, если i-e биты операндов совпадают, и равен 1, ес

Прямой переход
В данном случае в качестве ор указывается метка той команды, на которую надо передать управление: JMP <метка> Пример: JMP L ;следующей будет выполняться команда с м

Косвенный переход
Теперь рассмотрим другую разновидность безусловного перехода - косвенный переход. В этом случае в команде перехода указывается не сам адрес перехода, а то место, где находится этот адрес. Таким мес

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

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги