Алгоритм - Учебный центр

Версия сайта для слабовидящих
Заполните форму ниже! Мы вам перезвоним!

Нажав на кнопку "Отправить", Я даю своё согласие на автоматизированную обработку указанной информации, распространяющейся на осуществление всех действий с ней, включая сбор, передачу по сетям связи общего назначения, накопление, хранение, обновление, изменение, использование, обезличивание, блокирование, уничтожение и обработку посредством внесения в электронную базу данных, систематизации, включения в списки и отчетные формы.


ОСНОВЫ ПРОГРАММИРОВАНИЯ НА АССЕМБЛЕРЕ.

ОСНОВЫ ПРОГРАММИРОВАНИЯ НА АССЕМБЛЕРЕ.

 

Программы - гибкий, высокоэффективный инструмент  для поиска неисправности.

Заключительный  этап поиска неисправности в устройствах компьютера, как правило, требует исследования электронных схем с помощью осциллографа. Это исследование можно производить в устойчивом состоянии электронных схем устройств и программы после отказа. Но наибольший эффект при исследовании осциллографом можно получить, если с помощью программы активизировать исследуемый процесс. Для получения устойчивого изображения  динамических сигналов на экране осциллографа необходимо, чтобы исследуемые в данном процессе сигналы повторялись периодически с одной и той же частотой. То есть необходимо циклически повторять исследуемый процесс, а это в большинстве случаев достаточно просто обеспечивается с помощью "зацикливания" программы, запускающей исследуемый процесс.

Как получить такую информацию, как:

 - коды ошибок устройств, формируемые программами-функциями BIOS;

 - байты состояния устройства, формируемые аппаратурой контроллеров;

 - содержимое регистра ошибок или регистра состояния контроллера? 

Обычно, достаточно однократного выполнения в отладчике (например, AFD) небольшой специальной программы, запускающей контролируемый процесс в устройстве. Затем с помощью AFD прочитать, например, байты состояния устройства,  регистры ошибок и состояний внешнего устройства, коды ошибок в регистре АН микропроцессора.

 

Ре­ги­ст­ры про­цес­со­ров INTEL 80Х86

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

                Раз­ряд­ность ре­ги­ст­ров за­ви­сит от раз­ряд­но­сти про­цес­со­ра: 8086 и 80286 - 16-и раз­ряд­ные, 80386, 80486 и Pentium - 32-х раз­ряд­ные, современные процессоры -  64-х раз­ряд­ные. Со­дер­жи­мое 16-и раз­ряд­но­го ре­ги­ст­ра на­зы­ва­ют сло­вом (два бай­та), 32-х раз­ряд­но­го ре­ги­ст­ра двой­ным сло­вом (че­ты­ре бай­та) и т.д..

Ре­ги­ст­ры дан­ных (или ре­ги­ст­ры об­ще­го на­зна­че­ния) 

QIP Shot - Image: 2016-05-17 10:38:02  

                Для 32-х раз­ряд­ных ма­шин это ре­ги­ст­ры EAX, EBX, ECX, EDX; для 16-и раз­ряд­ных ма­шин это ре­ги­ст­ры AX, BX, CX, DX.

                Ре­ги­ст­ры AX, BX, CX, DX до­пус­ка­ют не­за­ви­си­мое об­ра­ще­ние к стар­шим (AH, BH, CH, DH) и млад­шим (AL, BL, CL, DL) по­ло­ви­нам. Про­грам­мист мо­жет ис­поль­зо­вать эти ре­ги­ст­ры по сво­ему ус­мот­ре­нию для вре­мен­но­го хра­не­ния лю­бых объ­ек­тов (дан­ных или ад­ре­сов). Во мно­гих слу­ча­ях ре­ги­ст­ры дан­ных впол­не эк­ви­ва­лент­ны, од­на­ко пред­поч­ти­тель­нее поль­зо­вать­ся ре­ги­ст­ром AX, по­сколь­ку мно­гие ко­ман­ды за­ни­ма­ют в па­мя­ти мень­ше мес­та и вы­пол­ня­ют­ся бы­ст­рее, ес­ли их опе­ран­дом яв­ля­ет­ся ре­гистр AX. С дру­гой сто­ро­ны, ряд ко­манд ис­поль­зу­ет оп­ре­де­лен­ные ре­ги­ст­ры не­яв­ным об­ра­зом. На­при­мер, ко­ман­да цик­ла ис­поль­зу­ет ре­гистр CX в ка­че­ст­ве счет­чи­ка цик­лов; в ко­ман­дах ум­но­же­ния и де­ле­ния ре­ги­ст­ры AX и DX вы­сту­па­ют в ка­че­ст­ве не­яв­ных опе­ран­дов; опе­ра­ции вво­да-вы­во­да мож­но осу­ще­ст­в­лять толь­ко че­рез ре­гистр AX (или AL).

 

