Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Дизассемблирование и отладка





Знание ассемблера позволяет «вскрыть» любую программу дизассемблером и изучить механизм её работы. Ассемблер может помочь при отладке при возникновении ошибок в компиляторах.

Язык Ассемблера - это язык программирования низкого уровня. Для начала вы должны ознакомиться с общей структурой процессора, чтобы в дальнейшем понимать, о чем идет речь.

 

2.

На рис. 1 представлена структурная схема микропроцессора 8086, в состав которого входят: устройство управления (УУ), арифметико-логическое устройство (АЛУ), блок преобразования адресов и регистры.

 

Арифметико-логическое устройство (АЛУ) производит операции над двумя величинами для получения результата и выработки ряда признаков (результат меньше нуля, равен нулю, или больше нуля и т. д.).

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

Регистр команд – регистр, служащий для размещения текущей команды.

Регистр адреса – регистр, содержащий адрес ячейки памяти, из которой будет считана команда (операнд) или в которую требуется записать результат выполнения команды.

Регистр(ы) данных – используются в качестве буфера (промежуточного хранилища информации) между памятью и остальными регистрами процессора, через регистр данных пересылаются в процессор команды (операнды) и передаются в память результаты обработки.

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

Регистр состояния (флаговый регистр) – регистр, хранящий признаки результата выполнения последней операции; эти признаки используются для организации работы команд перехода.

Устройство управления дешифрирует коды команд и формирует необходимые управляющие сигналы. Арифметико-логическое устройство осуществляет необходимые арифметические и логические преобразования данных. В блоке преобразования адресов формируются физические адреса данных, расположенных в основной памяти. Наконец, регистры используются для хранения управляющей информации: адресов и данных.

 

3.

Необходимо знать, какие регистры процессора существуют и как их можно использовать. Все процессоры архитектуры x86 (даже многоядерные, большие и сложные) являются дальними потомками Intel 8086 и совместимы с его архитектурой. Это значит, что программы на ассемблере 8086 будут работать и на старших версиях процессоров.

Все внутренние регистры процессора Intel 8086 являются 16-битными:

Всего процессор содержит 12 программно-доступных регистров, а также регистр флагов (FLAGS) и указатель команд (IP).

Регистры общего назначения (РОН) AX, BX, CX и DX используются для хранения данных и выполнения различных арифметических и логических операций. Кроме того, каждый из этих регистров поделён на 2 части по 8-бит, с которыми можно работать как с 8-битными регистрами (AH, AL, BH, BL, CH, CL, DH, DL). Младшие части регистров имеют в названии букву L (от слова Low), а старшие H (от слова High). Некоторые команды неявно используют определённый регистр, например, CX может выполнять роль счетчика цикла.

Индексные регистры предназначены для хранения индексов при работе с массивами. SI (Source Index) содержит индекс источника, а DI (Destination Index) — индекс приёмника, хотя их можно использовать и как регистры общего назначения.

Регистры-указатели BP и SP используются для работы со стеком. BP (Base Pointer) позволяет работать с переменными в стеке. Его также можно использовать в других целях. SP (Stack Pointer) указывает на вершину стека. Он используется командами, которые работают со стеком. (Про стек я подробно расскажу в отдельной части учебного курса)

Сегментные регистры CS (Code Segment), DS (Data Segment), SS (Stack Segment) и ES (Enhanced Segment) предназначены для обеспечения сегментной адресации. Код находится в сегменте кода, данные — в сегменте данных, стек — в сегменте стека и есть еще дополнительный сегмент данных. Реальный физический адрес получается путём сдвига содержимого сегментного регистра на 4 бита влево и прибавления к нему смещения (относительного адреса внутри сегмента).

COM-программа всегда находится в одном сегменте, который является одновременно сегментом кода, данных и стека. При запуске COM-программы сегментные регистры будут содержать одинаковые значения.

Указатель команд IP (Instruction Pointer) содержит адрес команды (в сегменте кода). Напрямую изменять его содержимое нельзя, но процессор делает это сам. При выполнении обычных команд значение IP увеличивается на размер выполненной команды. Существуют также команды передачи управления, которые изменяют значение IP для осуществления переходов внутри программы.

Регистр флагов FLAGS содержит отдельные биты: флаги управления и признаки результата. Флаги управления меняют режим работы процессора:

· D (Direction) — флаг направления. Управляет направлением обработки строк данных: DF=0 — от младших адресов к старшим, DF=1 — от старших адресов к младшим (для специальных строковых команд).

· I (Interrupt) — флаг прерывания. Если значение этого бита равно 1, то прерывания разрешены, иначе — запрещены.

· T (Trap) — флаг трассировки. Используется отладчиком для выполнения программы по шагам.

Признаки результата устанавливаются после выполнения арифметических и логических команд:

· S (Sign) — знак результата, равен знаковому биту результата операции. Если равен 1, то результат — отрицательный.

· Z (Zero) — флаг нулевого результата. ZF=1, если результат равен нулю.

· P (Parity) — признак чётности результата.

· C (Carry) — флаг переноса. CF=1, если при сложении/вычитании возникает перенос/заём из старшего разряда. При сдвигах хранит значение выдвигаемого бита.

· A (Auxiliary) — флаг дополнительного переноса. Используется в операциях с упакованными двоично-десятичными числами.

· O (Overflow) — флаг переполнения. CF=1, если получен результат за пределами допустимого диапазона значений.

 

Date: 2016-05-24; view: 454; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию