[ Passwd @ 09.09.2005. 20:25 ] @
Dal je radio netko, i dal ima netko primjere (ne cisti asm vec bas u pascalu), sto vise primjera, to bolje ![]() |
[ Passwd @ 09.09.2005. 20:25 ] @
[ Nemanja Avramović @ 09.09.2005. 21:34 ] @
pa valjda samo blok zapochinjes sa asm a zavrshavash sa end; ... tako je barem u delphiju
a kod je, logicno, isti kao obican asembler [ Passwd @ 10.09.2005. 16:56 ] @
neki primjer?
[ Burgos @ 10.09.2005. 17:01 ] @
Code: function IntToHex(Value: Integer; Digits: Integer): string; // FmtStr(Result, '%.*x', [Digits, Value]); asm CMP EDX, 32 // Digits < buffer length? JBE @A1 XOR EDX, EDX @A1: PUSH ESI MOV ESI, ESP SUB ESP, 32 PUSH ECX // result ptr MOV ECX, 16 // base 16 EDX = Digits = field width CALL CvtInt MOV EDX, ESI POP EAX // result ptr CALL System.@LStrFromPCharLen ADD ESP, 32 POP ESI end; [ Passwd @ 10.09.2005. 17:54 ] @
jos da mi radi...probao sam 100 primjera+ovaj i uvijek sve puno greskica..dal treba dodavat kakve varijable??
[ Bojan Kopanja @ 10.09.2005. 19:02 ] @
Evo neceg malo jednostavnijeg ( ovaj put nije onako veliko kao sto sam ti slao pre
![]() Code: program zabiranje_brojeva; uses crt; var s1,s2,r: Integer; begin clrscr; write('Unesi prvi sabirak: '); readln( s1 ); write( 'Unesi drugi sabirak: ' ); readln( s2 ); asm mov ax, s1 add ax, s2 mov r, ax end; writeln( 'Rezultat je: ',r ); readln; end. Eto, mada ne znam sta bi hteo da radis sa ovim ![]() Code: umesto onog asm bloka?!r:=s1+s2 [Ovu poruku je menjao Strog dana 10.09.2005. u 20:04 GMT+1] [ Burgos @ 10.09.2005. 19:02 ] @
Moras dodati iznad funkcije i ovu.
Code: procedure CvtInt; { IN: EAX: The integer value to be converted to text ESI: Ptr to the right-hand side of the output buffer: LEA ESI, StrBuf[16] ECX: Base for conversion: 0 for signed decimal, 10 or 16 for unsigned EDX: Precision: zero padded minimum field width OUT: ESI: Ptr to start of converted text (not start of buffer) ECX: Length of converted text } asm OR CL,CL JNZ @CvtLoop @C1: OR EAX,EAX JNS @C2 NEG EAX CALL @C2 MOV AL,'-' INC ECX DEC ESI MOV [ESI],AL RET @C2: MOV ECX,10 @CvtLoop: PUSH EDX PUSH ESI @D1: XOR EDX,EDX DIV ECX DEC ESI ADD DL,'0' CMP DL,'0'+10 JB @D2 ADD DL,('A'-'0')-10 @D2: MOV [ESI],DL OR EAX,EAX JNE @D1 POP ECX POP EDX SUB ECX,ESI SUB EDX,ECX JBE @D5 ADD ECX,EDX MOV AL,'0' SUB ESI,EDX JMP @z @zloop: MOV [ESI+EDX],AL @z: DEC EDX JNZ @zloop MOV [ESI],AL @D5: end; [ Passwd @ 10.09.2005. 20:39 ] @
odlicno, radi, super je, samo tako nastavite..
hvala ![]() [ Milan Milosevic @ 13.09.2005. 23:17 ] @
evo ti jedan primer koji eliminise prazan prostor u srtingu. dobar tutorijal mozes da skines na www.about.com Function StringBezBlanko(String1:String):string; var L,StavrnaDuz:Cardinal; PUlaz,PResult:PChar; Rez:String;//U slucaju da dodeljujemo vrednost samom sebi korisiomo ga koao result begin L:=Length(String1); SetLength(Result,L); SetLength(Rez,L); PUlaz:=PChar(String1); PResult:=PChar(Rez); StavrnaDuz:=0; asm PUSH ESI //uzimas prostor u memoriji za ulaz (poenter na string) PUSH EDI // za izlaz PUSH EBX //brojac MOV EDI,PResult //Pokazivac na izlazni string MOV EBX,L //Brojac U For Petlju MOV ESI,PUlaz @@Pocetak: CMP EBX,0 JE @@Kraj //ako je L na nulu izlazimo iz petlje MOV AL,[ESI] // citamo jedan bajt iz stringa CMP AL,32 // ako je blanko JE @@Nastavak //sakacemo na deo koda za obradu INC StavrnaDuz //ako nije 32 pomeramo pokazivac u memoriju za 1 MOV [EDI],AL// upisujemo u izlaz slovo INC EDI // pomeramo pokazivac izlaznog stringa za 1 @@Nastavak:INC ESI //ako je npr. s[2]='' DEC EBX JMP @@Pocetak @@Kraj: POP EBX //oslobacamo resurse u vezi je sa PUSH POP ESI POP EDI end; Result:=Copy(Rez,1,StavrnaDuz); end; Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|