Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 11 odgovora
  • 7.057 pregleda

Najnovija ↓

HelloWorld u Windows-ovoj konzoli 22.08.2002. u 02:12 · pre 294 meseca #1
Pokusavam da napisem HelloWorld program koji ce da se izvrsava pod Windows-om i koji ce da otvori konzolu i u njoj da napise poruku. Znaci, bez pravljenja prozora.
Treba mi i komandna linija za LINK.EXE posto treba da mu saopstim da otvori konzolu. Sta da koristim umesto int 21? Svi primeri koje sam nalazio ili prave prozor i u njemu ispisuju poruku, ili su pravljeni za dos, tj. koriste INT 21. Windows Me se srusi svaki put kada pokrenem program koji poziva INT 21.
Potpis
"Ako hoćeš da saznaš, pristani na sve"
- Džoni Štulić
Re: HelloWorld u Windows-ovoj konzoli 25.08.2002. u 00:15 · pre 294 meseca #2
Neznam koji assembler koristis. Zovi GetStdHandle koji ce da ti vrati handle tj pointer za stdio tj. DOS screen. Korist WriteFile za output na screen ili ReadFile da ucitas.
Re: HelloWorld u Windows-ovoj konzoli 28.08.2002. u 02:29 · pre 294 meseca #3
U pitanju je masm asembler. Ja koristim onaj koji ide uz masm32 (sa bibliotekama za 32-bit windows programe).

Evo ga i kod koji koristi WriteFile:
--------------------- zdravo.asm -----------
.386
.model flat, stdcall

include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib

.data
poruka db 'ZDRAVO SVETE!' ,0dh,0ah ;0dh-13 (cr), 0ah-10(lf) novi red

.code
main:
push -11 ;stdout
call GetStdHandle ;handle za izlaz na konzolu
push 0 ;lpOverlapped
push esp ;broj bajtova koji su ispisani
push 15 ;velicina string
push offset poruka ;adresa stringa
push eax ;handle
call WriteFile ;stampa string
push 0 ;code za izlaz
call ExitProcess ;izlaz
end main
-------------------- zdravo.asm ---------------------
Ovo asemblujem i linkujem komandama:
ml /c /coff zdravo.asm
link /SUBSYSTEM:CONSOLE zdravo.obj
Dobijam zdravo.exe koji se izvrsava u konzoli, tako da je sve u redu.
Marko
Potpis
"Ako hoćeš da saznaš, pristani na sve"
- Džoni Štulić
Re: HelloWorld u Windows-ovoj konzoli 29.08.2002. u 00:49 · pre 294 meseca #4
hm ti izgleda volis tezi nacn :)
sto ne koristis invoke makro koji veoma ubrzava pisanje a i citanje koda
pritom i proverava parametre koje dajes funkciji da li su istog tipa kao sto je definisano u prototipu funkcije
umesto sto rucnu nabacujes parametre na stack
takodje ovo push -11.... koristi vec definisane konstante umesto literal vrednosti
Potpis
-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
Re: HelloWorld u Windows-ovoj konzoli 29.08.2002. u 20:27 · pre 294 meseca #5
Pa, slusaj, asembler i ucim da bih znao nacin na koji kompjuter (os) obavlja stvari, a ne da bih stvari radio na laksi nacin. Mislim, za to cu da koristim neki hll (ili mozda high level assembler - hla). Nekako mi je bezveze da koristim npr. mov eax,edx, a ovamo imam .if eax==12 ili tako neke konstrukcije. Hocu da znam sta procesor moze da izvrsava.
Potpis
"Ako hoćeš da saznaš, pristani na sve"
- Džoni Štulić
Re: HelloWorld u Windows-ovoj konzoli 30.08.2002. u 01:30 · pre 294 meseca #6
ok ako si jos u fazi ucenja ali kasnije ces sigurno preci na koriscenje tih makroa koji su ti tu da bi ti olaksali posao a ne otezali
a drugo oni mogu da ti i malo optimizuju kod
recimo to .if sto si spomenuo
koliko se secam .if eax==0 ce se prevesti u or eax,eax
dok bi 90% ljudi koristilo cmp eax,0
ove instrukcije rade istu stvar samo sto je ona sa OR manja za 2 ili 3 bajta (ne znam tacno) itd
Potpis
-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
Re: HelloWorld u Windows-ovoj konzoli 12.04.2005. u 11:06 · pre 262 meseca #9
Ma to sam ionako rekao sam da bih se pravio važan ;) A nisam ni video datum poruke :(
Potpis
Jazavac...


Re: HelloWorld u Windows-ovoj konzoli 12.04.2005. u 19:03 · pre 262 meseca #11
Ma jebeš or, koristi se test eax, eax koji je mrvu brži ili xchg eax, ecx; jecxz __nula koji je i još bajt manji i još brži :>
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme