assembler�86� 5

assembler�86� 5



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

.186    -    procesory 80186/80188

J86c    - procesor 80286, tryb    adresowania rzeczywistego

J86p    - procesor 80286, tryb    adresowania wirtualnego

.8087    -    koprocesor 8087

.287    -    koprocesor 80287

4.4. Wyrażenia i operatory

Asembler MASM rozróżnia wyrażenia numeryczne oraz adresowe. Operatory występujące w poszczególnych wyrażeniach można podzielić na:    j

-    operatory stosowane wyłącznie w wyrażeniach adresowych

przedrostek rejestru segmentowego, OFFSET, SEG, TYPE, LENGHT, S1ZE;

-    operatory stosowane wyłącznie w wyrażeniach numerycznych

*, /, MOD, SHL, SHR, OR, XOR, AND, NOT, SHORT;    Ą

operatory stosowane w obu typach ww. wyrażeń

EQ, LT, LE, GT, GE, NE, +, - (także jako znak liczby), HIGH, LOW, PTR;

-    operatory związane z chwilową wartością wskaźnika pozycji    1

THIS, $;    I

-    operatory związane z dyrektywą RECORD

SHIFT, WIDTH, MASK.    I

Podczas obliczania wartości wyrażenia obowiązują następujące reguły

-    wyrażenia są obliczane od strony lewej do prawej,    1

-    operatory o wyższym priorytecie są realizowane przed sąsiadującymi operatorami o priorytecie niższym,

-    kolejność obliczeń można zmienić za pomocą nawiasów okrągłych - część wyrażenia

zamknięta w nawiasach jest obliczana w pierwszej kolejności,    1

-    jeżeli obok siebie znajduje się więcej wyrażeń w parach nawiasów okrągłych, to są one obliczane od lewej strony do prawej,

-    jest możliwe zagnieżdżanie nawiasów okrągłych - obliczenia są realizowane począwszy od wyrażeń ujętych w wewnętrznych nawiasach.    I

Priorytety operatorów oraz nawiasów (w kolejności od najwyższego do najniższego)

1.    nawiasy okrągłe, LENGHT, SIZE, WIDTH, MASK, SHIFT, nawiasy trójkątne

2.    przedrostki rejestrów segmentowych, PTR, OFFSET, SEG, TYPE, THIS

3.    HIGH, LOW    I

4.    V, SHL, SHR

5.    +,- (także jako znaki liczb)    J

6.    EQ, LT, LE, GT, GE, NE

7.    NOT

8.    AND

9.    OR, XOR

10.    SHORT

Dla operatorów wymienionych w pozycji 1 i 2 poszczególne argumenty mogą dodatkowo obejmować następujące słowa kluczowe: BYTE, WORD, DWORD,

powered by

4.4. Wyrażenia i operatory


Mi yiol

NEAR, FAR, $ oraz wskazanie adresu. Wszystkie operatory, których zapis jest literowy, muszą być odseparowane od argumentów co najmniej jedną spacją.

Przedrostek rejestru segmentowego

Jak już wspomniano, adres Fizyczny w pamięci operacyjnej jest tworzony na podstawie offsetu oraz zawartości jednego z rejestrów segmentowych. Rejestry segmentowe są przypisane do poszczególnych operacji w sposób standardowy (p. 2.5). Jeżeli ma być użyty rejestr segmentowy inny niż standardowy bądź też nie została zdefiniowana dyrektywa ASSUME, to argumenty muszą być poprzedzone przedrostkiem (1 bajt)

rejestrsegmentowyiwyrażenieadresowe

przy czym rejestr segmentowy jest jednym z rejestrów CS, SS, DS lub ES.

Operator OFFSET

Operator OFFSET wydziela z wyrażenia adresowego adres względem początku segmentu (np. OFFSET ZMIENNAl) lub grupy segmentów (np. OFFSET GRUPA.ZMIENNA). W czasie asemblacji adres względem początku segmentu nie ulega zmianie, jednak w trakcie łączenia modułów wynikowych może zostać zmieniony (np. w wyniku napotkania dyrektywy GROUP). Program łączący uwzględnia te ewentualne zmiany i z tego też względu w programie źródłowym nie powinno używać się wyliczonych, absolutnych wartości offsetu a jedynie wyrażenia z operatorem OFFSET. Adres względem początku segmentu nic może być określany operatorem OFFSET, o ile jego wartość zmienia się w czasie realizacji programu (np. offset z ZMIENNA! BX]). W takim przypadku jest pomocny rozkaz maszynowy LEA (ang. load effec-tive addresss ).

Przykład

GRUPA    GROUP DANE,PROGRAM

PROGRAM SEGMENT BYTE

ASSUME CSiPROGRAM, DS:GRUPA • ••

MOV BX,OFFSET ZMIENNA TAB MOV DI.1ÓH MOV AX,[BX][DI]

• ••

MOV BX,OFFSET GRUPA:ZMIĆNNA TAB MOV DI,OFFSET ES:STALA • • •

PROGRAM ENDS Orator SEG

Operator SEG wydziela z wyrażenia adresowego 16-bitowy adres początku ^gmentu podzielony przez 16 (ang.paragraph ).


Wyszukiwarka

Podobne podstrony:
assembler?86? 5 50 4. Język asemblerowy mikroprocesorów 8086/8088 ; w kolejnym przykładzie zmienne
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? 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