Программная модель микропроцессора

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    907,65 Кб
  • Опубликовано:
    2013-10-30
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Программная модель микропроцессора

1.Программная модель процессора Intel x86. Назначение, размерность и способы адресации регистров общего назначения (РОН) процессора

программный модель процессор

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

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

К сегментным регистрам относятся регистры cs, ds, ss, es, fs, gs.

Каждый сегментный регистр обеспечивает адресацию 64К памяти, которая называется текущим сегментом. Сегмент выравнен на границу параграфа и его адрес в сегментном pегистре предполагает наличие справа четырех нулевых битов (рис. 1).

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

-    Регистр DS. Регистр сегмента данных содержит начальный адрес сегмента данных. Этот адрес плюс величина смещения, определенная в команде, указывают на конкретную ячейку в сегменте данных. Если программе недостаточно одного сегмента данных, то она имеет возможность использовать еще три дополнительных сегмента данных. Но в отличие от основного сегмента данных, адрес которого содержится в сегментном регистре ds, при использовании дополнительных сегментов данных их адреса требуется указывать явно с помощью специальных префиксов переопределения сегментов в команде. Адреса дополнительных сегментов данных должны содержаться в регистрах es, gs, fs (extension data segment registers).

-    Регистр SS. Регистр сегмента стека содержит начальный адрес в сегменте стека.

-       Регистр ES. Некоторые операции над строками используют дополнительный сегментный регистр для управления адресацией памяти. В данном контексте регистр ES связан с индексным регистром DI. Если необходимо использовать регистр ES, ассемблерная программа должна его инициализировать.

1.2 Регистры РОН

Регистрами общего назначения (РОН), или пользовательские регистры, называют те регистры, которые программист может использовать при написании своих программ. К этим регистрам относятся (рис. 1):

-    восемь 32-битных регистров, которые могут использоваться программистами для хранения данных и адресов:

-       eax/ax/ah/al;

-       ebx/bx/bh/bl;

-       edx/dx/dh/dl;

-       ecx/cx/ch/cl.

Регистры ax, bx, dx, cx в свою очередь делятся на старший разряд и младший разяд. Старшие и младшие разряды состоят из 16-ти бит.

Микропроцессоры i486 и Pentium имеют в основном 32-разрядные регистры. Их количество, за исключением сегментных регистров, такое же, как и у i8086, но размерность больше, что и отражено в их обозначениях - они имеют приставку e (Extended).

Все регистры этой группы позволяют обращаться к своиммладшим разрядам.

Рисунок 1 - Пользовательские регистры микропроцессоров i486 и Pentium

Для самостоятельной адресации можно использовать только младшие 16 и 8-битные части этих регистров, которые образуют регистр с окончанием х. Например, регистр ах является 16-ти разрядным состоит из ah - 8 бит (с 15 по 8 бит) иal - 8 бит (с 7 по 0 бит ), еах - 32-х разрядный регистр.

Старшие 16 бит этих регистров как самостоятельные объекты недоступны. Это сделано для совместимости с младшими 16-разрядными моделями микропроцессоров фирмы Intel. Так как эти регистры физически находятся в микропроцессоре внутри арифметико-логического устройства (АЛУ), то их еще называют регистрами АЛУ.

Каждый регистр общего назначения имеет свое предназначение:

-    eax/ax/ah/al (Accumulatorregister) - аккумулятор - применяется для хранения промежуточных данных. В некоторых командах использование этого регистра обязательно.

-       ebx/bx/bh/bl (Baseregister) - базовыйрегистр - применяется для хранения базового адреса некоторого объекта в памяти.

-       ecx/cx/ch/cl (Countregister) - регистр-счетчик - применяется в командах, производящих некоторые повторяющиеся действия. Его использование зачастую неявно и скрыто в алгоритме работы соответствующей команды. Например, команда организации цикла loop кроме передачи управления команде, находящейся по некоторому адресу, анализирует и уменьшает на единицу значение регистра ecx/cx.

-       edx/dx/dh/dl (Dataregister) - регистр данных - аналогично региструeax/ax/ah/al хранит промежуточные данные. В некоторых командах его использование обязательно, для некоторых команд это происходит неявно.

1.3 Регистровые указатели и индексные регистры


В архитектуре микропроцессора на программно-аппаратном уровне поддерживается такая структура данных, как стек. Для работы со стеком в системе команд микропроцессора есть специальные команды, а в программной модели микропроцессора для этого существуют специальные регистры:

-    esp/sp (StackPointerregister) - регистр указателя стека - содержит указатель вершины стека в текущем сегменте стека.

-       ebp/bp (Base Pointer register) - регистр указателя базы кадра стека -предназначен для организации произвольного доступа к данным внутри стека.

Следующие два регистра используются для поддержки так называемых цепочечных операций, то есть операций, производящих последовательную обработку цепочек элементов, каждый из которых может иметь длину 32, 16 или 8 бит:

-       esi/si (SourceIndexregister) - индекс источника - содержит текущий адрес элемента в цепочке-источнике;

-       edi/di (DestinationIndexregister) - индекс приемника (получателя) - содержит текущий адрес в цепочке-приемнике.

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

Использование жесткого закрепления регистров для некоторых команд позволяет более компактно кодировать их машинное представление.

1.4 Регистры состояния и управления eflags и ip

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

Регистр eflags/flags (flagregister) - регистрфлагов. Разрядностьeflags/flags - 32/16 бит. Отдельные биты данного регистра имеют определенное функциональное назначение и называются флагами. Младшая часть этого регистра полностью аналогична регистру flags для i8086 (рис. 2).

Рисунок 2 - Содержимое регистра flags

Исходя из особенностей использования, флаги регистра eflags/flags можно разделить на три группы:

-    8 флагов состояния.Эти флаги могут изменяться после выполнения машинных команд.Флаги состояния регистраeflagsотражают особенности результата исполнения арифметических или логических операций. Это дает возможность анализировать состояние вычислительного процесса и реагировать на него с помощью команд условных переходов и вызовов подпрограмм.

-       1 флагуправления - df (Directory Flag).Значение флага df определяет направление поэлементной обработки цепочек данных: от начала строки к концу (df = 0) либо наоборот, от конца строки к ее началу (df = 1).

-       5 системных флагов, управляющих вводом/выводом, маскируемыми прерываниями, отладкой, переключением между задачами и виртуальным режимом 8086.Прикладным программам не рекомендуется модифицировать без необходимости эти флаги, так как в большинстве случаев это приведет к прерыванию работы программы.

Регистрeip/ip (Instraction Pointer register) - регистр-указателькоманд.

Регистр eip/ip имеет разрядность 32/16 бит и содержит смещение следующей подлежащей выполнению команды относительно содержимого сегментного регистра cs в текущем сегменте команд. Этот регистр непосредственно недоступен программисту, но загрузка и изменение его значения производятся различными командами управления, к которым относятся команды условных и безусловных переходов, вызова процедур и возврата из процедур. Возникновение прерываний также приводит к модификации регистра eip/ip.

2. Директивы резервирования и инициализации данных в языке ассемблера

.1 Типы данных. Переменные

В программе на ассемблере переменными являются регистры или ячейки памяти, в которых хранятся данные. Существует несколько типов данных-переменных:

1.      Непосредственные данные, представляющие собой числовые или символьные значения, являющиеся частью команды. 20d, 0a2h, 10111b

2.      Данные простого типа, описываемые с помощью ограниченного набора директив резервирования памяти, позволяющих выполнить самые элементарные операции по размещению и инициализации числовой и символьной информации.

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

3.   Данные сложного типа, (массивы, структуры, записи и пр.) которые были введены в язык ассемблера с целью облегчения разработки программ. Сложные типы данных строятся на основе базовых типов, которые являются как бы кирпичиками для их построения. Введение сложных типов данных позволяет несколько сгладить различия между языками высокого уровня и ассемблером

Физическая интерпретация данных простого типа основывается на размерности данных (рис. 3):

·              байт - восемь последовательно расположенных битов, пронумерованных от 0 до 7, при этом бит 0 является самым младшим значащим битом;

