Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
5
Добавлен:
27.11.2024
Размер:
275.91 Кб
Скачать

АПРОБАЦИЯ

Министерство образования и науки Российской Федерации

Саратовский государственный технический университет

Балаковский институт техники, технологии и управления

ЦЕПОЧЕЧНЫЕ КОМАНДЫ АССЕМБЛЕРА

Методические указания к выполнению лабораторной работы по дисциплине «Архитектура ЭВМ и систем» для студентов очного

обучения специальности 230201 и направления 230400.

Одобрено

редакционно-издательским советом

Балаковского института техники,

технологии и управления

Балаково 2011

Цель работы — изучение цепочных команд, используемых для обра-

ботки символьных данных.

ОСНОВНЫЕ ПОНЯТИЯ

Под строкой символов в языке ассемблера понимается последова-

тельность байтов, а цепочка — это более общее название для случаев, ко-

гда размер элемента последовательности превышает байт и составляет слово или двойное слово.

Всего в системе команд процессора поддерживаются семь операций-

примитивов обработки цепочек. Каждая из них реализуется в процессоре тремя командами, в свою очередь, каждая из этих команд работает с соот-

ветствующим размером элемента — байтом, словом или двойным словом.

Особенность всех цепочечных команд в том, что они, кроме обработки те-

кущего элемента цепочки, корректируют содержимое определенных реги-

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

Основные операции-примитивы обработки цепочек:

пересылка цепочки;

сравнение цепочек;

сканирование цепочки;

загрузка элемента из цепочки;

сохранение элемента в цепочке;

получение элементов цепочки из порта ввода-вывода;

вывод элементов цепочки в порт ввода-вывода.

Логически к этим командам можно отнести и так называемые пре-

фиксы повторения. Они предназначены для использования цепочечными командами.

Эти префиксы повторения указываются перед нужной цепочечной командой в поле метки. Цепочечная команда без префикса выполняется один раз. Размещение префикса перед цепочечной командой заставляет ее

2

выполняться в цикле. Различия приведенных префиксов — в основании, по которому принимается решение о циклическом выполнении цепочечной команды: по состоянию регистра ЕСХ/СХ или по флагу нуля ZF.

Префикс повторения REP (REPeat) используется с командами, реа-

лизующими операции-примитивы пересылки и сохранения элементов це-

почек, — соответственно, MOVS и STOS. Префикс REP заставляет данные команды выполняться, пока содержимое в ЕСХ/СХ не станет равным 0.

При этом цепочечная команда, перед которой стоит префикс, автоматиче-

ски уменьшает содержимое ЕСХ/СХ на единицу. Та же команда, но без префикса, этого не делает.

Префиксы повторения REPE (REPeat while Equal) и REPZ (REPeat while Zero) являются абсолютными синонимами. Они заставляют цепочеч-

ную команду выполняться до тех пор, пока содержимое ЕСХ/сх не равно 0

или флаг ZF равен 1. Как только одно из этих условий нарушается, управ-

ление передается следующей команде программы. Благодаря возможности анализа флага ZF наиболее эффективно эти префиксы можно использовать с командами CMPS и SCAS для поиска различающихся элементов цепо-

чек.

Префиксы повторения REPNE (REPeat while Not Equal) и REPNZ

(REPeat while Not Zero) также являются абсолютными синонимами. Их действие на цепочечную команду несколько отличается от действий пре-

фиксов REPE/REPZ. Префиксы REPNE/REPNZ заставляют цепочечную команду циклически выполняться до тех пор, пока содержимое ЕСХ/СХ не равно нулю или флаг ZF равен нулю. При нарушении одного из этих усло-

вий работа команды прекращается. Данные префиксы также можно ис-

пользовать с командами CMPS и SCAS, но для поиска совпадающих эле-

ментов цепочек.

Цепочка-источник, адресуемая операндом адрес_источника, может находиться в текущем сегменте данных, определяемом регистром DS. Це-

3

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

Допускается замена (с помощью префикса замены сегмента) только реги-

стра DS, регистр ES подменять нельзя. Вторые части адресов (смещения цепочек) также находятся в строго определенных местах. Для цепочки-

источника это регистр ESI/SI (Source Index register — индексный регистр источника). Для цепочки-получателя это регистр EDI/DI (Destination Index register — индексный регистр приемника).

Полные физические адреса для операндов цепочечных команд сле-

дующие:

адрес_источника — пара ds:esi/si;

адрес_приемника — пара es:edi/di.

Команды, реализующие операцию-примитив пересылки цепочек,

производят копирование элементов из одной области памяти (цепочки) в

другую. Размер элемента определяется применяемой командой. Ассемблер предоставляет в распоряжение программиста четыре команды, работаю-

щие с разными размерами элементов цепочки:

MOVS адрес_приемника,адрес_источника — переслать цепочку

(MOVe String);

MOVSB — переслать цепочку байтов (MOVe String Byte);

MOVSW — переслать цепочку слов (MOVe String Word);

MOVSD — переслать цепочку двойных слов (MOVe String

Double word).

Команды, реализующие операцию-примитив сравнения цепочек,

производят сравнение элементов цепочки-источника с элементами цепоч-

ки-приемника. Ситуация с набором команд и методами работы с ними ана-

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

4

CMPS адрес_приемника,адрес_источника — сравнить строки

(CoMPare String);

CMPSB — сравнить строку байтов (CoMPare String Byte);

CMPSW — сравнить строку слов (CoMPare String Word);

CMPSD — сравнить строку двойных слов (CoMPare String

Double word).

