assembler€86ˆ 3

assembler€86ˆ 3



46 4. Język asemblerowy mikroprocesorów 8086/8088

PARA - poczÄ…tek segmentu bÄ™dzie miaÅ‚ najbliższy wolny adres podzielny bez reszty przez 16. MiÄ™dzy dwoma segmentami (tj. koÅ„cem poprzedniego i poczÄ…tkiem nastÄ™pnego) może pozostać do piÄ™tnastu nie wykorzystanych bajtów. Jeżeli [typ] nie wystÄ™puje w dyrektywie SEGMENT, to jest przyjmowany parametr PARA.

BYTE - poczÄ…tek nowego segmentu rozpocznie siÄ™ bez odstÄ™pu po segmencie poprzednim, ponieważ poczÄ…tek nowego segmentu przyjmuje ostatni w poprzednim segmencie adres podzielny bez reszty przez 16. Adres ten może być przemieszczony w głąb poprzedniego segmentu na odlegÅ‚ość do piÄ™tnastu bajtów. Offset rozpoczyna siÄ™ wtedy nie od zera, lecz od przemieszczenia równego liczbie tych bajtów.

WORD - początek segmentu jest określany podobnie jak dla typu BYTE, jednak tylko dla adresu parzystego. Między dwoma segmentami może być wtedy co najwyżej jeden bajt nie wykorzystany. Typ segmentu WORD ma znaczenie wyłącznie dla procesora 8086, gdy zależy nam aby, dostęp do 16-bitowcgo słowa był możliwy w jednym cyklu pamięci (por. p. 2.5).

PAGE - poczÄ…tek nowego segmentu rozpocznie siÄ™ od najbliższego wolnego adresu podzielnego bez reszty przez 256. W zapisie szesnastkowym adres ten bÄ™dzie koÅ„czyć siÄ™ dwoma zerami 00H.

[połączenie] - argument informujÄ…cy program łączÄ…cy (p. 8.2) w jaki sposób i w jakiej kolejnoÅ›ci segment ma być łączony z innymi segmentami. Jeżeli argument nie wystÄ™puje (co jest przyjÄ™te jako standard), to oznacza, że wystÄ™pujÄ…cy segment jest lokalny i nie jest łączony z żadnym innym. W przypadku, gdy argument "połączenie" wystÄ™puje, musi być podany przy pierwszej definicji tego segmentu i argument "połączenie" nie może być później (przy ponownym otwieraniu lego segmentu) zmieniany. Możliwych jest pięć rodzajów połączeÅ„.

PUBLIC - połączenie z segmentami o tej samej nazwie wystÄ™pujÄ…cymi w innych moduÅ‚ach i utworzenie jednego wspólnego segmentu. Wszystkie połączone segmenty majÄ… wspólny adres poczÄ…tku segmentu, a offset zwiÄ™ksza siÄ™ poczÄ…wszy od poczÄ…tku pierwszego segmentu aż do koÅ„ca ostatniego. Należy pamiÄ™tać, że jeżeli równoczeÅ›nie nie zostanie zadeklarowany typ BYTE, to wewnÄ…trz tak utworzonego nowego segmentu mogÄ… wystÄ™pować bajty o niezdefiniowanej zawartoÅ›ci.

Przykład

z modułu 1: DANE SEGMENT PARA PUBLIC

ZMIENNASLOWO 1 DW 5555H ZMIENNA SLOWO_2 DW 8888H DANE ENDS

z modułu 2: DANE SEGMENT PARA PUBLIC

ZMIENNASL0W03 DW 4444H DANE    ENDS

po połączeniu uzyska się następującą zawartość pamięci:

offset    zawartość

(X)O0H-0003H    55558888H

0004H-000FH    nieokreÅ›lona

0010H-0011H    4444H    +

powered by

4.3. Dyrektywy i pseudoinstrukcje


Mi słoi

COMMON - segmenty zdefiniowane jako COMMON, a majÄ…cc^^amÅ‚pi!^^^â„¢ zwÄ™ sÄ… Å‚adowane do pamiÄ™ci z takim samym adresem poczÄ…tkowym segmentu. Wielkość tego segmentu po połączeniu jest równa wielkoÅ›ci najwiÄ™kszego z łączonych segmentów. Tak wiÄ™c ten sam obszar pamiÄ™ci operacyjnej może być w różnych moduÅ‚ach zdefiniowany za pomocÄ… różnych zmiennych i etykiet. Inicjowanie takiego obszaru pamiÄ™ci nie może odbywać siÄ™ za pomocÄ… konkretnych wartoÅ›ci zmiennych przypisywanych dyrektywami DB/DW.

Przykład

SEGMENT COMMON DB?

DW?

DB?

ENDS

SEGMENT COMMON DW?

DW?

DW?

ENDS    +


moduÅ‚ 1:    WSPOLNEDANE

