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