- •Архитектура эвм и систем.
- •Стороженко а.С.
- •Валюкевич н.Е.
- •Оглавление
- •Введение Архитектура персонального компьютера
- •Набор регистров
- •Регистры состояния и управления
- •Организация памяти
- •Типы данных
- •Лабораторная работа №1 Применение inline assembler
- •Краткая теория
- •Функции ввода-вывода
- •Порядок выполнения
- •Задания
- •Контрольные вопросы
- •Лабораторная работа №2 Линейное программирование
- •Краткая теория
- •Команды пересылки данных
- •Арифметические команды
- •Сложение двоичных чисел без знака
- •Вычитание двоичных чисел без знака
- •Умножение двоичных чисел со знаком
- •Деление двоичных чисел со знаком
- •Преобразование типов
- •Порядок выполнения
- •Задания
- •Варианты
- •Контрольные вопросы
- •Лабораторная работа №3 Организация ветвлений в программе
- •Краткая теория
- •Команда сравнения cmp
- •Порядок выполнения
- •Задания
- •Контрольные вопросы
- •Лабораторная работа №4 Циклы
- •Краткая теория
- •Порядок выполнения
- •Задания
- •Варианты
- •Контрольные вопросы
- •Лабораторная работа №5 Циклы
- •Краткая теория
- •Порядок выполнения
- •Задания
- •Контрольные вопросы
- •Лабораторная работа №6 Работа с дисассемблером
- •Краткая теория
- •Порядок выполнения
- •Задания
- •Список рекомендованной литературы
- •Список дополнительной литературы
Порядок выполнения
С помощью данных методических указаний освоить работу с организацией ветвлений.
Написать программу согласно варианту задания.
Оформить отчет.
Задания
1. Написать программу, вычисляющую арифметическое выражение согласно варианту. Значение переменных вводится с клавиатуры.
Варианты
Вариант 1
Вариант 2
Вариант 3
Вариант 4
Вариант 5
Вариант 6
Вариант 7
Вариант 8
Вариант 9
Вариант 10
Вариант 11
Вариант 12
Вариант 13
Вариант 14
Контрольные вопросы
Расскажите о команде безусловного перехода.
Для чего служит в микропроцессорах фирмы Intel — i486 блок предсказания переходов?
Расскажите о командах условного перехода.
Объясните понятие кэширование.
Расскажите о команде cmp.
Расскажите о вариантах внутрисегментного использования команды jmp.
Приведите пример сравнения двух чисел.
Расскажите о регистрах состояния и управления реализованных в микропроцессорах фирмы Intel — i486.
Приведите синтаксис команды jmp.
Приведите общие свойства и принципы, характерные 4 и 5-му поколениям ЭВМ, так называемой фон-неймановской архитектуры.
Перечислите, какие команды могут влиять на работы команд условного перехода.
Приведите синтаксис команды cmp.
Перечислите команды условного перехода.
Расскажите, какие команды влияют на работу команды jmp.
Могут ли после команды 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;
}
