КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |