Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Регистр программного счётчик (указатель инструкций)




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

 

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 не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...