Documente Academic
Documente Profesional
Documente Cultură
TEMA:
El microprocesador 68020 de Motorola
TEMA
TEMA:
El microprocesador 68020 de Motorola
1. Introduccin
2. Registros de la CPU
3. Organizacin de datos en memoria
4. Modos de direccionamiento
5. Juego de instrucciones
6. Ejemplos
1. Introduccin
Caractersticas MC68020/EC020:
Arquitectura de 32 bits:
Bus asncrono.
16 registros internos de datos y direcciones de 32 bits de propsito
general.
Bus de datos de 32 bits.
MC68020: Bus de direcciones de 32 bits (4-Gbytes).
MC68EC020: Bus de direcciones de 24 bits (16-Mbytes).
Tamao del ancho de bus dinmico para soportar distintos tipos de
memorias y perifricos: 8/16/32 bits.
Modo usuario.
Modo supervisor.
1. Introduccin
Caractersticas MC68020/EC020:
1. Introduccin
TEMA:
El microprocesador 68020 de Motorola
1. Introduccin
2. Registros de la CPU
3. Organizacin de datos en memoria
4. Modos de direccionamiento
5. Juego
g de instrucciones
6. Ejemplos
SSP
SUPERVISOR
STACK POINTER
2. Registros de la CPU
Registros de datos:
Registros de direcciones:
Punteros a memoria.
P t
Punteros
a pila.
il
Registros base.
Registros
g
ndice (menos
(
apropiados
p p
que
q los de datos).
)
2. Registros de la CPU
Registros de direcciones:
Usados
U
d como operando
d fuente
f
t se emplean
l
en tamao
t
16 32
bits.
Usados como operando destino se modifican por completo
independientemente de que el operando fuente sea de 8 16
bits: se extiende el signo antes de realizar la operacin.
Ejemplo:
d0: 1C 32 AB AB
a0:
0 3A 21 FC EF
movea.w d0,a0
d0: 1C 32 AB AB
a0: FF FF AB AB
10
2. Registros de la CPU
11
2. Registros de la CPU
Ejemplo:
12
TEMA:
El microprocesador 68020 de Motorola
1. Introduccin
2. Registros de la CPU
3. Organizacin de datos en memoria
4. Modos de direccionamiento
5. Juego
g de instrucciones
6. Ejemplos
14
TEMA:
El microprocesador 68020 de Motorola
1. Introduccin
2. Registros de la CPU
3. Organizacin de datos en memoria
4. Modos de direccionamiento
5. Juego
g de instrucciones
6. Ejemplos
4. Modos de direccionamiento
16
4. Modos de direccionamiento
17
4. Modos de direccionamiento
18
TEMA:
El microprocesador 68020 de Motorola
1. Introduccin
2. Registros de la CPU
3. Organizacin de datos en memoria
4. Modos de direccionamiento
5. Juego
g de instrucciones
6. Ejemplos
5. Juego de instrucciones
5.1 Movimiento de datos
B,W,L
W,L
L
B,W,L
orig dest
orig dest con ext sign
ADD Dn
Dn,<DE>
<DE>
<DE>,Dn
ADDI #<dato>,<DE>
BWL
B,W,L
B,W,L
SUB Dn,<DE>
<DE> Dn
<DE>,Dn
SUBI #<dato>,<DE>
B,W,L
B,W,L
MOVE <DE>,<DE>
MOVEA <DE>,An
EXG R
Rx,Ry
R
CLR <DE>
5.2 Aritmtica entera - datos
20
5. Juego de instrucciones
5.2 Aritmtica entera - datos ()
MULS.W <DE>,Dn
MULS.L <DE>,Dn
MULS.L <DE>,Dh:Dl
16x16 32
orig * dest dest
32x32 32 (se descartan los bits altos)
32x32 64
MULU: Idntico
d
a MULS pero sin signo
DIVS.W
DIVS
W <DE>,Dn
<DE> Dn
DIVS.L <DE>,Dn
DIVS.L <DE>,Dr:Dq
DIVSL.L <DE>,Dr:Dq
32/16 16r:16q
32/32 32q
64/32 32r:32q
32/32 32r:32q
dest/orig dest
DIVU DIVUL:
DIVU,
DIVUL Idntico
Id i a DIVS,
DIVS DIVSL pero sin
i signo
i
FUNDAMENTOS DE COMPUTADORES Ingeniera de Telecomunicacin
21
5. Juego de instrucciones
5.2 Aritmtica entera - datos ()
EXT.W Dn
8 16
EXT L Dn
EXT.L
D
16 32
EXT.B Dn
8 32
NEG <DE>
B,W,L
extiende el signo
0 dest dest
W,L
SUBA <DE>,An
<DE> An
WL
W,L
Se extiende el signo
22
5. Juego de instrucciones
5.4 Operaciones lgicas
NOT <DE>
B,W,L
CA1
AND <DE>,Dn
DE D
Dn,<DE>
BWL
B,W,L
orig
i AND dest
d t dest
d t
OR <DE>,Dn
Dn,<DE>
B,W,L
EOR Dn,<DE>
B,W,L
ANDI
ORI #dato,<DE>
EORI
B,W,L
23
5. Juego de instrucciones
5.4 Operaciones lgicas ()
CMP <DE>,Dn
CMPI #dato,<DE>
CMPA <DE>,An
B,W,L
B,W,L
W,L
dest - orig
5.5 Desplazamiento
l
y rotacin
de
d bits
b
ASL Dx,Dy
Dx Dy
ASL #dato,Dn
ASL <DE>
B,W,L
B
WL
B,W,L
B,W,L
24
5. Juego de instrucciones
5.5 Desplazamiento y rotacin de bits ()
ASR: idem salvo que se replica el bit de signo Dx,Dy
LSL ASL
LSR
ROL
ROR
SWAP Dn
25
5. Juego de instrucciones
5.6 Instrucciones de ruptura de secuencia
5.6.1. Incondicionales
JMP <DE>
BRA <etiq>
JSR <DE>
<DE> PC
PC+despl PC SP 4 SP
Salto
l a subrutina
b
PC (SP)
<DE> PC
SP 4 SP
PC (SP)
PC+despl PC
BSR <etiq>
RTS
Retorno de subrutina SP + 4 SP
NOP
PC 2 PC
PC+2
(SP) PC
N h
No
hace ninguna
i
operacin
i ms
26
5. Juego de instrucciones
5.6 Instrucciones de ruptura de secuencia
5.6.2. Condicionales
Bcc <etiq>
BPL N=0
BMI N=1
BGE
BGT
BLE
BLT
BCC C=0
BCS C=1
mayor o igual
mayor
menor o igual
menor
BNE Z=0
BEQ Z=1
5. Juego de instrucciones
5.7 Instrucciones de control
5.7.1. Modo supervisor
STOP #dato
28
5. Juego de instrucciones
5.7 Instrucciones de control
5.7.2. Modo usuario
TRAP #11
DC.W 0
29
5. Juego de instrucciones
5.8 Directivas del ensamblador
ORG <direccion>:
di
i
Etiquetas:
Definicin de literal.
Ejemplo: VALOR EQU 4.
30
5. Juego de instrucciones
5.8 Directivas del ensamblador ()
pepe DC.W
DC W 1,3,$20,4,-7
1 3 $20 4 7
juan DC.B Hola
TABLA DS.L 20
END
Indica el final del cdigo ensamblador.
C
Comentarios:
t i
*
Hexadecimal: $
Binario: %
31
Pseudocdigo:
suma = 0;
0
i = 0;
mientras i<long
suma += tabla[i];
i++;
finmientras
32
* usaremos:
* d0: para ir acumulando las sumas parciales
* d1: para el contador i
tabla
l
long
suma
inicio
org $400600
bra inicio
dc.w 7,8,1,4,5,8
d
dc.w
6
ds.w 1
clr.w d0
* suma=0;
clr.w d1
* i=0;
movea.l #tabla,a0
33
bucle
fbucle
cmp.w
p long,d1
g,
bge fbucle
add.w (a0,d1.w*2),d0
addi w #1,d1
addi.w
#1 d1
bra bucle
move.w d0,suma
trap #11
dc.w 0
end
* mientras i<long
*
suma += tabla[i];
*
i++;
* finmientras
* almacena resultado en suma
* fin
34
Pseudocdigo:
suma = 0;
p = tabla;
pfin = p+long*2;
mientras ppfin
suma += *p;
p=p+2;
finmientras
35
36
fb l
fbucle
cmpa.l a0,a1
beq fbucle
add.w (a0)+,d0
bra bucle
move.w d0,suma
d0
trap #11
dc.w 0
end
*
*
*
*
mientras ppfin
suma += p*; p=p+2;
finmientras
almacena
l
resultado
lt d en suma
* fin
37
Tipo de almacenamiento.
L datos
Los
d t se leen
l
en orden
d inverso
i
all que se escriben
ib
(LIFO).
Pueden estar implementada en HW especfico o simulada
por SW sobre la MP.
Solamente se trabaja sobre la cima (top) de la pila.
pila
Crece a partir de una direccin base: fondo (bottom) de
la pila.
Solamente se pueden hacer dos operaciones sobre la pila:
38
SP SP
A (SP)
POP A
(SP) A
SP++ SP
cima
fondo
$FFFFFFFF
39
SP SP
A (SP)
cima
fondo
$FFFFFFFF
FUNDAMENTOS DE COMPUTADORES Ingeniera de Telecomunicacin
40
SP SP
A (SP)
cima
fondo
$FFFFFFFF
FUNDAMENTOS DE COMPUTADORES Ingeniera de Telecomunicacin
41
SP SP
A (SP)
A (cima)
fondo
$FFFFFFFF
FUNDAMENTOS DE COMPUTADORES Ingeniera de Telecomunicacin
42
A (cima)
fondo
POP A
(SP) A
SP++ SP
$FFFFFFFF
43
A
cima
fondo
POP A
(SP) A
SP++ SP
$FFFFFFFF
44
P
Preservar
lla direccin
di
i de
d retorno:
t
JSR <DE>
Salto a subrutina
SP 4 SP
PC (SP)
DE PC
<DE>
BSR <etiq>
RTS
R
Retorno
de
d subrutina
b i
SP 4 SP
PC ((SP))
PC+despl PC
SP + 4 SP
(SP) PC
45
$00000000
P
Preservar
lla direccin
di
i de
d retorno:
t
bsr
(DDR)
rutina
rutina
move.w #1,d1
< >
<>
move.w #3,d4
<>
rts
a7
$FFFFFFFF
FUNDAMENTOS DE COMPUTADORES Ingeniera de Telecomunicacin
46
$00000000
P
Preservar
lla direccin
di
i de
d retorno:
t
bsr
(DDR)
rutina
rutina
move.w #1,d1
< >
<>
move.w #3,d4
<>
rts
a7
DDR
$FFFFFFFF
FUNDAMENTOS DE COMPUTADORES Ingeniera de Telecomunicacin
47
$00000000
P
Preservar
lla direccin
di
i de
d retorno:
t
bsr
(DDR)
rutina
rutina
move.w #1,d1
< >
<>
move.w #3,d4
<>
rts
a7
DDR
$FFFFFFFF
FUNDAMENTOS DE COMPUTADORES Ingeniera de Telecomunicacin
48
$00000000
P
Preservar
lla direccin
di
i de
d retorno:
t
bsr
(DDR)
rutina
rutina
move.w #1,d1
< >
<>
move.w #3,d4
<>
rts
a7
DDR
$FFFFFFFF
FUNDAMENTOS DE COMPUTADORES Ingeniera de Telecomunicacin
49
$00000000
P
Preservar
lla direccin
di
i de
d retorno:
t
bsr
(DDR)
rutina
rutina
move.w #1,d1
< >
<>
move.w #3,d4
<>
rts
a7
$FFFFFFFF
FUNDAMENTOS DE COMPUTADORES Ingeniera de Telecomunicacin
50
$00000000
P
Preservar
lla direccin
di
i de
d retorno:
t
bsr
(DDR)
rutina
rutina
move.w #1,d1
< >
<>
move.w #3,d4
<>
rts
a7
$FFFFFFFF
FUNDAMENTOS DE COMPUTADORES Ingeniera de Telecomunicacin
51
S l
Salvaguardar
d registros:
i t
$00000000
bsr
rutina
rutina
<>
move l d1,
move.l
d1 -(a7)
(a7)
a7
move.l d3,-(a7)
move.l a1,
a1,-(a7)
(a7)
(se modifican d1,d3,a1)
) ,
movea.l ((a7)+,a1
move.l (a7)+,d3
move.l (a7)+,d1
rts
a1
d3
d1
DDR
$FFFFFFFF
52
P
Paso
d
de parmetros:
t
$00000000
iniprog
rut
move.w
move w
move.w
bsr rut
move.w
move.w
par1,-(a7)
par2,
par2 -(a7)
(a7)
(6,a7),d0
((4,a7),d1
, ),
a7
4
DDR
par2
par1
$FFFFFFFF
FUNDAMENTOS DE COMPUTADORES Ingeniera de Telecomunicacin
53
rut
ut
var1
var2
i i t
inirut
b a inirut
bra
ut
ds.w 1
ds.w 1
move.w #3,var1
#3
1
move.w #3,var2
addi.w #1,var1
rts
54
$00000000
Ejemplo: rutina que usa dos variables
locales tamao word.
rut
move.w
move
w #3,-(a7)
#3 -(a7)
move.w #3,-(a7)
addi.w #1,(2,a7)
adda.l #4,a7
rts
a7
3 (var2)
3 (var1)
DDR
$FFFFFFFF
55
E
Esquema
generall de
d la
l pila:
il
$00000000
variables locales
registros
DDR
parmetros
$FFFFFFFF
FUNDAMENTOS DE COMPUTADORES Ingeniera de Telecomunicacin
56
57
sum1
sum2
2
result
inicio
org $400600
bra inicio
dc.w 4
d
dc.w
6
ds.w 1
move.w sum1,-(a7)
move.w sum2,-(a7)
bsr suma
move.w (a7)+,result
( ) ,
adda.l #2,a7
trap #11
dc.w 0
58
suma
move.l d0,
d0,-(a7)
(a7)
move.l d1,-(a7)
move.w (12,a7),d0
move.w (14,a7),d1
(14 7) d1
add.w d0,d1
move.w d1,(12,a7)
,( , )
move.l (a7)+,d1
move.l (a7)+,d0
rts
$00000000
4
d1
d0
DDR
sum2
sum1
$FFFFFFFF
59
move.l d0,-(a7)
move.w (10,a7),d0
add.w d0,(8,a7)
( ) ,
move.l (a7)+,d0
rts
60
61
sum1
sum2
result
inicio
par1
par2
org $400600
bra inicio
dc.w 4
dc.w 6
ds.w 1
move.w sum1,par1
move.w sum2,par2
bsr suma
ds.w 1
ds w 1
ds.w
move.w par2,result
trap #11
dc w 0
dc.w
62
suma
move.l d0,
d0,-(a7)
(a7)
move.l a1,-(a7)
movea.l (8,a7),a1
move.w (a1),d0
( 1) d0
add.w d0,(2,a1)
move.l ((a7)+,a1
) ,
move.l (a7)+,d0
addi.l #4,(a7)
rts
$00000000
4
a1
d0
DDR
$FFFFFFFF
63
64
65
Ejemplo: n=3
f = factorial(3)
f = factorial(2);
f = 3*f;
66
Ejemplo: n=3
f = factorial(3)
f = factorial(2);
f = 3*f;
f = factorial(2)
f = ffactorial(1);
l( )
f = 2*f;
67
Ejemplo: n=3
f = factorial(3)
f = factorial(2);
f = 3*f;
f = factorial(2)
f = ffactorial(1);
l( )
f = 2*f;
f = factorial(1)
f = 1;
68
Ejemplo: n=3
f = factorial(3)
f = factorial(2);
f = 3*f;
f = factorial(2)
f = ffactorial(1);
l( )
f = 2*f;
f = factorial(1)
1
f = 1;
69
Ejemplo: n=3
f = factorial(3)
f = factorial(2);
f = 3*f;
f = factorial(2)
2
f = ffactorial(1);
l( )
f = 2*f;
f = factorial(1)
1
f = 1;
70
Ejemplo: n=3
Prog principal
6
f = factorial(3)
f = factorial(2);
f = 3*f;
f = factorial(2)
2
f = ffactorial(1);
l( )
f = 2*f;
f = factorial(1)
1
f = 1;
71
f
inicio
(DDR1)
org $400600
bra inicio
ds.w 1
move.w #3,-(a7)
bsr factorial
move.w (a7)+,f
trap #11
dc w 0
dc.w
a7
DDR1
3 (param)
72
move.l d0,-(a7)
,( )
move.w (8,a7),d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move w d0
move.w
d0,-(a7)
-(a7)
bsr factorial
(DDR2)
esUno
retorno
move.w (a7)+,d0
mulu.w (8,a7),d0
move.w d0,(8,a7)
bra retorno
move.w #1,(8,a7)
move.l (a7)+,d0
rts
73
move.l d0,-(a7)
,( )
move.w (8,a7),d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move w d0
move.w
d0,-(a7)
-(a7)
bsr factorial
(DDR2)
esUno
retorno
move.w (a7)+,d0
mulu.w (8,a7),d0
move.w d0,(8,a7)
bra retorno
move.w #1,(8,a7)
move.l (a7)+,d0
rts
74
f
inicio
(DDR1)
org $400600
bra inicio
ds.w 1
move.w #3,-(a7)
bsr factorial
move.w (a7)+,f
trap #11
dc w 0
dc.w
a7
DDR1
3 (param)
75
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
a7
DDR1
3 (param)
76
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
a7
valor inic d0
DDR1
3 (param)
77
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
a7
valor inic d0
DDR1
3 (param)
78
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
a7
2 (param)
valor inic d0
DDR1
3 (param)
79
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
a7
4
DDR2
2 (param)
valor inic d0
DDR1
3 (param)
80
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
a7
4
valor d0
DDR2
2 (param)
valor inic d0
DDR1
3 (param)
81
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
a7
4
valor d0
DDR2
2 (param)
valor inic d0
DDR1
3 (param)
82
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
a7
1 (param)
valor d0
DDR2
2 (param)
valor inic d0
DDR1
3 (param)
83
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
a7
4
DDR2
1 (param)
valor d0
DDR2
2 (param)
valor inic d0
DDR1
3 (param)
84
factorial
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
valor d0
DDR2
1 (param)
valor d0
DDR2
2 (param)
valor inic d0
DDR1
3 (param)
85
factorial
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
esUno
valor d0
DDR2
1 (param)
valor d0
DDR2
2 (param)
valor inic d0
DDR1
3 (param)
86
factorial
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
esUno
retorno
move.w
move
w #1,(8,a7)
#1 (8 a7)
move.l (a7)+,d0
rts
valor d0
DDR2
1 (param)
valor d0
DDR2
2 (param)
valor inic d0
DDR1
3 (param)
87
factorial
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
esUno
retorno
move.w
move
w #1,(8,a7)
#1 (8 a7)
move.l (a7)+,d0
rts
valor d0
DDR2
1 (resul)
valor d0
DDR2
2 (param)
valor inic d0
DDR1
3 (param)
88
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
esUno
retorno
move.w
move
w #1,(8,a7)
#1 (8 a7)
move.l (a7)+,d0
rts
a7
4
DDR2
1 (resul)
valor d0
DDR2
2 (param)
valor inic d0
DDR1
3 (param)
89
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
esUno
retorno
move.w
move
w #1,(8,a7)
#1 (8 a7)
move.l (a7)+,d0
rts
a7
1 (resul)
valor d0
DDR2
2 (param)
valor inic d0
DDR1
3 (param)
90
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
(DDR2)
esUno
retorno
move.w
move
w #1,(8,a7)
#1 (8 a7)
move.l (a7)+,d0
rts
a7
1 (resul)
valor d0
DDR2
2 (param)
valor inic d0
DDR1
3 (param)
91
(DDR2)
esUno
retorno
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
move.w (a7)+,d0
mulu.w (8,a7),d0
move.w d0,(8,a7)
bra retorno
move w #1,(8,a7)
move.w
#1 (8 a7)
move.l (a7)+,d0
rts
a7
1 (resul)
valor d0
DDR2
2 (param)
valor inic d0
DDR1
3 (param)
92
(DDR2)
esUno
retorno
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
move.w (a7)+,d0
mulu.w (8,a7),d0
move.w d0,(8,a7)
bra retorno
move w #1,(8,a7)
move.w
#1 (8 a7)
move.l (a7)+,d0
rts
a7
4
valor d0
DDR2
2 (param)
valor inic d0
DDR1
3 (param)
93
(DDR2)
esUno
retorno
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
move.w (a7)+,d0
mulu.w (8,a7),d0
move.w d0,(8,a7)
bra retorno
move w #1,(8,a7)
move.w
#1 (8 a7)
move.l (a7)+,d0
rts
a7
4
valor d0
DDR2
2 (param)
valor inic d0
DDR1
3 (param)
94
(DDR2)
esUno
retorno
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
move.w (a7)+,d0
mulu.w (8,a7),d0
move.w d0,(8,a7)
bra retorno
move w #1,(8,a7)
move.w
#1 (8 a7)
move.l (a7)+,d0
rts
a7
4
valor d0
DDR2
2*1 (resul)
valor inic d0
DDR1
3 (param)
95
(DDR2)
esUno
retorno
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
move.w (a7)+,d0
mulu.w (8,a7),d0
move.w d0,(8,a7)
bra retorno
move w #1,(8,a7)
move.w
#1 (8 a7)
move.l (a7)+,d0
rts
a7
4
valor d0
DDR2
2*1 (resul)
valor inic d0
DDR1
3 (param)
96
(DDR2)
esUno
retorno
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
move.w (a7)+,d0
mulu.w (8,a7),d0
move.w d0,(8,a7)
bra retorno
move w #1,(8,a7)
move.w
#1 (8 a7)
move.l (a7)+,d0
rts
a7
4
DDR2
2*1 (resul)
valor inic d0
DDR1
3 (param)
97
(DDR2)
esUno
retorno
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
move.w (a7)+,d0
mulu.w (8,a7),d0
move.w d0,(8,a7)
bra retorno
move w #1,(8,a7)
move.w
#1 (8 a7)
move.l (a7)+,d0
rts
a7
2*1 (resul)
valor inic d0
DDR1
3 (param)
98
(DDR2)
esUno
retorno
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
move.w (a7)+,d0
mulu.w (8,a7),d0
move.w d0,(8,a7)
bra retorno
move w #1,(8,a7)
move.w
#1 (8 a7)
move.l (a7)+,d0
rts
a7
4
valor inic d0
DDR1
3 (param)
99
(DDR2)
esUno
retorno
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
move.w (a7)+,d0
mulu.w (8,a7),d0
move.w d0,(8,a7)
bra retorno
move w #1,(8,a7)
move.w
#1 (8 a7)
move.l (a7)+,d0
rts
a7
4
valor inic d0
DDR1
3 (param)
100
(DDR2)
esUno
retorno
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
move.w (a7)+,d0
mulu.w (8,a7),d0
move.w d0,(8,a7)
bra retorno
move w #1,(8,a7)
move.w
#1 (8 a7)
move.l (a7)+,d0
rts
a7
4
valor inic d0
DDR1
3*2 (resul)
101
(DDR2)
esUno
retorno
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
move.w (a7)+,d0
mulu.w (8,a7),d0
move.w d0,(8,a7)
bra retorno
move w #1,(8,a7)
move.w
#1 (8 a7)
move.l (a7)+,d0
rts
a7
4
valor inic d0
DDR1
3*2 (resul)
102
(DDR2)
esUno
retorno
move.l d0,-(a7)
move w (8
move.w
(8,a7),d0
a7) d0
cmpi.w #1,d0
ble esUno
subi.w #1,d0
move.w d0,-(a7)
b factorial
bsr
f
l
move.w (a7)+,d0
mulu.w (8,a7),d0
move.w d0,(8,a7)
bra retorno
move w #1,(8,a7)
move.w
#1 (8 a7)
move.l (a7)+,d0
rts
a7
4
DDR1
3*2 (resul)
103
f
inicio
(DDR1)
org $400600
bra inicio
ds.w 1
move.w #3,-(a7)
bsr factorial
move.w (a7)+,f
trap #11
dc w 0
dc.w
a7
FUNDAMENTOS DE COMPUTADORES Ingeniera de Telecomunicacin
6 (resul)
104
f
inicio
(DDR1)
org $400600
bra inicio
ds.w 1
move.w #3,-(a7)
bsr factorial
move.w (a7)+,f
trap #11
dc w 0
dc.w
a7
FUNDAMENTOS DE COMPUTADORES Ingeniera de Telecomunicacin
105
Se tiene una sucesin numrica que viene descrita por la siguiente frmula:
F(n) =
Si n = 0
5*F(n-1)+n
Si n > 0
Se pide:
106
Pseudocdigo:
f = funcion (n)
Si n>0
>0
f = funcion (n-1);
f = n + 5*f;
Si no
f = 0;
Fin Si
Fin
107
Ejemplo: n=2
f = funcion(2)
f = 2+5*funcion(1);
108
Ejemplo: n=2
f = funcion(2)
f = 2+5*funcion(1);
f = funcion(1)
f = 1+5*funcion(0);
*f
( )
109
Ejemplo: n=2
f = funcion(2)
f = 2+5*funcion(1);
f = funcion(1)
f = 1+5*funcion(0);
*f
( )
f = funcion(0)
f = 0;
110
Ejemplo: n=2
f = funcion(2)
f = 2+5*funcion(1);
f = funcion(1)
f = 1+5*funcion(0);
*f
( )
f = funcion(0)
f = 0;
111
Ejemplo: n=2
f = funcion(2)
f = 2+5*funcion(1);
f = funcion(1)
f = 1+5*funcion(0);
*f
( )
f = funcion(0)
f = 0;
112
Ejemplo: n=2
Prog principal
f = funcion(2)
f = 2+5*funcion(1);
f = funcion(1)
f = 1+5*funcion(0);
*f
( )
f = funcion(0)
f = 0;
113
Programa principal
N
RES
inicio
org $400600
bra inicio
dc.w 2
ds w 1
ds.w
move.w N,-(a7)
bsr funcion
move.w (a7)+,RES
p #11
trap
dc.w 0
114
Rutina recursiva:
funcion
move.l d0,-(a7)
move.w ((8,a7),d0
, ),
cmpi.w #0,d0
ble esCero
subi.w #1,d0
move.w d0,-(a7)
bsr funcion
esCero
finrut
move.w (a7)+,d0
mulu.w #5,d0
add.w (8,a7),d0
move.w d0,(8,a7)
bra finrut
move.w #0,(8,a7)
move.l (a7)+,d0
rts
115