Архитектура микропроцессора Intel x86 — КиберПедия 

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Архитектура микропроцессора Intel x86

2020-11-19 86
Архитектура микропроцессора Intel x86 0.00 из 5.00 0 оценок
Заказать работу

 В системном программировании под архитектурой микропроцессора (МП) понимают перечень регистров процессора, их разрядность и способ адресации оперативной памяти.

Регистр – внутренняя память процессора. Будем рассматривать 32 разрядную архитектуру процессора. Соответственно разрядность каждого регистра процессора будет равна 32 битам. Регистр процессора используется для временного хранения кодов программы в процессе ее выполнения процессором. Далее рассмотрим классификацию регистров процессора.

Регистры общего назначения

Регистры состоят из двух частей старшей и младшей. Применяются эти регистры для временного хранения данных и адресов. К этим регистрам относятся EAX, EBX, ECX, EDX. Буква E означает enhanced – расширенный регистр. Дело в том 32 разрядная архитектура MП Intel является дальнейшим развитием серии шестнадцати разрядных процессоров Intel. Чтобы сохранить преемственность при разработке программного обеспечения наименования шестнадцати разрядных регистров были дополнены ключевой буквой E.

На рисунке 1.1 показана структура регистра общего назначения.

Рис. 1.1. Регистр общего назначения

Регистр общего назначения состоит из двух шестнадцати битных частей. Младшие шестнадцать битов имеют условное обозначение RX. Где R буква регистра. Кроме того младшая часть делится на две части по восемь бит каждая часть. Эти части условно обозначаются RH и RL.

C учетом выше сказанного регистра EAX будет состоять из следующих частей:

AX – двухбайтовая младшая часть.

AH, AL - однобайтовые части.

Эти условные обозначения можно использовать в командах МП для обращения к соответствующим частям регистра процессора. Аналогично устроены регистры EBX, ECX, EDX.

Индексные регистры

К этим регистрам относятся ESI, EDI, ESP, EBP.

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

Регистр EBP – служит для указателя базы в стековых структурах, а регистр ESP – указатель вершины стека.

Кроме того для адресации очередной команды для выполнения МП использует регистр EIP. Этот регистр недоступен для изменения с помощью программного кода.

В отличие от регистров общего назначения эти регистры не делятся на составные части.

Сегментные регистры

Код исполняемой программы представляет собой блоки участков оперативной памяти, которые называются сегментами. Для адресации этих участков оперативной памяти МП использует регистры:

CS, DS, ES, SS.

Назначение регистров:

· CS – сегмент команд программы.

· DS – сегмент данных.

· ES – сегмент дополнительных данных.

· SS – сегмент стека.

При написании программ для 32 двух разрядной архитектуры эти регистры не используют в программном коде.

Регистр флагов

Это регистр условно называется FLAGS – регистр состояния процессора. Регистр содержит именованные биты, которые используются для анализа состояния МП. В таблице 1.1 приводится описание наиболее важных битов с точки зрения системного программирования флагов.

Таблица 1.1

Биты регистра флагов

Назначение Флаг
Перенос или заем при выполнении арифметических операций CF(Carry Flag)
Устанавливается в 1 если младшие биты результата операции содержат четное число двоичных ед. PF(Parity Flag)
Флаг вспомогательного переноса используется при операциях над упакованным двоично -  десятичными числами. AF(Auxiliary Flag)
Флаг нуля. Устанавливается в 1 если в результате выполнения команды появился результата 0 ZF(Zero Flag)
Флаг знака. Равен 1. Если в результате выполнения команды появилось отрицательное число. SF(Sign Flag)
Флаг переполнения. Выход результата команды за пределы диапазона разрядности регистра процессора OF(Overflow Flag)
Флаг направления. Используется при обработке строк DF(Direction Flag)

Программа формат ELF

При написании программы на языке ассемблера для операционной системы Linux ее текст должен быть написан в соответствии с форматом ELF (Executable and Linkable Format). Создавая такую программу с помощью компилятора FASM (Flat Assembler) программист должен учитывать следующие правила:

· Задать директиву format компилятору для указания типа создаваемого программного кода.

· Указать «точку» входа entry. Точка входа это метка – адрес первой исполняемой команды процессором. С этой команды начинается выполнение команд программы.

· Задать сегмент (segment) команд программы.

· Задать сегмент (segment) кодов – данных программы.

C учетом этих правил структура ассемблерной программы примет вид:

format ELF executable 3

entry start

 

segment readable executable

start:

;Исполняемые команды программы

 

segment readable writeable

;Код данных

Для указания формата ELF программы используется директива format с ключевыми словами ELF executable. Цифра 3 – код операционной системы Linux

При задании сегмента нужно указать, как будет использованы его коды процессором. Для сегмента кодов команд указывают ключевые слова – атрибуты: readable (содержание сегмента можно считывать), executable (коды сегмента – коды команд процессора).

Для сегмента кодов данных программы используют атрибуты readable и writeable. Последний атрибут означает, что команды программы могут, как считывать коды, так и изменять их значения.

В приведенном шаблоне программы точка входа называется start. Это название выбирает программист.

Задание кодов данных

Задание данных программы - кодов происходит в соответствующем сегменте. При этом используются описатели данных:

имя_кода описатель код

Здесь имя_кода – адрес кода в сегменте. Задаются адреса латинскими буквами. Регистр символов не различается. Описатель задает разрядность кода данных (см. таблицу 3.1).

Таблица 3.1.

Описатели кодов данных

Данное Описатель Разрядность
Байт db Байт (восемь бит)
Слово dw Два байта - слово
Двойное слово dd Четыре байта – двойное слово

Значения кодов могут задаваться в десятичной системе исчисления, в двоичной системе, шестнадцатеричной, восьмеричной системе.

Шестнадцатеричный код (code) вводится по одной из схем:

Codeh

Xcode

$code

В конце двоичного кода записывается буква b. Восьмеричный код должен заканчиваться буквой o и начинаться с 0.

Примеры:

code db 0CDh

code1 db 0xFF

code2 db 012o

offset dw 0A10Fh

addr dd 1278FF1Dh

mask db 00001000b

c db?;неопределенное значение.

При задании шестнадцатеричного кода, если он начинается с буквы, то перед буквой нужно задать 0.

Допускается задавать строки и отдельные символы с помощью описателя db в этом случае строка или символ заключаются в пару апострофов ‘. Строка может содержать также коды символов.

Примеры:

mes1 db ‘OK!’     ;строка

mes2 db ‘INPUT:’,10  ;строка с кодами

sym db ‘A’        ;символ

Допускается задание констант в виде K=10. Для определения в процессе компиляции количества байтов в строке используется счетчик текущего адреса $.

Например:

mes db ‘Пример строки символов’

n=$-mes

Чтобы задать буфер для хранения кодов используется директива dup:


Поделиться с друзьями:

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

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.023 с.