Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 12

ASSEMBLER

JEDNOSTAVAN MODEL MIKROPROCESORA ELEMENTI


AKUMULATOR operand i U/I podaci
BROJILO PODATAKA adresa memorijske lokacije operanda
PROGRAMSKO BROJILO adresa slijedee instrukcije
INSTRUKCIJSKI REGISTAR operacijski kod instrukcije koja se izvrava
OPI REGISTRI operandi i meurezultati
DEKODER dekodira opkod
ALU A/L operacije
IPRAVLJAKA JEDNINICA aktivira signale za izvrenje instrukcije
INTERNA SABIRNICA prijenos podataka
INSTRUKCIJSKI CIKLUS

Instrukcijski ciklus a) dohvati izvri


b) opcode, operandi, adresiranje
Svaka instrukcija ima svoju adresu, svoj instrukcijski kod, 1 li vie operanada.
Operandi predstavljaju memorijske vrijednosti i adrese.
Programsko brojilo uvijek pokazuje na instrukciju koja e se slijedea izvriti.
INSTRUKCIJA

Npr. 8B d8

1000 1011 1101 1000


opcode
operand

Program se sastoji od instrukcija.


Svaki program u sebi ima programsku logiku.
To je slijed uitavanja instrukcija.
Instrukcija se sastoji od instrukcijskog koda i operanda.
Kad je instrukcijski kod dekodiran, mikroprocesor odmah zna koliko i kakvih operanada je
potrebno da bi se instrukcija izvrila.
Raunalo tj. mikroprocesor ne prepoznaje sadraj podatka, ve samo adresu.
REGISTRI
Registri mogu biti 8, 16, 32, 64bitni.
8 bitni: akumulator, privremeni reg., instrukcijski reg.
16 bitni: programsko brojilo, podatkovno brojilo
Registri slue za manipulaciju i privremeno uvanje podataka.
a) REGISTRI OPE NAMJENE R0 Rx (pomoni registri)
b) SPECIJALNI REGISTRI: PC, DC, IR, MP, statusni registri
RISC reduced instructins set (mali broj jednostavnih)
CISC complex instrukctions set (velik broj kompleksnih)
Stroj razumije strojne instrukcije u binarnom zapisu.
Na strojnoj razini svi su prikazi isti, to su binarne vrijednosti (0,1) te isti skup operacija
(instrukcijski skup)

ASSEMBLER
Najnia razina komunikacije raunalo-ovjek je strojni jezik.
Via razina komunikacije: zamjena binarnog zapisa sa simbolikim prikazom.
Strojni jezik je u binarnoj notaciji (heksadecimalnoj) te je kao takav teko razumljiv ovjeku
pa ga prevodimo u programski jezik. To je assembler.
Assembler je programski, simboliki jezik.
- karakteristian je za svaku strojnu arhitekturu
- mora biti preveden u strojni jezik kako bi se izvodio
- svaka assemblerska instrukcija odgovara jednoj strojnoj instrukciji.
STROJNI KOD rezultat prevoenja (asembliranja) asemblerskog koda.
ASEMBLIRANJE = PREVOENJE

Asembliranjem se dobije binarni kod kojeg prikazujemo heksadec. i koji se sastoji od


opkodova, operanada i konstante.
Struktura koda: 1 direktiva (nije instrukcija, ona sprema simbol i ne izvodi se, poinje sa
tokom)
2. labela
3 instrukcije

BYTE memorijska jedinica od 8 bita


2n 1

najvea vrijednost

Najvea brojka koju hexadec.moemo upisati je F.


U hexadec. Zapisu je jedna elija = 2 byta.
Nibble = 4 bita = 1 hex.znamenka
KONSTANTA numerika vrijednost koja je upisana u program i fixna je.
Vrijednost registra je promjenjiva varijabla jer je program moe mijenjati.
CLOCK impuls koji dolazi od rezonante, strojni impuls

UVOD U ARHITEKTURU AVR MIKROPROCESORA I AVR


STUDIO

To je 8 bitni RISC mikroprocesor.


Instrukcijski set: 118 instrukcija
32 ope namjenska registra, koje simboliki oznaavamo Ro R31
Registrima moemo davati i neka vlastita imena po elji.
STRUKTURA I NAMJENA AVR REGISTARA
Registar moe sadravati binarni zapis.
Najmanja vrijednost je 0, a najvea 255. (28)
Kada je broj vei od 255 dodajemo registara koliko nam treba. (npr. 256 ne stane u 8 bitni
registar). Radino dakle raunsku operaciju sa vie registara.
Kod zbrajanja i oduzimanja treba nam prijenos ili CARRY. To je specijalna pozicija.
Carry tj prijenos upisujemo u specijalni registar a to je STATUSNI REGISTAR.
STATUSNI REGISTAR informacije o stanjima izazvanim prethodnim instrukcijama. On
ima 1 bit a to je C bit, za prijenos tj. carry.
a) CARRY
b) ZERO
c) NEGATIVNI
Imamo i 16 bitne POINTER REGISTRE, kombinacija od po 2 8 bitna registra. Oni su
VIRTUALNI a ne FIZIKI registri.
MSB - most significant byte ili high byte
LSB - last significant byte ili low byte

