Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Директива SEGMENT




Лекция 4. Организация программ на языке ассемблера

Команды работы со строками

В процессоры Intel 8086 были включены команды последовательной пакетной обработки данных. Эти команды очень напоминают функции для работы со строками в языках высокого уровня, однако могу применяться для произвольных действий. При работе этих команд процессор автоматически модифицирует содержимое регистров DI и SI в соответствии с состоянием флага DF и размером операндов. Управление флагом DF осуществляется с помощью команд STD (установить DF=1) и CLD (установить DF=0). Рассмотрим кратко общие формы команд:

MOVS – копирование байта (слова, двойного слова) находящегося в памяти по адресу DS:SI в память по адресу ES:DI

CMPS – сравнение байта (слова, двойного слова) находящегося в памяти по адресу DS:SI с байтом (словом, двойным словом), находящемся по адресу ES:DI

SCAS – сравнение содержимого регистра AL (AX, EAX) с байтом (словом, двойным словом) по адресу ES:DI

LODS – копирует байт (слово, двойное слово), находящийся по адресу DS:SI в регистр AL (AX, EAX)

STOS – копирует регистр AL (AX, EAX) в память по адресу ES:DI

INS, OUTS – пакетная работа с портами ввода вывода.

Для команд работы со строками существует специальный префикс повторения операции, который позволяет избежать создания циклов:

REP - повторяет команду работы со строкой столько раз, сколько указано в регистра CX, уменьшая его при каждом выполнении команды на 1. REP – это префикс команды, указывается непосредственно перед командой пакетной обработки. Существуют также условные формы команды REP – REPZ, REPNZ, REPE и REPNE. Условные формы могут прекратить цикл досрочно в соответствии с состоянием флага ZF.

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

.data

sourсe db «Пересылаемая строка$»

dest db 20 dup (?)

.code

assume ds:@data, es:@data

main: mov ax, @data

mov ds, ax

mov es, ax

cld

lea si, source

lea di, dest

mov cx,20

rep movsb


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

Любые ассемблерные программы содержат по крайней мере один сегмент - сегмент кода. В некоторых программах используется сегмент для стековой памяти и сегмент данных для определения данных. Ассемблерная директива для описания сегмента SEGMENT имеет следующий формат:

имя SEGMENT [параметры]

.

.

имя ENDS

Имя сегмента должно обязательно присутствовать, быть уникальным. Директива ENDS обозначает конец сегмента. Обе директивы SEGMENT и ENDS должны иметь одинаковые имена. Директива SEGMENT может содержать три типа параметров, определяющих выравнивание, объединение и класс.

1. Выравнивание. Данный параметр определяет границу начала сегмента. Обычным значением является PARA, по которому сегмент устанавливается на границу параграфа. В случае отсутствия этого операнда ассемблер принимает по умолчанию PARA.

2. Объединение. Этот элемент определяет объединяется ли данный сегмент с другими сегментами в процессе компоновки после ассемблирования. Возможны следующие типы объединений:

PRIVATE - сегмент не будет объединяться с другими сегментами с тем же именем вне данного модуля;

PUBLIC - заставляет компоновщик объединить все сегменты с одинаковым именем.

COMMON - располагает все сегменты с одним и тем же именем по одному адресу

STACK - определение сегмента стека.

Сегмент стека определяется следующим образом:

имя SEGMENT PARA STACK

3. Класс. Данный элемент, заключенный в апострофы, используется для группирования относительных сегментов при компоновке:

имя SEGMENT PARA STACK 'Stack'




Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 662; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.