Практическая работа №1 «Изучение принципов работы с системами счисления»




Скачать 0.78 Mb.
Название Практическая работа №1 «Изучение принципов работы с системами счисления»
страница 4/7
Тип Практическая работа
rykovodstvo.ru > Руководство эксплуатация > Практическая работа
1   2   3   4   5   6   7

Краткие теоретические и учебно-методические материалы по теме практической работы
Процессор способен выполнять команды, находящиеся в памяти в виде двоичных кодов. В процессорах iх86 длина команды может составлять от 1 до 12 байт. Первый байт команды содержит код операции, а также некоторую дополнительную информацию (например, о длине обрабатываемых данных). Данные, подлежащие обработке, называются операндами. Каждый операнд может представлять собой байт или слово и находиться в регистре общего назначения или в памяти. Кроме того, существуют команды, использующие в качестве операндов последовательности байтов или слов (строки).

Разрабатывать программу, записывая все команды непосредственно в двоичной кодировке, очень трудно. С другой стороны, языки программирования высокого уровня, такие, как Паскаль или Си, намного облегчают написание программ, но они не дают доступа ко всем ресурсам компьютера; размер получаемого кода оказывается значительным. «Золотой серединой» здесь оказывается язык Ассемблер. В этом языке каждой команде процессора соответствует мнемонический код (или мнемокод), т.е. код, удобный для запоминания. Кроме кодов команд, Ассемблер содержит директивы, т.е. служебные инструкции, определяющие формат программы, данных и т.п. Существуют как самостоятельные Ассемблер-системы, так и встроенные в языки высокого уровня (например, в системе Borland Pascal).

Использование регистров процессора

Регистр – специально отведенная память для временного хранения каких-то данных. Микропроцессоры i8086 имеют 14 регистров.
Таблица 6.1 – Регистры данных (регистры общего назначения, РОН)

AX

BX

CX

DX

AH

AL

BH

BL

CH

CL

DH

DL

Аккумулятор

База

Счетчик

Регистр данных


РОН могут использоваться программистом по своему усмотрению (за исключением некоторых случаев). В них можно хранить любые данные: числа, адреса и пр. В верхнем ряду таблицы 6.1 находятся шестнадцатиразрядные регистры, которые могут хранить числа от 0 до 65535 или от 0h до FFFFh в шестнадцатеричной системе счисления. В следующей строке расположен ряд восьмиразрядных регистров. В них можно загружать максимальное число 255 (FFh). Они представляют собой старшую (High) и младшую (Low) половинки шестнадцатиразрядных регистров.
Таблица 6.2 – Регистры-указатели

SI

DI

BP

SP

Индекс источника

Индекс приемника

Регистры для работы со стеком


Регистры SI и DI используются в строковых операциях.
Таблица 6.3 – Сегментные регистры

CS

DS

ES

SS

Регистр кода

Регистр данных

Дополнительный регистр

Регистр стека


Сегментные регистры необходимы для обращения к тому или иному сегменту памяти.

Команды пересылки данных и загрузки
Таблица 6.4 – Команды пересылки данных, загрузки адресов

Название

Общий вид команды

Действие

Пересылка данных

MOV op1, op2

op1 ← op2

Обмен (перестановка) данных

XCHG op1, op2

op1 ↔ op2

Загрузка исполнительного адреса

LEA op1, op2

op1 ← ( адрес op2)


Команда MOV (to move – передвигать, перемещать) осуществляет пересылку байта или слова из источника (это второй операнд, «op2») в место назначения (первый операнд, он же операнд-получатель, «op1»). В качестве источника и получателя могут служить РОН, индексный или сегментный регистр, ячейка памяти. Источником могут также являться данные (константа), непосредственно указанные в команде.

Пример

MOV AX, 5050 – записать число 5050 в регистр АХ.

MOV AX, BX – переместить число из регистра ВХ в регистр АХ.

Команда XCHG (to exchange – переставлять) осуществляет обмен байтами или словами между своими операндами (РОН, индексные регистры, память). Сегментные регистры не могут использоваться при обмене.

В этих командах, как и многих других двухоперандных командах рассматриваемых МП, недопустимы сочетания операндов типа «память-память», что представляет определённые неудобства при программировании.