MSB (predznak)

INSTRUKCIJE:

0
LSB

a)
b)
c)
d)

za obradu podataka
za pohranjivanje podataka
za prijenos podataka
upravljake instrukcije

Instrukcija mora imati do 4 adrese, no postoje i sa 0 adresa.


- 1 za operande
- 2 za rezultat
- 1 za slijedeu instrukciju

AVR ASSEMBLER
AVR STUDIO
- To je simulator koji simulira izvoenje programa
- Ima 8 bitni RISC procesor, veoma brzi, mali broj jednostavnih instrukcija.
- 32 ope namjenska registra (Ro R31)
AVR assemblerski program sadrava:
a) direktive
b) instrukcije
c) labele
d) komentar
AVR DIREKTIVE poinju sa tokom (.def, .equ). One se ne izvravaju. Izvravaju se
instrukcije.
AVR LABELE se ne izvravaju. One su simboliko ime za adresu slijedee instrukcije.
Asembleri odreuju te adrese. Labela se oznaava dvotokom (:)
AVR KOMENATAR zapoinje sa toka-zarez (;). Iza njega se ne asemblira.
AVR STUDIO PRIKAZUJE:
- tijek izvoenja
- stanje registara
- stanje i sadraj memorije
- stanje i sadraj ulaza i izlaza
- statusni registar
- programsko brojilo
- pokaziva adrese stoga
- adresne registre X, Y, Z

INSTRUKCIJE I DIREKTIVE
1. USPOREDBA/KOMPARACIJA/COMPARE
- usporeuje sadraj 2 registra
- usporedba je oduzimanje dvije vrijednosti
npr.
a) ako je razlika dvaju brojeva 0 onda su brojevi jednaki (Z)
b) ako je razlika negativan broj, onda je prvi broj manji (N)
c) ako je razlika pozitivan broj, onda je prvi broj vei (C)
-

CP oduzima dva registra, ali rezultat ne zapisuje u odredini registar.


Ne zapisuje ga nigdje, ve sprema samo rezultat usporedbe. (Z;C;N)

2. ZBRAJANJE DVA 16-BITNA REGISTRA


1. Kada registar napunimo sa vrijednostima, onda pozivamo
instrukciju ADD koja ima 2 operanda i oba su eksplicitna.
2. Instrukcija ADC automatski pribraja i Carry tj. prijenos. Ona ima 3
operanda i to 2 eksplicitna i 1 implicitni.
Eksplicitni navodi odredite tj. destinaciju, a implicitni je carry
operand.
3. ZBRAJANJE 16-BITNOG REGISTRA I KONSTANTE
Ovdje imamo instrukciju SUB koja oduzima konstantu od registra.
Postoji i SUBI I znai immediate tj. neposredno.
.
4. ODUZIMANJE DVAJU 16-BITNOIH REGISTRA
SBC instrukcija oduzima dva registra sa prijenosom
5. ODUZIMANJE 16-BITNOG REGISTRA I KONSTANTE
SBCI instrukcija oduzima neposredno sa prijenosom.
6. USPOREDBA REGISTRA I KONSTANTE
CPC usporedba sa prijenosom.
7. NEGACIJA
- izraunamo komplement vieg i nieg byta
- KOMPLEMENT . vrijednost koju dobijemo tako da od 255 oduzmemo
broj od kojeg traimo komplement
- COM instrukcija koja daje komplement
- Na to dodajemo 1 , to emo izvesti kao oduzimanje

ASSEMBLERSKE INSTRUKCIJE I DIREKTIVE/tabela


LDI
ADD
ADC
SUB

Load immediate
Add without carry
Add with carry
Subtract without carry

SBC
SUBI

Subtract with carry

SBCI
CP
CPI
CPC
COM

Subtract immediate with carry


Compare
Compare with immediate
Compare with carry
One's complement

Subtract immediate

Puni 8 bitnu konstantu direktno u registar


Zbraja dva registra bez C vrijednosti i stavlja
rezultat u odredini registar
Zbraja dva registra sa prijenosom, rezultat u
destinacijski registar
Oduzima dva registra, rezultat u destinacijski
registar
Oduzima dva registra sa prijenosom
Oduzima konstantu od registra, rezultat u
destinacijski registar
Oduzima neposredno sa prijenosom
Usporeuje sadraj dva registra
Usporeuje sadraj registra i konstante
Usporeuje sadraj dva registra ukljuujui carry
Daje komplement

GRANANJE, POSMACI I ROTACIJA


