Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Параметры директивы SEGMENT.
1) Параметры выравнивания начального адреса сегмента PARA – сегмент на границе параграфа. ХХХХ0 => адрес кратен 16. 2) Информация, необходимая для программы- компоновщика: TLINK Атрибут класса сегмента представляет строку, заключенную в кавычки, которая помогает определить компоновщику нужный порядок размещения сегментов, когда он помещает их в программу из разных модулей. Компоновщик группирует вместе все сегменты с одинаковым классом. Кодовый сегмент программы использует класс ‘CODE’. STACK должен быть в любой компонуемой программе (хотя бы один сегмент, “стек”). В многомодульной программе сегмент стека общий (до 64 Кб). Параметры директивы SEGMENT имеют тип ключевых параметров (могут идти в произвольном порядке через пробел или могут комбинироваться) Директива SEGMENT начинает описание сегмента, завершает сегмент директива ENDS Директива ASSUME ASSUME < сегментный регистр> двоеточие < имя сегмента> Эта директива служит для указания транслятору информации о связи между сегментным регистром и адресом в оперативной памяти. ASSUME DS: A_DATA, CS: A _COD Транслятор на основании этой директивы строит адреса операндов в памяти в виде смещения относительно регистра DS, полагая, что регистр DS содержит адрес A_DATA. В одной директиве ASSUME можно указать привязку четырех сегментных регистров через запятую. Занесение соответствующих адресов в сегментные регистры CS и SS выполняет загрузчик, а DS и ES необходимо загружать программно. MOV AX, A_DATA МOV DS, AX
Директива END [метка] - для обозначения конца файла исходного модуля; [метка] служит для указания метки первой исполняемой команды главной программы.
Директивы определения данных Эти директивы обычно размещаются в сегменте данных. С помощью них можно определить именованные константы, каждая из которых занимает соответствующее число байтов, резервировать поля под данные. Синтаксис директивы Define [ Имя] Dх выражение 1[, выражение 2 ] Где х модификатор, состоящий из одной буквы(B, W, D).
DB - определить поле длиной в byte DW – определить поле длиной в слово. DD – определить поле длиной в два слова.
Для простого резервирования памяти в поле операнда ставят знак вопроса? X DB? Y DB 100 dup (? ); выделить 100 байт памяти Ключевое слово dup обозначает знак повторителя При определении констант операнд(выражение) может представлять собой константу в двоичной, десятичной, шестнадцатеричной системе исчисления. Инициализация таблицы данных: А DB 4, -4, 7, 80, 100; ; адреса констант: 4® А+0, -4®А+1, 7® А+2, 80® A+3, 100 ® А+4 В DW 1000, -400, 7, 8; {integer} ; адреса констант 1000 ® B +0, -400 ® B+2, 7® B+2, 8 ® B+6
Выражение может быть задано адресом памяти: A DB 4, -4 AD DW A; после трансляции в двухбайтовое поле с именем АD будет записано 16- разрядное расстояние адреса А от начала сегмента данных. Выражения могут содержать следующие операции: +, -, *, / (деление нацело).MOD, Shr, Shl. логические операции: NOT, OR, XOR, AND Специальные обозначения $ Значения счётчика адреса - (текущее смещение). offset имя; смещение внутри сегмента Примеры использования X dw 5; Y DW offset x; z DW $; текущее смещение.
ЛЕКЦИЯ №2 Система команд МП 8086 Компьютеры изначально были предназначены для выполнения математических операций над целыми числами. В набор команд процессора 8086 не входят операции с плавающей точкой, возведения в степень, cos, sin и т.д Процессор 8086 имеет 92 команды, улучшенные процессоры еще больше типов команд. Команды языка Ассемблер можно разделить на 5 классов по их функциям.
Операторы машинных команд следующий формат: [метка: ] мнемокод операции [операнды] Код операции (КОП) показывает, что делать; Поле операнды указывает, над какими данными выполняется действие. В некоторых командах операнды могут отсутствовать. Например, команда CLD не имеет операнда, предназначена для установки флага DF в состояние 0. Пример команды с одним операндом: div x - делить на Х. Команда с двумя операндами: приемник и источник. К регистру АХ прибавить константу 4: add AX, 4 По первому адресу пишется приёмник, а по второму - источник. Способы адресации операндов В зависимости от спецификации и местоположения операндов в языке Ассемблер различают следующие способы адресации:
Команды передачи данных Команды передачи данных выполняют копирование или обмен данными. Они имеют характер подготовительно - завершающей операции, т.е. используются для начальной подготовки адресов и данных, а также для сохранения и вывода полученного результата. FКоманды передачи данных не меняют регистр флагов! В этой группе команды 1. Общая пересылка данных MOV приемник, источник 2. Обмен данных хchg приемник, источник 3. Работа со стеком o Извлечение из стека слова POP приемник o Занесение слова в стек PUSH источник o Команды пересылки флагов LAHF, SAHF, POPF, PUSHF
4. Команды пересылки адреса LEA, LDS, LES
Рассмотрим первой общую пересылку данных. Она имеет два операнда. MOV приемник, источник
Все возможные комбинации операндов команды MOV ниже представлены на схеме:
Из схемы видно, что источником команды пересылки могут быть константы, регистры и поля памяти (байт или слово). Приемником могут быть только регистры и поля памяти. Адресация операндов команды MOV · Непосредственная адресация источника. MOV AX, 5 MOV AX, -5 MOV Ah, ‘H’ При исполнении команды не тратится время на перемещение операнда, так как при трансляции команды непосредственный операнд-константа становится частью команды. Константу нельзя переслать в сегментные регистры. · Регистровая адресация, то есть используют АХ, ВХ, СХ, DХ, DI, SI, SP, BP и 8-битовые регистры AL, BH, BL (тип регистра определяет разрядность операции).
MOV BL, AL; - 8 бит. MOV BX, CX; - 16 бит · прямая адресация имеет место, когда один из операндов находится в памяти – переменная (переменная +(-) выражение const) MOV AX, A; A имеет тип WORD MOV A, BX MOV A, 120 · косвенная адресация имеет место при работе со стеком при передаче данных из одной процедуры в другую и при работе с массивами. · косвенная регистровая: [BX], [BP], [DI], [SI] MOV BX, offset A; в BХ заносится смещение переменной А, внутри сегмента. MOV AX, [BX]; в регистр AX копируется значение из поля A. Исполнительный адрес вычисляется: Ea = (DS) * 16 + (BX) = [ds]: offset A По умолчанию DS – регистр сегмента данных. Если имеется другой регистр, то его записываем явно [ES]: [DI] Нельзя одновременно в одном операнде использовать два индексных или базовых регистра. Обмен данных Команда xchg производит обмен данных между операндами: Регистр – регистр Регистр – память Память – регистр В обмене не может участвовать сегментный регистр! Команда PUSH источникc помещает содержимое источника на текущую вершину стека с предварительным уменьшением указателя регистра стека SP –2. Пример. PUSH A; содержимое источника копируется на вершину стека 1. SP: = SP - 2 2. (A)à ([SS: ] [SP + 0 ])
Команда POP приемник извлекает содержимое слова из вершины стека и пересылает его в поле приемника, после чего содержимое SP увеличивается на 2:. Пример. POP A 3. ([SS: ] [SP + 0 ]) ® приемник 4. SP: = SP + 2 Команды пересылки адреса · LEA регистр, источник · LDS регистр, источник · LES регистр, источник
LEA регистр, -память регистр - обязательно 16- разрядный. Эта команда загружает в регистр-приемник исполнительный адрес источника. LEA AX, A Ограничения: · 1-й операнд не может быть сегментным регистром · источник не может быть непосредственным операндом или регистром. LDS регистр, источник LES регистр, источник Эти команды производят загрузку адреса в виде двойного слова, причем источник должен быть объявлен с помощью директивы DD. LDS –это команда загрузки указателя с использованием регистра DS: 1-е слово загружается в регистр общего назначения 2-е слово загружается в регистр DS. LES – это команда загрузки указателя с использованием регистра ES: 1-е слово загружается в регистр общего назначения 2-е слово загружается в регистр ES. Команды пересылки флагов Они НЕ имеют операндов. · LAHF; команда пересылает содержимое регистра флагов в регистр АН · SAHF; команда пересылает содержимое регистра АН в регистр флагов · PUSHF; команда помещает регистр флагов на текущую вершину стека. · РОРF ; команда восстанавливает из вершины стека регистр флагов.
Эти команды используются при работе с сопроцессором, выполнении команд прерывания.
Популярное:
|
Последнее изменение этой страницы: 2016-04-11; Просмотров: 903; Нарушение авторского права страницы