Команда LEA (Load Executable Address) носит название «загрузить исполнительный адрес». По этой команде извлекается не сам операнд, а его исполнительный адрес. Действие команды состоит в передаче вычисленного 16-разрядного адреса (внутрисегментного смещения) операнда в 16-разрядный регистр.

Арифметические команды

В классической системе команд 8086-совместимых процессоров существуют все четыре арифметические действия – сложение, вычитание, умножение, деление над 8- и 16-разрядными данными, представляющими целые числа.
Таблица 6.5 – Арифметические команды

Название

Общий вид команды

Действие

Сложение

ADD op1, op2

op1 ← op1+op2

Инкремент (увеличение на 1)

INC op

op ← op+1

Вычитание

SUB op1, op2

op1 ← op1-op2

Декремент (уменьшение на 1)

DEC op

op ← op-1

Умножение

MUL op

см. ниже

Деление

DIV op

см. ниже


Команда ADD (addition) выполняет сложение операнда-источника («op2») с операндом места назначения («op1»). Операндами могут быть регистры и ячейки памяти, причём в качестве источника может быть указано число (константа).

Команда SUB (subtraction) выполняет вычитание операнда-источника из операнда-получателя (op1-op2), записывая результат на место первого операнда. Опять же могут быть использованы регистры, память; вычитаемое может быть константой.

Операции «память-память» в этих командах недопустимы, то есть нельзя указывать ссылку на ячейку памяти одновременно и в первом и во втором операнде. Если это необходимо согласно алгоритму решения задачи, следует использовать операцию «регистр-память», а затем переслать (командой MOV) результат из указанного регистра в другую ячейку памяти.

Команда инкремента INC увеличивает свой единственный операнд на единицу, команда декремента DEC – уменьшает. Эти команды удобно применять, например, в цикле при необходимости наращивания или уменьшения какого-либо счётчика, адреса и т.п.

Команда MUL (multiplication), осуществляющая умножение, более сложна в использовании. Она имеет лишь один операнд – первый множитель. Где указывается второй и где окажется результат зависит от того, будет ли работать команда со словом или с байтом.

Пусть в качестве единственного операнда указан регистр или ячейка размером в байт (например, MUL CL). Тогда второй множитель (тоже байт) берётся обязательно из регистра AL, а результат (16-разрядный, т.е. длиной в слово) окажется в регистре AX:

AX ← AL*op.

Если же операнд «op» взят 16-разрядным (например, MUL CX), то команда выполнит следующее действие:

DXAX ← AX*op,

то есть второй множитель, также 16-разрядный, будет автоматически взят из регистра AX, а результат размером в двойное слово, т.е. 32-разрядный, окажется в регистровой паре, состоящей из DX и AX.

Команда деления DIV работает следующим образом. Как и в команде MUL, здесь указывается единственный операнд, который является делителем. Этот делитель опять же может быть словом или байтом. Если «op» – байт, то команда выполняется как

((AH-остаток) и (AL-частное)) ← AX/op,

то есть делимое берётся из 16-разрядного регистра AX, 8-разрядное частное оказывается записанным в AL, остаток такой же размерности – в AH.

Если же «op» – 16-разрядное слово, то МП выполнит команду как

((DX-остаток) и (AX-частное)) ← DXAX/op,

то есть 32-разрядное делимое будет взято из регистровой пары DXAX, частное окажется в AX, остаток – в DX (оба – 16-разрядные).
Примеры разработки программ

Задание: записать во все РОН целое число 5050.

Данное нам число – это константа. Для записи констант в какие-либо регистры в нашем распоряжении есть команда MOV (таблица 6.4). Число 5050 превосходит максимальное значение для байта (255), но меньше максимального значения для машинного слова (65535). Следовательно, будем использовать 16-разрядные регистры. Программа будет выглядеть так:

MOV AX, 5050

MOV BX, AX

MOV CX, AX

MOV DX, AX
Задание: вычислить выражение (25*7+137*5-60) и результат оставить в регистре AX.

