Асемблери - Теми 5, 6, 7, 8
| Информационни технологии | 2009-12-04 | 222 сваляния |
5. Адресации .. Адресации: 1) непосредствена някой операнд е представен чрез число; 2) регистрова в някои операнд е поставен регистър и неговото съдържание е числото; 3) пряка операнда съдържа адрес на клетка в паметта, където е интересуващата ни стойност; 4) косвена : (BX)+отместване; (BP)+ отместване; (SI)+ отместване; (DI) +отместване; (BX)+(SI) +отместване; (BX)+(DI) +отместване; (BP)+(SI) +отместване; (BP)+(DI) +отместване. Изчислява се резултат, който се нарича ЕА. Регистъра е в скоби, защото става въпрос за косвено (по стойност) адресиране. Отместване 8 или 16 разрядна стойност; 5) преходи къс(128); вътрешносегментни; междусегментни. Последните два, могат да бъдат адресирани пряко или косвено. За процесори i386+, адреса се образува като : Б(база)+И(индекс)*М(мащаб)+отместване=ЕА
1.Обръщение към памет / подразб.сегм / алт.сегм/ ЕА 2.Инстр. / CS / - / IP 3.Стек / SS / - / SP 4.Низ(източн) / DS / CS,ES,SS / SI 5.Низ(прием) / ES / - / DI 6.Данни(bp) / SS / CS,DS,ES / EA 7.Данни / DS / CS,SS,ES / EA

Данни, които подлежат на обработка: 1) стринг; 2) ASCII кодове; 3) BCD числа; 4) числа със знак; 5) полета от битове; 6) близки и далечни указатели;
Адресиране. Видове адресиране: Има две основни групи директно, индиректно. Директно: 1) MOV AX,5 обръщение към число; 2) MOV AX, a обръщениечрез името на променливата; 3) MOV AX, BX обръщение към съдържанието на регистура прехвърля се в друг регистър. 2) индиректно 1) чрез спомагателен регистър. MOV AX, [BX] в регистъра AX се прехвърля съдържанието на клетка от паметта, адреса на която е записан в регистъра BX; 2) чрез спомагателен регистър и константа MOV AX,MAS[BX] за преглеждане на масиви. Базата се записва в регистър BX, а отместването в константата. 3) MOV AX, MAS[BX] базовия регистър е записан в константа, а адреса на всеки следващ елемент се записва в спомагателния регистър. 4) чрез използване на два спомагателни регистъра MOV AX, [BX+SI];5) Чрез използване на константа идва спомагателни регистъра MOV AX, MAS [BX+SI] за адресиране на двумерни масиви.
6. Система на ..
Прекъсване асинхронна промяна на естествения ход на програата. Източниците на прекъсване могат да са вътрешни и външни. Външните са по IRQ(0-15). IRQ0-има най-висок приоритет. Вътрешните могат да са софтуерни с инструкция и резултат от изчислителния процес(мога да са породени при изключителни ситуации или капани). Когато се отбележи прекъсване, трябва да може коректно да се възстанови прекъснатия процес. Трябва да има информация, която позволява такова възстановяване флагов регистър, код сегмент, IP(последователността е задължителна). Важен момент на прекъсването е определянето на източника на прекъсването. Системата за анализ е различна може всеки източник да се самоидентифицира (индекс в таблицата на векторите на прекъсване). Всеки вектор на прекъсване е 4 байтов. Той съдържа информация която се интерпретира като CS и IP. Първите 5 вектора са по предназначение : 1) деление на нула; 2) стъпково изпълнение; 3) маскируемо прекъсване; 4) немаскируемо прекъсване; 5) препълване. До 32-рия вектор са заделени за DOS. Следващите могат да се използват и от програмиста. В големите процесори, таблицата не е фиксирана може да бъде на произволно място в паметта и се сочи от IDTR.
Управление на паметта в големите процесори: Съществуват 16 битови сегментни селектори във формат (index|Т|RPL). Т-0 или 1- избира GDT или LDT. RPL request privilege level за механизма на защита. Съществуват 4 привигилировани нива на зачита. Най-привилегировано е най-вътрешното 0-лево ниво. Механизма за прекъсване по нивата е възможен, но сложен.В многозадачните системи се прави изолиране на адресното пространство.
Адресите на LDT се пазят като дескриптори в GDT. Всяка локална таблица съответства на една задача. Всяка таблица съдържа 213 дескриптора. 232*214=246 адресно пространство на процесора. Всеки сегмент е до 232=220(сегмент)*212(странициране). Във всеки дескриптор има 2 бита: DLP Deskriptor privilege level и CPL current privilege level, които управляват механизнма на промяна. 1 бит за страниците, 1 бит за вида (системен или потребителски) 1 бит за вида на операциите (за четене или за запис).
Механизъм за адресация:

Странициране: Управлява се от CR0, CR2, CR. CR0 набор от битове, които управляват CPU. CR2 линеен адрес на 14-то прекъсване (което се генерира, ако страницата не е намерена)
7. Типове инструкции Общия вид на всяка инструкция съдържа 4 основни части: 1) етикет може да е до 31 знака (буквено-цифров); 2) код на операцията (задължителен); 3) операнди регистри, променливи, върху които се извършва операцията; 4) коментар (преди него трябва да има знак ;). Инструкциите се групират в няколко групи: 1) за обработа на данни: mov A,B инструкция за копиране прехвърля съдържаниетона операнда B в операнда A, без да променя B. Двата операнда не могат да бъдат едновременно променливи. Не променя съдържането на флаговете. XCHG A,B инструкция за размяна на двата операнда. LDA A,B инструкция за зареждане на адрес операнда B e променливата, адреса на която се записва в операнда A. А може да е регистър способен да съдържа адреси- BX, SI, DI, SP. 2) инструкции за работа със стек. PUSH A прехвърля съдържанието на A в стека. POP A изтегляне съдържанието на стека и записване в A. Реда на попълване на изтегляне на данни от стека трябва да се съблюдава. Не може да се записват 8bit данни в стека. PUSHA записва в стека AX, CX, DX, BX, SP, BP, SI, DI. POPA възстановява. PUSHF записва в стека съдържанието на флаговия регистър. POPF възстановява флаговия регистър. PUSHAD записва в стека съдържанието на разширените регистри EAX, EBX.. POPAD възстановява. 3) инструкции за обработка на низове: LODS зареждане на низ намиращ се на адрес DS:SI в регистър AX (AL или EAX). След инструкцията се задава име на променллива или се добавя (B-byte,W-word,D-double word). Ако е зададен суфикс, не е необходимо да сезадава операнд. За да прехвърлим целия низ се записва префикс, който показва, че тази инструкция ще бъде повторена определен (CX) брой пъти. Префикс REP CX. Регистъра SI при всяко преминаване през инструкцията се увеличава или намалява в зависимост от посоката. STDS-AL,AX илиEAX се прехвърля на адрес ES:DI.MOVS- прехвърля последователно части от стринга или целия стринг от адрес DS:SI на адрес ES:DI ; SCAS; CMPS; 4) логически инструкции: NOT, OR, AND, XOR побитови. TEST; 5) аритметични ADD, ADC, DAA, AAA, SUB, SBB, DAS, AAS, NEG, INC, DEC, CMP, MUL, IMUL, AAM, DIV, IDIV; 6) инструкции за ротция и изместване: ROR, ROL, SAL, SAR, SHL, SHR; 7) интрукции за преход: SHOR, NEAR, FAR, JMP, CALL, за условен преход:JA, JAE, JB, JBE, JNA, JNB, JNAE, JNBE; за числа със знак: JG, JGE, JL, JNG, JNL, JNGE, JNLE, JZ, JNZ, J0, JN0, JP, JNP, JS, JNS, JC, JNC; 8) инструкции за организиране на цикли: LOOP; 9) инструкции за промяна на флагове: STC, STD, STI; 10) специални инструкции: NOP, HLT, LOCK, SETX, BSF, BSR, BT, BTC, BTR, BTS.
8. Директиви на Асемблер
I.Директиви за оформяне на сегменти и програмни модули: 1) <име> SEGMENT <изравняване> <обединяване> <клас>. Има сегменти за данни, за оформяне на стек, за записване на набор инструкции (кодов сегмент). <изравняване> - показва от какъв клас трябва да се запише съответния сегмент в ОП. Това изравняване може да приеме няколко различни стойности: BYTE програмния сегмент се записва от сегмента на байта; WORD от сегмент на дума; DWORD от адрес на двойна дума; PARA сегмента се записва на адрес кратен на 16; PAGE на адрес кратен на 256; ATx x конкретен адрес на записване на сегмента; <обединение> - указва се статус на сегменти с еднакви имена по какъв начин могат да бъдат обединени в един общ сегмент: PRIVATE сегмента не може да бъде обединяван с други; PUBLIC всички сегменти с еднакви имена, могат да се обединят в общ с дължина равна на сбора от дължините им; COMMON сегменти с еднакви имена могат да бъдат обединявани, като дължината им е равна на дължината на най-дългия от тях. STACK като PUBLIC; MEMORY сегмента ще бъде записан на адрес в паммета след всички други сегменти. Ако изравняване и обединяване не е посочено се подразбира PARA PUBLIC. 2) За край на директивата служи ENDS. Във всеки един момент може да е активен само един сегмент от въответния тип. 3) С директивата ASSUME се посочва кои програмен сегмент е активен. 4) <име> GROUP <имена> - служи за обединяване на програмни сегменти - имената които са записани след директивата, разделени със запетая. Тази група програмни сегменти носи име, което се записва пред директивата. Към групата сегмети можем да се обръщаме само чрез един сегмент. 5) <променлива> ORG <адрес> - Задава отместването на променлива, дефинирана преди тази директива. 6) PUBLIC <списък от обекти> - за експортиране на програмни обекти (процедура, име, променлива). Програмни обекти, могат да са използвани и в други модули. 7) EXTERN <списък обекти> - импортира от други програмни модули в текущия обект. Тези обекти са описани в списък. Трябва да бъде посочено име и тип. 9) GLOBAL за дефиниране на глобани обекти, видими във всички модули. В списъка след нея се зписва име, тип резделени с 9) NAME <име> - задаване на вътрешно име на текущия обектен модул; 10) INCLUDE име вмъква в текущия модул текста на файл, описан в името след директивата.
II.Директиви за оформяне на процедури: 1) <име> PROC начало на процедура; <име> ENDP край на процедура.
III.Директиви за заделяне на памет: DB; DW; DD; DQ; DT; DUP(?); RECORD за дефиниране на записи; STRUC за дефиниране на структура;EQU свързване символно име с числова стойност.
IV. Директиви за условно асмблиране: 1) IF; ELSE; ENIF; - в зависимост от условието, блока се асемблира или не. 2) MACRO за начало на макрос; ENDM за край на макрос.
V. Оператори и изрази. 1) операции: +; -; *; /; MOD; []; [BX][2] [BX+2]; LENGTH А оператор, който връща броя единици памет, които са заделени за променливата A; TYPE A връща типа на променливата като цяло число. SIZE връща произведението на единиците памет по размера; HIGH A връща старшите 8 бита (при 16 битова променлива); LOW A връща младшите 8 бита; OFFSET A връща отместването на A; <тип> PTR A оператор за преобразуванена тип. За текущата операция А се представя в типа, посочен пред оператора. A GE B операторза сравнение големината на две величини; A LE B ако A<=B резултат 1; A GT B; A LT B; A NE B; NOT A; A AND B; A OR B; A XOR B; A SHL B; A SHR B;
VI Съкратени директиви: .MODEL<памет>,<език>. <памет> - указва кои сегменти в кои регистри се зареждат:
0.)Памет / code / data
1) TINY / near / far - кода и данните се записват в един сегмент
2) SMALL / near / near
3) MEDIUM / far / near
4) COMPACT / near / far -кода и данните се записват в повече сегменти
5) LARGE / far / far - кода и данните са в повече сегменти
6) HUGE / far / far - кода и данните са в повече сегменти
Тази директива замества директивата ASSUME тя се използва или не в зависимост от опцията памет. <език> - записва се символ, който характеризира съответния взик. Когато се осъществяват връзки между език от високо ниво и функция, написана на асемблер. Тогава се извиква асемблерска програма. Посочва се символ C, CPP, Pascal, Basic, Fortran. Когато използваме директивата .MODEL, не е задължително, когато използваме директивата SEGMENT да записваме кода .CODE опцията N. Същото важи и за директивите .DATA, .FARDATE, .STACK X (на мястото на X се записва размера на стека, който се създава).
Тагове от реферата: адресаии, асембери, предствен, непосредствена, операнд, Регистрова, някой, някои











