
	*= 0x100

@mcd:
	psh bp
	lbp sp
	@a_mcd= -6
	@b_mcd= -8
	@x_mcd= -10
	@y_mcd= -12

	lda [bp + @b_mcd]
	tst
	jne @1
		lda #1
		lea [bp+@x_mcd]
		sta [b]			; *x= 1
		lda #0
		lea [bp+@y_mcd]
		sta [b]			; *y= 0
	jmp @2
@1:
		psh 4			; int xp, yp
		@xp_mcd= 0
		@yp_mcd= 2

		lea bp+@yp_mcd
		psh b			; ^ &yp

		lea bp+@xp_mcd
		psh b			; ^ &xp

		lda [bp+@a_mcd]	
		psh a			
		lda [bp+@b_mcd]	
		mod				
		psh a			; ^ a%b

		lda [bp+@b_mcd]	
		psh a			; ^ b

		jsr @mcd		;  mcd(b, a%b, &xp, &yp)
		pop 8

		lda [bp+@yp_mcd]
		lea [bp+@x_mcd]
		sta [b]				; *x= yp

		lda [bp+@xp_mcd]
		psh a
		lda [bp+@yp_mcd]
		psh a
		lda [bp+@a_mcd]
		psh a
		lda [bp+@b_mcd]
		div
		mul
		sub
		lea [bp+@y_mcd]
		sta [b]			; *y= xp - yp (a/b)
		pop 4			; destruimos xp, yp
@2:
	lsp bp
	pop bp
	rtn

@ep:
	psh bp
	lbp sp
	@p=-6
	@q=-8
	lda #'('
	irq pr_chr
	lda [bp+@p]
	irq pr_int
	lda #')'
	irq pr_chr
	lda [bp+@q]
	irq pr_chr
	lsp bp
	pop bp
	rtn

@str: byte "Dar dos enteros positivos:\n"
@main:
	psh bp
	lbp sp

	psh 8
	@a= 0
	@b= 2
	@x= 4
	@y= 6			;  int a, b, x y

	lea @str
	irq pr_str 

	irq rd_int		;  read(a)
	sta [bp+@a]	

	irq rd_int		;  read(b)
	sta [bp+@b]

	lea bp+@y
	psh b			; ^ &y
	lea bp+@x
	psh b			; ^ &x
	lda [bp+@b]
	psh a			; ^ b
	lda [bp+@a]
	psh a			; ^ a

	jsr @mcd		; mcd(a,b,&x,&y)
	pop 8			; 		4 parametros fuera de la pila

	lda #'*'
	psh a
	lda [bp + @x]	; (x)*
	psh a
	jsr @ep
	pop 4

	lda #'+'
	psh a
	lda [bp + @a]	; (a)+
	psh a
	jsr @ep
	pop 4

	lda #'*'
	psh a
	lda [bp + @y]	; (y)*
	psh a
	jsr @ep
	pop 4

	lda #'='
	psh a
	lda [bp + @b]	; (b)=
	psh a
	jsr @ep
	pop 4

	lda [bp + @x] 
	psh a
	lda [bp + @a]
	mul
	psh a

	lda [bp + @y]
	psh a
	lda [bp + @b]
	mul
	add
	irq pr_int		; print(xa+yb)
	lda #'\n'
	irq pr_chr

	lsp bp
	pop bp
	rtn

@stk:
	end @main, @stk

