Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Регистр программного счётчик (указатель инструкций)
Указатель команд содержит смещение следующей подлежащей выполнению команды. Этот регистр непосредственно недоступен программисту, но загрузка и изменение его значения производятся различными командами управления, к которым относятся команды условных и безусловных переходов, вызова процедур и возврата из процедур.
EIP/IP — регистр-указатель команд. Этот регистр имеет разрядность 32/16 бит и содержит смещение следующей подлежащей выполнению команды относительно содержимого сегментного регистра CS в текущем сегменте команд.
Регистр флагов Флаг – это бит, принимающий значение 1 («флаг установлен») и значение 0 («флаг сброшен»). Процессор имеет регистр флагов, содержащий набор флагов, отражающий текущее состояние процессора.
· DF (Direction) — флаг направления. Управляет направлением обработки строк данных: DF=0 — от младших адресов к старшим, DF=1 — от старших адресов к младшим (для специальных строковых команд). · IF (Interrupt) — флаг прерывания. Если значение этого бита равно 1, то прерывания разрешены, иначе — запрещены. · TF (Trap) — флаг трассировки. Используется отладчиком для выполнения программы по шагам.
Признаки результата устанавливаются после выполнения арифметических и логических команд:
· SF (Sign) — знак результата, равен знаковому биту результата операции. Если равен 1, то результат — отрицательный. · ZF (Zero) — флаг нулевого результата. ZF=1, если результат равен нулю. · PF (Parity) — признак чётности результата. · CF (Carry) — флаг переноса. CF=1, если при сложении/вычитании возникает перенос/заём из старшего разряда. При сдвигах хранит значение выдвигаемого бита. · AF (Auxiliary) — флаг дополнительного переноса. Используется в операциях с упакованными двоично-десятичными числами. · OF(Overflow) — флаг переполнения. CF=1, если получен результат за пределами допустимого диапазона значений.
Код и данные. генерация кода ассемблером. выполнение кода процессором Понятия код и данные условны:
· Код располагается там, где располагаются команды, которые исполняются процессором; · Данные располагаются там, откуда их считывают или куда записывают выполняемые команды.
Ассемблер:
· Генерирует массив байт, последовательно просматривая текст программы; · Полученный массив записывает «как есть» в выходной файл.
При запуске программы операционной системой считывается:
· Используемый файл с диска в ОЗУ и передаёт управление на начало программы; · Присваивает (E)IP значение, равное адресу первой команды программы;
С точки зрения процессора, программа — просто массив байт в памяти, как и данные.
Директивы определения данных. синтаксис, объявление «массивов». инициализированные и неинициализированные данные Язык программирования «Ассемблер» нуждается в объявлении данных в программе. Для этого существуют директивы объявления данных.
Объявлять данные очень просто — например, чтобы объявить байт со значением 5 достаточно написать: x db 5 где x — название нашей переменной или константы,db — директива объявления байта, а 5 — значение. С помощью названия в программе можно будет обращаться к ячейке памяти, содержащей наш байт. Вообще, название не обязательно и можно его не писать, если оно не требуется: db 5
Иногда в программе требуется объявить массив, то есть несколько переменных одинакового размера, расположенных в памяти друг за другом. Например, чтобы объявить массив из 5 двухбайтных чисел можно написать: array1 dw 1,2,3,4,5 где array1 — название массива, 1,2,3,4,5 — значения элементов. Вместо array1 компилятор FASM будет подставлять в программу адрес начала массива, то есть адрес первого элемента.
Для объявления повторяющихся элементов можно использовать такую запись (объявляем массив из 5 байтов, равных 1): array2 db 5 dup(1)
Данные могут быть инициализированными и неинициализированными. Для инициализированных данных определяется некоторое начальное значение. Неинициализированные данные определяются без задания начального значения (говорят, что их начальное значение является неопределенным). В директивах определения данных неинициализированные данные указываются с помощью символа «?». Команды пересылки. MOV и XCHG Команда MOV копирует содержимое второго операнда в первый операнд. При этом содержимое второго операнда не изменяется.Команда MOV не воздействует на флажки, состояние флажков не изменяется. Пример: mov ah,9
Команда XCHG обменивает содержимое двух своих операндов. Значение, которое было до выполнения команды в первом операнде, оказывается в результате во втором операнде и наоборот. Пример:
xchgax, bx
Каждый из операндов может быть регистром или ячейкой памяти. Однако переставить содержимое двух регистров можно, а двух ячеек памяти – нет. Операнды должны иметь одинаковый размер. Команда не меняет флаги.
|
||
Последнее изменение этой страницы: 2018-04-12; просмотров: 275. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |