[ 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
[ 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 . Zar nije jednostavnije napisati
Code:
r:=s1+s2
umesto onog asm bloka?!

[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;