|
Programiranje Programski jezici, tehnike, alatke... |
Pregled rezultata glasanja: Da li zelis da objavim drugi deo? | |||
Da | 11 | 91,67% | |
Ne | 1 | 8,33% | |
Glasova: 12. U ovom glasanju ne možete da učestvujete |
|
Alatke vezane za temu | Vrste prikaza |
12.7.2007, 4:50 | #1 |
Član
Član od: 9.7.2007.
Poruke: 119
Zahvalnice: 2
Zahvaljeno 31 puta na 29 poruka
|
Asembler 1
Ovo je "probni balon" poruka, prva od zamišljenih nekoliko. Namenjena je onima koje zanima asembler i šta se dešava na najnižem nivou.
Zamišljam nekoliko tema: 1. (ova tema) Jednostavni primer programa u asembleru (može da se izvrši u DOS prozoru Windowsa) 2. Prelazak iz realnog u zaštićeni režim rada (kratki uvod u problem, jednostavan primer) 3. ... ako bude interesovanja, proces "butovanja" odnosno podizanja sistema (PC-a) 1. Po ugledu na "Hello World" programe, evo jednog koji kaže samo "Zdravo": Kod:
.model tiny CSEG segment para public use16 'CODE' org 100h ; DOS tako ucitava .com aplikacije (na ofset 100h) start: mov dx, offset Zdravo mov ah, 9 int 21h exit_to_dos: mov ax, 4c00h int 21h Zdravo: db 10, 13, 'Zdravo...', 10, 13, '$' ; kako koristimo DOS servis rutinu ; za ispis teksta, moramo da stavimo znak '$' koji kaze DOS-u da se ; tekst tu zavrsava CSEG ends end start DOS učitava .com programe sa ofsetom 100h (h na kraju numeričke konstante označava da je broj heksadecimalan). Zbog toga imamo org 100h na početku (to govori asembleru da računa adrese u odnosu na adresu 100h. Znači, na primer labela start: ima adresu 100h). Za ispis teksta je iskorišćen DOS servis 21h, funkcija 9. Kako se koristi koja dos funkcija mora da se čita iz dokumentacije, na primer ovde: http://www.uv.tietgen.dk/Staff/Mlha/...t/21/index.htm. Kompajliranje: Za kompajliranje je potreban ml.exe (majkrosoftov asembler). Ja sam instalirao Visual Studio Express i zatim MASM preko njega. Verzija MASM-a je 8.0. Za kompajliranje programa, koristim mali batch fajl: fajl "makecom.cmd": Kod:
@echo off setlocal if not defined NAME set NAME=%1 if not defined NAME goto argerr set MASM=ml set LINK=link if exist %NAME%.obj del %NAME%.obj if exist %NAME%.com del %NAME%.com %MASM% /AT /c /omf %NAME%.asm if errorlevel 1 goto error %LINK% /TINY %NAME%,%NAME%,%NAME%,%NAME%,nul if errorlevel 1 goto error :exit_0 echo Success goto :EOF :error echo Error(s) goto :EOF :argerr echo koriscenje: makecom [filename] goto error Kod:
makecom zdravo Kod:
Zdravo... Kod:
; kompajlirati pomocu nasm-a ; nasm -f bin -o zdravo.com zdravo.asm ; [BITS 16] org 100h ; DOS tako ucitava .com aplikacije (na ofset 100h) start: mov dx, Zdravo mov ah, 9 int 21h exit_to_dos: mov ax, 4c00h int 21h Zdravo: db 10, 13, 'Zdravo...', 10, 13, '$' |
12.7.2007, 15:55 | #2 |
Član
Član od: 9.7.2007.
Poruke: 119
Zahvalnice: 2
Zahvaljeno 31 puta na 29 poruka
|
Re: Asembler 1
Zbog ograničenja od 3000 karaktera, nisam uspeo da ubacim i veze na alate koje koristim, pa zato šaljem "odgovor" na svoju poruku.
Asembleri: 1. Microsoft MASM. Još uvek se proizvodi i unapređuje, ali je sada besplatan (za nas odlična vest). Ja ga koristim u kombinaciji sa "Visual C++ 2005 Express Edition" (takođe besplatan). Visual C++ Express možete preuzeti odavde: http://msdn.microsoft.com/vstudio/express/, a posle instalacije VC++ Express (MASM zahteva da ovaj bude instaliran), možete da instalirate MASM koji preuzimate odavde: http://www.microsoft.com/downloads/d...displaylang=en Za primere koje dajem, neophodan je i 16-bitni linker (VC++ ima 32 bitni linker) koji može da se preuzme odavde: ftp://ftp.microsoft.com/Softlib/MSLFILES/LNK563.EXE Ova veza će vas odmah odvesti do fajla, pa ga sačuvajte negde i zatim, po preuzimanju, ga startujte. To je samo-otpakujuća arhiva, pa će otpakovati 3 fajla, nama je interesantan "link.exe". Možete da ga iskopirate u neki direktorijum, po želji.(naravno, bitno je da znate koji :-) ) 2. MASM32 - trebalo bi da je potpuno kompatibilan sa 1), ja ga ne koristim ali možda neko hoće da ga proba: http://www.masm32.com/ 3. NASM - još jedan asembler u javnom domenu. Sintaksa veoma liči na MASM sintaksu, ali ima nekih malih razlika. Za neke primene je lakši za koršćenje. U primerima koje dajem pokušaću da pokrijem i MASM i NASM varijantu. Može se preuzeti odavde: http://nasm.sourceforge.net/, preko veze "Download". |
13.7.2007, 0:21 | #3 |
Veteran
Član od: 25.12.2005.
Lokacija: Kragujevac
Poruke: 541
Zahvalnice: 67
Zahvaljeno 55 puta na 28 poruka
|
Re: Asembler 1
Extra ti je tuttorial...
Samo tako nastavi! Ja znam da radim u A86 asembleru, koji je mnogo, mnogo, lak za ucenje. U njemu pre nego sto kompajliras kod prakticno mozes da vidis koliko ce da zauzima! Jer je jedna instrukcija jedan bajt, mislim to moze i u drugim ASMovima ali je ovo stvarno lako! Evo ga naprimer ceo tvoj zdravo program u njemu: Kod:
jmp start zdravo dw "Zdravo svete!" start: mov ah,9 mov dx,offset zdravo int 21h mov ah,04ch int 21h |
13.7.2007, 23:16 | #4 |
Član
Član od: 13.10.2006.
Poruke: 172
Zahvalnice: 4
Zahvaljeno 4 puta na 4 poruka
|
Re: Asembler 1
jel mi može netko objasniti zašto ovo radi
Kod:
org 100h mov ah,9 mov dx,offset message int 21h mov ah,4ch int 21h message db "Hello World!$" ret Kod:
org 100h message db "Hello World!$" mov ah,9 mov dx,offset message int 21h mov ah,4ch int 21h ret |
14.7.2007, 2:45 | #5 |
Veteran
Član od: 25.12.2005.
Lokacija: Kragujevac
Poruke: 541
Zahvalnice: 67
Zahvaljeno 55 puta na 28 poruka
|
Re: Asembler 1
Pa zato sto ti je ta promenljiva message ispred instrukcija, a tako nece da radi.
Ako hoces mozes to resiti na ovaj nacin: Kod:
org 100h jmp start message db "Hello world!$" start: mov ah,9 mov dx,offset message int 21h mov ah,4ch int 21h Pozz. |
Sledeći korisnik se zahvaljuje korisniku nika100 na korisnoj poruci: | ||
mirk (14.7.2007) |
14.7.2007, 10:33 | #6 |
Deo inventara foruma
|
Re: Asembler 1
Ja sam se bavio asemblerom od '98-'03, iza sebe imam ko zna koliko hiljada linija i bajtova koda. Verujem da sam sto se asemblera tice, video sve sto se moze videti. Sto se DOS-a tice, imam iskustva sa grafikom, VGA modom, VESA modom (kako se otkljucava i koristi), zvukom, programiranjem SoundBlastera, FPU instrukcijama (matematicki koprocesor). Jedina stvar koju nisam probao jeste bas dos-protected-mode. Kad sam hteo i to da izucim, resio sam ipak da predjem na Windows. Tu sam koristio OpenGL za grafiku i FMod Soundsystem za zvuk.
Ako mogu ikako da vam pomognem tu sam Mogao bih da nastancujem toliko tutorijala da pukne baza foruma EDIT: Pitanje je samo ko zeli sada da se bavi DOS asemblerom, pored Win C++-a. |
14.7.2007, 16:28 | #7 |
Član
Član od: 9.7.2007.
Poruke: 119
Zahvalnice: 2
Zahvaljeno 31 puta na 29 poruka
|
Re: Asembler 1
Nije mi bila namera da pokrenem tutorijal za asembler - ali smatram da je i te kako potreban jedan dobar na srpskom jeziku. Oblik foruma je odličan za početak jer daje trenutne reakcije potencijalnih korisnika. Posle izvesnog vremena, moguće je proći kroz pitanja/odgovore i pojasniti stvari u konačnom tutorijalu koji bi trebalo da završi kao HTML (oblik foruma je atraktivan za početak, ali ne i za konačnu varijantu).
Moja namera je da dam praktična uputstva onima koji znaju nešto malo (ili nešto malo više) o asembleru ali ih muče gluposti poput odredjenih pseudo-komandi asemblera, koji alat, gde ga naći i slično. Izabrao sam MASM i NASM iz sledećih razloga: sintaksa instrukcija je kao u Intelovoj dokumentaciji (ili vrlo slična). Besplatni su i lako se mogu pribaviti preko interneta. Ukoliko dobro razumem licencu MASM-a, eventualna upotreba za komercijalni proizvod je legalna, dok sam za NASM u to siguran. U svakom slučaju, molim te, nastavi sa tutorijalom za "apsolutne početnike". Moj predlog je da tutorijal bude u isključivo kratkim .COM programčićima koji su provereni i rade. Ne bih ulazio u pravljenje .exe za DOS, jer kao što si rekao, da li to kome treba, a ako treba, pravljenje .EXE je prirodno sledeći korak posle učenja osnova asemblera. |
14.7.2007, 16:46 | #8 |
Član
Član od: 5.12.2005.
Lokacija: Sombor
Poruke: 245
Zahvalnice: 7
Zahvaljeno 31 puta na 24 poruka
|
Re: Asembler 1
Malo je glupo pokazivati kako se koriste DOS fu-je preko interapta 21h u danasnje vreme.Ali svakako ne bi bilo lose pokazati/predstaviti fu-je BIOSa 13h,10h i stvari kao sto je prelazak u protected rezim,pisanje boot loadera i sl .Ako nekog zanima,interapt 8h je rezervisan za sistemski timer,a on se moze iskoristiti kao osnova za scheduling pri miltiproces/multithread obradi...
|
14.7.2007, 18:20 | #9 |
Deo inventara foruma
|
Re: Asembler 1
Naterali ste me da zavirim malo u ovu moju asembler kolekciju radova
Gledam sada source-ove i prisecam se starih dobrih vremena. Za divno cudo uspevam sve da kompajliram pod WinXP koristeci Turbo Asembler (kao i onda), a da cudo bude vece, vecina stvari mi radi pod XP-om (ne moram da ukljucujem compatibility mode i slicno). Voleo bih da vidim kako se na brzaka ulazi u protected mode i alocira chunk memorije veci od 64kb (sto nije moguce u real modu). |
15.7.2007, 11:29 | #10 |
Veteran
Član od: 25.12.2005.
Lokacija: Kragujevac
Poruke: 541
Zahvalnice: 67
Zahvaljeno 55 puta na 28 poruka
|
Re: Asembler 1
@ Patton:
Meni asm programi rade na visti bez compatibility moda . @ Others () Inace mogli biste malo da napisete o interraptu 33h, ili ako hocete mogu i ja ( ali ja znam samo da vidim koordinate kursora, a neznam kako da gledam dal' je mis kliknut) |
15.7.2007, 11:37 | #11 |
Član
Član od: 5.12.2005.
Lokacija: Sombor
Poruke: 245
Zahvalnice: 7
Zahvaljeno 31 puta na 24 poruka
|
Re: Asembler 1
Svi podaci o svim interaptima(dobro nema detalja za linux,windows i sl,ali ima recimo sve potrebno da bi se preslo u protected mode/radilo u njemu) mogu se naci u programcicu koji se zove,ako se ne varam,HELPPC.
|
15.7.2007, 13:34 | #12 |
Član
Član od: 9.7.2007.
Poruke: 119
Zahvalnice: 2
Zahvaljeno 31 puta na 29 poruka
|
Re: Asembler 1
Help PC se moze naci ovde:
http://docs.huihoo.com/help-pc/ |
Sledeći korisnik se zahvaljuje korisniku rile na korisnoj poruci: | ||
Patton (16.7.2007) |
15.7.2007, 16:17 | #13 |
Veteran
|
Re: Asembler 1
Poshto ja u ovom podforumu postavljam samo glupa pitanja, drzacju se tradicije... Shta je ASM tj. asembler?
|
15.7.2007, 16:50 | #14 |
Član
Član od: 13.10.2006.
Poruke: 172
Zahvalnice: 4
Zahvaljeno 4 puta na 4 poruka
|
Re: Asembler 1
ASM ti je jezik najnižeg nivoa. ASM daje brzi i mali izvedbeni kod. U ASM-u se koriste mnemoici npr. MOV služi za premeštanje podataka, PUSH za stavljanje podataka na stack itd. npr. mov ax, 7c00h će u registar ax staviti broj 7c00h.
ASM je nastao jer je bilo preteško programirati u mašinskom jeziku. |
15.7.2007, 17:23 | #15 | |
Veteran
|
Re: Asembler 1
Citat:
|
|
15.7.2007, 19:29 | #16 |
Član
Član od: 13.10.2006.
Poruke: 172
Zahvalnice: 4
Zahvaljeno 4 puta na 4 poruka
|
Re: Asembler 1
Jap. Sam skineš assembler nađeš tutore i počneš programirati u ASM-u.
|
15.7.2007, 19:32 | #17 |
Deo inventara foruma
Član od: 6.11.2005.
Lokacija: Iznad reke, ispod drveća.
Poruke: 3.218
Zahvalnice: 58
Zahvaljeno 329 puta na 180 poruka
|
Re: Asembler 1
|
16.7.2007, 1:56 | #18 |
Član
Član od: 9.7.2007.
Poruke: 119
Zahvalnice: 2
Zahvaljeno 31 puta na 29 poruka
|
Re: Asembler 1
Bobi, možeš da probaš sa ovim što je ovde objavljeno. Probaj da skineš potrebne alate (možda je NASM varijanta nešto jednostavnija). Veze i uputstvo je dato, a ako nije dovoljno jasno, pitaj pa će biti pojašnjeno.
Probaj, nije tako teško kao što zvuči. |
16.7.2007, 18:29 | #19 |
Član
Član od: 9.7.2007.
Poruke: 119
Zahvalnice: 2
Zahvaljeno 31 puta na 29 poruka
|
Re: Asembler 1
Na predlog seymourc64, evo primera "Zdravo" koriscenjem BIOS rutina:
Kod:
; kompajlirati pomocu MASM-a (ml.exe) ; mozete koristiti makecom.cmd: ; makecom zdrbios ; ; primer korscenja BIOS rutine za ispis karaktera ; na ekran .model tiny CSEG segment para public use16 'CODE' org 100h ; DOS tako ucitava .com aplikacije (na ofset 100h) start: mov ah, 0Eh ; funkcija 0Ah bios servisa 10h mov cx, 1 ; jedan karakter mov si, Zdravo mov bh, 0 sledeci: mov al, [si] ; podrazumevani segment registar je DS, cmp al, '$' je exit_to_dos int 10h ; bios rutina inc si jmp sledeci ; loop umanjuje vrednost u cx za 1, zatim ako cx nije 0 skace na 'sledeci' exit_to_dos: mov ax, 4c00h int 21h Zdravo: db 10, 13, 'Zdravo...', 10, 13, '$' CSEG ends end start Kod:
; kompajlirati pomocu NASM-a ; nasmw -f bin -o zdrbiosn.com zdrbiosn.asm ; ; primer korscenja BIOS rutine za ispis karaktera ; na ekran [bits 16] org 100h ; DOS tako ucitava .com aplikacije (na ofset 100h) start: mov ah, 0Eh ; funkcija 0Ah bios servisa 10h mov cx, 1 ; jedan karakter mov si, Zdravo mov bh, 0 sledeci: mov al, [si] ; podrazumevani segment registar je DS, cmp al, '$' je exit_to_dos int 10h ; bios rutina inc si jmp sledeci ; loop umanjuje vrednost u cx za 1, zatim ako cx nije 0 skace na 'sledeci' exit_to_dos: mov ax, 4c00h int 21h Zdravo: db 10, 13, 'Zdravo...', 10, 13, '$' Poslednja ispravka: rile (16.7.2007 u 18:34) Razlog: Dodao u prilog izvorni kod |
16.7.2007, 21:27 | #20 |
Deo inventara foruma
|
Re: Asembler 1
Ja cu pokazati par primera vezanih za VGA grafiku (320x200 pixela, 256 boja). Ali pre nego sto predjemo na to, ne vidim da je iko razjasnio pricu oko registara, koji sve postoje i kako se koriste.
Registri Registri su ustvari predefinisane variable u asembleru. Ne mozete uraditi nijednu matematicku operaciju ili neko dodeljivanje, poredjenje...itd, bez registara. Mozete da deklarisete koliko god hocete vasih promenljivih, ali da biste baratali njima, morate koristiti registre. Evo primera: Imate varijable a = 20 i b = 10. Hocete da uradite a-b i da rezultat prebacite u c: Kod:
mov AX, [a] ; prebaci 'a' u registar AX sub AX, [b] ; oduzmi od AX registra 'b' mov [c], AX ; prebaci registar AX u 'c' AX - the accumulator BX - the base CX - the counter DX - the displacement CS - code segment DS - data segment ES - extra segment SS - stack segment SI - source index DI - destination index BP - base pointer SP - stack pointer Svaki od njih ima neko ime i to ne uzalud. Pojedine instrukcije ili operacije u asembleru mogu se izvrsiti samo ako su vrednosti nad kojima se barata u odredjenim registrima (recimo instrukcija mul [broj] ce registar AX pomnoziti sa promenljivom 'broj' i rezultat ostaje u AX registru; tako da je na vama da u AX ubacite drugu promenljivu pre mnozenja). Kada se koristi koji registar se brzo nauci kroz primere, ali pre nego sto predjemo na iste bitno je da znate da neki od registara imaju i svoje pod clanove. To vazi samo za registre AX, BX, CX, DX. To su 16bitni registri. Njihovi podregistri su 8bitni i obelezavaju se AH, AL (accumulator high, low), BH, BL...itd). Ko zna sta su bitovi shvatice da ako uradimo ovo: Kod:
mov AX, 4c7fh ; h na kraju znaci da je broj hexadecimalan Kod:
mov AH, 4ch mov AL, 7fh Ovi registri koje sam malo podrobnije objasnio imaju i svoje 32bitne "nadclanove", ali o tome cemo neki drugi put. |
Sledeći korisnik se zahvaljuje korisniku Patton na korisnoj poruci: | ||
Stevvan (16.7.2007) |
Bookmarks sajtovi |
Alatke vezane za temu | |
Vrste prikaza | |
|
|
Slične teme | ||||
tema | temu započeo | forum | Odgovora | Poslednja poruka |
Asembler : About | OFPNogix | Programiranje | 10 | 22.2.2007 13:47 |
Sa kojim programom poceti? | vladale | Programiranje | 41 | 15.2.2006 9:32 |