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