Технически Университет - София
background image

Лабораторна Задача: 

MASM 06

   изготвил: 

Стилиян Първанов

 КСТ гр. 

63

  № 

РК032913

Регистри на процесора.

   

Регистрите 

на процесора представляват  памет  в  самия чип. Достъпа до тях  е 

много по-бърз, отколкото до RAM. Регистрите също са спцеиализирана памет. Те 
се използват от процесора при изпълнение на аритметични и логически операции.

     Регистрите на процесора   са   важни   за   системното    програмиране, защото 
функциите на
BIOS и DOS получават информация от тях.

      От   гледна   точка   на   системното   програмиране   ,   нищо   не   се   е   променило   в 
регистрите от процесора 8086 насам. Това е така, защото DOS и BIOS са се развили 
във връзка с него, така че те поддържат само 16-битовите регистри, включени в 
този   процесор.   32-битовите   регистри   на  intel  80386   и   80486   не   могат   да   бъдат 
използвани в системното програмиране под DOS. Затова от значение са само 8088 
регистрите, които се използват във всички следващи чипове.

   Всеки регистър е с големина от два байта. Ако всичките му битове съдържат 1 се 
получава десетичното число 65 535. Това е най-голямото десетично число, което 
може да се представи в 16 бита. Така че един регистър може да съдържа всички 
стойности от 0 до 65535 (FFFF шестнадесетично, или 1111111111111111 двоично).

   Регистрите се разделят на четири групи : 

1.

Общи регистри

 – това са AX (accumulator - акумулатор),  BX (base - база), CX 

(counter - брояч), DX (data - данни), DI (destination index - индекс получател), SI 
(source index - индекс източник), SP (stack pointer - стеков указател) и BP (base 
pointer - базов указател).

2.

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

 – това са DS (data segment – сегмент за данни),  CS (code 

segment – сегмент за програмата), ES (extra segment – допълнителен сегмент) и 
SS (stack segment – стеков сегмент).

3.

Програмен брояч

 – това е IP (instruction pointer – указател към инструкция)

4.

Флагов регистър

.   

    Различните регистри спомагат за оптимизиране на начина, по който програмите 
обработват данните. Последното е основна задача на микропроцесора.

   DOS  и стандартните функции, съхранявани в ROM широко използват регистрите 
с общо предназначение, особено AX, BX, CX и DX. Тяхното съдържание указва на 
DOS  какви   задачи   трябва   да   извърши   и   какви   данни   да   използва   за   тяхното 
изпълнение.

   Основно влияние на тези регистри оказват математическите операции (събиране, 
изваждане,   умножение,   деление   и   т.   н.),  както   и   входно-изходните   инструкции. 
Регистрите, завършващи с “X” заемат особено място в 8088, защото могат да бъдат 
разделени на две. Всеки от тях съдържа един 16-битов и два по-малки 8-битови 
регистъра.

дата: 

XII 2003

background image

Лабораторна Задача: 

MASM 06

   изготвил: 

Стилиян Първанов

 КСТ гр. 

63

  № 

РК032913

   Общите регистри са важни за извикване на DOS и BIOS функции и се използват 
за предаване на параметри на конкретна функция, която се нуждае от тях. Те са под 
въздействието на математически операции, които са в центъра на вниманието на 
всички софтуерни дейности на ниво процесор. AX, BX, CX и DX заемат специално 
положение,   защото   могат   да   бъдат   разделени   на   два   8-битови   регистъра.   Това 
означава, че всеки от тях се състои от 3 регистъра – един 16-битов и два 8-битови. 

   Регистрите имат 

H

 (high – висок) и 

L

 (low – нисък) означения. Така че 16-битовия 

регисър AX може да бъде разделен на 8-битовите AH и AL. Означенията H и L са 
въведени, защото L регистъра съдържа нисшите 8 бита (от 0 до 7) на X регистъра, а 
H регистъра – старшите 8 бита (от 8 до 15). И така, AH се състои от битовете 8 – 15, 
а AL от битовете 0 – 7 на регистъра AX.

      Тези   три   регистъра   не   могат   да   бъдат   разгледани   независимо   един   от   друг. 