·              слово - последовательность из двух байт, имеющих последовательные адреса. Размер слова - 16 бит; биты в слове нумеруются от 0 до 15. Байт, содержащий нулевой бит, называется младшим байтом, а байт, содержащий 15-й бит - старшим байтом. Микропроцессоры Intel имеют важную особенность - младший байт всегда хранится по меньшему адресу. Адресом слова считается адрес его младшего байта. Адрес старшего байта может быть использован для доступа к старшей половине слова.

·              двойное слово - последовательность из четырех байт (32 бита), расположенных по последовательным адресам.

·              учетверенное слово - последовательность из восьми байт (64 бита), расположенных по последовательным адресам.

Рисунок 3 -Основные типы данных микропроцессора

Логическая интерпретация этих типов:

-    Целый тип со знаком - двоичное значение со знаком, размером 8, 16 или 32 бита. Знак в этом двоичном числе содержится в 7, 15 или 31-м бите соответственно. Ноль в этих битах в операндах соответствует положительному числу, а единица - отрицательному. Отрицательные числа представляются в дополнительном коде. Числовые диапазоны для этого типа данных следующие:

-        8-разрядное целое - от -128 до +127;

-       16-разрядное целое - от -32 768 до +32 767;

-       32-разрядное целое - от -231 до +231-1.

-    Целый тип без знака - двоичное значение без знака, размером 8, 16 или 32 бита. Числовой диапазон для этого типа следующий:

-              байт - от 0 до 255;

-              слово - от 0 до 65 535;

-       Указатель на память двух типов:

-         ближнего типа - 32-разрядный логический адрес, представляющий собой относительное смещение в байтах от начала сегмента. Эти указатели могут также использоваться в сплошной (плоской) модели памяти, где сегментные составляющие одинаковы;

-       дальнего типа - 48-разрядный логический адрес, состоящий из двух частей: 16-разрядной сегментной части - селектора, и 32-разрядного смещения.

-    Цепочка - представляющая собой некоторый непрерывный набор байтов, слов или двойных слов максимальной длины до 4 Гбайт.

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

-       Неупакованный двоично-десятичный тип - байтовое представление десятичной цифры от 0 до 9. Неупакованные десятичные числа хранятся как байтовые значения без знака по одной цифре в каждом байте. Значение цифры определяется младшим полубайтом.

-       Упакованный двоично-десятичный тип представляет собой упакованное представление двух десятичных цифр от 0 до 9 в одном байте. Каждая цифра хранится в своем полубайте. Цифра в старшем полубайте (биты 4-7) является старшей.

Рисунок 4 -Основные логические типы данных микропроцессора

2.2 Директивы резервирования и инициализации памяти

Для описания простых типов данных в программе используются специальные директивы резервирования и инициализации данных, которые, по сути, являются указаниями транслятору на выделение определенного объема памяти. Если проводить аналогию с языками высокого уровня, то директивы резервирования и инициализации данных являются определениями переменных.

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

Директивы резервирования и инициализации данных простых типов имеют формат представленный на рисунке 5.

Рисунок 5 -Директивы описания данных простых типов

На рис. 5 использованы следующие обозначения:

? - показывает, что содержимое поля не определено, то есть при задании директивы с таким значением выражения содержимое выделенного участка физической памяти изменяться не будет. Фактически, создается неинициализированная переменная;

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

выражение - итеративная конструкция с синтаксисом, описанным на рис. 5.17. Эта конструкция позволяет повторить последовательное занесение в физическую память выражения в скобках n раз.

имя - некоторое символическое имя метки или ячейки памяти в сегменте данных, используемое в программе.резервирование памяти для данных размером 1 байт. Директивой db можно задавать следующие значения:

выражение или константу, принимающую значение из диапазона:

для чисел со знаком -128...+127;

для чисел без знака 0...255;

символьную строку из одного или более символов. Строка заключается в кавычки. В этом случае определяется столько байт, сколько символов в строке.- резервирование памяти для данных размером 2 байта. Директивой dw можно задавать следующие значения:

выражение или константу, принимающую значение из диапазона:

для чисел со знаком -32 768...32 767;

для чисел без знака 0...65 535;

