Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Компоновка программы



TLINK [ключи] список_объектных_файлов [,имя_загрузочного_модуля] [,имя_файла_карты] [,имя_файла_библиотеки] [,имя_файла_определений]

[,имя_ресурсного_файла]

Ключ /v указывает на необходимость сохранения отладочной информации в исполняемом файле.

48. Основные регистры процессора Pentium.

В организации вычислительного процесса важную роль играют регистры процессора. В процессорах Pentium эти регистры делятся на несколько групп:

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

· регистры сегментов;

· указатель инструкций;

· регистр флагов;

· управляющие регистры;

· регистры системных адресов;

· регистры отладки и тестирования, а также регистры математического сопроцессора, выполняющего операции с плавающей точкой.

В процессоре Pentium имеется восемь 32-разрядных регистров общего назначения. Четыре из них используются для временного хранения операндов арифметических, логических и других команд.

Программист может обращаться к этим регистрам как к единому целому, используя обозначения ЕАХ, ЕВХ, ЕСХ, EDX, а также к некоторым их частям.

Остальные четыре регистра общего назначения — ESI, EDI, EBP и ESP — предназначены для задания смещения адреса относительно начала некоторого сегмента данных.

Регистры сегментов CS, SS, DS, ES, FS и GS в защищенном режиме ссылаются на дескрипторы сегментов памяти — описатели, в которых содержатся такие параметры сегментов, как базовый адрес, размер сегмента, атрибуты защиты и некоторые другие. Регистр CS (Code Segment) предназначен для хранения индекса дескриптора кодового сегмента, регистр SS (Stack Segment) — дескриптора сегмента стека, а остальные регистры используются для указания на дескрипторы сегментов данных.

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

Регистр флагов EFLAGS содержит признаки, характеризующие результат выполнения операции, например флаг знака, флаг нуля, флаг переполнения, флаг паритета, флаг переноса и некоторые другие. Кроме того, здесь хранятся некоторые признаки, устанавливаемые и анализируемые механизмом прерываний, в частности флаг разрешения аппаратных прерываний IF.

В процессоре Pentium имеется пять управляющих регистров — CRO, CR1, CR2, CR3 и CR4, которые хранят признаки и данные, характеризующие общее состояния процессора.

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

Регистр CR1 в настоящее время не используется (зарезервирован).

Регистры CR2 и CR3 предназначены для поддержки работы системы виртуальной памяти. Регистр CR2 содержит линейный виртуальный адрес, который вызвал так называемый страничный отказ (отсутствие страницы в оперативной памяти или отказ из-за нарушения прав доступа).

Регистр CR3 содержит физический адрес таблицы разделов, используемой страничным механизмом процессора.

В регистре CR4 хранятся признаки» разрешающие работу так называемых архитектурных расширений, например возможности использования страниц размером 4 Мбайт и т. п.

49. Ассемблерные команды пересылки данных. Пример программы.

К группе команд пересылки данных относятся следующие команды:

mov <операнд назначения>,<операнд-источник>

xchg <операнд!>,<операнд2>

MOV — это основная команда пересылки данных. Она реализует самые разнооб­разные варианты пересылки.

Основные особенности применения этой команды:

1. Командой MOV нельзя осуществить пересылку из одной области памяти в дру­гую. Если такая необходимость возникает, то нужно использовать в качестве промежуточного буфера любой доступный в данный момент регистр общего назначения.

masm

model small

.data

fls db 5

fld db?

.code

start:

…..

mov al, fls

mov fld,al

end start

2. Нельзя загрузить в сегментный регистр значение непосредственно из памяти. Для такой загрузки требуется промежуточный объект. Это может быть регистр общего назначения или стек.

Например:

mov ax,dseg; в регистр ах записывается адрес сегмента данных

mov ds,ax;адрес сегмента данных записывается в регистр ds

; сегмент данных

dseg segment

mes db 64 dup('~')

dseg ends

В начале сегмента кода две команды MOV, выполняющие настройку сегментного регистра DS.

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

mov ax,ds

mov es,ax

Но есть и другой способ выполнения данной операции -использование стека и команд PUSH и POP:

push ds;поместить значение регистра ds в стек

pop es;записать в es число из стека

Для двунаправленной пересылки данных применяют команду XCHG. Естественно, что операнды должны иметь один тип. Не допускается (как и для всех команд ассемблера) напрямую обменивать между собой содержи­мое двух ячеек памяти. К примеру:

xchg ax,bx;обменять содержимое регистров ах и bx

xchg ax, word ptr [si];обменять содержимое регистра ах и слова в памяти по адресу в [si]

50. Работа с адресами и указателями на ассемблере. Пример программы.

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

·,<источник> — загрузка эффективного адреса;

· lds <приемник>,< а указателя в регистр сегмента данных ds;

· les <приемник>,<источник> — загрузка указателя в регистр дополнительного сег­мента данных es;

· lgs <приемник>,<источник> — загрузка указателя в регистр дополнительного сег­мента данных gs;

· lfs <приемник>,<источник> — загрузка указателя в регистр дополнительного сег­мента данных fs;

· Iss <приемник>,<источник> — загрузка указателя в регистр сегмента стека ss.

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





Дата публикования: 2014-11-03; Прочитано: 440 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...