@begin
#zmniejsz liczbe liczb do mnozenia
 PUSH 1
 SUB
 
 DUP 
 IF @omit1
 GOTO @theend
@omit1 


#przesun na wierzcholek stosu nowa liczbe do mnozenia oraz
 # wynik mnozenia
 DUP 2
 POP 3
 
 #wartosc bezwledna dla pierwszej liczby (znak zapisany jako
 # liczba przed ni (glbiej na stosie) -1 albo 1
 DUP 1	
	IF @dodatnia1
@ujemna1
	PUSH 0
	DUP 2
	SUB
	STORE 1
	PUSH -1
	DUP 2
	POP 3
	GOTO @endabs1
@dodatnia1
	PUSH 1
	DUP 2
	POP 3
@endabs1

 # powielana liczba
 DUP
 
 # licznik
 DUP 5
 POP 6  

 #wartosc bezwledna dla pierwszej liczby (znak zapisany jako
 # liczba przed ni (glbiej na stosie) -1 albo 1
 DUP 1
	IF @dodatnia2
@ujemna2
	PUSH 0
	DUP 2
	SUB
	STORE 1
    #PUSH -1
	#DUP 2
	#POP 3

	DUP 4 #pobierz znak z poprzedniego abs
	IF @zamien_na_ujemna
	#poprzednia liczba ujemna, ta ujemna wiec mnozenie dodatnie
	PUSH 1
	STORE 4
	GOTO @koniec_zmian		
@zamien_na_ujemna
    PUSH -1
	STORE 4
@koniec_zmian    
	GOTO @endabs2
@dodatnia2
	
@endabs2
 #POP 4  
 
 DUP
 # sprawdz czy nie mnozymy przez zero
 IF @startmul
 POP
 POP
 POP
 PUSH 0
# DUP 2
# POP 3
 GOTO @ustaw_znak

@startmul 
 PUSH 1
 SUB
 
@mul 

 DUP
 IF @omit2
 GOTO @cleanup
@omit2
 DUP 3
 POP 4
 DUP 3
 POP 4
 DUP 2  
 ADD 
 DUP 3
 POP 4
 PUSH 1
 SUB

 GOTO @mul

 @cleanup
 POP
 POP 2

@ustaw_znak

 DUP 2  # zdejmij ze stosu znak
 POP 3
 
 IF @pomin_zmien_znak
 
 #zmien znak
 PUSH 0
 DUP 2
 SUB
 STORE 1 
 
 @pomin_zmien_znak

 DUP 2 # wloz na wierch liczbe iteracji mnozenia
 POP 3
  
 GOTO @begin
 
 
@theend
 POP