Команды, реализующие операцию-примитив сканирования цепочек,

производят поиск некоторого значения в области памяти. Логически эта область памяти рассматривается как последовательность (цепочка) эле-

ментов фиксированной длины размером 8, 16 или 32 бита. Искомое значе-

ние предварительно должно быть помещено в один из регистров

AL/AX/EAX. Выбор конкретного регистра из этих трех должен быть со-

гласован с размером элементов цепочки, в которой осуществляется поиск.

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

ром элемента:

SCAS адрес_приемника — сканировать цепочку (SCAning

String);

SCASB — сканировать цепочку байтов (SCAning String Byte);

SCASW — сканировать цепочку слов (SCAning String Word);

SCASD — сканировать цепочку двойных слов (SCAning String

Double Word).

Операция-примитив загрузки элемента цепочки в аккумулятор поз-

воляет извлечь элемент цепочки и поместить его в регистр-аккумулятор

AL, АХ или ЕАХ. Эту операцию удобно использовать вместе с поиском

(сканированием) с тем, чтобы, найдя нужный элемент, извлечь его (напри-

мер, для изменения). Возможный размер извлекаемого элемента определя-

ется применяемой командой. Программист может использовать четыре

5

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

тами разного размера:

LODS адрес_источника — загрузить элемент из цепочки (LOaD String) в регистр аккумулятор AL/AX/EAX;

LODSB — загрузить байт из цепочки (LOaD String Byte) в ре-

гистр AL;

LODSW — загрузить слово из цепочки (LOaD String Word) в ре-

гистр АХ;

LODSD — загрузить двойное слово (LOaD String Double Word)

из цепочки в регистр ЕАХ.

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

Эту операцию удобно использовать вместе с операциями поиска (сканиро-

вания) SCANS и загрузки LODS с тем, чтобы, найдя нужный элемент, из-

влечь его в регистр и записать на его место новое значение. Команды, под-

держивающие эту операцию-примитив, могут работать с элементами раз-

мером 8, 16 или 32 бита. Команды сохранения элемента цепочки из реги-

стра-аккумулятора, работающие с элементами разного размера:

STOS адрес_приемника — сохранить в цепочке элемент (STOre String) из регистра-аккумулятора AL/AX/EAX;

STOSB — сохранить в цепочке байт (STOre String Byte) из реги-

стра AL;

STOSW — сохранить в цепочке слово (STOre String Word) из ре-

гистра АХ;

STOSD — сохранить в цепочке двойное слово (STOre Siring Double Word) из регистра ЕАХ.

6

ТЕХНОЛОГИЯ РАБОТЫ

ЗАДАНИЕ 1. ПОИСК И ЗАМЕНА СИМВОЛА В СТРОКЕ.

1.Ознакомьтесь с программой, которая в заданной строке заменяет символы а на *.

2.Пример программы:

1#include "stdafx.h"

2#include <iostream>

3#include <string.h>

4#include "conio.h"

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

6

setlocale(0, "rus");

7

char name[]="badalandabad";

8

printf("Первоначальная срока: %s", name);

9

_asm {

10

lea ebx, name

11

mov ecx, 12

12

lab:

13

mov ah, [ebx]

14

cmp ah, 61h

15

jnz lab2

16

mov [ebx], 2Ah

17

lab2:

18

inc ebx

19

loop lab

20

}

21

printf("\nОтредактированнаясрока: %s", name);

22

getch();

23

return 0;

24

}

3. Реализуйте данный алгоритм применительно к своему варианту:

Вариант

Задание

1

Заменить заглавные символы на строчные

2

Заменить строчные символы символом ‘ * ‘

3

Заменить заглавные символы символом ‘ $ ’

4

Найти в строке символ ‘a’ и заменить его символом ‘# ’, а

 

символ ‘o ‘ на ‘*’

5

Найти в строке символ ‘m’ и заменить его символом ‘&’ , а

 

символ ‘n’ пробелом

 

7

6

Найти в строке символ ‘e’ и заменить его символом ‘$’, ес-

 

ли это строчная буква и символом ‘@’– если заглавная.

7

Найти в строке символ ‘r’ и заменить его символом ‘?’, ес-

 

ли это строчная буква и символом ‘!’– если заглавная.

8

Найти в строке символ ‘k’ и заменить его символом ‘^’, ес-

 

ли это строчная буква и символом ‘~’ – если заглавная.

9

Найти в строке символ ‘o’ и заменить его символом ‘<’, ес-

 

ли это строчная буква и символом ‘>’– если заглавная.

10

Найти в строке символ ‘u’ и заменить его символом ‘$’, ес-

 

ли это строчная буква и символом ‘+’– если заглавная.

ТРЕБОВАНИЯ БЕЗОПАСНОСТИ ТРУДА

При выполнении лабораторной работы необходимо соблюдать об-

щие правила техники безопасности:

использовать ПК только в соответствии с их назначением;

не размещать на корпусе ПК посторонние предметы (тетради,

книги, карандаши и т.п.);

оберегать ПК от толчков, ударов, сотрясений;

немедленно поставить в известность оператора ИВЦ об обна-

ружении задымления, загорания, пожара;

немедленно сообщить оператору ИВЦ обо всех неисправностях в работе ПК.

СОДЕРЖАНИЕ ОТЧЕТА

Отчѐт по лабораторной работе на листах формата А4, который дол-

жен содержать: цель работы и выполненные задания по лабораторной ра-

боте.

8

Соседние файлы в папке 3к5с Архитектура информационных систем