[ Ramirez @ 15.07.2004. 16:41 ] @
Petlja generise po jednu HEX vrednost ASCII broja i smesta je "negde" (u mom slucaju szTEMP) a onda taj generisani string treba da se ispise (ali unazad, mada to nisam pokusao). Ovo sam napisao:


o_frmt1 db '%S',0
szTEMP db ?


MOV EDI,offset szTEMP
DEC EDI
GO:
INC EDI
XOR EDX,EDX
DIV ECX
ADD DL,030h
CMP DL,03Ah
JB SKIP
ADD DL,07h
SKIP:
MOV [EDI],DL
OR EAX,EAX
JNZ GO
MOV EDI,offset szTEMP
PUSH EDI
PUSH offset o_frmt1
PUSH offset sznumber1
CALL wsprintf

Ustvari cifre se generisu unazad sto znaci da prva cifra koja se generise predstavlja poslednju cifru u stringu, ali ja ne znam kako to da uradim posto ni ovo nece da radi. Nemam pojma koje duzine ce string biti pa sam zato promenljivu definisao kao "db ?" (valjda tako treba?).
[ Ramirez @ 18.07.2004. 08:55 ] @
Problem je u tome sto sam ja probao sve sto mi je palo na pamet.... i nisam uspeo... Naravno da sam pokusao da debugujem. I sve radi.... mislim generise se pravi broj i upisuje se u EDI ali kada uradim PUSH EDI (pre wsprintf) on ispisuje gomilu gluposti kao: ??????2 ili tako nesto????
[ b4d_s3c70r @ 18.07.2004. 09:31 ] @
Znači tvoje patlja lepo radi ali ne ispisuje sve kako treba? Aham. E pa gde je onda greška? U pozivu wsprintf funcije. Uzmi neki help i pogledaz kako se poziva. Kolko vidim ti si skroz promašio format. Zar %S nije string? Tebi treba hex zar ne? To je valjda %x, možda %h. Proveri. Stoji ti sve pred nosim bre...
[ Ramirez @ 18.07.2004. 12:33 ] @
mora da bude o_frmt1 db '%hS',0
i onda radi ali sada imam drugi problem:
ispisjuje mi neke gluposti posle stringa... tj on sve to vidi kao string? zasto kada sam ga ja definisao kao db ? (valjda mu to govori da se ne zna koliko ima vrednosti) on odmah stavi da je string 15 karaktera (ovo sam lupio)... i onda ispise moj broj od 6 a ostala mesta su neki sadrzaj memorije:

7816308ps_class32
[ b4d_s3c70r @ 18.07.2004. 20:06 ] @
Pa dobro. Polako :) Eto jednu stvar smo nasli koju si progresio. Ja ti vec par puta rekoh da ne znam taj asm al za tolko sam se snalazio. Nemoj da stavljas ? Bolje rezervisi 100 bajtova. To ce ti biti dovoljno a znas da si ih rezervisao. Nisam cak ni siguran cemu ? sluzi... najbolje ti je da pitas Mikkya :)
[ Mikky @ 19.07.2004. 00:35 ] @
Ajd da probam da pomognem kad me vec proziva ovaj sekt0r :)

Prvo da ti kazem da ja tvoj kod nista ne razumem a iskreno nisam se ni trudio mnogo,
dosta mi je mog sto ga gledam svaki dan :)
Sto se tice tvog problema, evo kako da sprecis da ti wsprintf ispisuje gluposti
ispod szTEMP db ? dodaj db 0, znaci
Code:

o_frmt1 db '%S',0
szTEMP db ?
db 0

Svi stringovi mora da se zavrsavaju sa znakom NULL tj NULA tj 0. Kod tebe nema nule
pa funkcija cita neku tamo memoriju sve dok ne naidje do tog znaka i zato ti izbacuje djubre.
Inace ako oces string (niz bajtova) uvek definisi ovako
Code:

szString db 128 dup(?)

gde je szString niz od 128 bajtova u koga mozes da smestis max 127 karaktera + NULL na kraju.

Jos jedan detalj, wsprinf() je funkcija koja koristi C konvenciju pozivanja, to znaci
da parametre sa steka moras ti da obrises posle poziva, znaci dodaj poslednju liniju
Code:

PUSH EDI
PUSH offset o_frmt1
PUSH offset sznumber1
CALL wsprintf
add esp,3*4    ; cisti stek, 3 parametrba puta 4 bajta svaki

inace ce program da ti crashuje pre ili kasnije (verovatno pre)

I zapamti:
Pravlio broj 1. kad nesto neide, uvek prvo pogledaj dokumentaciju
Pravilo broj 2. ako i dalje neide, pogledaj opet malo bolje dokumentaciju.
[ Ramirez @ 19.07.2004. 09:38 ] @
TOOOOO .....

Mnogo si mi pomogao.... HVALA.

Ja sam ga naterao da radi na neki svoj nacin, ali ovo sto si napisao mi je bas razjasnilo stvari. To mi je trebalo. HVALA