Professional Documents
Culture Documents
Uvod U Asembler 8086
Uvod U Asembler 8086
Arhitektura procesora
skup registara
memorijski model
kodove instrukcija
na ine adresiranja
Mainski jezik
Procesor i8086
Registri
Optenamenski registri
Segmentni registri
registri
podataka
pokaziva i i
indeksi
Pokaziva instrukcije
Ne moe se direktno pristupati IP, ali odre ene instrukcije njime manipuliu
Indikatori
Memorija
Segmentacija
Segment je logi ka jedinica memorije koja moe biti do veli ine od 64Kbyte
Svaki segment obuhvata kontinualni adresni prostor
Svakom segmentu je (programski) dodeljena bazna adresa
bazna adresa predstavlja adresu prve lokacije koja pripada segmentu u memorijskom
prostoru
Primer: 1234:0022H=12340H+0022H=12362H
Dobijanje logi ke adrese zavisi od vrste pristupa memoriji:
Vrsta pristupa
Podrazumevan Alternativna
a
baza
baza segmenta segmenta
Dohvatanje instrukcije
CS
Operacija na steku
SS
Promenljiva (osim
DS
CS,ES,SS
donjih)
Izvor string
DS
CS,ES,SS
Odredite string
ES
BP kori en kao bazni
SS
CS,DS,ES
reg.
Ofset
IP
SP
efektivna adresa
SI
DI
efektivna adresa
Implementacija steka
Dve oblasti na ekstremno niskim i visokim adresama su posve ene specifi nim
funkcijama
Lokacije od 0 do 7FH (128 bajtova) su posve ene tabeli prekidnih vektora
Lokacije od FFFF0H do FFFFFH (16 bajtova) su posve ene za "boot" sistema
Ulaz/izlaz
U/I ure aji mogu biti smeteni i u memorijski adresni prostor procesora
Ukoliko ure aj odgovara kao memorijska komponenta CPU ne zna za razliku
Memorijski mapiran U/I obezbe uje ve u fleksibilnost programiranja
proizvoljna instrukcija koja pristupa memoriji se moe koristiti za pristup U/I portu
MOV instrukcija moe prenositi podatke izme u U/I porta i proizvoljnog registra
AND i OR se mogu koristiti da se manipulie bitima u registrima U/I ure aja
mogu se koristiti prednosti raznovrsnosti adresnih na ina
Na ini adresiranja
Uvod
BX
ili
BP
ili
BX
ili
BP
SI
ili
Eksplicitn
o
SI
ili
DI
+
DI
pomer
aj
000
+
CS
Efektivn
a
ili
SS
000
ili
Podrazumeva
no
DS
ili
+
ES
000
000
fizi ka adresa
Registarsko adresiranje
Neposredno adresiranje
Direktno adresiranje
Mod
R/M
Displacement
EA
Mod
R/M
BX
or
BP
or
SI
or
DI
Bazno adresiranje
EA
Primeri:
adrese
MOV
MOV
MOV
OpCod
e
sadrzaj(BX)+ofset(X) u AX
Mod
R/M
Displacement
or
BX
BP
EA
Indeksirano adresiranje
Primeri:
MOV AX,[SI]+X
efektivne adrese
MOV AX,X[SI] ;
OpCod
e
Mod
R/M
; kopira se sadraj sa
sadrzaj(SI)+ofset(X)
Displacement
or
SI
DI
EA
u AX
MOV AX,[SI+X]
MOV AX,[SI].X
Bazno indeksirano adresiranje
Takodje, nizovi koji se nalaze u strukturama i matrice se mogu efikasno obra ivati
ovako
Primer:
MOV AX,[BX].X[SI] ; kopira se sadraj sa EA
;
sadr(BX)+sadr(SI)+ofset(X) u AX
OpCod
e
Mod
R/M
Displacement
or
BX
BP
or
SI
DI
EA
Adresiranje stringova
OpCod
e
SI
DI
Source
EA
Destination
EA
Primeri:
IN AX,15; direktno adresiranje porta 15 (cita se u AX)
OUT DX,AX; indirektno adresiranje porta sa adresom u DX
; (salje se sadrzaj AX)
OpCod
e
Data
Port
address
Direktno adresiranje
porta
OpCod
e
DX
Port
address
Indirektno adresiranje
porta
Skup instrukcija
Uvod
Na ovaj na in se kombinuje
jednostavnost programiranja na simboli kom nivou
efikasnost smetanja instrukcija na mainskom nivou
Jednoj SMJ (ASM) instrukciji odgovaraju razli iti formati (kra i i dui) mainske
instrukcije
Npr. programer pie INC, a asembler na osnovu operanda odre uje mainsku
instrukciju
PUSH izvorite
(Push)
POP odredite
(Pop)
kada se koristi sa LOCK prefiksom moe testirati i postaviti (test and set) semafor
Ulaz/izlaz
IN akumulator, port
(Input)
Prenos adresa
Prenos indikatora
A
F
4
P
F
2
C
F
0
Aritmeti ke instrukcije
sabiranje
oduzimanje
mnoenje
delenje
ASCII cifre
SF (Sign Flag)
aritmeti ke i logi ke instrukcije postavljaju SF da bude jednak najviem bitu (7. ili 15.)
rezultata
za ozna ene binarne brojeve SF e biti 0 za nenegativne i 1 za negativne brojeve
uslovna instrukcija skoka koja zavisi od SF se moe koristiti posle aritmeti ke operacije
na taj na in tok programa moe biti promenjen u zavisnosti od znaka rezultata operacije
nakon operacija sa neozna enim brojevima SF treba ignorisati
ZF (Zero Flag)
aritmeti ke i logi ke instrukcije ga postavljaju ako je rezultat operacije 0
postoji uslovna instrukcija skoka koja zavisi od ZF
PF (Parity Flag)
aritmeti ke i logi ke instrukcije ga postavljaju ako niih 8 bita rezultata sadri paran
broj 1
moe se koristiti za proveru parnosti (npr. kod ASCII karaktera)
OF (Overflow Flag)
postavlja se ako je rezultat operacije suvie veliki pozitivan ili suvie mali negativan
broj
"suvie" se odre uje prema duini odredita operacije
ukazuje na prekora enje u aritmetici sa znakom
moe se ignorisati kada se radi aritmetika neozna enih brojeva
Sabiranje
INC odredite
(Increment)
AAA
DAA
Oduzimanje
DEC odredite
(Decrement)
NEG odredite
(Negate)
oduzima odredini operand koji moe biti 8- ili 16-bitni od 0 i upisuje rezultat u
odredite
izra unava drugi komplement broja, efektivno menjaju i znak celobrojne vrednosti
ako je operand 0 znak se ne menja
ako je bajt-operand jednak 128 ili re -operand jednak 32768 nema promene
operanda, OF=1
NEG menja AF, CF, OF, PF, SF i ZF; CF je uvek postavljen na 1 izuzev kada je
operand jednak 0
AAS
DAS
Mnoenje
MUL izvorite
(Multiply)
ako je izvorini operand re tada se on mnoi sa AX, a rezultat (duple irine) se vra a u
DX i AX
operandi se tretiraju kao neozna eni binarni brojevi
ako je via polovina rezultata (AH odnosno DX) razli ita od nule CF i OF se
postavljaju
sadraj AF, PF, SF i ZF je nedefinisan
IMUL izvorite
(Integer Multiply)
AAM
Deljenje
DIV izvorite
(Divide)
IDIV izvorite
(Integer Divide)
AAD
CBW
CWD
Logi ke instrukcije
NOT odredite
(Not)
invertuje bite (ra una jedini ni komplement) operanda duine bajta ili re i
OR odredite, izvorite
(Or)
obavlja logi ku "ILI" operaciju izme u dva operanda (bajta ili re i) i vra a rezultat u
odredite
bit rezultata je 1 ako je barem jedan od dva odgovaraju a bita operanada 1, ina e je 0
Instrukcije pomeranja
(Shift Logical/Arithmetic
pomera bite operanda odredita (bajt ili re ) u desno za broj bita specificiran
operandom broj
sa leve strane ulaze 0 pri pomeranju udesno
ako bit znaka (najvii bit odredita) zadrava vrednost OF se postavlja na 0
pomera bite operanda odredita (bajt ili re ) u desno za broj bita specificiran
operandom broj
sa leve strane ulaze biti jednaki originalnom najviem bitu (zadrava se predznak)
SAR odseca pozitivne brojeve prema 0, a negativne prema -
rezultat SAR i odgovaraju eg IDIV se razlikuju jer IDIV odseca sve vrednosti prema 0
Instrukcije rotacije
Biti koji pri rotaciji izlaze iz odredita se ne gube, ve se pojavljuju "sa druge
strane"
Kao kod instrukcija pomeranja, broj pozicija za rotaciju moe biti konstanta 1 ili
CL
CF se moe koristiti kao ekstenzija operanda u dve instrukcije
Tako se bit moe izolovati u CF pa zatim testirati pomo u JC (Jump if Carry) ili
JNC
Rotacije uti u samo na CF i OF
CF uvek sadri vrednost poslednjeg bita koji je pri rotaciji izaao iz odredita
Pri rotaciji za vie pozicija, OF je uvek nedefinisan
Pri rotaciji za jednu poziciju OF se postavlja na 1 ako operacija menja najvii bit
odredita
ROL odredite, broj
(Rotate Left)
(Rotate Right)
bezuslovni skokovi
uslovni skokovi
instrukcije za kontrolu iteracija
instrukcije prekida
Bezuslovni skokovi
JMP cilj
(Jump)
CALL ime_procedure
(Call)
Uslovni skokovi
Testirani uslov
JA/JNBE
(CF or ZF)=0
JAE/JNB
CF=0
JB/JNAE
CF=1
JBE/JNA
(CF or ZF)=1
JC
JE/JZ
CF=1
ZF=1
JG/JNLE
JGE/JNL
JL/JNGE
JLE-JNG
JNC
JNE/JNZ
JNO
JNP/JPO
CF=0
ZF=0
OF=0
PF=0
JNS
JO
JP/JPE
JS
SF=0
OF=1
PF=1
SF=1
iznad (above) i ispod (below) se odnose na odnose neozna enih veli ina
ve e (greater) i manje (less) se odnose na odnose ozna enih veli ina
Kontrola iteracija
JCXZ kratka-labela
(Jump if CX Zero)
Instrukcije prekida
INTO
(Interrupt on Overflow)
IRET
(Interrupt Return)
vra a kontrolu na mesto gde se dogodio prekid, tako to sa steka skida IP, CS i
indikatore
IRET uti e na sve indikatore jer ih restaurira na prethodno sa uvane vrednosti
koristi se za izlazak iz prekidne procedure bez obzira da li je re o SW ili HW prekidu
Operacije sa indikatorima
CLC
CMC
STC
CLD
STD
CLI
STI
String instrukcije
AL/A
Vrednost za traenje; odredite za LODS; izvorite za STOS
X
DF
0=autoinkrementiranje SI, DI; 1=autodekrementiranje SI, DI
ZF
terminator za traenje i komparaciju
Neke string instrukcije imaju izvorini, neke odredini, a neke oba operanda
Hardver podrazumeva da se izvorini operand nalazi u teku em segmentu
podataka
Segmentni prefiks (1 bajt) se moe koristiti da se promeni gornja pretpostavka
Odredini string mora biti u teku em ekstra segmentu (ne moe se promeniti
prefiksom)
Asembler proverava atribute operanada da utvrdi da li su elementi bajtovi ili re i
Asembler ne koristi imena operanada za adresiranje stringova
asembler koristi sadraj SI kao ofset adresu teku eg elementa izvorinog stringa
asembler koristi sadraj DI kao ofset adresu teku eg elementa odredinog stringa
ako ispred CMPS stoji prefiks REPE ili REPZ operacija se interpretira kao
"kompariraj dok nije kraj stringa (CX0) i stringovi su jednaki (ZF=1)
ako ispred CMPS stoji prefiks REPNE ili REPNZ operacija se interpretira kao
"kompariraj dok nije kraj stringa (CX0) i stringovi nisu jednaki (ZF=0)
CMPS se koristi za pronalaenje jednakih ili razli itih podstringova u stringu
SCAS odredini-string
(Scan String)
LODS izvorini-string
(Load String)
STOS odredini-string
(Store String)
Direktive
Uvod
Imena promenljivih i labela su ograni ena na 31 znak i nisu ograni ena na slova i
cifre
Znak "podvu eno" (_) se moe koristiti da se pove a itljivost
Proizvoljan broj praznina se moe umetati izme u identifikatora
Instrukcija se moe preneti u naredni red tako to se naredni red zapo ne znakom
&
Format instrukcija
Format direktiva
Konstante
STRING[SI],'A'
STRING[SI],41H
; karakter
; ekvivalent u heksadecimalnom
ADD
EQU
EQU
EQU
EQU
EQU
AX,0C4H
10O
11Q
11111111B
-5
-6D
;
;
;
;
;
;
sistemu
OCTAL_8
OCTAL_9
ALL_ONES
MINUS_5
MINUS_6
-6
Definicije podataka
; neinicijalizovani bajt
; dve reci, prva neinicijalizovana,
; dve dvostruke reci
; 1,2,1,2,1,2
DUP 2); 1,2,2,1,2,2,1,2,2
; specificirana bazna adresa
; 3 bajta sadrze: 41H, 42H, 43H
; 1 rec sadrzi: 42H, 41H
; dvostruka rec, sadrzi: 00H 00H
; 100 bajtova inicijalizovanih na 0
Atributi promenljive
Konverzija tipa
Operatori
LENGTH odre uje broj alociranih jedinica (bajtova, re i ili dvostrukih re i) za vektor
SIZE odre uje broj bajtova koje zauzima skalar ili vektor (SIZE=LENGTH*TYPE)
SEGMENT
A_VAR
A_SEG
B_VAR
A_SEG
C_VAR
A_SEG
D_VAR
A_SEG
E_VAR
A_SEG
F_VAR
B_SEG
(0055)
B_SEG
(0055)
B_SEG
(0055)
B_SEG
(0055)
G_VAR
H_VAR
I_VAR
ATRIBUTI
OFFSET
OPERATORI
TYPE
LENGTH
SIZE
0
1
5
13
19
0
1
2
4
1
1
1
1
2
2
6
9
3
1
4
8
6
9
3
100
100
Primer
Kontrola segmenata
registru
; tabela ima 50 elemenata
; AX=0
; CX=50 , CX - brojac petlje
; SI=100 , SI pokazuje na kraj
; pomeranje za jedan element
; dodavanje elementa na sumu
; dok CX>0
Direktiva ASSUME
Direktiva ASSUME govori koje adrese e biti u segmentnim registrima u vreme
izvrenja
Sintaksa ASSUME: ASSUME seg_reg:ime_seg{,
seg_reg:ime_seg}...
Asembler proverava svaki memorijski operand instrukcije odre uju i
u kom segmentu je promenljiva
koji segmentni registar sadri adresu tog segmenta
Omogu ava da se logi ki segmenti iz razli itih modula kombinuju u isti fizi ki
segment
Sintaksa liste atributa: [tip_poravnavanja] [tip_kombinovanja] ['klasa']
Tip poravnavanja odre uje granicu logi kog segmenta pri kombinovanju:
PARA poravnavanje po paragrafima (adresa deljiva sa 16) podrazumevani tip
WORD poravnavanje po re ima (logi ki segmenti se mapiraju na parne adrese)
BYTE poravnavanje po bajtovima (segment po inje od proizvoljne adrese) ne
preporu uje se
AT paragraf logi ki segment se mapira na fizi ku adresu definisanu paragrafom
Klasa omogu ava da segmenti iste klase budu smeteni jedan iza drugog u
memoriji
npr: segment koda i segment konstanti u klasi 'ROM' mogu biti smeteni jedan iza
drugog
segment podataka i segment steka u klasi 'RAM' se tako e smetaju jedan iza drugog
Definisanje procedura
Sintaksa: ime_procedure
ime_procedure
Primer:
u modulu A:
u modulu B:
EXTRN
DB
PUBLIC
P:BYTE
0
P
Ako eksterni simbol pripada nekom logi kom segmentu u izvornom modulu,
tada se EXTRN direktiva mora staviti u odgovaraju i logi ki segment u modulu gde
se koristi
Literalne konstante
DW
EQU
EQU
0
BYTE PTR PROMENLJIVA
BYTE PTR PROMENLJIVA+1
MOV
AH, GORNJI_BAJT
ORG
DB
10
0