Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

pitanje u vezi prevodjenja

[es] :: Asembler :: pitanje u vezi prevodjenja

[ Pregleda: 3099 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

peca89bg
Beograd

Član broj: 202034
Poruke: 354
95.180.24.*



+6 Profil

icon pitanje u vezi prevodjenja27.11.2010. u 19:01 - pre 132 meseci
imam pitanje koje glasi: da li od masinskog koda moze da se dobije asemblerski kod?
 
Odgovor na temu

Stojan Trifunovic

Član broj: 15156
Poruke: 366
*.rs
Via: [es] mailing liste



+8 Profil

icon Re: pitanje u vezi prevodjenja28.11.2010. u 11:33 - pre 132 meseci
Može. Tome služe programi za PC nazvani disasembleri.

Nažalost, oni služe samo da dobijete kakav takav kod. Komentara nema, labela
nema, čak se ponekad desi da registrima i flegovima daju pogresan naziv. Da je
moguće tako doći do izvornog koda, (tačnije shvatiti šta je pisac hteo da
kaže) moguće je. Da je teško, jeste. Itekako. Često je lakše iznova napisati
kompletan program.
 
Odgovor na temu

peca89bg
Beograd

Član broj: 202034
Poruke: 354
95.180.24.*



+6 Profil

icon Re: pitanje u vezi prevodjenja29.11.2010. u 02:35 - pre 132 meseci
mov 001
add 010
mul 011
cmp 100
jle 101

pa recimo ovo je asemblerski kod

na masinskom izgleda ovako:

001 01 10 00 00010000
001 01 10 01 00010001
011 00 01
001 01 00 01 00000001
010 00 01
001 10 01 00010000 00
100 01 00 00 01111111
101 11110000

jel moze ovo pesaka da se uradi ili mi je potreban disasembler?

Hvala puno na odgovoru... Dobio sam ovo pitanje na kolokvijumu i odgovorio sa ne :(

U skripti pise ovako:

"Primetimo da je izmedu prikazanog asemblerskog i masinskog programa po-
stoji veoma direktna i jednoznacna korespondencija (u oba smera) tj. na osnovu
datog masinskog koda moguce je jednoznacno rekonstruisati asemblerski k^od. "

ja sam ovo shvatio kao da moze ali da se ne dobija isto :S jer sta mi znaci da ne dobijem isti kod :)


 
Odgovor na temu

Stojan Trifunovic

Član broj: 15156
Poruke: 366
*.rs
Via: [es] mailing liste



+8 Profil

icon Re: pitanje u vezi prevodjenja30.11.2010. u 21:21 - pre 132 meseci
Za takav kod, odgovor je trebao biti da.

U skripti je to ispravno napisano. Problem je sto je u praksi gotovo nemoguce
napisati ikakav kod bez imenovanja registara, komentara i slicno. Pa dobro,
nije baš nemoguće, ali je veoma teško. Bar za duže programe.

Na primer, ukoliko je na početku napisano:
Code:
BROJAC  equ  100

(ili nešto slično, zavisi od asemblera i procesora koji koristite)
moguce je kasnije napisati
Code:
cmp  BROJAC

To će asembler potpuno isto prevesti u mašinski kod kao da je pisano cmp 100.
Naravno, ovakav način prikazivanja koda u asembleru je mnogo lakši i
razumljiviji, pa stoga niko (otkad su se pojavili asembleri) više ne piše
programe "ubadajuči" nule i jedinice.
Isto tako, i adresu skoka (101) u jle 101 instrukciji SVAKI asembler će sam
izračunati. ukoliko se umesto nje postavi (tekstualna) labela.

Međutim, ukoliko se "go" mašinski kod propusti kroz disasembler, dobiće se
samo cmp 100. Sva izvorna formatiranja, sve labele, svi komentari će nestati.
Procesoru naravno komentari nisu potrebni, ali programeru itekako jesu.
Analizirati takav kod? Hm! Opekao sam se jednom!

Pretpostavljao sam da Vam je odgovor potreban za neki konkretan projekat, pa
sam Vam stoga onako odgovorio ranije.

"Peške" se mašinski kod koji ste postavili može prevesti u asemblerski. Za tih
5 instrukcija verovatno će Vam trebati oko 30 minuta. Trebate tražiti kod
svake instrukcije u tehničkom uputstvima, načine kodovanja svakog operanda,
ručno brojati adrese skokova itd. Disasembler bi to odradio za pola sekunde
na 286-tici.

Ukoliko baš želim biti precizan, mogao bih reći da se bukvalno svaki mašinski
kod može disasemblerom prebaciti u asemblerski format. Isto tako, svaki
asemblerski kod moguće je asemblerom prebaciti u mašinski format. To je i
napisano u skripti. Međutim, koliko je u praksi upotrebljiv mašinski kod koji
je disasemblerom (ili ručno - ukoliko ste baš mazohista) prebačen u asembler,
druga je priča.
 
Odgovor na temu

peca89bg
Beograd

Član broj: 202034
Poruke: 354
95.180.24.*



+6 Profil

icon Re: pitanje u vezi prevodjenja01.12.2010. u 12:14 - pre 132 meseci
Hvala puno na odgvoru..

Konkretno mi smo za potrebe na faxu koristili ovo: http://www.nasm.us/ . Iskreno ne razumem konkretno sta je i za sta sluzi :)
Da li se koristi za neko vezbanje ili je ovo neki univerzalni pa se na osnovu njega pisu drugi asembleri? :)