выражение, занимающее 16 или менее бит, в качестве которого может выступать смещение в 16-битовом сегменте или адрес сегмента;

- или 2-байтовую строку, заключенная в кавычки.- резервирование памяти для данных размером 4 байта. Директивой dd можно задавать следующие значения:

выражение или константу, для i386 и выше принимающую значение из диапазона:

для чисел со знаком -2 147 483 648...+2 147 483 647;

для чисел без знака 0...4 294 967 295;

относительное или адресное выражение, состоящее из 16-битового адреса сегмента и 16-битового смещения;

строку длиной до 4 символов, заключенную в кавычки.- резервирование памяти для данных размером 6 байт;- резервирование памяти для данных размером 6 байт. Директивами df и dp можно задавать следующие значения:

выражение или константу, принимающую значение из диапазона:

для чисел со знаком -2 147 483 648...+2 147 483 647;

для чисел без знака 0...4 294 967 295;

относительное или адресное выражение, состоящее из 32 или менее бит (для i80386) или 16 или менее бит (для младших моделей микропроцессоров Intel);

адресное выражение, состоящее из 16-битового сегмента и 32-битового смещения;

строку длиной до 6 байт, заключенную в кавычки.- резервирование памяти для данных размером 8 байт. Директивой dq можно задавать следующие значения:

относительное или адресное выражение, состоящее из 32 или менее бит

константу со знаком из диапазона -263...263-1;

константу без знака из диапазона 0...264-1;

строку длиной до 8 байт, заключенную в кавычки.- резервирование памяти для данных размером 10 байт.Директивой dt можно задавать следующие значения:

относительное или адресное выражение, состоящее из 32 или менее бит

адресное выражение, состоящее из 16-битового сегмента и 32-битового смещения;

константу со знаком из диапазона -279...279-1;

константу без знака из диапазона 0...280-1;

строку длиной до 10 байт, заключенную в кавычки;

упакованную десятичную константу в диапазоне 0...99 999 999 999 999 999 999.

Очень важно уяснить себе порядок размещения данных в памяти. Он напрямую связан с логикой работы микропроцессора с данными. Микропроцессоры Intel требуют следования данных в памяти по принципу: младший байт по младшему адресу.

В этом сегменте данных приведено несколько директив описания простых типов данных.

Пример1.Использования директив резервирования и инициализации данных. Программа вводит строку с клавиатуры.

Model small

.stack 100h

.data        db 'Массив байт, содержащих символьные переменные',10,13 '$'

po db 1, 3, 4, 5, 0fh, 0bh, 32, 01011b_1    db 0ffh_2          dw 3a7fh_3       dd 0f54d567ah db 10 db ? db 10 dup ('?') dw k1_full dd perem_3: ax,@data ds,ax ah,0ah dx,offset message;dx, adr 21h ax,4c00h 21h

end start

3. Команды jmp, call, ret безусловной передачи управления языка ассемблера. Механизмы выполнения перечисленных команд


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

. Команды безусловной передачи управления:

команда безусловного перехода; jmp

вызова процедуры и возврата из процедуры; call, ret

вызова программных прерываний и возврата из программных прерываний. Int, iret

. Команды условной передачи управления:

команды перехода по результату команды сравнения cmp;

команды перехода по состоянию определенного флага;

команды перехода по содержимому регистра ecx/cx.

. Команды управления циклом:

команда организации цикла со счетчиком ecx/cx;

команда организации цикла со счетчиком ecx/cx с возможностью досрочного выхода из цикла по дополнительному условию.

адрес_перехода - безусловный переход без сохранения информации о точке возврата. Аналог goto.


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

Описание процедуры может размещается в любом месте программы, но таким образом чтобы на нее случайным образом не попало управление:

-     в начале программы, до первой исполняемой команды;

-        в конце, после команды возвращающей управление операционной системе;

         промежуточный вариант, тело процедуры располагается внутри другой процедуры или основной программы. В этом случае необходимо предусмотреть обход процедуры командой jmp;

         в другом модуле.

Синтаксис описания процедуры:

Команда call передает управление по адресу с символическим адресом имя_процедуры, с сохранением в стеке адреса возврата, команды следующей после команды call.