Например ако третият бит на  AH  се промени, тогава бит 11 на  AX  се променя 
автоматично. Стойностите и на двата регистъра AH и AX се променят. AL в случая 
остава непроменен, тъй като той се състои от 0 до 7 бит на AX (т. е. 11 бит на AX 
не принадлежи на  AL. Тази връзка между
AX,   AH  и  AL  важи   също   за   всички   други   регистри   с   общо   предназначение, 
завършващи на 
“X” и може да бъде изразена математически.

     Специфицирайки например  CH  или  CL  може да се чете или записва 8-битова 
данна от или във всеки от тях. Същото се отнася  за регистъра  CX  и 16-битова 
данна.

     Флаговият регистър  осъществява  връзката  между последователните  машинни 
инструкции, като запазва резултата от математическите и логическите операции. 
Например след използването на 

carry flag

 (флага за пренос) при събиране на два 16-

битови регистъра, една програма определя дали резултата е по-голям от 65535 и 
ако е така го представя като 32-битово число. Знаковият, нулевият и препълващият 
флаг   изпълняват   подобни   задачи   и   могат   да   бъдат   използвани   след   като   два 
регистъра бъдат сравнени, за да установят дали стойността в първия е по-голяма, 
по-малка или равна на стойността на втория.

   Само carry flag и 

zero flag

 (нулев флаг) са важни за системното програмиране на 

езици от високо ниво. Повечето от DOS и BIOS функциите използват тези флагове, 
за да означат грешки. Например за недостатъчна памет или непознати имена на 
файлове.

   За системното програмиране е особено важно как процесора образува адресите на 
паметта, защото трябва постоянно да се подават адреси на буфери на  DOS  или 
BIOS функциите. В тези случаи трябва да е известно какво прави процесора.

дата: 

XII 2003

background image

Лабораторна Задача: 

MASM 06

   изготвил: 

Стилиян Първанов

 КСТ гр. 

63

  № 

РК032913

    Едно от най-добрите постижения при процесора 8088 е създаването на пакет от 
инструкции, които са по-висши от тези на ранните 8-битови микропроцесори (6502, 
Z80  и т. н.). Друго сполучливо попадение е предоставянето на лесен достъп до 
повече   от   64   килобайта   памет.   Това   е   важно,   защото   нарастването   на 
възможностите   на   процесора   позволява   на   програмиста   да   създава   по-сложни 
приложения, които от своя страна изискват повече памет. Създателите на 8088 са 
повишили капацитета на паметта или адресното пространство на микропроцесора 
(повече от 16 пъти) до един мегабайт.

     Броят на клетки от паметта, които един процесор може да адресира, зависи от 
адресния регистър. Тъй като всяка от тях е адресирана чрез определяне на уникален 
номер,   максималната   стойност,   която   може   да   се   съдържа   в   адресния   регистър 
определя   големината   на   адресното   пространство.   Ранните   микропроцесори 
използваха   16-битов   адресен   регистър,   който   даваше   на   потребителя   достъп   до 
адреси  от 0 до 65535. Това  съответства  на  капацитета  от 64 килобайта  на тезо 
процесори.

    За адресирането на един мегабайт памет, адресния регистър трябва да има най-
малко 20 бита. По времето, когато е разработван 8088, не е било възможно да се 
използва 20-битов регистър, така че конструкторите са използвали друг начин за 
достигане на 20-битова шина. Съдържанието на две 16-битови числа се използва за 
достигане на 20-битов адрес.

     Едното  от тези  16-битови числа се съдържа в  сегментен  регистър.  8088 има 
четири такива сегментни регистъра. Второто число се съдържа в друг регистър или 
в   клетка   от   паметта.   За   да   се   образува   20-битово   число,   съдържанието   на 
сегментния регистър се премества наляво с четири бита (или се умножава по 16) и 
второто число се прибавя към полученото. 

   Сегментният адрес, който се формира от сегментния регистър, показва началото 
на   сегмента   в   паметта.   Когато   се   създава   адреса,   отместването   се   добавя   към 
сегментния   адрес.   Отместването   показва   позицията   в   сегмента,   определен   от 
сегментен  регистър.  Отместването   не  може  да  бъде  по-голямо  от  16 бита,   т.  е. 
Стойност от 0 до 65535 за размер на сегмент.

      В  случая,   когато   отместването  е  0  и   началото   също   е  0,  се  получава  адрес, 
отговарящ на клетка от паметта (или физически адрес) 0. Ако сегмента е 1, ще се 
получи   физически   адрес   16,   а   не   1.   Това   е   така,   застото   сегментният   адрес   се 
умножава по 16 при образуването на адреса.

   Ако се увеличава още сегмента, а отместването остава 0, се получават физически 
адреси 32, 48, 64 и т. н. Според този принцип максималния адрес е 1 мегабайт, 
когато сегмента достигне максималната си стойност 65535 (FFFFh). Обватно, ако 
сегмента   остава   постоянен,   а   се   мени   отместването,     първия   сочи   сегмент   от 
паметта, в който може да има достъп до 65535 различни клетки. Всеки сегмент 

дата: 

XII 2003

background image

Лабораторна Задача: 

MASM 06

   изготвил: 

Стилиян Първанов

 КСТ гр. 

63

  № 

РК032913

съдържа   64К.   Отместването   показва   разстоянието   между   желаната   клетка   и 
началото на сегмента.

     Въпреки че сегментите във физическата памет са през 16 байта, всеки от тях 
съдържа по 64К. Така че те се припокриват. Например физическия адрес 130 може 
да се представи по различни начини. Така както адреса, образуван от сегмент 0 и 
отместване 130 сочи тази клетка, така също и сегмент 1 и отместване 114, сегмент 2 
и отместване 98 и т. н. сочат в тази клетка.

   Припокриването на сегменти е удобно за работа. При определен адрес може да се 
избере произволна комбинация от сегмент и отместване, която го сочи. Проверка се 
прави, като се
Умножи сегмента по 16 и бъде прибавен към отместването.

     Начало на сегмент не може да бъде всяка клетка от паметта. Като се умножи 
сегментния регистър по 16, винаги се получава число, което е кратно на 16. Така 
например сегмент не може да започва от клетка с адрес 22.

   Физическият адрес се получава от съчетанието на сегмента и отместването. Той 
определя точния номер на клетката от паметта, която става досъпна. За разлика от 
него, сегментния адрес и отместването са относителни.

      8088   съдържа   четири   сегментни   регистъра,   които   имат   важна   роля   при 
изпълнението на програма на машинен език. Те съдържат основната структура на 
всяка програма, която се състои от множество от инструкции (или код). Програмата 
също обработва променливи и данни. Една структурирана програма държи кода и 
данните отделно едно от друго, докато се намират в паметта. Един удобен начин за 
тяхното   отделяне   е   предоставянето   на   собствени   сегменти   на   всеки   от   тях. 
Сегментни регистри са следните:
   

            

CS

 (Code Segment – кодов сегмент) използва регистъра IP като отместване и 

заедно 

правят  адрес  от  паметта. По  този  начин се определя  адреса на поредната ин-

струкция. IP се нарича  и  с  името Program  Counter (програмен  брояч). Когато

процесорът изпълнява текущата инструкция, IP регистъра  автоматично се пре-

насочва към следващата. Това осигурява изпъленеието на инструкцууте  в  пра-

                    вилен ред.

             

DS

 Както CS, регистъра DS (Data Segment – сегмент за данни) съдържа 

сегментните                                   данни, до които програмата има достъп (записва 

или чете  данни в или от памет-

та). Отместването на адреса се получава от друг регистър  или  от  текущата инс-

                  трукция.

дата: 

XII 2003

background image

Лабораторна Задача: 

MASM 06

   изготвил: 

Стилиян Първанов

 КСТ гр. 

63

  № 

РК032913

            

SS

 Регистъра SS (Stack Segment – стеков сегмент) определя сегмента на 

стека, както   подсказва самото му име. Стекът действа като  място за временно 

съхранение за

Някои програми на машинен език. Той позволява бързо запазване  и  възстановя-

ване на данни за различни  инструкции. Например, когато се изпълнява инструк-

цията  CALL, процесорът  поставя  адреса  за  сръщане в стека. SS заедно  със SP

                  или BP образуват адреса, на върха на стека.

            

ES

 Последният  сегментен  регистър  е  ES  (Extra Segment – допълнителен 

сегмент).

        Той  се  използва от някои  машинни  инструкции за адресиране на повече от 

64К 

                  данни или за пренос на данни между два различни сегмента от паметта.

     С помощта на  ES  е възможно да оставим  DS  да сочи в изходната област от 
паметта, а за обръщение към областта, в която се копира, се използва  ES. 8088 и 
неговите наследници имат дори инструкции, които могат да копират цял буфер, 
като се предполага, че преди тяхното изпълнение сегмента на адреса на първата 
област е зареден в DS, а този на областта в която се копира – в ES.

     За да се извърши  копирането , инструкциите  също трябва да знаят какви са 
отместванията   на   двете   области   в   техните   сегменти   от   паметта.   Те   очакват   да 
получат  началото  на шървата област в  SI, а на втората в  DI  регистъра.  Според 
въведените преди това означения това може да се запише по следния начин: тези 
инструкции копират данни от DS:SI в DS:DI.

      Два   сегментни   регистъра   могат   да   определят   области   от   паметта,   които   се 
покриват или са напълно различни една от друга. Обикновено една програма не 
може да заеме целия сегмент със своите код и данни. Затова може да се спести 
памет чрез  припокриването  на сегменти.  Например може да се запазят  данните 
веднага след програмния код като се определи по подходящ начин съдържанието 
на регистрите DS и CS.

дата: 

XII 2003

background image

Лабораторна Задача: 

MASM 06

   изготвил: 

Стилиян Първанов

 КСТ гр. 

63

  № 

РК032913

Атхитектура на копроцесор

     

Копроцесорът

  адресира паметта по същия начин, както и процесора, но има и 

свои собствени регистри за данни и управляващи  регистри  – осем регистъра  за 
данни,   организирани   като   стек   и   седем   управляващи   регистъра,   подобни   на 
флаговия   регистър.   Наборът   от   инструкции   на   копроцесора   осигурява   директен 
достъп до тези регистри.

   Осемте регистъра за данни са 80-битови и са организирани като стек, въпреки че 
не   е   задължително   винаги   да   се   използват   така.   Когато   се   запишат   данни   в 
регистъра  на  върха,  предишните  данни  се  преместват  в  регистрите  с  по-високи 
номера, които са по-долу в стека. Регистър 0 е на върха на регистровия стек, а 
регистъ 7 – на дъното му. Всички данни се съхраняват в регистрите на копроцесора 
в 10-байтов реален формат.

   Всички действия в копроцесора се извършват над 10-байтови числа, защото това 
осигурява по-висока точност. Инструкциите, които пренасят данни между паметта 
и   копроцесора,   автоматично   преобразуват   данните   от   и   в   десетичен   10-байтов 
реален формат.

   Чрез управляващите регистри, най-често в програмата се осъществява достъп до 
регистъра   на   състоянието   (нарича   се   също   дума   на   състоянието).   Той   отразява 
цялостната  работа  на копроцесора.  Условните  флагове  C0 – C3  се променят  от 
операциите за сравнение и тестване и се използват за управление на изпълнението 
на   програмата.   Флагът   за   заетост  B  отразява   дали   копроцесорът   е   зает   с 
изпълнението на инструкция. Той се проверява чрез изследване на стойността на 
думата   на   състоянието.   Последните   модели   копроцесори   автоматично   се 
синхронизират   с   процесора,   така   че   състоянието   на   този   флаг   не   трябва   да   се 
проверява.   Указателят   към   върха   на   стека   (STP)  съдържа   номера   на   регистъра, 
който се счита за връх на стека ST. Обикновено това е регистъра за данни с номер 
0.

     

Управляващият   регистър

  на   копроцесора   служи   за   избор   на   точност   на 

операциите, на закръглението и на представянето на безкрайно голяма стойност 
(със   или   без   знак).   С   него   могат   да   се   маскират   битове   0   –   5   от   думата   на 
състоянието.   За   зареждане   на   стойност   в   управляващия   регистър   се   използва 
инструкцията FLDCW.

     

Таг-регистърът

 (регистър с признаци) отразява какво е съдържанието на всеки 

от   регистрите   за   данни.   Всеки   признак   показва   дали   стойността   на   съответния 
регистър е валидна, нулева, невалидна или безкрайност, или регистърът е празен. 
За да може програмата да провеи стойността на таг-регистъра, трябва да се съхрани 
средата   на   регистъра   посредством   инструкциите  FSTENV  или  FSAVE,   които 
записват стйностите на всички регистри на копроцесора в паметта.

дата: 

XII 2003


Това е само предварителен преглед!

The Characters of Wuthering Heights

At first glance, Wuthering Height shows us conflict between a landlord, Heathcliff, and Mr. Lockwood.

The Characters of Wuthering Heights

Предмет: Английски, Чужди езици
Тип: Анализи
Брой страници: 2
Брой думи: 606
Брой символи: 4760
Изтегли
Този сайт използва бисквитки, за да функционира коректно
Ние и нашите доставчици на услуги използваме бисквитки (cookies)
Прочети още Съгласен съм