Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Загрузка сегментных регистровСодержание книги Поиск на нашем сайте
• Команда: LDS приемник,источник • Назначение: Загрузить адрес, используя DS • Процессор: 8086 • Команда: LES приемник,источник • Назначение: Загрузить адрес, используя ES • Процессор: 8086 • Команда: LFS приемник,источник • Назначение: Загрузить адрес, используя FS • Процессор: 80386 • Команда: LGS приемник,источник • Назначение: Загрузить адрес, используя GS • Процессор: 80386 • Команда: LSS приемник,источник • Назначение: Загрузить адрес, используя SS • Процессор: 80386 Второй операнд (источник) для всех этих команд — переменная в памяти размером в 32 или 48 бит (в зависимости от разрядности операндов). Первые 16 бит из этой переменной загружаются в соответствующий сегментный регистр (DS для LDS, ES для LES и т. д.), а следующие 16 или 32 — в регистр общего назначения, указанный в качестве первого операнда. В защищенном режиме значение, загружаемое в сегментный регистр, всегда должно быть правильным селектором сегмента (в реальном режиме любое число может использоваться как селектор). Другие команды • Команда: NOP • Назначение: Отсутствие операции • Процессор: 8086 NOР — однобайтная команда (код 90h), которая не выполняет ничего, только занимает место и время. Код этой команды фактически соответствует команде XCHG AL,AL. Можно многие команды записать так, что они не будут приводить ни к каким действиям, например: mov ах,ах; 2 байта xchg ах,ах; 2 байта lea bx,[bх+0]; 3 байта (8Dh, 5Fh, 00h, но многие ассемблеры, ; встретив такую команду, реально используют более ; короткую команду lea bx [bх] с кодом 8Dh 1Fh) shl еах,0; 4 байта shrd еах,еах,0; 5 байт
• Префикс: LOCK • Назначение: Префикс блокировки шины данных • Процессор: 8086 На все время выполнения команды, снабженной таким префиксом, будет заблокирована шина данных, и если в системе присутствует другой процессор, он не сможет обращаться к памяти, пока не закончится выполнение команды с префиксом LOCK. Команда XCHG автоматически всегда выполняется с блокировкой доступа к памяти, даже если префикс LOCK не указан. Этот префикс можно использовать только с командами ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD и XCHG.
• Команда: UD2 • Назначение: Неопределенная операция • Процессор: Р6 Эта команда всегда вызывает ошибку «неопределенная операция» (исключение #UD). Впервые она описана как таковая для Pentium Pro, но во всех предыдущих процессорах эта команда (код 0Fh 0Bh) не была определена и, естественно, приводила к такой же ошибке. UD2 предназначена для тестирования программного обеспечения, в частности операционных систем, которые должны уметь корректно обрабатывать такую ошибку. Название команды происходит от команды UD (код 0Fh 0FFh), которая была определена AMD для процессоров AMD K5.
• Команда: CPUID • Назначение: Идентификация процессора • Процессор: 80486 CPUID сообщает информацию о производителе, типе и модификации процессора, о наличии и поддержке различных расширений. Команда CPUID поддерживается Intel, начиная с процессоров Intel 80486DX/SX/DX2 SL, UMC U5S, Cyrix Ml, AMD 80486DX4. Процессор поддерживает эту команду, если возможна установка флага ID в 1 (бит 21 в peгистpe EFLAGS). Результат работы CPUID зависит от значения регистра ЕАХ. Если ЕАХ = 0, CPUID возвращает в ЕАХ максимальное значение, с которым ее можно вызывать (2 для Р6, 1 для Р5), а регистры EBX:ECX:EDX содержат 12-байтную строку — идентификатор производителя (табл. 8). Например, для процессоров Intel регистр ЕВХ содержит «Genu» (756E6547h), ЕСХ содержит «ineI» (49656E69h), a EDX — «ntel» (6C65746Eh). Если ЕАХ = 1, CPUID возвращает в ЕАХ информацию о версии процессора, а в EDX — информацию о поддерживаемых расширениях, относящихся к работе процессора в защищенном режиме. Значения битов EAX следующие: биты 3 – 0 — модификация; биты 7 – 4 — модель; биты 11 – 8 — семейство (3 для 386, 4 для 486, 5 для Pentium, 6 для Pentium Pro); биты 13 – 12 — тип (0 — OEM, I — Overdrive, 2 — Dual); биты 31–14 зарезервированы и равны нулю.
ДИРЕКТИВЫ И ОПЕРАТОРЫ АССЕМБЛЕРА
Каждая программа на языке ассемблера содержит кроме команд процессора еще и специальные инструкции, указывающие самому ассемблеру, как организовывать различные секции программы, где располагаются данные, а где команды, позволяющие создавать макроопределения, выбирать тип используемого процессора, организовывать связи между процедурами и т. д. Эти инструкции условно разделяют на директивы и операторы. Разные ассемблеры используют различные наборы директив. Ассемблер TASM поддерживает набор директив MASM наряду с несовместимым собственным, известным как Ideal Mode. Все рассматриваемые ниже примеры рассчитаны на режим MASM, то есть для их подготовки можно использовать оба ассемблера.
Структура программы Программа на языке ассемблера состоит из строк, имеющих следующий вид: метка команда/директива операнды; комментарий Все эти поля могут быть необязательными. Метка может быть любой комбинацией букв английского алфавита, цифр и символов «_», «$», «@», «?», но цифра не может быть первым символом метки, а символы «$» и «?» иногда могут иметь специальные значения и обычно не рекомендуются к использованию. Большие и маленькие буквы по умолчанию не различаются, но различие обычно можно включить, задав определенную опцию в командной строке ассемблера. Во втором поле, поле команды, может располагаться команда процессора, которая будет транслирована в исполнимый код, или директива, которая не приводит к появлению нового кода, а управляет работой самого ассемблера. В поле операндов располагаются требуемые командой или директивой операнды (то есть нельзя указать операнды и не указать команду или директиву). И наконец, в поле комментариев, начало которого отмечается символом «;» (точка с запятой), можно написать любые символы, — текст от символа «;» до конца строки не анализируется ассемблером. Если метка располагается перед командой процессора, сразу после нее всегда ставится оператор «:» (двоеточие), который указывает ассемблеру, что надо создать переменную с этим именем, содержащую адрес текущей команды:
metka: mov ax,5 Если метка стоит перед директивой ассемблера, она обычно оказывается одним из операндов этой директивы и двоеточие не ставится. Рассмотрим директивы, работающие напрямую с метками и их значениями, — LABEL, EQU и =.
метка label тип Директива LABEL определяет метку и задает ее тип. Тип может быть mov метка,0 запишет в память байт (слово, двойное слово и т. д.), заполненный нулями, а команда call метка выполнит ближний или дальний вызов подпрограммы. С помощью директивы LABEL удобно организовывать доступ к одним и тем же данным, как к байтам, так и к словам, определив перед данными две метки с разными типами.
метка equ выражение Директива EQU присваивает метке значение, которое определяется как результат целочисленного выражения в правой части. Результатом этого выражения может быть целое число, адрес или любая строка символов:
truth equ 1 message1 equ ‘Try again$‘ var2 equ 4[si] cmp ax,truth; cmp ax,1 db message1; db 'Try again$' mov ax,var2; mov ax, 4[si] Директива EQU чаще всего используется для введения параметров, общих для всей программы, аналогично команде препроцессора языка С #define.
метка = выражение Директива «=» эквивалентна EQU, но определяемая ею метка может принимать только целочисленные значения. Кроме того, метка, определенная директивой «=», может быть переопределена. Каждый ассемблер предлагает целый набор специальных предопределенных меток — это может быть текущая дата (@date или??date), тип процессора (@cpu) или имя того или иного сегмента программы. Одна из предопределенных меток, поддерживаемая рассматриваемыми нами ассемблерами, — «$». Метка «$» всегда соответствует текущему адресу. Например, команда jmp $ выполняет безусловный переход на саму себя, так что создается вечный цикл из одной команды.
|
|||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-08-15; просмотров: 258; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.25.26 (0.007 с.) |