Возврат из процедуры осуществляется по команде

RET [число]

Команда ret считывает адрес возврата из стека и загружает его в регистры cs и ip/eip, возвращая таким образом управление команде, следующей за командой call. Число - необязательный параметр, обозначающий количество элементов, удаляемых из стека при возврате из процедуры. Размер элемента зависит от используемой модели сегментации 32 или 16 разрядной.

Передача аргументов из/в процедуру может осуществляться через регистры, переменные или стек.

Пример

Model small

.stack 100h

.datadb 25 dup (?)

.codeproc; началопроцедурыvvod  ah, 0ah        dx, w 21h

ret; возврат в главный модуль

vvodendp; конецпроцедурыvvod

main: ;начало главного модуля

Callschet ; вызов процедуры schet

Call    vvod; вызов процедуры vvod

exit:ax,4c00h21h; началопроцедурыschet

...

ret; возврат в главный модуль

schetendp; конецпроцедурыschet

endmain; конец главного модуля

4. Практическая часть

.1 Постановка задачи

Разработать схему алгоритма и программу, осуществляющую возведение в степень 4 содержимого регистра АХ=5h и возведения в степень 5 содержимого регистра ВХ=4h.

4.2 Блок схема и программа решения задачи

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

Главная процедура Подпрограмма stepen

Рисунок 6 - Блок-схема

modelsmall

.stack 200h

.datadw 0dw 0dw 0dw 0dw 0

.codeprocbpbp, spax, axax,[bp+4]bx,bxbx,[bp+6]i,bxbx,axcx, 1h: cmp cx,im3bxcxm2: pop bpendp:ax,@data

mov ds,axax,axbx,bxcx,cxax, 4ha,axbx, 5hb, bxaxbxstepenc, axax,axbx,bxcx,cxax, bbx, aaxbxstepend, axbx, ccx, dax,4c00h 21h

endstart

4.3 Руководство пользователя

Данный программный модуль вычисляет 45 и 54. Программный модуль состоит из трех файлов: 1.asm, 1.objи 1.exe. В файле 1.asm содержится текст программы на языке Ассемблер, файл 1.obj - это объектный модуль и 1.exe - исполняемый модуль.

Для запуска модуля необходимо запустить файл 1.exe.

Формат запуска: td.exe 1.exe

После запуска откроется окно выполнения модуля в режиме Ассемблер (рис. 7).

Рисунок 7 - Окно выполнения программы

В левой части окна отображается следующая выполняема команда, с правой - результат регистров. Для запуска модуля в по шаговом режиме необходимо нажимать кнопку F7 для перехода к следующей команде. Результат вычислений заносится в регистры bx и dx (рис. 8) и в переменную cи d. Результат представлен в шестнадцатеричной системе счисления. В данном случае результат 45 =102410=40016, 54=62510=27116.

Рисунок 8 - Результат выполнения программы

Программа на Ассемблере записывается в любом текстовом редакторе и сохраняется с расширением asm. Для изменения расчетного числа, нужно в любом текстовом редакторе открыть файл 1.asm и изменить значение параметра а в разделе .data. После этого скомпилировать программный код следующим образом:

tasm.exe 1.asm - получаем файл 1.obj

tlink.exe1.obj - получаем 1.exe.

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

Список литературы

.Пильщиков В.Н. Assembler. Программирование на языке ассемблера IBMPC. - М.: Диалог-МИФИ., 2000

.Юров В. Assembler. Учебник. - СПб: ПИТЕР, 2002

.Ирвин Кип Язык ассемблера для процессоров Intel. - М.: Изд. Дом «Вильямс», 2002

.Пирогов В.Ю. Assembler. Учебный курс. - М.: Издатель Молгачева С.В., 2001

.//asm.shadrinsk.net/uroki.htm - САЙТ Владислава Пирогова

.Зубков С.В. ASSEMBLER для DOS, Windows и UNIX. - М.: ДМК Пресс; СПб.: ПИТЕР, 2004

.Кулаков В. Программирование на аппаратном уровне: специальный справочник. - СПб.: Питер, 2003

Похожие работы на - Программная модель микропроцессора

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!