Ре­ги­ст­ры-ука­за­те­ли 

Ин­декс­ные ре­ги­ст­ры ESI, EDI (для 16-раз­ряд­ных про­цес­со­ров SI, DI) так же, как и ре­ги­ст­ры дан­ных, мо­гут ис­поль­зо­вать­ся про­из­воль­ным об­ра­зом. Од­на­ко их ос­нов­ное на­зна­че­ние - хра­нить ин­дек­сы (сме­ще­ния) от­но­си­тель­но не­ко­то­рой ба­зы (т.е. на­ча­ла мас­си­ва) при вы­бор­ке опе­ран­дов из па­мя­ти. Ад­рес ба­зы при этом мо­жет хра­нить­ся в сег­мент­ных ре­ги­ст­рах или в ба­зо­вых ре­ги­ст­рах BX или BP. Спе­ци­аль­ные ко­ман­ды ра­бо­ты со стро­ка­ми ис­поль­зу­ют ре­ги­ст­ры SI и DI в ка­че­ст­ве не­яв­ных ука­за­те­лей в об­ра­ба­ты­вае­мых стро­ках.

QIP Shot - Image: 2016-05-17 10:38:39 

Ре­гистр BP слу­жит ука­за­те­лем ба­зы при ра­бо­те с дан­ны­ми в сте­ко­вых струк­ту­рах, но мо­жет ис­поль­зо­вать­ся и про­из­воль­ным об­ра­зом в боль­шин­ст­ве ариф­ме­ти­че­ских и ло­ги­че­ских опе­ра­ций. Ре­гистр SP - ука­за­тель сте­ка. Ис­поль­зу­ет­ся как ука­за­тель вер­ши­ны сте­ка, обес­пе­чи­вая вы­пол­не­ние сте­ко­вых ко­манд (PUSH, POP и др.), но мо­жет ис­поль­зо­вать­ся и про­из­воль­ным об­ра­зом в боль­шин­ст­ве ариф­ме­ти­че­ских и ло­ги­че­ских опе­ра­ций. Ре­ги­ст­ры SI, DI, BP, SP не до­пус­ка­ют по­байт­ную ад­ре­са­цию.

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

QIP Shot - Image: 2016-05-17 10:39:46 

Про­цес­со­ры до 80386 име­ют че­ты­ре 16-раз­ряд­ных сег­мент­ных ре­ги­ст­ров CS, DS, ES, SS - на­чи­ная с 80386 до­бав­ле­ны еще два 16-и раз­ряд­ных ре­ги­ст­ра FS, GS.

QIP Shot - Image: 2016-05-17 10:40:18  

Эти ре­ги­ст­ры на­зы­ва­ют­ся сег­мент­ны­ми и обес­пе­чи­ва­ют ад­ре­са­цию 20-раз­ряд­но­го ад­рес­но­го про­стран­ст­ва с по­мо­щью 16-и раз­ряд­ных опе­ран­дов.

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

                Ре­гистр сег­мен­та сте­ка SS ука­зы­ва­ет на сег­мент в ко­то­ром за­ре­зер­ви­ро­ва­но ме­сто под стек. Все сте­ко­вые ко­ман­ды ис­поль­зу­ют SS при об­ра­ще­нии к сте­ку.

                Ре­ги­ст­ры DS, ES, FS, GS яв­ля­ют­ся ре­ги­ст­ра­ми сег­мен­тов дан­ных. Они со­дер­жат ад­ре­са сег­мен­тов, в ко­то­рых на­хо­дят­ся дан­ные про­грам­мы. 

Счет­чик ко­манд 

 QIP Shot - Image: 2016-05-17 10:40:58 

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

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

QIP Shot - Image: 2016-05-17 10:41:55 

                Ре­гистр фла­гов эк­ви­ва­лен­тен ре­ги­ст­ру со­стоя­ния про­цес­со­ра дру­гих сис­тем. Он со­дер­жит ин­фор­ма­цию о те­ку­щем со­стоя­нии про­цес­со­ра:

QIP Shot - Image: 2016-05-17 10:42:59 

VM (бит 17) -  обес­пе­чи­ва­ет ре­жим вир­ту­аль­но­го 8086 в за­щи­щен­ном ре­жи­ме;

RF (бит 16) - флаг во­зоб­нов­ле­ния, вре­мен­но пре­кра­ща­ет от­лад­ку, воз­вра­щая про­цес­сор к нор­маль­но­му вы­пол­не­нию про­грам­мы;

NT (бит 14) - вло­жен­ная за­да­ча, про­цес­сор ис­поль­зу­ет этот флаг для управ­ле­ния по­сле­до­ва­тель­но­стью пре­ры­вае­мых и вы­зы­вае­мых за­дач;

IOPL (би­ты 13-12) - уро­вень при­ви­ле­гий вво­да-вы­во­да, ис­поль­зу­ет­ся в за­щи­щен­ном ре­жи­ме;

OF (бит 11) - флаг пе­ре­пол­не­ния, ус­та­нав­ли­ва­ет­ся, ес­ли опе­ра­ция при­ве­ла к пе­ре­но­су (за­ему) в зна­ко­вый (са­мый стар­ший) бит ре­зуль­та­та, но не при­ве­ла к пе­ре­но­су (за­ему) из са­мо­го стар­ше­го би­та, или на­обо­рот;

DF (бит 10) - флаг на­прав­ле­ния, по­ка­зы­ва­ет долж­ны ли ре­ги­ст­ры ESI и EDI ин­кре­мен­ти­ро­вать­ся или дек­ре­мен­ти­ро­вать­ся во вре­мя опе­ра­ций над стро­ка­ми. Ес­ли флаг сбро­шен они ин­кре­мен­ти­ру­ют­ся, ина­че - дек­ре­мен­ти­ру­ют­ся;

IF (бит 9) - раз­ре­ше­ние пре­ры­ва­ний, очи­ст­ка это­го би­та за­пре­ща­ет про­цес­со­ру реа­ги­ро­вать на внеш­ние мас­ки­руе­мые пре­ры­ва­ния;

TF (бит 8) - флаг ло­вуш­ки, ус­та­нов­ка фла­га пе­ре­во­дит про­цес­сор в по­ша­го­вый ре­жим для от­лад­ки;

SF (бит 7) - флаг зна­ка, ус­та­нав­ли­ва­ет­ся ес­ли есть 1 в стар­шем би­те ре­зуль­та­та;

ZF (бит 6) - флаг ну­ля, ус­та­нав­ли­ва­ет­ся ес­ли все би­ты ре­зуль­та­та рав­ны 0;

AF (бит 4) - флаг вспо­мо­га­тель­но­го пе­ре­но­са, ис­поль­зу­ет­ся для уп­ро­ще­ния сло­же­ния и вы­чи­та­ния упа­ко­ван­ных дво­ич­но-де­ся­тич­ных чи­сел. Не­за­ви­си­мо от дли­ны опе­ран­да (8, 16 или 32 би­та) флаг AF ус­та­нов­лен, ес­ли опе­ра­ция при­ве­ла к за­ему из би­та 3 при вы­чи­та­нии или пе­ре­но­су  из би­та 3 при сло­же­нии, ина­че он сбро­шен. Это свя­за­но с тем, что дво­ич­но-де­ся­тич­ные чис­ла ис­поль­зу­ют би­ты с 0 по 3 для пред­став­ле­ния де­ся­тич­ных цифр;

PF (бит 2) - флаг чет­но­сти, ус­та­нав­ли­ва­ет­ся ес­ли млад­шие во­семь бит ре­зуль­та­та со­дер­жат чет­ное чис­ло еди­ниц (про­вер­ка на чет­ность);

CF (бит 0) - флаг пе­ре­но­са, ус­та­нав­ли­ва­ет­ся ес­ли опе­ра­ция при­ве­ла к пе­ре­но­су из стар­ше­го би­та при сло­же­нии или к за­ему в стар­ший бит при вы­чи­та­нии.

                Ниже показаны регистры процессоров поддерживающих 64-х битную архитектуру:

 QIP Shot - Image: 2016-05-17 10:43:46

 QIP Shot - Image: 2016-05-17 10:44:53

 

 

 

 


Лицензия