«« ( Date ) »» // «« ( Thread ) »» // mips-nastava - 2006

Re: Adresiranje struktura u asembleru - potrebna pomoc

by Doctor
petak, 16. jun 2006 - 03:33.

Ja malo kasnim sa komentarom ali evo nekih opaski.
Prvo, takva struktura u asembleru se daje u vidu jedne tabele, na primer:

TabelaZaposlenih db
'xxxxxx','xxxxxx','0000','0000','0000','0000'
db
'xxxxxx','xxxxxx','0000','0000','0000','0000'
db
'xxxxxx','xxxxxx','0000','0000','0000','0000'

U tabeli TabelaZaposlenih ima 3 reda gde svaki red ima elemente koje si ti
naveo u strukturi samo sto za polja efektivno vreme i ukupno vreme je bolje
uzeti da su stringovi od 4 byte-a. Nezgodno je mesati, mada je dozvoljeno,
razlicite tipove.(Kod asemblera je bitna velicina podatka 1B,2B, a sta je u
tom byte-u to samo ti znas) Svaki red tabele TabelaZaposlenih ima 28
byte-ova. Sledeca naredba dohvata offset(pomeraj u odnosu na pocetak data
segmenta) tabele i smesta ga u registar dx:
mov dx, OFFSET TabelaZaposlenih
a to isto radi i sledeca naredba:
lea dx,TabelaZaposlenih
Moze se reci da je u dx adresa prvog byte-a prvog reda tabele, ako bi zeleo
da adresiras polje Sifra to znaci da treba da preskocis 6 byte-ova( add
dx,6).
Ako zelis da odredis adresu n-tog reda tabele tada na adresu pocetka tabele
dodas n*28.
Drugo, zbog lakseg rada sta ce ti u rekordu(tabeli) suvisni podaci kao sto
su tacke, dvotacke.
Trece, sta ce ti datum kao da ti i ovo nije dosta.
Cetvrto, vremena ulaska i izlaska nisu realna jer ti samo dobijas izvestaj u
kome stoji identifikacija i vreme identifikacije zaposlenog pa ko zaista
moze tu reci sta je sta. Udje covek pa iskoci kroz prozor da kupi burek pa
se ponovo prijavi regularno. Ovde se samo moze utvrditi da li je broj
identifikacija za nekog radnika paran ili neparan, ako je paran onda je OK a
ako je neparan onda se ukupno vreme ne moze utvrditi.
Peto, sifra je tajna a ID je javan. U izvestaju koji treba da obradis stoje
ID-ovi a ne sifre a oni mogu biti npr. 4 byte-a.

Tabela radnika u sustini moze da sadrzi sledeca polja
ID(4B),Ukupno vreme(4B),Efektivno vreme(4B), Vreme prethodne
identifikacije(4B), Stanje(1B)
TabelaZaposlenih db '0000','0000','0000','0000',0

Vreme prethodne identifikacije ti sluzi da pamtis prethodno vreme
identifikacije jer ces ga oduzimati od trenutno procitanog kako bi odredio
efektivno vreme. Stanje ukazuje da li je broj procitanih identifikacija
paran ili neparan. Svaki par identifikacija se oduzima i dodaje na efektivno
vreme (effVreme=(i2-i1)+(i4-i3)+...)
dok se ukupno vreme dobija kao razlika poslednje i prve identifikacije ali
samo pod uslovom da je broj identifikacija paran.

Ja se izvinjavam ako sam bio dosadan.

Pozdrav
Antalic Miroslav


----- Original Message -----
From: "Vlada Tasic" <vlada_tasic@yahoo.co.uk>
To: <mips-nastava@rti.etf.bg.ac.yu>
Sent: Wednesday, June 14, 2006 2:59 AM
Subject: [mips-nastava] Adresiranje struktura u asembleru - potrebna pomoc


>
> U realizacij prve tacke domaceg zadatka predvideo sam
> postojanje strukture podataka za svakog zaposlenog:
>
> RekordZaposleni struct
> Datum db 'xx:xx:xx'
> Sifra db 'xxxxxx'
> UlVreme db '00:00'
> IzlVremeT db '00:00'
> EfVreme dw 0
> UlazIzlaz dw 0
> RekordZaposleni ends
>
> ...a kasnije definisao i niz podataka koji su tip
> pomenute strukture:
>
> Zaposleni RekordZaposleni 1000 dup {};
>
>
> Moje pitanje je: kako da adresiram npr.podatak Sifra u
> elementu koji je 25.po redu u tom nizu?
>
> Ako nisam bio dovoljno jasan, u C-u bi to izgledalo
> nekako ovako: Zaposleni[25].Sifra
>
> Nisam siguran kako da ovo izvedem pa bi mi mala pomoc
> asistenta ili nekog od kolega bila jako korisna.
>
> Hvala unapred.
>
> Vlada
>
>
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam? Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com
>
>
>
> -----------------------------------------------------------------
> unsubscribe:
> minimalist@rti.etf.bg.ac.yu?subject=unsubscribe%20mips-nastava
> -----------------------------------------------------------------
>