Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 4

; Programa que calcula la combinación lineal del máximo común divisor de dos

enteros a y b
; Hecho por:
; Aguirre Casillas Fernando Aldo
; García Abundez Rogelio

* = 0x100

vmhlt=0
print=1
prstr=2
rdint=3
prchr=5
switch=7

@mcd: PSH BP ; marco de referencia


LBP SP
@a@mcd= -6 ; mcd(int a, int b, int *x, int
*y)
@b@mcd= -8
@x@mcd= -10
@y@mcd= -12

lda [bp+@b@mcd] ; if (b==0){


tst
jne @1

lda #1
lea [bp+@x@mcd] ; *x=1;
sta [b]

lda #0
lea [bp+@y@mcd] ; *y=0;
sta [b] ; }

jmp @2

@1: ; else {

@xp@1 = 0 ; int xp, yp;


@yp@1 = 2
psh 4

lea bp + @yp@1 ; &yp


psh b

lea bp + @xp@1 ; &xp


psh b

lda [bp+@a@mcd] ; a%b;


psh a
lda [bp+@b@mcd]
mod
psh a

lda [bp+@b@mcd] ; b
psh a
jsr @mcd ; mcd(b, a%b, &xp, &yp);
pop 8

lda [bp + @yp@1] ; *x= yp;


lea [bp + @x@mcd]
sta [b]

lda [bp + @xp@1] ; *y= xp - yp*(a/b);


psh a

lda [bp + @yp@1]


psh a
lda [bp + @a@mcd]
psh a
lda [bp + @b@mcd]
div
mul
sub

lea [bp + @y@mcd]


sta [b]
pop 4 ; //desalojamos a xp y yp.
; }

@2:
LSP BP ; //regreso
POP BP
RTN

@dar: byte "Dar a b:\n"

main: PSH BP ; marco de referencia


LBP SP

LEA @dar
irq prstr

@x@main= 0 ; int x;
psh 2
@y@main= 2 ; int y;
psh 2

@a@main= 4 ; int a;
psh 2
@b@main= 6 ; int b;
psh 2

irq rdint ; leer a;


sta [bp+@a@main]

irq rdint ; leer b;


sta [bp+@b@main]

lea bp + @y@main
psh b
lea bp + @x@main
psh b
lda [bp + @b@main]
psh a
lda [bp + @a@main]
psh a

jsr @mcd
pop 8

lda [bp + @a@main]


irq print ; cout << a;

lda #' '


irq prchr ; cout << ' ';

lda #'*'
irq prchr ; cout << '*';

lda [bp + @x@main]


irq print ; cout << x;

lda #' '


irq prchr ; cout << ' ';

lda #'+'
irq prchr ; cout << '+';

lda [bp + @b@main]


irq print ; cout << b;

lda #' '


irq prchr ; cout << ' ';

lda #'*'
irq prchr ; cout << '*';

lda [bp + @y@main]


irq print ; cout << y;

lda #' '


irq prchr ; cout << ' ';

lda #'='
irq prchr ; cout << '=';

lda [bp + @a@main] ; a*x + b*y


psh a
lda [bp + @x@main]
mul
psh a
lda [bp + @b@main]
psh a
lda [bp + @y@main]
mul
add
irq print ; cout << mcd(a, b, &x, &y);

LSP BP ; regreso
POP BP
RTN
pila:

END main, pila

You might also like