[ --SOULMaTe-- @ 14.04.2005. 01:29 ] @
Pozdrav! DA odmah predjem na stvar... Dakle problem je sto kad program izadje iz SQUARE procedure on se ne vrati na mesto gde je nacinjen call nego krene iz pocetka. E sad kada nisam baratao sa stackom nego kad sam davao proceduri argument preko promenljive sve je radilo, al hocu da proradi i ovako. Pratio sam i sadrzaj IP registra on se posle izvrsenja SQUARE procedure odjednom postavi na nulu i program krene iz pocetka da se izvrsava. U cemu je stvar? Evo i koda... Code: SSEG SEGMENT STACK db 1000h dup (?) SSEG ENDS DSEG SEGMENT x dw ? c db ? c2 db ? br dw ? rez dw ? cnt dw ? DSEG ENDs CSEG SEGMENT MAINPROG PROC NEAR assume cs:CSEG,ds:DSEG, ss:SSEG, es:NOTHING mov ax,DSEG mov ds,ax call DatIn sub sp,2 call SQUARE pop ax mov br,2 mul br sub ax,x mov rez,ax inc rez ;new line mov dx,10 mov ah,02h int 21h ;carriage return mov dx,13 mov ah,02h int 21h push rez call solve add sp,2 mov ah,4ch int 21h ret MAINPROG ENDP DATIN PROC NEAR mov br,0 mov ax,0 start: add br,ax mov ax, br mov br,10 mul br ;domnozavanje br-a mov br,ax mov ah,01h int 21h mov c,al mov c2,al mov ax,0 sub c,48 ;konvertovanje iz char u int mov ah,0 mov al,c cmp c2,13 jnz start mov ax,br mov br,10 mov dx,0 div br mov br,ax push br add sp,2 ret DATIN ENDP SOLVE PROC NEAR pop br mov cnt,0 Pocetak: mov ax,br mov dx,0 mov br,10 div br mov br,ax add dx,48 inc cnt push dx cmp br,0 jnz Pocetak mov cx,cnt Ciklus: pop dx mov ah,02h int 21h loop Ciklus sub sp,2 ret SOLVE ENDP SQUARE PROC NEAR pop ax mul x push ax ret SQUARE ENDP CSEG ENDS END MAINPROG |