ZMIENNA J ZMIENNA 2 ZMIENNA 3 WSPÓLNE DANE moduÅ‚ 2:    WSPÓLNE DANE

ZMIENNAl ZMIENNA2 ZMIENNA 3 WSPÓLNE DANE

W pamięci zostanie zarezerwowanych 6 bajtów, przy czym cztery pierwsze mogą być wykorzystywane w obu modułach.

AT ,wyrażenie numeryczne’ - segmenty z tym połączeniem sÄ… Å‚adowane od adresu wskazanego przez wyrażenie numeryczne. Wartość wyrażenia musi być znana w czasie asemblacji i stanowi adres fizyczny podzielony przez 16 (na 16 bitach). PrzykÅ‚adowo segment rozpoczynajÄ…cy siÄ™ dyrektywÄ…

DANE SEGMENT AT 5432H

zostanie załadowany od adresu fizycznego 54320H. Dla programów uruchamianych pod kontrolą systemu MS-DOS użycie AT w segmencie programu jest niemożliwe.

STACK - wszystkie segmenty o tej samej nazwie i połączeniu STACK utworzÄ… jeden wspólny stos o jednym adresie poczÄ…tkowym i o wielkoÅ›ci bÄ™dÄ…cej sumÄ… wszystkich łączonych segmentów. Jeżeli wielkość tego połączonego stosu jest mniejsza niż 512 bajtów, to program łączÄ…cy powiÄ™ksza go automatycznie do 512 bajtów. PrzykÅ‚adowo dla dwóch segmentów:

STOS SEGMENT STAĆ    STOS SEGMENT STACK

DW 10 DUP (?)    DW 22 DUP (?)

KONIECSTOSU LABEL WORD SZCZYT STOSU LABEL WORD STOS ENDS    STOS ENDS

postanie utworzony wspólny stos o wielkości 32 bajtów. KONIECSTOSU * SZCZYT STOSU mają ten sam offset równy 42H (dziesiętnie 10 + 22).

MEMORY - połączenie podobne jak COMMON, lecz segment zostanie umieszczony na koÅ„cu łączonego programu. W programie źródÅ‚owym może wystÄ…pić tylko jedna nazwa z segmentem MEMORY. Jeżeli wystÄ…pi ich wiÄ™cej, to drugi i nas-


Wyszukiwarka

Podobne podstrony:
assembler?86? 3 66 4. Język asemblerowy mikroprocesorów 8086/8088 66 4. Język asemblerowy mikropro
assembler?86? 0 40 4. Język asemblerowy mikroprocesorów 8086/8088 W książce omówimy wersję MASM 4.
assembler?86? 4 48 4. Język asemblerowy mikroprocesorów 8086/8088 tępne segmenty będą łączone jak
assembler?86? 5 50 4. Język asemblerowy mikroprocesorów 8086/8088 ; w kolejnym przykładzie zmienne
assembler?86? 6 52 4. JÄ™zyk asemblerowy mikroprocesorów 8086/8088 MOV AX, DANE 2    
assembler?86? 7 54 4. Język asemblerowy mikroprocesorów 8086/8088 kowych informacji czy skoki do (
assembler?86? 8 56 4. Język asemblerowy mikroprocesorów 8086/8088 433. Połączenia międzymodułowe O
assembler?86? 2 64 4. Język asemblerowy mikroprocesorów 8086/8088 64 4. Język asemblerowy mikropro
assembler?86? 4 68 4. Język asemblerowy mikroprocesorów 8086/8088 Dyrektywy .LALL, .SALL, .XALL Dy
assembler?86? 5 70 4. Język asemblerowy mikroprocesorów 8086/8088 .186
assembler?86? 6 72 4. Język asemblerowy mikroprocesorów 8086/8088 72 4. Język asemblerowy mikropro
assembler?86? 7 74 4. Język asemblerowy mikroprocesorów 8086/8088 Przykład ZMIENNA A DW 5*5 ; =
assembler?86? 8 76    4. JÄ™zyk asemblerowy mikroprocesorów 8086/8088 LE (ang. lower
assembler?86? 9 78 4. Język asemblerowy mikroprocesorów 8086/8088 PROGRAM SEGMENT • • • A DALEKO E
assembler?86? 1 42 4. Język asemblerowy mikroprocesorów 8086/80X8 (ODH). Asembler przetwarza łańcu
assembler?86? 2 44 4. Język asemblerowy mikroprocesorów #086/8088 Wiersz programu kończy się zasad
assembler?86? 0 60 4. JÄ™zyk asemblerowy nuKroprocesorów 8086/8088 ; OOh    16-23 DA
assembler?86? 9 58 4. Język asemblerowy mikroprocesorów 808618088 Dyrektywy: DB, DW, DD, DQ, DT Li
assembler?86? 1 62 4. JÄ™zyk asemblerowy> mikroprocesorów 808618088 oraz    AA

więcej podobnych podstron