1 / 20

Организиране на сегменти

Организиране на сегменти. Физически сегмент – блок от паметта с фиксиран размер (64 КВ за 16 разредни процесори и 4 GB за 32 разредни процесори). Логически сегмент – блок от паметта с променлива дължина за програма или данни За малки програми Инструкции -> в 1 сегмент

mitch
Download Presentation

Организиране на сегменти

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Организиране на сегменти • Физически сегмент– блок от паметта с фиксиран размер (64 КВ за 16 разредни процесори и 4 GB за 32 разредни процесори). • Логически сегмент– блок от паметта с променлива дължина за програма или данни За малки програми Инструкции -> в 1 сегмент адресират се с 16 разрядно отместване (OFFSET)спрямо началото на сегмента Данни -> в 1 сегмент

  2. Организиране на сегменти За големи програми Инструкции -> в 1 или повече сегмента адресират се със сегментен адрес (SEG) и отместване (OFFSET) Данни -> в 1 или повече сегмента

  3. Организиране на сегменти • Опростени сегменти директиви • Скриват подробности за дефинираните сегменти • Дефиниране на модел . MODELмодел_на паметта[отдалеченост на стека] NEARSTACK (по подразбиране) – стек+данни -> в 1 сегмент FARSTACK – отделен сегмент за стека

  4. Организиране на сегменти • Опростени сегменти директиви • Дефиниране на модел

  5. Организиране на сегменти • Опростени сегменти директиви • Дефиниране на модел • NEAR: Адресирането се извършва само с 16-разрядно отместване • FAR: Адресирането се извършва чрез: сегментен адрес : отместване • Създаване на стек • Създаване на сегмента на данни . STACK [размер] ; по подразбиране размер=1КВ .DATA; създава близък сегмент с обем до 64КВ ; от всички модули и име _DATA Близки данни

  6. Организиране на сегменти • Опростени сегменти директиви • Създаване на сегмента на данни • Създаване на сегмента на инструкции .FARDATA [име] ; създава отдалечен сегмент с ; посоченотоиме или с име FAR_DATA Отдалечени данни .CODE [име] ; дефинира началото на сегмент с ; посоченото имеили с име_TEXT

  7. Организиране на сегменти • Опростени сегменти директиви • Започване на програма и завършване на програма (само за главна програма) • Директива за край на всеки модул .STARTUP; генерира инструкции за започване на програма ; зарежда автоматично сегментните регистри .EXIT [израз] ; генерира инструкции за завършване на ; програма и евентуално връщане на израз END

  8. Организиране на сегменти • Опростени сегменти директиви .MODEL SMALL .STACK ; по подразбиране стек от 1КВ .DATA ; дефиниране на данни . . . .CODE .STARTUP ;генерира инструкции за ;зарежданена сегментни регистри ; инструкции . . . .EXIT END Сегментните регистри: CS (за инструкции), DS (за данни), SS (за стек) се инициализират с адресите на сегментите по подразбиране в началото на програмата

  9. Организиране на сегменти • Пълни сегменти директиви • Осъществяват пълен контрол върху дефинираните сегменти. • Дефиниране на сегменти имеSEGMENT [граница за нов] [READONLY][комбиниране][размер][клас] . . . . . . имеENDS Параметрите показват как да се изградят и обединят сегментите.

  10. Организиране на сегменти • Пълни сегменти директиви • Дефиниране на сегменти • Параметри • Граница за нов сегмент: BYTE, WORD,.. • Комбиниране: PRIVATE (няма обединение на сегменти от други модули), PUBLIC (при еднакви имена се поставят в общ сегмент), COMMON (припокриване на сегменти), STACK (с еднакви имена -> общ стеков сегмент) • Размер: USE16, USE32

  11. Организиране на сегменти • Пълни сегменти директиви • Свързване на сегментен регистър със сегментен адрес (името на сегмента) ASSUME сегментен_регистър : име_на_сегмент [, сегментен р-р : име_на_сегмент] . . . ASSUMEсегментен_регистър : NOTHING; отменя свързване

  12. Организиране на сегменти • Пълни сегменти директиви sts SEGMENT STACK WORD 32DUP(?) sts ENDS dts SEGMENT ; дефиниране на данни dts ENDS cds SEGMENT ASSUME CS:cds,SS:sts,DS:dts ;Инструкции cds ENDS END Пример

  13. Близки и далечни адреси • На кода – при сегментен адрес в CS • Близки: Процесорът променя брояча на адресите IP, но не променяCS. • Далечни: Процесорът променя IPи CS. call my ; извикване на подпрограма my е в сегмента на call -> близък код my е в друг сегмент -> далечен код

  14. Близки и далечни адреси • На данните – при сегментни адреси в DS и SS • Всички отмествания са спрямо адрес в DS с изключение на адресирането чрез BPи SP var WORD 50 .CODE . . . mov ax,var ; Втори операнд DS:var mov di,[bx] ; Втори операнд DS:[bx] mov [bp+6],ax ; Първи операнд SS:[bp+6]

  15. Близки и далечни адреси • На данните – при сегментни адреси в DS и SS • При далечен сегмент на данните (.FARDATA) mov ax,SEG var ; var е променлива от отдалечен сегмент mov es,ax ; ES сочи към далечни данни mov ax,es:var ; достъп 1 до var ; достъп 2 до var ASSUME es:SEG var mov ax,var

  16. Достъп до данни чрез адреси и указатели • Далечен адрес: адрес на променлива, дефинирана в отдалечен сегмент за данни. • Далечен указател: променлива, съдържаща Сегментен адрес + Отместване • Близък указател: променлива, съдържаща само Отместването

  17. Достъп до данни чрез адреси и указатели Дефиниране на указатели list BYTE 100DUP(?) ; Масив от 100 байта ptr_nearWORD list ; Близък указател към list ;(2 байта отместване) ptr_farDWORD list ; Далечен указател към list (4 байта) ; сегментен адрес : отместване ASSUME bx:PTR WORD ;bx се дефинира като ;указател къмдума

  18. Достъп до данни чрез адреси и указатели Дефиниране на указатели NPBYTETYPEDEF NEAR PTR BYTE ; тип за близък указател FPBYTETYPEDEF FAR PTR BYTE ; тип за далечен указател msg BYTE “Това е низ” . . . nps NPBYTE msg ; близък указател към низа fps FPBYTE msg ; далечен указател към низа дефиниране на указатели по време на асемблиране

  19. Достъп до данни чрез адреси и указатели Операции с указатели msg1 BYTE “Първи низ” msg2 BYTE “Втори низ” npmsg NPBYTE ? ; Дефиниране на близък указател fpmsg FPBYTE ? ; Дефиниране на далечен указател ; Близък указател <- отместване mov npmsg,OFFSET msg1 . . . ; Далечен указател <-сегмент:отместване movWORDPTR fpmsg[0],OFFSET msg2 mov WORDPTR fpmsg[2],SEG msg2 Инициализиране и зареждане на указатели с адрес по време на изпълнение

  20. Достъп до данни чрез адреси и указатели Операции с указатели buf1 FPBYTE ? ; Далечен указател към байтове buf1 buf2 FPBYTE ? ; Далечен указател към байтове buf2 mov ax,WORDPTR buf1[0] ; Копира се mov WORDPTR buf2[0],ax ; отместването mov ax,WORDPTR buf1[2] ; Копира се mov WORDPTR buf2[2],ax ; сегментен адрес Копиране на стойността на един указател в друг

More Related