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...
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