Из рассмотрения данного выражения следует, что нам понадобятся команды ADD (сложить), MUL (умножить), SUB (вычесть), приведённые в таблице 6.5, а также MOV (переслать). Получим сначала произведение 25*7 и сохраним его; затем получим произведение 137*5 и сложим оба частичных результата; вычтем 60 из того, что получилось. Приходим к программе:

MOV AL, 25 ; записать в AL число 25

MOV DL, 7 ; записать в DL число 7

MUL DL ; теперь AX = 25*7

MOV BX, AX ; копировать из АХ в ВХ, теперь BX = 25*7

MOV AL, 137

MOV DL, 5

MUL DL ; AX = 137*5

ADD AX, BX ; AX = 25*7 + 137* 5

SUB AX, 60 ; AX уменьшен на 60
Задания для практической работы
1 Составить таблицу «Регистры процессора» с указанием названия регистра и его назначения.

2 Составить таблицу «Команды Ассемблера» с указанием названия команды, ее мнемокода и выполняемого действия.

3 Разработать программу на языке Ассемблер для вычисления арифметического выражения (таблица 6.6) и сохранения результата в указанном регистре.
Таблица 6.6 – Таблица вариантов

Вариант

Выражение

Регистр-приемник

1

(53+8)*2+(150-60)/3

DX

2

(1260-450)/2+310*3

SI

3

(176/2+23*3)-(125-50)/3

BX

4

(786+35)*3+(125-50)/5

DI

5

(5684/4+357/3+245/5)*3

CX

6

(25*7-31*2+11*3)/2

BL. В регистр BH записать 0

7

150/3+78/2+365/5

CL. В регистр CH записать 0

8

(35/7)*(78/2)-190

BH. В регистр BL записать 0

9

(81/9)*(65/5)-110

CH. В регистр CL записать 0

10

150/5-35/7+210/3

DL. В регистр DH записать 0

Контрольные вопросы
1 Что называется операндом и мнемокодом?

2 Что такое регистры процессора? Для чего используются регистры общего назначения?

3 Чем отличаются команды ADD и INC?

4 Какое сочетание операндов недопустимо для большинства двухоперандных команд Ассемблера?

Практическое занятие № 7
«Изучение системы команд Ассемблера. Команды обработки строк данных и команды организации циклов»
Цель работы: изучить команды обработки строк данных и организации циклов.
Студент должен

уметь:

составлять программы на языке Ассемблера для выполнения задач на обработку строк данных;
знать:

работу команд обработки строк данных и организации циклов.
Краткие теоретические и учебно-методические материалы по теме практической работы
Команды обработки строк данных

Строка – это последовательность байтов или слов, размещаемых в смежных ячейках памяти.
Таблица 7.1 – Команды обработки строк

Название

Мнемокод

Пересылка строки

MOVS, MOVSB

Загрузка символа из строки

LODS, LODSB

Запись символа в строку

STOS, STOSB

Сканирование строки

SCAS, SCASB

Сравнение строки

CMPS, CMPSB


Если обрабатываемая строка состоит из 16-разрядных машинных слов, то применяется мнемокоды команд без буквы “B” на конце (например, LODS); если строка состоит из байтов, то – мнемокоды команд с буквой “B” (например, LODSB). Операнды команд после из мнемокодов, как правило, не указываются; везде используется неявная адресация.

Команда MOVS, MOVSB (move strings) – это пересылка элемента строки из одной области памяти в другую (в отличие от MOV, которая не может выполнять пересылки «память-память»). Строка-источник адресуется регистрами DS:SI (то есть находится в сегменте памяти, на который указывает DS, и имеет смещение, находящееся в SI), строка-получатель – регистрами ES:DI. Таким образом, строка-получатель размещается в дополнительном сегменте данных, если только значения DS и ES не равны.

Содержимое индексных регистров SI и DI во время работы строковых команд не остаётся неизменным – оно также изменяется автоматически в соответствии с правилом SI←SI+delta, DI←DI+delta. Здесь delta=1 для байтовых строк и delta=2 для строк, состоящих из 16-разрядных машинных слов.

