assembler€86ˆ 4

assembler€86ˆ 4



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

tępne segmenty będą łączone jak COMMON, a informacja o tym zostanie przekazana programiście w postaci ostrzeżenia.

[’nazwa_klasy’] - nazwa nie dÅ‚uższa niż 40 znaków umieszczona w apostrofach. WedÅ‚ug ’nazwy_klasy’ program Å‚Ä…czÄ…cy grupuje segmenty należące do różnych modułów. Za pomocÄ… tego parametru nie da siÄ™ uzyskać okreÅ›lonej kolejnoÅ›ci klas ani też okreÅ›lonej kolejnoÅ›ci segmentów w danej klasie. Dwa różne segmenty o tej samej nazwie ale różnej "nazwie klasy' nie da siÄ™ poÅ‚Ä…czyć za pomocÄ… parametrów PUBLIC, STACK, COMMON lub MEMORY, (p. 8.2).

Jak już wspomniano, po zakończeniu jednego segmentu można w programie rozpocząć nowy segment o tej samej nazwie. Można też wewnątrz segmentu zdefiniować inny segment (musi on jednak w całości mieścić się w segmencie zewnętrznym). W tym przypadku segmenty po asemblacji zostaną ułożone jeden za drugim.

SEGMENT PARA

; treść programu i dane przypisane do    I

; segmentu PROGRAM l • • •

ENDS

SEGMENT PARA

; dane przypisane do segmentu DANE l ENDS

SEGMENT BYTE ; treść programu i dane przypisane do ; segmentu PROGRAM 1 ; segment rozpocznie siÄ™ po adresie ; symbolicznym ETYKIETA ENDS

SEGMENT PAGE

; program i dane w segmencie zewnętrznym SEGMENT

; program i dane w segmencie wewnętrznym ENDS

; dalszy ciąg segmentu zewnętrznego

ENDS    â™¦


Przykłady PROGRAMJ

ETYKIETA:

PROGRAM 1 DANE 1

DANE 1 PROGRAM 1

PROGRAM 1 PROGRAM 2

PROGRAM 3

PROGRAM 3

PROGRAM 2

Dyrektywa GROUP

Dyrektywa GROUP pozwala wszystkie segmenty - wystÄ™pujÄ…ce jako jej argumenty - zgrupować w jeden 64 KB blok pamiÄ™ci operacyjnej. Programista musi jednak sam kontrolować, czy Å‚Ä…czna dÅ‚ugość wszystkich grupowanych segmentów nie przekracza tej wielkoÅ›ci. Dyrektywa GROUP umożliwia uzyskanie programu wynikowego o maksymalnie zwartym kodzie. Na przykÅ‚ad adresy w rozkazach skoków miÄ™dzy segmentami mogÄ… być jedynie 16-bitowc (czyli tak jak rozkazy skoków wewnÄ…trz segmen-

powered by

4.3. Dyrektywy> i pseudoinstrukcje


Mi s4tol

tu), podczas gdy normalnie w takim przypadku jest generowany pełny adres logiczny smagający 4 bajtów. Składnia dyrektywy GROUP jest następująca

nazwa GROUP lista nazw

przy czym lista nazw to lista nazw grupowanych segmentów lub wyrażeń w postaci:

SEG nazwa zmiennej, SEG etykieta. Operator SEG (zob. p. 4.4) generuje adres początku segmentu podzielony przez 16 (16 bitów), w którym została zdefiniowana wymieniona nazwa zmiennej lub etykieta.

Przykłady

GRUPADANYCH GROUPDANE 1, DANE 2, SEG ZMIENNA 57 PROGRAM GROUP PROGRAMA, EW 88, SEG START    *

Dyrektywa ORG

Wskaźnik pozycji asemblera peÅ‚ni w czasie asemblacji podobnÄ… rolÄ™ jak wskaźnik rozkazów 1P w czasie wykonywania programu. Wskaźnik rozkazów IP zawiera offset rozkazu, który bÄ™dzie wykonywany jako nastÄ™pny. Podobnie wskaźnik pozycji asemblera zawiera offset rozkazu, który w nastÄ™pnej kolejnoÅ›ci bÄ™dzie pobrany do asemblacji. Asembler po napotkaniu dyrektywy SEGMENT definiuje nowy wskaźnik pozycji i ustawia go w stan 0. Asemblacja kolejnych bajtów powoduje zwiÄ™kszanie zawartoÅ›ci wskaźnika pozycji o 1. Dyrektywa ENDS wstrzymuje zliczanie bajtów w danym wskaźniku pozycji aż do ewentualnego rozpoczÄ™cia kolejnego segmentu o tej samej nazwie. Dyrektywa ORG pozwala zmienić zawartość wskaźnika pozycji w danej chwili. Przyjmuje on wartość okreÅ›lonÄ… argumentem

ORG wyrażenie

przy czym wartość wyrażenia musi być liczbÄ… caÅ‚kowitÄ… z przedziaÅ‚u [0,65535]. Jeżeli w wyrażeniu wystÄ™pujÄ… nazwy symboliczne, to muszÄ… być one wczeÅ›niej zdefiniowane, przy czym nie mogÄ… to być etykiety. Dyrektywa ORG nie może wystÄ…pić wewnÄ…trz struktury zdefiniowanej dyrektywami STRUC/ENDS (zob. p. 4.3.4).

Przykłady

PROGRAM    SEGMENT

ORG 100H    ; program rozpocznie siÄ™ od adresu

; 100H względem początku segmentu

•

’ Wskaźnik pozycji zostanie ustawiony na kolejny adres podzielny przez 16:

IF $ MOD 16    ; asemblacja warunkowa (zob. p. 4.3.5)

ORG $ - ($ MOD 16) +16 ENDIF


; wykona się gdy $ MOD 16 różne od zera

; koniec asemblacji warunkowej


Wyszukiwarka

Podobne podstrony:
assembler?86? 4 68 4. Język asemblerowy mikroprocesorów 8086/8088 Dyrektywy .LALL, .SALL, .XALL Dy
assembler?86? 9 78 4. Język asemblerowy mikroprocesorów 8086/8088 PROGRAM SEGMENT • • • A DALEKO E
assembler?86? 0 40 4. Język asemblerowy mikroprocesorów 8086/8088 W książce omówimy wersję MASM 4.
assembler?86? 3 46 4. Język asemblerowy mikroprocesorów 8086/8088 PARA - początek segmentu będzie
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? 3 66 4. Język asemblerowy mikroprocesorów 8086/8088 66 4. Język asemblerowy mikropro
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? 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