Pripreme za vjebu 3
Bavimo se pitanjem kako promjena assemblerskog koda moe utjecati na promjenu cijele
programske logike.
Sekvencijalno izvoenje je izvoenje instrukcija po redu, onako kako su one u nizu, tj. jedna
za drugom.
PC (programsko brojilo) pokazuje adresu slijedee instrukcije.
U proloj vjebi instrukcija jump je promijenila ovo sekvencijalno pravilo izvoenja
instrukcija.
Sekvencijalno, dakle moe znaiti izvoenje instrukcija jedna po jedna, a ne jedna za drugom.
(mogui su preskoci)
GRANANJE
Sve poinje sa prvom instrukcijom koja je na adresi nula (0), a dalje sve ovisi o programskoj
logici.
FIZIKA LOGIKA = FIZIKI SLIJED = JENA IZA DRUGE
LOGIKI SLIJED = JEDNA PO JEDNA
Neki drugi tj, vanjski program/ureaj moe utjecati na slijed izvoenja instrukcija (vanjski
prekid)
I neke instrukcije mogu utjecati na promjenu toka.
Svaka instrukcija utjee na PC jer je ono pasivni registar.
PC = PC + 1
Neka instrukcija promijeni sadraj PC pa se tako mijenja i programska logika.
Naini promjene:
1. bezuvjetna promjena programske logike (posmak PC)
2. uvjetna promjena koja zavisi od nekih uvjeta
Instrukcija kao to su ifthan.else = se granaju
Loop se isto grana
POSMAK I ROTACIJA
0

0 0 1 0 0 0 1

1 0 0 1 0 0 0 1

- ako pomaknemo ovaj broj


napravljen je posmak u lijevo
- ovdje ostaje prazno mjesto to je
nula, i dobiveni br. Je 10 puta vei
od prvog

ROTACIJA
Bit koji je ispao e prijei u statusni registar i to je carry bit.
Novi bit dolazi iz Carry.
Postoji rotacija u lijevo i desno.
U statusnom registru osim carry bit ima takoer i Z bit i N bit.
Z registar sadri nulu ako je rezultat nula (Z _ zero)
- on identificira rezultat koji je nula
N registar sadi negativan broj, on detektira izvravanje instrukcije ako je rezultat negativan.
Registri carry, N i Z omoguuju nam komparaciju.
PORT REGISTRI - su ulazno izlazni registri koji mogu samo primiti ili dati rezultat, U
njima vidimo binarne a ne hexadec.vrijednosti.
Instrukcije:
CP - komparira A i B
BR - branch = grananje
NE - not equal (ne jednako)
NOP - ne radi nita, samo koristi procesor
INC - dodaje jedinice (inkrementiranje)
LT - less than
GE - vee ili jednako
LSL - logiki shift lijevo (left)
LSR - logiki shift desno (right)

CJELOBROJNO MNOENJE I DIJELJENJE


Problem je povezivanje potprograma, tj. kako da se potprogram vrati na slijedeu instrukciju
u glavnom programu iza koje slijedi.
POTPROGRAM je dio koda koji vri jednu funkciju.
Zbog organizacijskih razloga je vano glavni program podijeliti na potprograme.
Program koji poziva uvijek zna adresu programa koji se poziva tj. adresu potprograma.
Kod mnoenja moramo imati 2 8-bitna registra.
Kombinacija posmaka i rotacije izvrsno moe pomoi kod simulacije mnoenja i dijeljnja.
ASEMBLERSKE INSTRUKCIJE I DIREKTIVE
INCLUDE
- direktiva = ukljui
DEC (DECREMENT) - umanjuje sadraj registra za 1
MOV (COPY REGISTER) - kopira sadraj registra u destinacijski registar
CLR (CLEAR REGISTER) - brie sadraj registra
CLC (CLEAR CARRY) - ako je ta ostalo u carry ju onda to brie
BRNE (BRANCH IF NOT EQUAL) - granaj se ako je Z oznaka u statusnom registru prazna
BRCS (BRANCH IF CARRY SET) - granaj se ako je C oznaka u statusnom registru = 1
BRCC (BRANCH IF CARRY CLEARED) - granaj se ako je C oznaka u statusnom registru
=0
RET (RETURN FROM SUBROUTINE) - povratak iz subrutine
RCALL (RELATIVE CALL TO SUBROUTINE) - relativan poziv potprograma
RJMP (RELATIVE JUMP) - relativni skok na labelu
Potprogram uvijek zavrava instrukcijom RET.
RAMEND - simboliko ime, oznaava numeriku vrijednost za najviu adresu u memoriji
tj. RAM-u.
SP = stack pointer to je registar koji pokazuje na adresu na vrhu stoga..
Stack je stog. To je vrsta adresiranja.
U programu koji koristi potprograme moramo formirati stog.
Stack pointer se ne formira sam.
Kad smo upisali RAMEND tada smo pokazali na vrh stoga..
RAMEND ima vrijednost 25F u hexadec.

You might also like