В ряде случаев возникает необходимость в пересылке строки в обратном порядке, начиная не с первого, а с последнего элемента. Содержимое индексных регистров при этом должно не увеличиваться, а уменьшаться. Направление изменения содержимого задаётся с помощью флага DF в регистре FLAGS микропроцессора: при DF=0 используется «плюс», при DF=1 – «минус». Сам же флаг DF управляется специальными командами: CLD (сбросить флаг, это значение по умолчанию) и STD (установить флаг).

Команда LODS, LODSB (load from string). Команда осуществляет загрузку элемента строки (слова или байта) в регистр AX или AL соответственно. Строка адресуется с помощью регистров DS:SI.

Команда STOS, STOSB (store to string). С помощью этой команды производится заполнение строки словом (байтом) из регистра АХ или AL соответственно. Заполняемая строка адресуется с помощью регистров ES:DI.

Команда SCAS, SCASB (scan string). Эта команда используется для так называемого «сканирования» одной строки в поисках нужного элемента (слова или байта). В процессе работы команды осуществляется сравнение элемента строки, расположенного по адресу ES:DI, со значением в регистре AX (или AL) путём вычитания; результат вычитания не фиксируется, но устанавливаются соответствующие флаги. Как и при выполнении прочих строковых команд, производится автоинкрементирование (либо автодекрементирование) регистра DI.

Команда CMPS, CMPSB (compare strings). Команда осуществляет поэлементное сравнение элементов двух строк (слов или байтов), одна из которых, как и прежде, расположена в памяти по адресу в регистрах DS:SI, вторая – по адресу в ES:DI. При выполнении этой команды производится вычитание элемента строки с адресом в SI из элемента строки с адресом в DI; результат вычитания никуда не записывается, но зато устанавливаются соответствующие флаги.

ZF – флаг нуля. Устанавливается в 1, если результат предыдущей команды – ноль.

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

При работе на Ассемблере можно организовать циклы, используя команды условных переходов. Однако, кроме этого, 8086-совместимые МП предоставляют в распоряжение программиста специальные команды циклов LOOP, LOOPNZ, LOOPZ. Все эти команды используют метку, расположенную выше по программе. Часть программы между меткой и какой-либо из рассматриваемых команд и есть тело цикла. Перед входом в цикл следует записать в регистр CX число повторений цикла. Каждый раз при очередном повторении тела цикла процессор будет автоматически вычитать единицу их СХ. Цикл закончится, если:

- СХ будет равен 0 (для команды LOOP);

- СХ будет равен 0 или флаг ZF будет равен 1 (для команды LOOPNZ);

- СХ будет равен 0 или флаг ZF будет равен 0 (для команды LOOPZ).

Для организации циклов при работе со строковыми командами имеются специальные команды-префиксы REP (repeat), REPE, REPNE. Они записываются перед основной командой (например, REP MOVSB) и обеспечивают её выполнение не один, а несколько раз, организуя по сути дела аппаратный (очень быстрый) цикл. Число повторений предварительно записывается в CX и на каждом шаге содержимое CX автоматически уменьшается на 1.

Префикс REP («повторять, пока не обнулится счётчик») анализирует только одно условие окончания повторений, а именно CX = 0.

Префикс REPE («повторять, пока равно») анализирует следующее составное условие окончания повторений: (CX = 0) ИЛИ (ZF = 0).

Префикс REPNE («повторять, пока не равно») в качестве условия окончания повторений использует следующее: (CX = 0) ИЛИ (ZF = 1).
Примеры программ

Пример 1: вычислить сумму 1+2+…+19+20 и записать результат в регистр SI.

Удобно программировать вычисление этой суммы в обратном порядке, т.е. начиная с 20 – тогда можно воспользоваться регистром с убывающим содержимым. В данном случае нам подходит цикл LOOP со счетчиком в CX – ведь его содержимое как раз уменьшается на каждой итерации цикла.

MOV AX, 0 ; будем накапливать сумму в АХ

MOV CX, 20 ; подготовим счётчик цикла

MET: ; этой меткой обозначено начало цикла

ADD AX, CX ; прибавляем очередное слагаемое

LOOP MET ; переход на начало цикла, если СХ не равно нулю

MOV SI, AX ; выдадим результат.
Пример 2: Дан массив из трех байтов. Получить другой массив, в котором каждый элемент первого массива увеличен на 5.

