Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания по Архитектуре ЭВМ и сист...doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
2 Мб
Скачать
☆

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

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

  2. Написать программу согласно варианту задания.

  3. Оформить отчет.

Задания

1. Написать программу, вычисляющую арифметическое выражение согласно варианту. Значение переменных вводится с клавиатуры.

Варианты

Вариант 1

Вариант 2

Вариант 3

Вариант 4

Вариант 5

Вариант 6

Вариант 7

Вариант 8

Вариант 9

Вариант 10

Вариант 11

Вариант 12

Вариант 13

Вариант 14

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

  1. Расскажите о команде безусловного перехода.

  2. Для чего служит в микропроцессорах фирмы Intel — i486 блок предсказания переходов?

  3. Расскажите о командах условного перехода.

  4. Объясните понятие кэширование.

  5. Расскажите о команде cmp.

  6. Расскажите о вариантах внутрисегментного использования команды jmp.

  7. Приведите пример сравнения двух чисел.

  8. Расскажите о регистрах состояния и управления реализованных в микропроцессорах фирмы Intel — i486.

  9. Приведите синтаксис команды jmp.

  10. Приведите общие свойства и принципы, характерные 4 и 5-му поколениям ЭВМ, так называемой фон-неймановской архитектуры.

  11. Перечислите, какие команды могут влиять на работы команд условного перехода.

  12. Приведите синтаксис команды cmp.

  13. Перечислите команды условного перехода.

  14. Расскажите, какие команды влияют на работу команды jmp.

  15. Могут ли после команды cmp следовать несколько команд условного перехода?

Лабораторная работа №4 Циклы

Цель работы: освоить работу с циклами.

Оборудование: персональный компьютер, Microsoft Visual Studio.

Краткая теория

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

…

cycl:

jcxz exit ; проверяем cx = 0, если да то переходим на exit

… ; Выполняем какие либо действия

dec cx

jmp cycl

exit:

…

Цикл в данной программе организован тремя командами jcxz, dec и jmp. Команда jcxz проверяет значение регистра cx, и если оно равно 0 переходит на метку exit, тем самым завершая циклические вычисления. Затем команда dec уменьшает значение в регистре cx, а команда jmp переходит на начало цикла.

Учитывая важность такого алгоритмического элемента, как цикл, разработчики микропроцессоров ввели в систему команд группу команд облегчающих программирование циклов. Эти команды также используют регистр ecx/cx как счетчик цикла. В эту группу входят следующие команды:

  • loop метка перехода. Команда позволяет организовать циклы, подобные циклам for в языках высокого уровня с автоматическим уменьшением счетчика цикла.

  • loope/loopz метка перехода. Команды повторяют цикл пока cx<>0 или zf=0.

  • loopne/loopnz метка перехода. Команда повторяет цикл пока cx<>0 или zf=1.

Команды loope/loopz и loopne/loopnz по принципу своей работы являются взаимообратными. Они расширяют действие команды loop тем, что дополнительно анализируют флаг zf. Это дает возможность организовать досрочный выход из цикла, используя этот флаг в качестве индикатора. Типичное использование данных команд связано с операцией поиска определенного значения в последовательности или со сравнением двух чисел.

Недостаток команд организации цикла loop, loope/loopz и loopne/loopnz в том, что они реализуют только короткие переходы. Для работы с длинными циклами используют команды условного перехода и команду jmp.

Пример организации цикла командой loop:

…

mov cx,10 ; устанавливаем количество итераций цикла

cycl:

… ; выполняем необходимые действия внутри цикла

loop cycl

… ; выполняем действия вне цикла

Пример организации цикла при помощи команды loope

mov cx,10 ; устанавливаем количество итераций цикла

cycl:

… ; выполняем необходимые действия внутри цикла

loope cycl

… ; выполняем действия вне цикла

Пример

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

#include "stdafx.h"

#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

int mas[10];

int s=0;

for(int i=0;i<10;i++)

{

cout<<"Enter mas["<<i<<"]=";

cin>>mas[i];

}

//первый вариант решения

__asm

{

mov ecx,9

mov eax,mas[0]

my_cicle:

add eax,mas[ecx*4]

loop my_cicle

mov s,eax

}

//второй вариант решения

__asm

{

mov ecx,0

mov eax,0

my_cicle1:

add eax,mas[ecx*4]

inc ecx

cmp ecx,10

jne my_cicle1

mov s,eax

}

cout<<"s="<<s<<endl;

system("pause");

return 0;

}