assembler€86ˆ 5

assembler€86ˆ 5



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

; w kolejnym przykładzie zmienne zostają redefiniowane DANE SEGMENT

TABLICA    DB 3 DUP (?)    ; definiowanie trzech bajtów (zob. p. 4.3.2)

ORG OFFSET TABLICA ; operator OFFSET (zob. p. 4.4) ALA    DB ’A’

KOT    DW ’LA’    Â«

Dyrektywa EVEN

Dyrektywa EVEN ustawia wskaźnik pozycji asemblera na adres, o ile aktualny jest nieparzysty (p. 2.5).

najbliższy parzysty

Przykład

DANE

SEGMENT

DB ? ; offset = 0 EVEN

DD ? ; offset = 2 DB?

♦

Dyrektywa ASSUME

Dyrektywa ASSUME sÅ‚uży do deklarowania zawartoÅ›ci czterech rejestrów segmentowych w czasie realizacji programu. Asembler wykorzystuje tÄ™ informacjÄ™ celem okreÅ›lenia, czy zmienne i etykiety używane w segmencie sÄ… adresowane przez wÅ‚aÅ›ciwy rejestr segmentowy. Także - w przypadku gdy jest to niezbÄ™dne - generuje odpowiednie przedrostki przyporzÄ…dkowujÄ…ce zmiennym inne niż standardowe rejestry segmentowe. Każda komórka pamiÄ™ci jest okreÅ›lona przez 20-bitowy adres fizyczny oraz adres logiczny skÅ‚adajÄ…cy siÄ™ z dwóch liczb 16-bitowych. WiÄ™kszość rozkazów komunikujÄ…cych siÄ™ z pamiÄ™ciÄ… używa jedynie 16-bitowego adresu wzglÄ™dem poczÄ…tku segmentu, uwzglÄ™dniajÄ…c przy tym adres poczÄ…tku segmentu okreÅ›lony odpowiednim rejestrem segmentowym. Zatem aby obliczony w BIU adres fizyczny byÅ‚ prawidÅ‚owy, zawartość rejestrów segmentowych w czasie wykonywania programu musi być zgodna z deklaracjÄ… zawartoÅ›ci tych rejestrów w czasie asemblacji, co jest realizowane wÅ‚aÅ›nie dyrektywÄ… ASSUME. Dyrektywa ta musi wiÄ™c znajdować siÄ™ w programie źródÅ‚owym przed pierwszym użyciem rejestru segmentowego lub też przed każdÄ… zmianÄ… jego zawartoÅ›ci. Każde dziaÅ‚anie na danych w programie lub na stosie wymaga wczeÅ›niejszego okreÅ›lenia zawartoÅ›ci rejestrów DS, SS, ES. Zatem dla tych rejestrów dyrektywa ASSUME musi znaleźć siÄ™ w programie źródÅ‚owym przed rozkazami zwiÄ…zanymi z dostÄ™pem do pamiÄ™ci. Podobnie musi być zdefiniowany rejestr CS przed pierwszÄ… instrukcjÄ…, która jest poprzedzona etykietÄ… (adresem symbolicznym). DziÄ™ki temu sÄ… też generowane wÅ‚aÅ›ciwe kody rozkazów dla skoków bliskich (NEAR), tzn. wewnÄ…trz segmentu lub grupy segmentów (zob. dyrektywa GROUP). W przypadku skoku dalekiego (FAR) tzn. miÄ™dzy segmentami zostaje zmieniona zawartość rejestru segmentowego CS i w zwiÄ…zku z tym rozkaz taki musi być poprzedzony nowÄ… deklaracjÄ… ASSUME. SkÅ‚adnia dyrektywy jest nastÄ™pujÄ…ca

4.3. Dyrektywy i pseudoinstrukcje

powere^ by

Mi si ol


ASSUME reg seg: nazwa [,reg_seg: nazwa,...]

przy czym:

-    dyrektywa nie może być poprzedzona nazwÄ…,

-    reg seg może być jednym z rejestrów CS, DS, SS, ES,

. nazwa jest nazwą określonego segmentu, grupy segmentów zdefiniowanej dyrektywą GROUP lub wyrażenie: SEG zmienna lub SEG etykieta (zob. komentarz do GROUP).

W przypadku, gdy w segmencie jeden z rejestrów segmentowych nie będzie używany, dyrektywa powinna mieć postać

ASSUME reg_seg: NOTHING

Umieszczenie w programie źródłowym dyrektywy ASSUME pozwala przy działaniu na zmiennych nie używać przedrostka, określającego przyporządkowany rejestr segmentowy.

Przykłady

DANE 1 SEGMENT GLOBAL

ZMIENNA 1 DB ? ZMIENNA 2 DB ? DANEl ENDS DANE2 SEGMENT

ZMIENNA 3 DW ? ZMIENNA 4 DW ? DANE2 ENDS PROGRAM SEGMENT PARA

ASSUME CS:PROGRAM ; nie ma deklaracji ASSUME dla danych

MOV AX, DANE l    ; zaÅ‚adowanie rejestrów

MOV DS, AX    ; segmentowych: DS

MOV AX, DANE 2    ; oraz

MOV ES, AX    ; ES

; przedrostki sÄ… niezbÄ™dne MOV BX, ES:ZMIENNA_4 MOV CL, DS:ZMIENNA_1 MOV DH, DS:ZMIENNA_2

• ••

PROGRAM ENDS

Zastosowanie dyrektywy ASSUME do rejestrów DS i ES pozwoli w tym przypadku zniienić segment PROGRAM nastÄ™pujÄ…co PROGRAM    SEGMENT PARA

ASSUME CS;PROGRAM, DS:DANE_1, ES:DANE_2 ; jest dyrektywa ASSUME dla danych MOV AX, DANE l    ; zaÅ‚adowanie rejestrów

MOV DS, AX    ; segmentowych: DS


Wyszukiwarka

Podobne podstrony:
assembler?86? 5 70 4. Język asemblerowy mikroprocesorów 8086/8088 .186
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? 4 48 4. Język asemblerowy mikroprocesorów 8086/8088 tępne segmenty będą łączone jak
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? 4 68 4. Język asemblerowy mikroprocesorów 8086/8088 Dyrektywy .LALL, .SALL, .XALL Dy
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? 4 28 2. Mikroprocesory 8086/8088 MOV    AL,ZMIENNA BAJT[DI
assembler?86? 9 58 4. Język asemblerowy mikroprocesorów 808618088 Dyrektywy: DB, DW, DD, DQ, DT Li

więcej podobnych podstron