Рассматривая массив как строку байтов, разместим исходные данные в сегменте данных (DS) с адреса 0000h, а результат – в дополнительном сегменте (ES) также с адреса 0000h.

MOV SI, 0 ; начальное значение для LODS (источник данных)

MOV DI, 0 ; начальное значение для STOS (приемник)

MOV CX, 3 ; в нашем примере – три исходных элемента

MET:

LODSB ; загрузим очередной байт массива в AL

ADD AL, 5 ; обработаем его, как указано в задаче

STOSB ; запишем обработанный байт в массив результата

LOOP MET
1   2   3   4   5   6   7

Похожие:

Практическая работа №1 «Изучение принципов работы с системами счисления» icon Практическая работа №1 «Изучение организации бесперебойного питания пк»
Практическая работа №3 «Изучение типов современных процессоров и их характеристик»
Практическая работа №1 «Изучение принципов работы с системами счисления» icon Практическая работа №1 «Изучение организации бесперебойного питания пк»
Практическая работа №3 «Изучение типов современных процессоров и их характеристик»
Практическая работа №1 «Изучение принципов работы с системами счисления» icon Практическая работа №1 «Изучение методов конфигурирования сетей доступа»
Практическая работа №2 «Изучение методов отбора, подготовки и контроля линии под технологию adsl»
Практическая работа №1 «Изучение принципов работы с системами счисления» icon Лабораторная работа №10. Изучение принципа действия и функциональной...
Лабораторная работа № Изучение принципов построения системы автоматической подстройки частоты (апч) радиолокационной станции
Практическая работа №1 «Изучение принципов работы с системами счисления» icon Лабораторная работа Изучение принципов функционирования простейшей микроэвм и процессора
Лабораторная работа Изучение принципов функционирования простейшей микроэвм и процессора I8085A при реализации программы
Практическая работа №1 «Изучение принципов работы с системами счисления» icon Урок Практическая работа №4 «Получение аммиака и изучение его свойств» Цели урока
Цели урока: получения аммиака изучение его свойства через проведение практической работы
Практическая работа №1 «Изучение принципов работы с системами счисления» icon Методические указания к лабораторным работам Рязань 2013
...
Практическая работа №1 «Изучение принципов работы с системами счисления» icon Курсовая работа
Целью работы является детальное изучение бережливого производства, его принципов, инструментов, их характеристик, а также возможностей...
Практическая работа №1 «Изучение принципов работы с системами счисления» icon Практическая работа №1 «Работа с нормативными документами»
...
Практическая работа №1 «Изучение принципов работы с системами счисления» icon Урок информатики по теме "Системы счисления. Позиционные и непозиционные...
Формирование представлений об информации как одного из трех основополагающих понятий науки — вещества, энергии, информации, на основе...
Практическая работа №1 «Изучение принципов работы с системами счисления» icon Описание практической работы №2 создание шаблона сайта
Цель работы: изучение и освоение принципов работы с html тегами, их атрибутами и умение создавать базовые элементы web–страницы
Практическая работа №1 «Изучение принципов работы с системами счисления» icon Методические указания к выполнению лабораторных работ по дисциплине радиолокационные системы
Лабораторная работа №1 «Изучение принципов построения штатной радиолокационной киа»
Практическая работа №1 «Изучение принципов работы с системами счисления» icon Практическая работа №1 «Изучение видов интерфейсов и их характеристик»
Профессиональный модуль «Применение микропроцессорных систем, установка и настройка периферийного оборудования»
Практическая работа №1 «Изучение принципов работы с системами счисления» icon Практическая работа №1 «Расчет срока окупаемости капитальных вложений...
Практическая работа №2 «Задача выбора поставщика и ее решениена основе анализа полной стоимости»
Практическая работа №1 «Изучение принципов работы с системами счисления» icon Практическая работа №5. Составление инструкции «Аккумуляторщик»
...
Практическая работа №1 «Изучение принципов работы с системами счисления» icon Практическая работа №1 «Технология строительства воздушных линий связи»
Практическая работа №9 «Технология ввода кабелей в здание атс. Оборудование шахт»

Руководство, инструкция по применению






При копировании материала укажите ссылку © 2024
контакты
rykovodstvo.ru
Поиск