Iskreno ovo nije oblast u kojoj vidim sebe ali u skoli nikad nema sve sto nam lezi :)

Secam se da je profesor na jednom od predavanja iz c-a rekao da "ukoliko zelimo da se neki fragment koda brze izvrsava mozemo ga napisati na asembleru".
Konkretno na sta je mislio i kako bi se to odradilo na nekom primeru iz C-a ili nekom drugom programskom jeziku?
Koliko se koristi assembler u praksi i u kojim oblastima sem sto ga koriste proizvodjaci procesora i ostalih uredjaja za koje je potrebno koristiti asemble?


Hvala jos jednom..
 
Odgovor na temu

Stojan Trifunovic

Član broj: 15156
Poruke: 366
*.rs
Via: [es] mailing liste



+8 Profil

icon Re: pitanje u vezi prevodjenja01.12.2010. u 16:43 - pre 132 meseci
To što ste koristili na faksu je asembler. Tacnije, prevodilac koji
asemblerski kod (poput mov, add, mul, cmp, jle i mnogih drugih instrukcija)
prevodi u niz nula i jedinica koji određeni procesor bez problema izvršava, a
za tačno određeni procesor.

Postoji više generacija procesora. 80806, 286, 386, 486, 486SX, 486DX, 586,
P2, P3, P4 i ko zna koji će se još pojaviti. Svaki od njih donosio je
određena poboljšanja u smislu povećanja radnog takta (od 33MHz pa do
današnjih 3GHz), maksimalne memorije koju može podržati, magistrale podataka
preko koje komunicira sa ostalim hardverom, ali najznačajnija promena je u
broju instrukcija.

Prvobitni "kompjuteri" imali su svega stotinak instrukcija sa relativno
ograničenim modovima adresiranja. Svaka nova generacija donosila je sve veći
i veći broj instrukcija koje određeni procesor podržava. To znači da
asemblerski programi za P3 neće raditi na 386 procesoru, ukoliko je korišćena
neka od instrukcija koju 386 ne podržava (što je verovatno).

Bilo koji procesor izvršava samo asemblerske instrukcije. Jedino njih
"razume". Ništa drugo. Ukoliko se napravi program u asembleru baš za taj
procesor, logično je da će biti veoma kratak i veoma brz. Postoji čak i čitav
operativni sistem (Menuet) pisan u čistom asembleru. Staje na jednu 1,44Mb
disketu!

Ostali programski jezici (C++, Java, Python, Basic, Pascal, Ada, Delphi...)
primenjuju u osnovi dva principa:

1. Kompajliraju se (C, C#, C++, Ada) - odnosno svaka njihova komanda se
prilikom kompajliranja (i linkovanja ukoliko ima više delova programa ili
biblioteka) prevodi u niz asemblerskih instrukcija za određeni procesor.

2. Interpretiraju se (Python, Java) - odnosno svaka njihova komanda se preko
posebnog programa (nazvanog interpreter - u slučaju Jave on se naziva Java
Virtual Machine) prevodi za vreme izvršavanja. Zbog toga se komande ovakvih
programskih jezika mnogo sporije izvršavaju.

Za neke programske jezike (Basic, a mislim da je tu i Pascal) koji su
zamišljeni da se izvršavaju interpreterski, vremenom su razvijeni kompajleri,
pa se stoga i oni mogu mnogo brže izvršavati.


U principu, svaki od viših programskih jezika vrši prevođenje svojih komandi u
asemblerske instrukcije. Ukoliko se kompajliraju, izvršavaće se brže jer su
već unapred prevedene u oblik koji procesor razume, a ukoliko se
interpretiraju izvršavaće se sporije jer se prevode za vreme izvršavanja
programa. Razliku između kompajliranja i interpretiranja možete najlakše
shvatiti ukoliko trebate razgovarati sa japancem (P4 procesorom, naravno, ne
znate japanski). On može:

1. unapred unajmiti prevodioca (kompajler) i odštampati Vam ono što bi Vam
trebao preneti na srpskom.

2. unajmiti prevodioca (interpreter) koji bi Vam, dok on priča, prevodio
rečenicu po rečenicu.

E, onda tek vidite da nije baš sve u redu. Prevodioc je možda dobar, a možda i
nije. Možda ima naglasak koji Vi ne razumete najbolje, možda japanac takođe
priča svojim dijalektom, možda koristi termine koje ni Vi ni prevodioc ne
razumete najbolje. Zbog toga je prevod (program) duži nego što bi trebao
biti, pa Vam je potrebno više vremena za njegovo čitanje (izvršavanje).
Preostaje Vam treće rešenje:

3. naučite japanski (asembler).

Sporazumevaćete se idealno, bez ikakve mogućnosti za dvosmislice ili
nejasnoće, prevodioc Vam neće biti potreban, sam razgovor (program) će biti
kratak, a razumećete se (brzina izvršavanja programa) ekstremno brzo.

Možda mislite da je u ovom slučaju asembler idealan! Pa i bio bi, da se stalno
ne pojavljuju novi procesori! Zamislite samo šta bi se dogodilo da sada
trebate pričati sa francuzom (AMD 64bit dual core)!


> Secam se da je profesor na jednom od predavanja iz c-a rekao da "ukoliko
> zelimo da se neki fragment koda brze izvrsava mozemo ga napisati na
> asembleru".
> Konkretno na sta je mislio i kako bi se to odradilo na nekom primeru iz C-a
> ili nekom drugom programskom jeziku?

U pojedinim C kompajlerima postoji mogućnost "umetanja" asemblerskog koda.
Znači, možete pisati:
Code:

I++
<asm>   
 mov 001
 add 010
 mul 011
 cmp 100
 jle 101
</asm>
J++


Većina ostalih programskih jezika (u koje spadaju svi interpreterski) ne
podržava ovakvo umetanje koda.


> Koliko se koristi assembler u praksi i u kojim oblastima sem sto ga koriste
> proizvodjaci procesora i ostalih uredjaja za koje je potrebno koristiti
> asemble?

Nažalost, sve slabije i slabije. Najviše prilikom programiranja
mikrokontrolera, mada i tu gubi vođstvo zbog velike kompatibilnosti programa
pisanih u C programskom jeziku sa novijim generacijama mikrokontrolera, i sve
veće i veće procesorske snage i memorije novijih mikrokontrolera koje
anuliraju najveće prednosti asemblera - veličinu i brzinu programa.

Za PC kompjutere se skoro i ne koristi, osim za drajvere, upravo zbog svoje
velike brzine.
 
Odgovor na temu

[es] :: Asembler :: pitanje u vezi prevodjenja

[ Pregleda: 3099 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.