Manual
Manual
Manual
Sistemas de Entrada/Salida
Curso 2014/2015
Antonio Perez Ambite
Santiago Rodrguez de la Fuente
Departamento de Arquitectura y Tecnologa de Sistemas Informaticos
Facultad de Informatica
Universidad Politecnica de Madrid
Version 1.1
Febrero 2015
Indice general
1. Microprocesador MC68000
1.1. Modelo de programacion . . . . . . . . . . . . . . . .
1.1.1. Modelo de programacion del modo usuario .
1.1.2. Modelo de programacion del modo supervisor
1.1.3. Registro de estado . . . . . . . . . . . . . . .
1.2. Tipos de operandos y modos de direccionamiento . .
1.3. Organizacion de datos en registros . . . . . . . . . .
1.3.1. Registros de datos . . . . . . . . . . . . . . .
1.3.2. Registros de direcciones . . . . . . . . . . . .
1.4. Mapa de direcciones . . . . . . . . . . . . . . . . . .
1.4.1. Organizacion de datos en memoria . . . . . .
1.5. Excepciones e interrupciones . . . . . . . . . . . . .
1.5.1. Procesamiento de excepciones . . . . . . . . .
1.5.2. Tabla de vectores de excepcion . . . . . . . .
1.5.3. Procesamiento de interrupciones . . . . . . .
1.5.4. Excepcion de reset . . . . . . . . . . . . . . .
1.6. Juego de instrucciones . . . . . . . . . . . . . . . . .
1.6.1. Abreviaturas . . . . . . . . . . . . . . . . . .
1.6.2. Transferencia de datos . . . . . . . . . . . . .
1.6.3. Aritmeticas . . . . . . . . . . . . . . . . . . .
1.6.4. Logicas . . . . . . . . . . . . . . . . . . . . .
1.6.5. Desplazamientos . . . . . . . . . . . . . . . .
1.6.6. Manejo de bits . . . . . . . . . . . . . . . . .
1.6.7. Control del programa . . . . . . . . . . . . .
1.6.8. Control del procesador . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
1
1
3
3
5
5
5
5
5
6
7
7
7
9
9
9
13
17
23
25
31
32
34
.
.
.
.
.
.
.
.
.
35
35
36
36
38
38
38
39
39
40
II
2.3.7.
2.3.8.
2.3.9.
2.3.10.
2.3.11.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
40
40
40
41
41
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
43
43
44
44
44
44
44
45
45
45
45
46
46
46
47
48
48
48
48
49
49
.
.
.
.
.
.
51
51
53
53
54
54
55
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
57
A. Instalaci
on del entorno de la pr
actica en un computador con sistema operativo Linux
A.1. Instalacion en Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.1.1. Obtencion del entorno . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.1.2. Instalacion del paquete . . . . . . . . . . . . . . . . . . . . . . . . . .
A.2. Compilacion de bsvc en Linux . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.2.1. Obtencion del entorno . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.2.2. Instalacion del paquete . . . . . . . . . . . . . . . . . . . . . . . . . .
A.3. Conexion remota a batman . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
89
89
89
90
90
90
91
INDICE GENERAL
III
B. Depuraci
on de fallos que se manifiesten como excepciones en el procesador
MC68000
93
B.1. Identificacion la instruccion que provoco la excepcion . . . . . . . . . . . . . . 94
B.2. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
IV
Captulo 1
Microprocesador MC68000
El microprocesador MC68000 fue introducido en 1979 y es el primer microprocesador de la
familia M68000 de Motorola. Es un procesador CISC, aunque posee un juego de instrucciones
muy ortogonal, tiene un bus de datos de 16 bits y un bus de direcciones de 24 bits.
1.1.
Modelo de programaci
on
1.1.1.
Modelo de programaci
on del modo usuario
1.1.2.
Modelo de programaci
on del modo supervisor
En el modelo de programacion del modo supervisor estan disponibles todos los registros
del modo usuario y otros adicionales. Los registros adicionales de este modo para el procesador
16 15
8 7
0
D0
D1
D2
D3
D4
OCHO
REGISTROS
DE DATOS
D5
D6
D7
31
16 15
0
A0
A1
A2
A3
SIETE
REGISTROS
DE DIRECCIONES
A4
A5
A6
A7 (USP)
PUNTERO DE
PILA DE USUARIO
PC
CONTADOR DE
PROGRAMA
CCR
REGISTRO DE
ESTADO
16 15
0
A7 (SSP)
PUNTERO DE
PILA DE SUPERVISOR
SR
REGISTRO DE
ESTADO
8 7
CCR
En este modo se tiene acceso al octeto de mayor peso del registro de estado y se dispone
de un puntero de pila de supervisor (A7 o Supervisor Stack Pointer). De este modo, si se
referencia el registro A7 se referencia el USP o el SSP dependiendo del modo de ejecucion.
Como es habitual, desde el modo supervisor se tiene acceso al puntero de pila de usuario,
pero no a la inversa.
1. Microprocesador MC68000
1.1.3.
Registro de estado
El registro de estado (ver figura 1.3) tiene 16 bits, aunque los bits 5, 6, 7, 11, 12 y 14 no
se usan en el MC68000 y estan reservados para uso futuro. El octeto de menor peso (octeto
de usuario) contiene los siguientes biestables de estado: desbordamiento (O, Overflow), cero
(Z, Zero), negativo (N, Negative), acarreo (C, Carry) y precision extendida (X, Extend). El
octeto de mayor peso (octeto de sistema) contiene biestables de control de modo para modo
traza (T, Trace) y supervisor (S, supervisor), as como la mascara de interrupcion (I2 ,I1 ,I0 ).
BYTE DE SISTEMA
9
BYTE DE USUARIO
15
13
10
I2 I1 I0
XNZ VC
ACARREO
DESBORDAMIENTO
CERO
NEGATIVO
PRECISION EXTENDIDA
MODO TRAZA
MODO SUPERVISOR
MASCARA DE INTERRUPCION
1.2.
Leyenda: EA =
Dn =
An =
CO =
d8 =
d16 =
N =
=
Xn =
SR =
PC =
USP=
SSP =
Calculo de la direccion
Sintaxis
EA=Registro de dato n
EA=Registro de direccion n
Dn
An
EA=Siguiente palabra en CO
EA=Siguientes dos palabras en CO
EA=An
EA=An, An An+N
An AnN, EA=An
EA=PC+d16
EA=PC+Xn+d8
EA=An+d16
EA=An+Xn+d8
(XXX).W
(XXX).L
(An)
(An)+
-(An)
(d16 ,PC)
(d8 ,PC,Xn)
(d16 ,An)
(d8 ,An,Xn)
DATA=Siguientes bytes en CO
DATA=3 bits en CO
EA=SR,USP,SSP,PC
Direccion efectiva
Registro de datos
Registro de direcciones
Codigo de operacion
Desplazamiento de 8 bits
Desplazamiento de 16 bits
1 para byte, 2 para palabra y 4 para palabra larga
Sustituye
Registro de datos o direcciones usado como ndice en los desplazamientos m
ultiples
Registro de estado
Registro contador de programa
Registro puntero de pila de usuario
Registro puntero de pila de supervisor
Tabla 1.1: Modos de direccionamiento
1. Microprocesador MC68000
1.3.
Organizaci
on de datos en registros
Los ocho registros de datos proporcionan soporte para operandos de 1, 8, 16 o 32 bits. Los
siete registros de direcciones y el puntero de pila activo proporcionan soporte para direcciones
de 32 bits.
1.3.1.
Registros de datos
Cada registro de datos contiene 32 bits. Los operandos de octeto ocupan los 8 bits de
menor peso, los de palabra los 16 bits de menor peso y los de palabra larga los 32 bits. El bit
menos significativo se direcciona como bit 0 y el mas significativo como bit 31.
Si alguno de estos registros se usa como fuente o destino de una operacion de tama
no
inferior a palabra larga, solo se modifica la parte de menor peso correspondiente y la parte
de mayor peso permanece inalterada.
1.3.2.
Registros de direcciones
Estos registros de direcciones (junto con el puntero de pila) tienen 32 bits y contiene
una direccion completa de 32 bits. Los registros de direcciones no proporcionan soporte para
operandos de byte. A diferencia de los registros de datos, si un registro de direcciones se
usa como destino, el registro completo se modifica aunque la operacion tenga un tama
no
de palabra. En este caso, se extiende el signo de los operandos antes de la realizacion de la
operacion.
1.4.
Mapa de direcciones
1.4.1.
Organizaci
on de datos en memoria
14
13
12
11
10
DIRECCION
$000000
BYTE 000000
$000002
BYTE 000002
$000004
BYTE 000004
PALABRA 0
PALABRA 1
PALABRA 2
BYTE 000001
BYTE 000003
BYTE 000005
.
.
.
$FFFFFE
BYTE FFFFFE
PALABRA 7FFFFF
BYTE FFFFFF
1.5.
Excepciones e interrupciones
1. Microprocesador MC68000
Violaci
on de privilegio Se produce cuando se intenta ejecutar en modo usuario instrucciones que solo se pueden ejecutar en modo supervisor.
TRAP La propia instruccion TRAP procesa una de las 16 excepciones TRAP que expresa
un operando inmediato. Se utiliza para solicitar servicios del sistema operativo.
TRAPV Se procesa la excepcion si se cumple la condicion de overflow al ejecutar una
instruccion TRAPV.
CHK Se procesa la excepcion si ejecutando la instruccion CHK se detecta un desbordamiento
de rango. Se utiliza para dar soporte a los lenguajes de alto nivel2 que poseen rangos
en tipos enteros, como por ejemplo el ndice de un vector.
Divisi
on por 0 Se provoca la excepcion si en una instruccion de division el cociente es 0.
Interrupci
on Se procesa al final de una instruccion si se solicita una interrupcion por las
lneas de interrupcion IP L2, IP L1 e IP L0, con una prioridad mayor a la codificada
en los bits I2 , I1 y I0 del registro de estado.
1.5.1.
Procesamiento de excepciones
1.5.2.
1.5.3.
Procesamiento de interrupciones
Direcci
on
Dec Hex
0
000
4
004
8
008
12
00C
16
010
20
014
24
018
28
01C
32
020
36
024
40
028
44
02C
48
030
60
03C
64
040
96
060
100
064
128
080
192 0C0
256
100
Excepci
on
Reset: SSP inicial
Reset: PC inicial
Error de bus
Error de direcci
on
Instrucci
on ilegal
Divisi
on por 0
Instrucci
on CHK
Instrucci
on TRAPV
Violaci
on de privilegio
Traza
Emulador instrucci
on 1010
Emulador instrucci
on 1111
Reservado
Vector Int. no inicializado
Reservado
Interrupci
on esp
urea
Autovectores 1-7
Instrucciones TRAP 0-15
Reservado
Vectores de interrupci
on
1. Microprocesador MC68000
1.5.4.
Excepci
on de reset
Cuando se reinicia el computador, se produce la excepcion de RESET. Durante el procesamiento de esta excepcion no se almacena nada en la pila, ya que se usa para iniciar o
reiniciar el procesador.
Los pasos mas destacables de esta excepcion son:
Se lee el contenido de los 4 primeros bytes de la memoria y se llevan al SSP (puntero
de pila de supervisor).
Se lee el contenido de los siguientes 4 bytes y se llevan al PC.
Se colocan a 1 los bits S, I2 , I1 y I0 del registro de estado. Por lo tanto, se va iniciar la
ejecucion de instrucciones en modo privilegiado y con las interrupciones inhibidas.
Se realiza el fetch de la instruccion apuntada por el PC y se comienza la ejecucion de
instrucciones.
Por lo tanto, se debe colocar la direccion de inicio del programa en las direcciones 000004
- 000007 y el puntero de pila inicial en las direcciones 000000 - 000003. Ademas, cuando
se este en condiciones de reconocer interrupciones se debe colocar 000 en los biestables de
m
ascara de interrupcion I2 , I1 y I0 del registro de estado.
1.6.
Juego de instrucciones
1.6.1.
Abreviaturas
Cuando aparece una X en un bit de estado, quiere decir que la operacion modifica el bit de
estado: 0 lo pone a 0 y 1 lo pone a 1. U quiere decir que quedara indefinido. Las abreviaturas
empleadas son:
10
Pala.,byte
Larga
Dn
0(0/0)
0(0/0)
An
0(0/0)
0(0/0)
(An)
Indirecto a registro
4(1/0)
8(2/0)
(An)+
4(1/0)
8(2/0)
-(An)
6(1/0)
10(2/0)
$Desp(An)
8(2/0)
12(3/0)
$Desp(An,I)
10(2/0)
14(3/0)
to m
ultiple
xxx.W
Absoluto corto
8(2/0)
12(3/0)
xxx.L
Absoluto largo
12(3/0)
16(4/0)
$Desp(PC)
Relativo a PC
8(2/0)
12(3/0)
$Desp(An,I)
10(2/0)
14(3/0)
#xxx
Inmediato
4(1/0)
8(2/0)
bitb:
N
umero de bit de byte 0..7.
bitl:
N
umero de bit de doble palabra 0..31.
cc:
Codigo de condicion:
CC: Carry Clear: C
CS: Carry Set: C
EQ: Equal: Z
F: False: 0
GE: Greater Than or Equal:
(N V ) (N V )
GT: Greater Than:
(N V Z) (N V Z)
HI: High: C Z
LS: Low or Same: C Z
True: 1
1. Microprocesador MC68000
11
d8:
Desplazamiento de 8 bits.
d16:
Desplazamiento de 16 bits.
i:
jadr:
rs:
sadr:
sAn:
12
sDn:
SR:
Registro de estado.
x:
x < y z >:
de Dn.
Bits del y al z de x. Por ejemplo, Dn < 0 7 > representa los 8 bits bajos
+:
Suma.
AND logico.
Resta.
OR logico.
Multiplicar.
OR Exclusivo logico.
Dividir.
=:
Igual.
1. Microprocesador MC68000
1.6.2.
13
Transferencia de datos
Ciclos
Nem
onico
Operandos
Bytes
MOVE.B
(An),Dn
(An)+,Dn
reloj
Registro estado
X
Operaci
on realizada
8(2/0)
Dn<07>[An]
8(2/0)
Dn<07>[An],
AnAn+11
-(An),Dn
10(2/0)
AnAn1,
Dn<07>[An]1
MOVE.B
d16(An),Dn
12(3/0)
Dn<07>[An+d16]
d8(An,i),Dn
14(3/0)
Dn<07>[An+d8+i]
addr,Dn
4,6
4(1/0)+
Dn<07>[addr]
label,Dn
12(3/0)
Dn<07>[P C+d16]
label(i),Dn
14(3/0)
Dn<07>[P C+d8+i]
Dn,(An)
9(1/1)
[An]Dn<07>
Dn,(An)+
9(1/1)
[An]Dn<07>,
AnAn+11
Dn,-(An)
9(1/1)
AnAn1,
[An]Dn<07>1
Dn,d16(An)
Dn,d8(An,i)
Dn,addr
13(2/1)
[An+d16]Dn<07>
15(2/1)
[An+d8+i]Dn<07>
4,6
5(0/1)+
[addr]Dn<07>
2,4,6,8,10
5(1/1)+
[dadr][sadr]1
MOVE.B
sadr,dadr
MOVE.W
sadr,Dn
2,4,6
4(1/0)+
Dn<015>[sadr]2,3
MOVE.W
sadr,An
2,4,6
4(1/0)+
An<015>[sadr],
An<1631>An<15>2,3
MOVE.W
rs,dadr
2,4,6
5(0/1)+
[dadr]rs<015>2,3
MOVE.W
sadr,dadr
2,4,6,8,10
5(0/1)+
[dadr][sadr]2,3
MOVE.L
sadr,Dn
2,4,6
4(1/0)+
Dn<031>[sadr]2,4
MOVE.L
sadr,An
2,4,6
8(2/0)+
An<031>[sadr]2,4
MOVE.L
rs,dadr
2,4,6
10(0/2)+
[dadr]rs<031>2,4
MOVE.L
sadr,dadr
2,4,6,8,10
14(1/2)+
[dadr][sadr]2,4
MOVE.W
data16,An
8(2/0)+
An<015>data16,
MOVE.W
data16,dadr
4,6,8
9(1/1)+
[dadr]data16
MOVE.L
data32,Dn
12(3/0)
Dn<031>data32
MOVE.L
data32,An
12(3/0)+
An<031>data32
MOVE.L
data32,dadr
6,8,10
18(2/2)+
[dadr]data32
MOVE.B
sDn,dDn
4(1/0)
dDn<07>sDn<07>
MOVE.W
rs,Dn
4(1/0)
Dn<015>rs<015>
MOVE.W
rs,An
4(1/0)
MOVE.L
rs,Dn
4(1/0)
MOVE.L
rs,An
4(1/0)
An<031>rs<031>
MOVE
An,USP
4(1/0)
U SP An
An<1631>An<15>
An<015>rs<015>,
An<1631>An<15>
X
Dn<031>rs<031>
Instrucci
on ejecutable
en supervisor
MOVE
USP,An
4(1/0)
AnU SP
Instrucci
on ejecutable
en supervisor
14
reloj
Registro estado
Nem
onico
Operandos
Operaci
on realizada
EXG
rs,rd
6(1/0)
rsrd
LINK
An,d16
18(2/2)
A7A74,
[A7]An
AnA7,
A7A7+d16
UNLK
An
12(3/0)
A7An,
An[A7],
A7A7+4
MOVEM.W
jadr,reglist
4,6,8
8+4n(1+n/0)+
reg1<015>[jadr],
reg1<1631>reg1<15>
reg2<015>[jadr+4],
reg2<1631>reg2<15>
:
regn<015>[jadr+2n2],
regn<1631>regn<15>2
Carga
palabras
al-
macenadas
secuencialmente
en
(An)+,reglist
8+4n(2+n/0)+
reg1<015>[An],
reg1<1631>reg1r15>,
An[An+2]
reg2<015>[An],
reg2<1631>reg2<15>,
An[An+2]
:
regn<015>[An],
regn<1631>regn<15>,
An[An+2]2,3
Igual que la anterior,
pero con postincremento
MOVEM.W
reglist,madr
4,6,8
4+5n(1/n)+
[madr]reg1<015>
[madr+2]reg2<015>
[madr+4]reg3<015>
:
:
[madr+2n2]
regn<015>2
Almacena
palabras
de lista de registros
en espacio secuencial
de
de
memoria,
orden
almacenamiento
D0-D7,A0-A7
1. Microprocesador MC68000
15
Ciclos
Nem
onico
Operandos
MOVEM.W
reglist,-(An)
Bytes
4
reloj
4+5n(1/n)+
Registro estado
X
Operaci
on realizada
An[An2],
[An]regn<015>
:
An[An2],
[An]reg3<015>
An[An2],
[An]reg2<015>
An[An2],
[An]reg1<015>2,3
Almacena
de
lista
palabras
de
registros
en espacio secuencial
de memoria el orden
de
almacenamiento
A7-A0,D7-D0
MOVEM.L
jadr,reglist
(An)+,reglist
4,6,8
4
8+8n
(2+2n/0)
reglist,madr
4,6,8
4+10n
reglist,-(An)
(1+n)
MOVEP.W
d16(An),Dn
16(4/0)
2,4
Dn<815>[An+d16],
AnAn+2,
Dn<07>[An+d16]3
Carga
datos
de
pe-
rif
ericos de direcciones
alternas. La direcci
on
es de byte y lee bytes
MOVEP.W
Dn,d16(An)
18(2/2)
[An+d16]Dn<815>,
AnAn+2,
[An+d16]Dn<07>3
Almacena los bytes de
registros en direcciones
alternas
de
pe-
rif
ericos. La direcci
on
es de byte y escribe bytes
MOVEP.L
d16(An),Dn
24(6/0)
Dn<2431>[An+d16],
AnAn+2
Dn<1623>[An+d16],
AnAn+2
Dn<815>[An+d16],
AnAn+2
Dn<07>[An+d16]3
Carga
datos
de
pe-
rif
ericos de direcciones
alternas. La direcci
on
es de byte y lee bytes
16
Operandos
MOVEP.L
Dn,d16(An)
Bytes
4
reloj
Registro estado
X
28(2/4)
Operaci
on realizada
[An+d16]Dn<2431>,
AnAn+2,
[An+d16]Dn<1623>,
AnAn+2
[An+d16]Dn<815>,
AnAn+2
[An+d16]Dn<07>
Almacena los bytes de
registros en direcciones
alternas
de
pe-
rif
ericos. La direcci
on
es de byte y escribe bytes
MOVEQ
data8,Dn
4(1/0)
Dn<07>data8,
Dn<831>Dn<7>
MOVE.B
data8,Dn
MOVE.B
data8,dadr
4,6,8
MOVE.W
data16,Dn
LEA
jadr,An
2,4,6
8(2/0)
Dn<07>data8
9(1/1)+
[dadr]data8
8(2/0)
Dn<015>data16
2(0/0)+
Anjadr2
Carga
una
direcci
on
efectiva en un registro
de direcci
on
PEA
jadr
2,4,6
10(1/2)+
A7A74,
[A7]jadr4
Apila direcci
on efectiva
CLR.B
dadr
2,4,6
9(1/1)+
[dadr]01
CLR.W
dadr
2,4,6
9(1/1)+
[dadr]02,3
CLR.L
dadr
2,4,6
14(1/2)+
[dadr]02,4
CLR.B
Dn
4(1/0)+
Dn<07>01
CLR.W
Dn
4(1/0)+
Dn<015>02,3
CLR.L
Dn
6(1/0)+
Dn<031>02,4
SWAP
Dn
4(1/0)
Dn<07>Dn<815>
Scc
dadr
2,4,6
9(1/1)+
[dadr]todo1s
si cc = TRUE
[dadr] todo 0s
si cc = FALSE1
Scc
Dn
4(1/0)
Dn<07>todo1s
si cc = TRUE
Dn<07>todo0s
si cc = FALSE
TAS
dadr
2,4,6
11(1/1)+
[dadr<7>]11
Instrucci
on para multiprocesador
TAS
Dn
4(1/0)
Dn<7>1
1. Microprocesador MC68000
1.6.3.
17
Aritm
eticas
Ciclos
Registro estado
Nem
onico
Operandos
Bytes
reloj
Operaci
on realizada
ADD.B
sadr,Dn
2,4,6
4(1/0)+
Dn<07>
Dn<07>+[sadr]1
ADD.B
Dn,dadr
2,4,6
9(1/1)+
[dadr]
[dadr]+Dn<07>1
ADD.W
sadr,Dn
2,4,6
4(1/0)+
Dn<015>
Dn<015>+[sadr]2,3
ADD.W
sadr,An
2,4,6
8(1/0)+
An<031>An<031>
+[sadr](expande signo)2,3
ADD.W
Dn,dadr
2,4,6
9(1/1)+
[dadr]
[dadr]+Dn<015>2,3
ADD.L
sadr,Dn
2,4,6
6(1/0)+
Dn<031>
Dn<031>+[sadr]2,4
ADD.L
sadr,An
2,4,6
6(1/0)+
An<031>
An<031>+[sadr]2,4
ADD.L
Dn,dadr
2,4,6
14(1/2)+
[dadr]
[dadr]+Dn<031>2,4
ADD.B
data8,Dn
8(2/0)
ADD.B
data8,dadr
4,6,8
13(2/1)+
[dadr][dadr]+data81
ADD.W
data16,Dn
8(2/0)
Dn<015>
ADDA.W
data16,An
8(2/0)+
ADD.W
data16,dadr
ADD.L
data32,Dn
ADDA.L
data32,An
ADD.L
data32,dadr
ADD.B
sDn,dDn
ADD.W
ADD.W
Dn<07>
Dn<07>+data8
Dn<015>+data16
An<031>An<031>
+data16(expande signo)
4,6,8
13(2/1)+
[dadr][dadr]+data162,3
16(3/0)
Dn<031>
16(3/0)
Dn<031>+data32
An<031>
An<031>+data32
6,8,10
22(3/2)+
[dadr][dadr]+data322,4
4(1/0)
dDn<07>
rs,Dn
4(1/0)
rs,An
8(1/0)+
dDn<07>+sDn<07>
Dn<015>
[Dn<015>+rs<015>
An<031>An<031>+
rs<015>(expande signo)
ADD.L
rs,Dn
8(1/0)
ADD.L
rs,An
8(1/0)
ADDQ.B
data3,Dn
4(1/0)
ADDQ.B
data3,dadr
9(1/0)+
[dadr][dadr]+data31
ADDQ.W
data3,Dn
4(1/0)
Dn<015>
ADDQ.W
data3,An
4(1/0)+
ADDQ.W
data3,dadr
2,4,6
9(1/1)+
Dn<031>
Dn<031>+rs<031>
An<031>
An<031>+rs<031>
Dn<07>
Dn<07>+data3
2,4,6
Dn<015>+data3
An<031>
An<031>+data3
X
[dadr][dadr]+data32,3
18
Operandos
ADDQ.L
data3,Dn
Bytes
2
Registro estado
reloj
Operaci
on realizada
8(1/0)
Dn<031>
Dn<031>+data3
ADDQ.L
data3,An
ADDQ.L
data3,dadr
ADDX.B
-(sAn),-(dAn)
8(1/0)
An<031>
An<031>+data3
2,4,6
2
14(1/2)+
[dadr][dadr]+data32,4
19(3/1)
sAnsAn1,
dAndAn1
[dAn][dAn]+[sAn]+X 1
ADDX.W
-(sAn),-(dAn)
19(3/1)
sAnsAn2,
dAndAn2
[dAn][dAn]+[sAn]+X 2,3
ADDX.L
-(sAn),-(dAn)
35(5/2)
sAnsAn4,
dAndAn4
[dAn][dAn]+[sAn]+X 2,4
ADDX.B
sDn,dDn
4(1/0)
ADDX.W
sDn,dDn
4(1/0)
dDn<07>dDn<07>
+sDn<07>+X
dDn<015>X+
dDn<015>+sDn<015>
ADDX.L
sDn,dDn
8(1/0)
dDn<031>X+
dDn<031>+sDn<031>
ABCD
-(aAn),-(dAn)
19(3/1)
sAnsAn1,
dAndAn1
[dAn][dAn]+[sAn]+X 1
Suma
BCD
n
umeros
empleando
eXtendido,
las
direcciones
son
en
bit
dos
de
byte
ABCD
sDn,dDn
NEG.B
dadr
NEG.W
6(1/0)
2,4,6
9(1/1)+
[dadr]0[dadr]1
dadr
2,4,6
9(1/1)+
[dadr]0[dadr]2,3
NEG.L
dadr
2,4,6
14(1/2)+
[dadr]0[dadr]2,4
NEG.B
Dn
4(1/0)
Dn<07>0Dn<07>
NEG.W
Dn
4(1/0)
Dn<015>0Dn<015>
NEG.L
Dn
6(1/0)
Dn<031>0Dn<031>
NEGX.B
dadr
2,4,6
9(1/1)+
[dadr]0[dadr]X 1
NEGX.W
dadr
2,4,6
9(1/1)+
[dadr]0[dadr]X 2,3
NEGX.L
dadr
2,4,6
14(1/2)+
[dadr]0[dadr]X 2,4
NEGX.B
Dn
4(1/0)
Dn<07>
dDn<07>dDn<07>
+sDn<07>+X
0Dn<07>X
NEGX.W
Dn
4(1/0)
Dn<015>
0Dn<015>X
NEGX.L
Dn
NBCD
dadr
6(1/0)
9(1/1)+
Dn<031>
0Dn<031>X
2,4,6
[dadr]0[dadr]X 1
Complementa a 10 en
BCD si X = 0 o a 9 si
si X = 1
NBCD
Dn
6(1/0)
Dn<07>[D<07>]X
1. Microprocesador MC68000
19
Ciclos
Registro estado
Nem
onico
Operandos
Bytes
reloj
Operaci
on realizada
SUB.B
sadr,Dn
2,4,6
4(1/0)+
Dn<07>
Dn<07>[sadr]1
SUB.B
Dn,dadr
2,4,6
9(1/1)+
[dadr]
[dadr]Dn<07>1
SUB.W
sadr,Dn
2,4,6
4(1/0)+
Dn<015>
[Dn<015>[sadr]2,3
SUB.W
SUB.W
sadr,An
Dn,dadr
2,4,6
2,4,6
8(1/0)+
9(1/1)+
X
X
X
X
X
X
X
X
X
X
An<031>An<031>
[sadr](expande signo)2,3
[dadr]
[dadr]Dn<015>2,3
SUB.L
sadr,Dn
2,4,6
6(1/0)+
Dn<031>
Dn<031>[sadr]2,4
SUB.L
sadr,An
2,4,6
6(1/0)+
An<031>
An<031>[sadr]2,4
SUB.L
Dn,dadr
2,4,6
14(1/2)+
[dadr]
[dadr]Dn<031>2,4
SUB.B
data8,Dn
8(2/0)
Dn<07>
Dn<07>data8
SUB.B
data8,dadr
4,6,8
13(2/1)+
[dadr][dadr]data81
SUB.W
data16,Dn
8(2/0)
Dn<015>
SUBA.W
data16,An
8(2/0)+
[Dn<015>data16
SUB.W
data16,dadr
SUB.L
data32,Dn
SUBA.L
data32,An
4,6,8
An<031>An<031>
13(2/1)+
16(3/0)
16(3/0)
data16(expande signo)
[dadr][dadr]data162,3
Dn<031>
[Dn<031>data32
An<031>
An<031>data32
SUB.L
data32,dadr
SUB.B
sDn,dDn
6,8,10
2
22(3/2)+
[dadr][dadr]data322,4
4(1/0)
dDn<07>
dDn<07>sDn<07>
SUB.W
rs,Dn
4(1/0)
Dn<015>
Dn<015>rs<015>
SUB.W
rs,An
8(1/0)+
SUB.L
rs,Dn
8(1/0)
SUB.L
rs,An
8(1/0)
SUBQ.B
data3,Dn
4(1/0)
An<015>An<015>
rs<015>(expande signo)
X
Dn<031>
Dn<031>rs<031>
An<031>
An<031>rs<031>
Dn<07>
Dn<07>data3
SUBQ.B
data3,dadr
SUBQ.W
data3,Dn
SUBQ.W
data3,An
2,4,6
9(1/0)+
[dadr][dadr]data31
4(1/0)
Dn<015>
4(1/0)+
Dn<015>data3
An<015>
An<015>data3
SUBQ.W
data3,dadr
2,4,6
9(1/1)+
[dadr][dadr]data32,3
20
Operandos
SUBQ.L
data3,Dn
Bytes
2
Registro estado
reloj
Operaci
on realizada
8(1/0)
Dn<031>
Dn<031>data3
SUBQ.L
data3,An
SUBQ.L
data3,dadr
SUBX.B
-(sAn),-(dAn)
8(1/0)
An<031>
An<031>data3
2,4,6
2
14(1/2)+
[dadr][dadr]data32,4
19(3/1)
sAnsAn1,
dAndAn1
[dAn][dAn][sAn]+X 1
SUBX.W
-(sAn),-(dAn)
19(3/1)
sAnsAn2,
dAndAn2
sAnsAn2
[dAn][dAn][sAn]+X 2,3
SUBX.L
-(sAn),-(dAn)
35(5/2)
sAnsAn4,
dAndAn4
[dAn][dAn][sAn]+X 2,4
SUBX.B
sDn,dDn
4(1/0)
SUBX.W
sDn,dDn
4(1/0)
SUBX.L
sDn,dDn
8(1/0)
SBCD
-(sAn),-(dAn)
10(3/1)
dDn<07>dDn<07>
sDn<07>+X
dDn<015>X+
dDn<015>sDn<015>
dDn<031>X+
dDn<031>sDn<031>
sAnsAn1,
dAndAn1
[dAn][dAn][sAn]X 1
Resta en BCD de byte
de memoria
SBCD
sDn,dDn
6(1/0)
dDn<07>dDn<07>
sDn<07>X
asdr,Dn
2,4,6
<70(1/0)+
Dn<031>
Dn<015>[sadr]2,3
Multiplica dos n
umeros 16 bits con signo y
genera uno de 32
MULS
data16,Dn
70(1/0)+
Dn<031>
Dn<015>data16
Multiplica dos n
umeros 16 bits con signo y
genera uno de 32
MULS
sDn,dDn
70(1/0)
dDn<031>
dDn<015>sDn<015>
Multiplica dos n
umeros 16 bits con signo y
genera uno de 32
1. Microprocesador MC68000
21
Ciclos
Nem
onico
Operandos
Bytes
reloj
MULU
asdr,Dn
2,4,6
<74(2/0)+
Registro estado
X
Operaci
on realizada
Dn<031>
Dn<015>[sadr]2,3
Multiplica dos n
umeros 16 bits sin signo y
genera uno de 32
MULU
data16,Dn
74(2/0)+
Dn<031>
[Dn<015>data16
Multiplica dos n
umeros 16 bits sin signo y
genera uno de 32
MULU
sDn,dDn
70(1/0)
dDn<031>
dDn<015>sDn<015>
Multiplica dos n
umeros 16 bits sin signo y
genera uno de 32
DIVS
asdr,Dn
2,4,6
<158(1/0)+
Dn<015>
Dn<031>[sadr],
Dn<1631>resto2,3
Divide
n
umeros
con
data16,Dn
162(2/0)+
Dn<015>
Dn<031>data16,
Dn<1631>resto
Divide
n
umeros
con
sDn,dDn
158(1/0)
dDn<015>
dDn<031>sDn<015>,
dDn<1631>resto
Divide
n
umeros
con
asdr,Dn
2,4,6
140(1/0)+
Dn<015>
Dn<031>[sadr],
Dn<1631>resto2,3
Divide
sin
dos
signo
n
umeros
y
genera
cociente y resto en 16
bits
DIVU
data16,Dn
74(2/0)+
Dn<015>
Dn<031>data16,
Dn<1631>resto
Divide
sin
dos
signo
n
umeros
y
genera
cociente y resto en 16
bits
22
Operandos
DIVU
sDn,dDn
Bytes
4
reloj
74(2/0)+
Registro estado
X
Operaci
on realizada
dDn<015>
dDn<031>sDn<015>,
dDn<1631>resto
Divide
sin
dos
signo
n
umeros
y
genera
cociente y resto en 16
bits
EXT.W
Dn
4(1/0)
EXT.L
Dn
4(1/0)
CMP.B
sadr,Dn
2,4,6
4(1/0)+
Dn<07>[sadr]1
CMP.W
sadr,Dn
2,4,6
4(1/0)+
Dn<015>[sadr]2,3
CMP.W
sadr,An
2,4,6
6(1/0)+
An<015>[sadr]2,3
CMP.L
sadr,Dn
2,4,6
6(1/0)+
Dn<031>[sadr]2,4
CMP.L
sadr,An
2,4,6
6(1/0)+
An<031>[sadr]2,4
CMPM.B
(sAn)+,(dAn)+
12(3/0)
[dAn][sAn]
Dn<815>Dn<7>
Extiende signo
Dn<1631>Dn<15>
Extiende signo
dAndAn+1,
sAnsAn+11
CMPM.W
(sAn)+,(dAn)+
12(3/0)
[dAn][sAn]
dAndAn+2,
sAnsAn+22,3
CMPM.L
(sAn)+,(dAn)+
20(5/0)
[dAn][sAn]
dAndAn+4,
sAnsAn+42,4
CMP.B
data8,Dn
CMP.B
data8,dadr
4,6,8
8(2/0)
Dn<07>data8
8(2/0)+
[dadr]data81
CMP.W
data16,Dn
8(2/0)
Dn<015>data16
CMP.W
data16,An
CMP.W
data16,dadr
8(2/0)
An<015>data16
4,6,8
8(2/0)
[dadr]data162,3
CMP.L
data32,Dn
14(3/0)
Dn<031>data16
CMP.L
data32,An
CMP.L
data32,dadr
14(3/0)
An<031>data16
4,6,8
12(3/0)
[dadr]data162,4
CMP.B
sDn,dDn
CMP.W
rs,Dn
4(1/0)
dDn<07>sDn<07>
4(1/0)
CMP.W
Dn<015>rs<015>
rs,An
6(1/0)
An<015>rs<015>
CMP.L
rs,Dn
6(1/0)
Dn<031>rs<031>
CMP.L
rs,An
6(1/0)
An<031>rs<031>
TST.B
dadr
2,4,6
4(1/0)+
[dadr]01
TST.W
dadr
2,4,6
4(1/0)+
[dadr]02
TST.L
dadr
2,4,6
4(1/0)+
[dadr]02
TST.B
Dn
4(1/0)
Dn<07>0
TST.W
Dn
4(1/0)
Dn<015>0
TST.L
Dn
4(1/0)
Dn<031>0
1. Microprocesador MC68000
1.6.4.
23
L
ogicas
Ciclos
Registro estado
Nem
onico
Operandos
Bytes
reloj
Operaci
on realizada
NOT.B
dadr
2,4,6
9(1/1)+
[dadr][dadr]1
NOT.W
dadr
2,4,6
9(1/1)+
[dadr][dadr]2,3
NOT.L
dadr
2,4,6
14(1/2)+
[dadr][dadr]2,4
NOT.B
Dn
4(1/0)+
Dn<07>Dn<07>
NOT.B
Dn
6(1/0)+
Dn<015>Dn<015>
NOT.L
Dn
6(1/0)+
Dn<031>Dn<031>
AND.B
sadr,Dn
2,4,6
4(1/0)+
Dn<07>Dn<07>[sadr]1
AND.B
Dn,dadr
2,4,6
9(1/1)+
[dadr][dadr]Dn<07>1
AND.W
sadr,Dn
2,4,6
4(1/0)+
Dn<015>
Dn<015>[sadr]2,3
AND.W
Dn,dadr
2,4,6
9(1/1)+
[dadr]
[dadr]Dn<015>2,3
AND.L
sadr,Dn
2,4,6
6(1/0)+
Dn<031>
Dn<031>[sadr]2,4
AND.L
Dn,dadr
2,4,6
14(1/2)+
[dadr]
[dadr]Dn<031>2,4
AND.B
data8,Dn
AND.B
data8,dadr
4,6,8
AND.W
data16,Dn
8(2/0)
Dn<07>Dn<07>data8
13(2/1)+
[dadr][dadr]data81
8(2/0)
Dn<015>
Dn<015>data16
AND.W
data16,dadr
AND.L
data32,Dn
AND.L
data32,dadr
AND.B
sDn,dDn
AND.W
AND.L
4,6,8
13(2/1)+
[dadr][dadr]data162,3
16(3/0)
Dn<031>
22(3/2)+
[dadr][dadr]data322,4
4(1/0)
dDn<07>
sDn,dDn
4(1/0)
sDn,dDn
8(1/0)
Dn<031>data32
6,8,10
dDn<07>sDn<07>
Dn<015>
dDn<015>sDn<015>
Dn<031>
dDn<031>sDn<031>
OR.B
sadr,Dn
2,4,6
4(1/0)+
Dn<07>Dn<07>[sadr]1
OR.B
Dn,dadr
2,4,6
9(1/1)+
[dadr][dadr]Dn<07>1
OR.W
sadr,Dn
2,4,6
4(1/0)+
Dn<015>
Dn<015>[sadr]2,3
OR.W
Dn,dadr
2,4,6
9(1/1)+
[dadr]
[dadr]Dn<015>2,3
OR.L
sadr,Dn
2,4,6
6(1/0)+
Dn<031>
Dn<031>[sadr]2,4
OR.L
Dn,dadr
2,4,6
14(1/2)+
[dadr]
[dadr]Dn<031>2,4
24
Operandos
Bytes
OR.B
data8,Dn
OR.B
data8,dadr
4,6,8
OR.W
data16,Dn
OR.W
data16,dadr
OR.L
data32,Dn
reloj
Registro estado
X
Operaci
on realizada
8(2/0)
Dn<07>Dn<07>data8
13(2/1)+
[dadr][dadr]data81
8(2/0)
Dn<015>
13(2/1)+
[dadr][dadr]data162,3
16(3/0)
Dn<031>
Dn<015>data16
4,6,8
6
Dn<031>data32
OR.L
data32,dadr
OR.B
sDn,dDn
6,8,10
2
22(3/2)+
[dadr][dadr]data322,4
4(1/0)
dDn<07>
dDn<07>sDn<07>
OR.W
sDn,dDn
4(1/0)
dDn<015>
dDn<015>sDn<015>
OR.L
sDn,dDn
8(1/0)
EOR.B
sadr,Dn
2,4,6
4(1/0)+
Dn<07>Dn<07>[sadr]1
EOR.B
Dn,dadr
2,4,6
9(1/1)+
[dadr][dadr]Dn<07>1
EOR.W
sadr,Dn
2,4,6
4(1/0)+
Dn<015>
dDn<031>
dDn<031>sDn<031>
Dn<015>[sadr]2,3
EOR.W
Dn,dadr
2,4,6
9(1/1)+
[dadr]
[dadr]Dn<015>2,3
EOR.L
sadr,Dn
2,4,6
6(1/0)+
Dn<031>
Dn<031>[sadr]2,4
EOR.L
Dn,dadr
2,4,6
14(1/2)+
[dadr]
[dadr]Dn<031>2,4
EOR.B
data8,Dn
EOR.B
data8,dadr
4,6,8
EOR.W
data16,Dn
8(2/0)
Dn<07>Dn<07>data8
13(2/1)+
[dadr][dadr]data81
8(2/0)
Dn<015>
Dn<015>data16
EOR.W
data16,dadr
EOR.L
data32,Dn
4,6,8
6
13(2/1)+
[dadr][dadr]data162,3
16(3/0)
Dn<031>
Dn<031>data32
EOR.L
data32,dadr
EOR.B
sDn,dDn
EOR.W
sDn,dDn
6,8,10
22(3/2)+
[dadr][dadr]data322,4
4(1/0)
dDn<07>
4(1/0)
dDn<07>sDn<07>
dDn<015>
dDn<015>sDn<015>
EOR.L
sDn,dDn
8(1/0)
dDn<031>
dDn<031>sDn<031>
1. Microprocesador MC68000
1.6.5.
25
Desplazamientos
Ciclos
Registro estado
Nem
onico
Operandos
Bytes
reloj
Operaci
on Realizada
ASL
dadr
2,4,6
9(1/1)+
Desplazamiento
aritm
etico
un
bit
a izquierda, bit 0 se
pone a 0. El bit 15
pasa a X y C2,3
C
15
0
0
X
ASL.B
count o Dn,Dn
6+2n(1/0)+
Desplazamiento
aritm
etico
de
va-
(1-63).
el
registro
Entran
0s
al
87
C
X
ASL.W
count o Dn,Dn
6+2n(1/0)+
ASL.L
count o Dn,Dn
6+2n(1/0)+
31
0
0
X
ASR
dadr
2,4,6
9(1/1)+
Desplazamiento
aritm
etico
un
bit
a derecha. El bit 15
queda
como
estaba
y pasa al 14. El 0 se
lleva a X y C
15
- -C
-X
26
Operandos
ASR.B
count o Dn,Dn
Bytes
2
Registro estado
reloj
Operaci
on realizada
6+2n(1/0)+
Desplazamiento
aritm
etico
de
va-
El
lo
n
umero
de
determina
un
contador
(1-8)
un
ASR.W
count o Dn,Dn
6+2n(1/0)+
87
- -C
-X
ASR.L
count o Dn,Dn
6+2n(1/0)+
- -C
-X
LSL
dadr
2,4,6
9(1/1)+
- -C
-X
Desplazamiento l
ogico
un bit a izquierda. El
bit 0 queda a 0 y el
15 pasa a C y X. Es
igual que el ASL, pero
V siempre vale 0
C
15
2,3
0
0
X
LSL.B
count o Dn,Dn
6+2n(1/0)+
Desplazamiento l
ogico
varios
bit
izquier-
da de byte. El n
umero de bits desplazado
lo determina un contador (1-8) o
un registro (1-63). Entran 0s por el 0 y el bit
7 pasa a X y C
31
87
0
C
X
1. Microprocesador MC68000
27
Ciclos
Nem
onico
Operandos
LSL.W
count o Dn,Dn
Bytes
2
Registro estado
reloj
Operaci
on realizada
6+2n(1/0)+
LSL.L
count o Dn,Dn
6+2n(1/0)+
C
X
31
0
0
X
LSR
dadr
2,4,6
9(1/1)+
Desplazamiento
L
ogi-
co un bit a Derecha. El
bit 15 pasa a valer 0 y
el valor del 0 pasa a X
y C
15
0LSR.B
count o Dn,Dn
6+2n(1/0)+
- -C
-X
Desplazamiento l
ogico
varios
bit
derecha
de byte. El n
umero de
bits lo determina un
contador (1-8) o un registro (1-63). Entran
0s al bit 7 y el bit 0
pasa a X y C
31
LSR.W
count o Dn,Dn
6+2n(1/0)+
87
- -C
6
-X
0
LSR.L
count o Dn,Dn
6+2n(1/0)+
- -C
-X
0-
- -C
-X
28
Operandos
Bytes
reloj
ROL
dadr
2,4,6
9(1/1)+
Registro estado
X
Operaci
on realizada
Rotaci
on a al Izquierda de un bit. El bit 15
pasa al 0 y a C2,3
15
C
ROL.B
count o Dn,Dn
6+2n(1/0)+
Rotaci
on varios bit a
izquierda de byte. El
n
umero de bits rotados
lo determina un contador (1-8) o un registro
(1-63). El bit 7 pasa al
bit 0 y a C
31
87
C ?
ROL.W
count o Dn,Dn
6+2n(1/0)+
C ?
ROL.L
count o Dn,Dn
6+2n(1/0)+
ROR
dadr
2,4,6
9(1/1)+
31
Rotaci
on de un bit a
derecha. El bit 15 se
carga con el bit 0 que
pasa tambi
en al C
15
ROR.B
count o Dn,Dn
6+2n(1/0)+
- -C
Rotaci
on de varios bit
a derecha de byte. El
n
umero de bits lo determina
un
contador
87
- -C
6
1. Microprocesador MC68000
29
Ciclos
Nem
onico
Operandos
ROR.W
count o Dn,Dn
Bytes
2
Registro estado
reloj
Operaci
on realizada
6+2n(1/0)+
6
ROR.L
count o Dn,Dn
6+2n(1/0)+
- -C
ROXL
count o Dn,Dn
6+2n(1/0)+
Rotaci
on
- -C
a
izquierda
de un bit empleando
extensi
on.
El
bit
15
pasa al X y a C y el
X al 02,3
15
C
ROXL.B
count o Dn,Dn
6+2n(1/0)+
X
6
Rotaci
on varios bit a
izquierda de byte empleando bit eXtensi
on.
El n
umero de bits desplazado lo determina
un contador (1-8) o un
registro (1-63). El bit
X pasa al bit 0 y el bit
7 pasa a X y a C
31
87
0
X
6
C ?
ROXL.W
count o Dn,Dn
6+2n(1/0)+
?
C
ROXL.L
count o Dn,Dn
6+2n(1/0)+
X
6
31
X
6
30
Operandos
ROXR
count o Dn,Dn
Bytes
2
Registro estado
reloj
Operaci
on realizada
6+2n(1/0)+
Rotaci
on de un bit a
derecha empleando bit
de extensi
on. El bit 15
se carga con el bit X y
el bit 0 pasa a X y C,
y el bit 15 se carga con
X
15
X-
.
ROXR.B
- -C
count o Dn,Dn
6+2n(1/0)+
Rotaci
on de varios bit
a derecha de byte empleando bit de eXtensi
on. El n
umero de bits
lo determina un contador (1-8) o un registro
(1-63). El bit 0 pasa al
bit X y a C, y el bit 7
se carga con X
31
ROXR.W
count o Dn,Dn
6+2n(1/0)+
87
- -C
6
X
- -C
X
ROXR.L
count o Dn,Dn
6+2n(1/0)+
- -C
1. Microprocesador MC68000
1.6.6.
31
Manejo de bits
Ciclos
Bytes
reloj
Registro estado
Nem
onico
Operandos
Operaci
on realizada
BTST
bitl,Dn
10(2/0)
ZDn<bitl>
Dn,dDn
6(1/0)
ZdDn<Dn>
Consulta el contenido
de un bit de un registro
BTST
bitl,dadr
4,6,8
8(2/0)+
Z[dadr<bitl>]
Dn,dadr
2,4,6
4(1/0)+
Z[dadr<Dn>]1
Consulta el contenido
de un bit de memoria
BSET
bitl,Dn
12(2/0)
ZDn<bitl>,
Dn<bitl>1
Dn,dDn
8(1/0)
ZdDn<Dn>,
dDn<Dn>1
Consulta el contenido
de un determinado bit
de un registro y lo pone a 1
BSET
bitl,dadr
4,6,8
13(2/1)+
Z[dadr<bitl>],
[dadr<bitl>]1
Dn,dadr
2,4,6
9(1/1)+
Z[dadr<Dn>],
[dadr<Dn>]11
Consulta el contenido
de un bit de memoria
y lo pone a 1
BCLR
bitl,Dn
14(2/0)
ZDn<bitl>,
Dn<bitl>0
Dn,dDn
8(1/0)
ZdDn<Dn>,
dDn<Dn>0
Consulta el contenido
de un determinado bit
de un registro y lo pone a 0
BCLR
bitl,dadr
4,6,8
13(2/1)+
Z[dadr<bitl>],
[dadr<bitl>]0
Dn,dadr
2,4,6
9(1/1)+
Z[dadr<Dn>],
[dadr<Dn>]01
Consulta el contenido
de un bit de memoria
y lo pone a 0
32
Operandos
BCHG
bitl,Dn
Bytes
4
reloj
Registro estado
X
12(2/0)
Operaci
on realizada
ZDn<bitl>,
Dn<bitl>Dn<bitl>
Dn,dDn
8(1/0)
ZdDn<Dn>,
dDn<Dn>dDn<Dn>
Consulta el contenido
de un bit de un registro y lo pone al valor
contrario
BCHG
bitl,dadr
4,6,8
13(2/1)+
Z[dadr<bitl>],
[dadr<bitl>][dadr<bitl>]
Dn,dadr
2,4,6
9(1/1)+
Z[dadr<Dn>],
[dadr<Dn>][dadr<Dn>]1
Consulta el contenido
de un bit de memoria
y lo pone al valor contrario
1.6.7.
Nem
onico
Operandos
BRA
label
Bytes
2,4
reloj
10(2/0)
Registro estado
X
Operaci
on realizada
P Clabel
Salto
incondicional
corto relativo a PC
JMP
jadr
2,4,6
4(1/0)+
P Cjadr
Salto incondicional absoluto
BSR
label
2,4
10,8(1/0)
A7A74,
[A7]P C
10,12(2/0)
P Clabel
Salto subrutina corto
relativo a PC
JSR
jadr
2,4,6
14(1/2)+
A7A74,
[A7]P C
P Cjadr
Salto subrutina absoluto
RTS
16(4/0)
P C[A7],
A7A7+4
Retorno subrutina
RTR
20(5/0)
SR<04>[A7<04>],
A7A7+2
P C[A7],
A7A7+4
Restaura estado y retorna subrutina
1. Microprocesador MC68000
33
Ciclos
Nem
onico
Operandos
RTE
Bytes
2
Registro estado
reloj
Operaci
on realizada
20(5/0)
SR[A7],
A7A7+2
P C[A7],
A7A7+4
Retorno de excepci
on
Bcc
label
2,4
10,8(1/0)
P Clabel, Si condici
on
10,12(2/0)
DBcc
Dn,label
12,10(2/0),
Si
cumple
condici
on
nada.
14(3/0)
No cumple condici
on:
Dn<015>Dn<015>1
Si
Dn<015>=1
si-
guiente instrucci
on
P Clabel
Salto condicional corto
relativo a PC, con decremento
CHK
data16,Dn
49(6/3),
12(2/0)
Si Dn<015><0
Dn<015>>data16
entonces
P C
vector
CHK
Dn,dDn
45(5/3)
8(1/0)
Si dDn<015><0
dDn<015>>Dn entonces
P C vector CHK
sadr,dDn
2,4,6
45(5/3)
8(1/0)
Si dDn<015><0
dDn<015>>[sadr]
entonces
P C
vector
CHK
Comprobaci
on de rangos
TRAP
vector
37(4/3)
A7A74,
[A7]P C,
A7A72,
[A7]SR,
P Cvector
Desv
o al S.O.
TRAPV
37(5/3)
Si V = 1 TRAP vector
TRAPV
Comprobaci
on
overflow
bit
34
1.6.8.
Nem
onico
Operandos
MOVE
Dn,CCR
MOVE
sadr,CCR
MOVE
data8,CCR
MOVE
Dn,SR
Bytes
Registro estado
reloj
Operaci
on realizada
12(2/0)
SR<04>Dn<04>
12(2/0)+
SR<04>[sadr<04>]2,3
16(3/0)
SR<04>data8<04>
12(2/0)
SRDn<015>
Actualiza estado
2,4,6
Ejecutable en supervisor
MOVE
sadr,SR
2,4,6
12(2/0)+
SR[sadr]2,3
Ejecutable en supervisor
MOVE
data16,SR
16(3/0)
SRdata16<08>
Ejecutable en supervisor
MOVE
SR,Dn
MOVE
SR,dadr
ANDI.B
data8,SR
6(1/0)
Dn<015>SR
2,4,6
9(1/1)+
[dadr]SR2,3
20(3/0)
SR<07>SR<07>
data8 AND inmediato a
SR
ANDI.W
data16,SR
20(3/0)
SRSRdata16
Ejecutable en supervisor
EORI.B
data8,SR
20(3/0)
SR<07>SR<07>
data8 EOR inmediato a
SR
EORI.W
data16,SR
20(3/0)
SRSRdata16
Ejecutable en supervisor
ORI.B
data8,SR
20(3/0)
SR<07>SR<07>
data8 OR inmediato a
SR
ORI.W
data16,SR
20(3/0)
SRSRdata16
Ejecutable en supervisor
NOP
4(1/0)
No hace nada
RESET
132(1/0)
STOP
data16
8(2/0)
SRdata16
Bloqueado
en
espera
de interrupci
on. Ejecutable en supervisor
Captulo 2
2.1.
Transmisi
on asncrona de caracteres por una lnea serie
36
Paridad
Parada
2.2.
2.3.
Descripci
on de los registros
37
la unidad. La tabla 2.1 muestra los registros de la DUART junto con su acronimo de su
denominacion en ingles, la direccion que tienen asignada en el computador simulado de la
practica y si son especficos de la lnea serie A, de la B o son comunes.
Direccion
EFFC01
EFFC03
EFFC05
EFFC07
EFFC09
EFFC0B
EFFC0D
EFFC0F
EFFC11
EFFC13
EFFC15
EFFC17
EFFC19
EFFC1B
EFFC1D
EFFC1F
Registro en lectura
de modo A (MR1A, MR2A)
de estado A (SRA)
Sin acceso
buer de recepcion A (RBA)
Sin implementar
de estado de interrupcion (ISR)
Sin implementar
Sin implementar
de modo B (MR1B, MR2B)
de estado B (SRB)
Sin acceso
buer de recepcion B (RBB)
del vector de interrupcion (IVR)
Sin implementar
Sin implementar
Sin implementar
Registro en escritura
de modo A (MR1A, MR2A)
de seleccion de reloj A (CSRA)
de control A (CRA)
buer de transmision A (TBA)
de control auxiliar (ACR)
de mascara de interrupcion (IMR)
Sin implementar
Sin implementar
de modo B (MR1B, MR2B)
de seleccion de reloj B (CSRB)
de control B (CRB)
buer de transmision B (TBB)
del vector de interrupcion (IVR)
Sin implementar
Sin implementar
Sin implementar
Lnea
A
A
A
A
Ambas
Ambas
Ambas
Ambas
B
B
B
B
Ambas
Ambas
Ambas
Ambas
Todos los registros son de 8 bits y el ancho del bus de datos de esta unidad es tambien
de 8 bits. Por lo tanto, se deberan usar instrucciones de tama
no de operando de 8 bits para
leer y escribir en estos registros.
Como es habitual en los controladores de perifericos, en muchos casos 2 registros distintos
comparten el mismo puerto, de forma que cuando se escribe se accede a un registro y cuando
se lee se accede a otro. Ademas, los 2 registros de modo de cada lnea comparten la misma
direccion. De forma que, en el primer acceso se direcciona el registro de modo 1 y en el segundo
el registro de modo 2. Todos los accesos posteriores direccionaran el registro de modo 2, a
menos que se reinicialice el puntero interno que los discrimina. Este puntero se reinicializa al
realizar el RESET del sistema o bien ordenando una reinicializacion del puntero en el registro
de control correspondiente.
A continuacion se describen cada uno de los registros de la DUART MC68681 simulada.
En muchos casos aparece la notacion N/A que indica que la funcionalidad proporcionada por
el bit correspondiente del registro no esta disponible en la unidad simulada
38
2.3.1.
N/A
Bit 7
Seleccion
RxIRQ
Bit 6
0 = RxRDY
1 = FFULL
N/A
Bit 5
N/A
Bit 4 Bit 3
N/A
Bit 2
Bits
por caracter
Bit 1 Bit 0
00 = 5
01 = 6
10 = 7
11 = 8
2.3.2.
N/A
Bit 5
N/A
Bit 4
N/A
Bit 3 Bit 2 Bit 1 Bit 0
2.3.3.
N/A
Bit 6
N/A
Bit 5
N/A
Bit 4
TxEMT
Bit 3
0 = No
1 = Yes
TXRDY
Bit 2
0 = No
1 = Yes
FFULL
Bit 1
0 = No
1 = Yes
RxRDY
Bit 0
0 = No
1 = Yes
En este registro se consulta el estado de la lnea correspondiente. Los sucesos que registra
son:
TxEMT (Transmitter EMpTy) Si esta habilitada la transmision por la lnea correspondiente, se pone a 1 cuando se puede cargar un nuevo caracter en el buer de transmision
(TBA o TBB) y el caracter anterior se ha terminado de enviar.
39
TXRDY (Transmitter ReaDY) Si esta habilitada la transmision por la lnea correspondiente, se pone a 1 cuando se puede cargar un nuevo caracter en el buer de transmision
(TBA o TBB), pero puede que a
un no se haya completado el envo del caracter anterior.
FFULL (Fifo FULL) Hay 3 caracteres en la pila FIFO de registros de recepcion.
RxRDY (Receiver ReaDY) Se ha recibido un caracter y esta en la pila FIFO de registros
de recepcion.
2.3.4.
Registros de selecci
on de reloj (CSRA y CSRB)
Selecci
on de velocidad de transmision
Bit 3 Bit 2 Bit 1 Bit 0
Conjunto 1
Conjunto 2
ACR Bit 7 = 0 ACR Bit 7 = 1
0000
50
75
0001
110
110
0010
134.5
134.5
0011
200
150
0100
300
300
0101
600
600
0110
1200
1200
0111
1050
2000
1000
2400
2400
1001
4800
4800
1010
7200
1800
1011
9600
9600
1100
38400
19200
1101
N/A
N/A
1110
N/A
N/A
1111
N/A
N/A
2.3.5.
=
=
=
=
=
=
=
=
Miscelaneos
Bit 6 Bit 5 Bit 4
Sin efecto
Reinicializar puntero a MR1
Reinicializar recepcion
Reinicializar transmision
Reinicializar estado de error
N/A
N/A
N/A
Transmisi
on
Bit 3 Bit 2
00 = Sin efecto
01 = Habilitar
10 = Inhibir
11 = N/A
Recepcion
Bit 1 Bit 0
00 = Sin efecto
01 = Habilitar
10 = Inhibir
11 = N/A
40
2.3.6.
En cada uno de estos puertos hay 3 registros organizados como una pila FIFO, donde se
almacenan los caracteres que se reciben por la lnea correspondiente. De modo que, si se ha
recibido mas de un caracter desde la u
ltima vez que se leyo, estos se pueden leer en accesos
consecutivos.
2.3.7.
2.3.8.
N/A
Bit 6 Bit 5 Bit 4
N/A
Bit 3
N/A
Bit 2
N/A
Bit 1
N/A
Bit 0
Este registro sirve para seleccionar uno de los dos conjuntos de velocidades de recepcion
y transmision. La velocidad elegida dentro del conjunto se especifica a traves de los registros
de seleccion de reloj correspondiente (CSRA o CSRB).
2.3.9.
N/A
Bit 7
N/A
Bit 6
RxRDYB
FFULLB
Bit 5
0 = No
1 = Yes
TxRDYB
Bit 4
0 = No
1 = Yes
N/A
Bit 3
N/A
Bit 2
RxRDYA
FFULLA
Bit 1
0 = No
1 = Yes
TxRDYA
Bit 0
0 = No
1 = Yes
Este registro proporciona el estado de todas las fuentes posibles de interrupcion. Los
contenidos de este registro se enmascaran con los contenidos del registro de mascara de
interrupcion (IMR). De modo que, se activar
a la peticion de interrupcion si y solo si existe
alg
un bit de este registro a 1 y el bit correspondiente del registro de mascara de interrupcion
tambien esta a 1.
Existen dos fuentes posibles de interrupcion para cada lnea:
RxRDY o FFULL (Receiver ReaDY o Fifo FULL) Se colocara a 1 si se ha recibido
un caracter o la pila de registros FIFO este llena, seg
un lo elegido mediante el bit 6 del
registro de modo 1 correspondiente (MR1A o MR1B).
41
TxRDY (Transmiter ReaDY) Es un duplicado del bit TxRDY del registro de estado
correspondiente (SRA o SRB). Por lo tanto, se pondra a 1 siempre que el registro
buer de transmision este vaco.
2.3.10.
Registro de m
ascara de interrupci
on (IMR)
N/A
Bit 7 Bit 6
RxRDYB
FFULLB
Bit 5
0 = Inhibida
1 = Habilitada
TxRDYB
Bit 4
0 = Inhibida
1 = Habilitada
N/A
Bit 3 Bit 2
RxRDYA
FFULLA
Bit 1
0 = Inhibida
1 = Habilitada
TxRDYA
Bit 0
0 = Inhibida
1 = Habilitada
Como se ha dicho, este registro se usa para habilitar o inhibir la peticion de interrupcion
de cada una de las 4 fuentes posibles. En particular, si alguno de los bit TxRDYA y TxRDYB
esta a 1 se solicitara una interrupcion siempre que se este en condiciones de transmitir un
nuevo caracter. Es decir, tras mandar el u
ltimo caracter de un paquete se debera colocar a
0. Si no, hasta que no se cargue un nuevo caracter en el registro del buer de transmision
correspondiente (TBA o TBB) se solicitaran interrupciones de forma ininterrumpida, valga
la redundancia.
2.3.11.
En este registro se almacenara el vector de interrupcion que debe proporcionar el controlador MC68681 durante el ciclo de bus de reconocimiento de interrupcion. Por lo tanto, la
direccion de la rutina de tratamiento se debera almacenar a partir de la posicion de memoria
resultante de multiplicar por 4 el contenido de este registro (vease seccion 1.5.3).
Tras un reset contiene el vector 0F, que seg
un la tabla 1.5 es el correspondiente a vector
de interrupcion no inicializado.
42
Captulo 3
3.1.
44
3.2.
Formato del c
odigo fuente
La entrada al programa ensamblador es un fichero que contiene instrucciones, pseudoinstrucciones y comentarios. Cada lnea puede tener hasta un maximo de 256 caracteres y el
programa no distingue entre may
usculas y min
usculas.
Cada lnea de codigo fuente puede tener los siguientes campos:
ETIQUETA
OPERACION
OPERANDO,,
COMENTARIO
(A0)+,(A1)+
*Ejemplo
Por ejemplo:
LOOP:
MOVE.L
3.2.1.
Campo de etiquetas
3.2.2.
Campo de operaci
on
3.2.3.
Campo de operandos
3.2.4.
Campo de comentario
3.2.5.
45
Smbolos
3.2.6.
Expresiones
3.2.7.
Especificaci
on de los modos de direccionamiento
3.3.
Instrucciones de bifurcaci
on
46
Precedencia
1
2
3
Operador
()
~
<<
>>
&
!
*
/
\
+
-
Descripcion
Parentesis
Negacion (complementa a dos)
NOT (complementa a uno)
Desplaza a la izquierda
(x<<y significa que x se desplaza y bits y se introducen ceros)
Desplaza a la derecha
(x>>y significa que x se desplaza y bits y se introducen ceros)
AND
OR
Multiplicaci
on
Division entera
Modulo
Suma
Resta
Tabla 3.1: Operadores de expresiones
3.4.
3.4.1.
Pseudoinstrucciones
Set origin ORG
Especifica en que posiciones de memoria se ubicaran las variables o el codigo que aparece
a continuacion. El formato de una lnea con esta pseudoinstruccion es:
<ETIQUETA>
ORG
<EXPRESION>
3.4.2.
Equate EQU
Se usa para definir smbolos cuyo valor permanece constante. El formato de una lnea con
esta pseudoinstruccion es:
<ETIQUETA>
EQU
<EXPRESION>
Modo
Directo a registro de datos
Directo a registro de direccion
Absoluto (el tama
no lo elige el ensamblador)
Relativo a PC
Relativo a PC con desplazamiento m
ultiple
Indirecto a registro
Indirecto a registro con postincremento
Indirecto a registro con predecremento
Relativo a registro base
Relativo a registro base con desplazamiento m
ultiple
Inmediato
Implcito
47
Sintaxis
Dn
An
< ex >
< ex16 >(PC)
< ex8 >(PC,Xn.s)
(An)
(An)+
-(An)
< ex16 >(An)
< ex8 >(An,Xn.s)
#< ex >
SR,USP,PC,VBR,SFC,DFC
Leyenda: Dn
An
Xn
= Registro de datos
= Registro de direcciones (se puede usar SP por A7)
= Registro de datos o direcciones usado como ndice en
los desplazamientos m
ultiples
.s
= Codigo de tama
no del registro ndice
(.W o .L, .W es la opcion por defecto)
< ex8 > = Expresion que se calcula a 8 bits, si no se pone se asume 0
< ex16 >= Expresion que se calcula a 16 bits, si no se pone se asume 0
< ex > = Cualquier expresion
SR
= Registro de estado
PC
= Registro contador de programa
USP
= Registro puntero de pila de usuario
SSP
= Registro puntero de pila de supervisor
VBR
= Registro base de la tabla de vectores (MC68010)
SFC
= Registro fuente de codigo de funcion (MC68010)
DFC
= Registro destino de codigo de funcion (MC68010)
Tabla 3.2: Especificacion de los modos de direccionamiento
3.4.3.
Define constant DC
DC.<TAMA~
NO>
<ITEM>,<ITEM>,...
DC.B
DC Ejemplo,$0D,$0A,0
48
44 43 20 45 6A 65 6D 70 6C 6F 0D 0A 00
3.4.4.
Define storage DS
3.4.5.
DS.<TAMA~
NO>
<LONGITUD>
Es similar a la anterior, pero se usa para smbolos que se pueden redefinir usando otra
pseudoinstruccion SET (pero no usando EQU o REG). El formato de una lnea con esta pseudoinstruccion es:
<ETIQUETA>
3.4.6.
SET
<EXPRESION>
Se usa para definir un conjunto de registros que se van a usar en una instruccion MOVEM.
El formato de una lnea con esta pseudoinstruccion es:
<ETIQUETA>
REG
<EXPRESION DE REGISTROS>
REG
MOVEM
D0/D3-D7/A1-A5/A6
CONTEXTO,-(A7)
MOVEM
D0/D3-D7/A1-A5/A6,-(A7)
equivale a:
3.4.7.
Se usa para generar un bloque de bytes, palabras o palabras largas que se inicializan al
mismo valor. El formato de una lnea con esta pseudoinstruccion es:
<ETIQUETA>
DCB.<TAMA~
NO>
<LONGITUD>,<VALOR>,...
3.5.
49
El ensamblador produce un listado del codigo fuente junto con su codigo objeto si se le
invoca con la opcion -l. El formato de una lnea de este fichero es:
0000102E
22D8
200
LOOP
MOVE.L (A0)+,(A1)+
Sample
La primera columna muestra la direccion de memoria correspondiente. La segunda columna el codigo de operacion correspondiente a la instruccion. La tercera columna la lnea correspondiente del fichero de listado. Las columnas posteriores contienen los campos de la lnea
correspondiente del codigo fuente.
En caso de que se presente alg
un error o aviso, este se muestra en la lnea siguiente. Al
final del fichero se imprime el n
umero total de errores y avisos.
3.6.
Ejemplos
En el directorio /usr/local/datsi/bsvc/samples/m68000 existen dos programas ejemplo que se distribuyen con el simulador. Los ficheros fuentes se llaman MatrixMultiply.s y
example.s. Tambien se pueden encontrar en ese directorio los listados de ensamblaje correspondientes, cuya extension es .lis.
50
Captulo 4
Simulador BSVC
BSVC es una plataforma para la simulaci
on de procesadores, memoria y controladores de
perifericos, desarrollada en C++ y Tcl/Tk. BSVC fue desarrollado por Bradford W. Mott en
la Universidad del Estado de Carolina del Norte para la realizacion de practicas de sistemas
de entrada/salida y constituyo su proyecto fin de carrera1 . Actualmente, BSVC simula el microprocesador MC68000, el controlador de lneas series DUART MC68681 y memoria RAM.
Por lo tanto, permite construir computadores virtuales con procesador, memoria y unidades
perifericas.
BSVC se compila y ejecuta sobre sistemas operativos Unix, con compilador de C++ gcc
2.7.2 e interfaz grafico Tcl 7.5 y Tk 4.1. Existe una versi
on para Windows95, pero no incorpora
el simulador de la DUART MC68681.
En este captulo se detalla la funcionalidad de BSVC necesaria para la realizacion de la
practica. El manual completo de este simulador se encuentra en el directorio
/usr/local/datsi/bsvc/doc/Manual/html/ en formato hipertexto HTML o en
/usr/local/datsi/bsvc/doc/Manual/ps en formato PostScript.
4.1.
52
4. Simulador BSVC
53
4.2.
4.3.
Men
us de la ventana de manejo del simulador
En la parte superior derecha de esta ventana (figura 4.3), existen tres men
us:
File Es identica a su homonima correspondiente a la ventana inicial y sirve para para cargar, crear y salvar computadores virtuales, as como para cargar programas y salir del
simulador.
Edit Sirve para ver y modificar el computador virtual que se ha cargado.
Window Sirve para generar dos nuevas ventanas. Una muestra el listado de ensamblaje
del programa cargado, que contiene el codigo fuente. La otra permite ver y alterar el
contenido del mapa de direcciones.
54
Registers La columna izquierda de esta ventana muestra los registros del microprocesador
MC68000. En su parte superior existe un men
u etiquetado Registers que despliega
dos opciones:
Alter Permite modificar el contenido de un registro. Para ello se selecciona el registro
en cuestion y a continuacion esta opcion. El mismo efecto se consigue pulsando
dos veces consecutivas sobre el registro.
Clear All Pone a 0 todos los registros.
Trace La columna de la derecha es una zona de presentaci
on de la traza de ejecucion del
programa. El men
u superior etiquetado Trace permite seleccionar el tipo de informacion
que se muestra y salvar la traza a fichero. Por defecto, se muestra la instruccion donde
se ha detenido la ejecucion y los posibles errores.
4.4.
4.5.
Resultados de la ejecuci
on de un programa
4. Simulador BSVC
55
4.6.
Errores conocidos
56
Captulo 5
58
Las subrutinas deberan tener un comportamiento no bloqueante. Es decir, estas subrutinas se limitaran a almacenar o recuperar la informacion solicitada de los b
ueres internos y
no esperaran en ning
un caso a que termine la transmision de los caracteres o a que se reciban
nuevos caracteres.
La forma de acceder a los b
ueres internos y variables compartidas entre la RTI y SCAN
y PRINT debe asegurar la integridad de los datos manejados por las subrutinas, es decir,
que ning
un caracter es ledo dos veces y que no se pierde ninguno. Esto exige realizar un
estudio de concurrencia entre la RTI y el resto de subrutinas que se pueden ejecutar de
forma concurrente, teniendo en cuenta qu
e informaci
on modifica cada subrutina y en
qu
e momento lo hace.
Las subrutinas anteriores se depuraran y probaran escribiendo una serie de programas
principales que llamen a estas subrutinas con un conjunto de parametros distintos. Este juego
de ensayo debe asegurar el funcionamiento correcto de la RTI y las otras cuatro subrutinas.
Programa
Principal
INIT
BUFFER
INTERNO
DE PRINT
(LNEA A)
SCAN
BUFFER
INTERNO
DE PRINT
(LNEA B)
BUFFER
INTERNO
DE SCAN
(LNEA A)
BUFFER
INTERNO
DE SCAN
(LNEA B)
RTI
ENTRADA
SALIDA
LNEAS A y B
Descripci
on de las Subrutinas
Todas las subrutinas, excepto LEECAR, ESCCAR y LINEA reciben los parametros en la pila
y el valor de retorno, si lo tiene, se devuelve en el registro D0. En la figura 5.1 se muestra
la relacion entre las subrutinas de la practica, excluyendo LEECAR, ESCCAR y LINEA que se
utilizaran para que SCAN, PRINT y RTI realicen el acceso a los b
ueres internos de 2000 bytes
59
60
LEECAR (Buffer)
Par
ametros:
Buer: 4 bytes. Es un descriptor que indica de que buer interno se desea extraer el
caracter. Se pasa por valor en el registro D0. Es un parametro de entrada/salida. Tiene
dos bits significativos:
Bit 0: Selecciona la lnea de transmision. Un 0 indica que se desea acceder a un
buer asociado a la lnea A y un 1 a la lnea B.
Bit 1: Selecciona el tipo de buer. Un 0 indica que se desea acceder al buer de
recepcion y un 1 al de transmision.
El resto de bits no seran tenidos en cuenta.
Resultado:
D0: 4 bytes. Se devuelve un codigo que indica el resultado de la operacion:
D0 = 0xFFFFFFFF si no hay ning
un caracter disponible en el buer interno
seleccionado.
D0 es un n
umero entre 0 y 255. Indicara el caracter que se ha extrado del
buer interno seleccionado.
Descripci
on:
La rutina LEECAR realiza la extraccion de un caracter del buer interno que se selecciona
en el parametro. Si el buer interno esta vaco, la funcion devolver
a el valor 0xFFFFFFFF y
no modificara el buer. Si el buer interno contiene caracteres, la funcion extraera el primer
caracter del buer almacenandolo en el registro D0 y lo eliminara, de tal forma que la
siguiente llamada a la funcion no lo vuelva a encontrar. Los posibles valores de los dos bits
menos significativos del parametro de entrada son:
0: indica que se desea acceder al buer interno de recepcion de la lnea A.
1: indica que se desea acceder al buer interno de recepcion de la lnea B.
2: indica que se desea acceder al buer interno de transmision de la lnea A.
3: indica que se desea acceder al buer interno de transmision de la lnea B.
Se supondra que el programa que invoca a esta subrutina no deja ning
un valor representativo en los registros del computador salvo el puntero de marco de pila (A6) y en el parametro
D0.
ESCCAR (Buffer,Caracter)
Par
ametros:
Buer: 4 bytes. Es un descriptor que indica en que buer interno se desea insertar un
caracter. Se pasa por valor en el registro D0. Es un parametro de entrada/salida. Tiene
dos bits significativos:
61
62
Resultado:
D0: 4 bytes. Se devuelve un codigo que indica el resultado de la operacion:
D0 es un n
umero entre 0 y 2000. Indicar
a el tama
no de la primera lnea
contenida en el buer interno descrito por el parametro.
Descripci
on:
La rutina LINEA cuenta el n
umero de caracteres que componen la primera lnea, incluyendo
el retorno de carro (caracter ASCII 13), que hay en el buer interno indicado en el parametro.
Si el buer interno esta vaco o no hay ninguna lnea (no existe el caracter ASCII 13), la
funcion devolvera el valor 0. Si el buer interno contiene caracteres, la funcion contar
a los
primeros caracteres que conforman la primera lnea y almacenara dicha cuenta en el registro
D0. Esta subrutina no modifica el buer interno involucrado. Los posibles valores de los dos
bits menos significativos del parametro de entrada son:
0: indica que se desea acceder al buer interno de recepcion de la lnea A.
1: indica que se desea acceder al buer interno de recepcion de la lnea B.
2: indica que se desea acceder al buer interno de transmision de la lnea A.
3: indica que se desea acceder al buer interno de transmision de la lnea B.
Se supondra que el programa que invoca a esta subrutina no deja ning
un valor representativo en los registros del computador salvo el puntero de marco de pila (A6) y en el parametro
D0.
INIT ( )
Par
ametros:
No tiene.
Resultado:
Los puertos A y B deben quedar preparadas para la recepci
on y transmisi
on de caracteres mediante E/S por interrupciones. Al finalizar la ejecucion de la instruccion RTS, el
puntero de pila (SP) debe apuntar a la misma direccion a la que apuntaba antes de ejecutar la
instruccion BSR. Debido a la particular configuracion del emulador, esta subrutina no puede
devolver ning
un error y, por tanto, no se devuelve ning
un valor de retorno. Se supondra que
el programa que invoca a esta subrutina no deja ning
un valor representativo en los registros
del computador salvo el puntero de marco de pila (A6).
Descripci
on:
La rutina INIT realiza la inicializacion de los dos puertos disponibles en la DUART
MC68681. Los parametros de inicializacion de esta subrutina son los siguientes:
8 bits por caracter para ambos puertos.
No activar el eco en ninguna de los puertos.
Se debe solicitar una interrupcion cada vez que llegue un caracter.
63
D0 es un n
umero positivo. Indicar
a el n
umero de caracteres que se han ledo
y se han copiado a partir de la posicion de memoria indicada por el parametro
Buffer (incluyendo el caracter de retorno de carro).
64
Descripci
on:
La rutina SCAN realiza la lectura de una lnea completa de caracteres del puerto correspondiente (A o B) siempre y cuando el tama
no total de la lnea, incluyendo el caracter de
retorno de carro, sea menor o igual al parametro Tama~
no.
La lectura se debera realizar de forma no bloqueante, es decir, la subrutina se limitara a
indagar si en el buer interno correspondiente hay una lnea valida y si su longitud (n),
incluyendo el retorno de carro, es menor o igual que Tama~
no.
Si es as, la subrutina se limitara a copiar en el parametro Buffer los n primeros caracteres
almacenados en el buer interno correspondiente y eliminarlos de dicho buer interno
devolviendo en D0 el valor n. La eliminacion de estos caracteres del buer no implica
la sobreescritura de los mismos, sino que basta con que dichos caracteres no se vuelvan a
entregar.
Si no, esta subrutina se limitara a devolver en D0 el valor 0. Tanto si la primera lnea
almacenada en el correspondiente buer interno es mayor que el parametro Tama~
no, como si
los caracteres almacenados en el correspondiente buer interno no constituyen una lnea.
Ademas se debera tener en cuenta lo siguiente:
El comportamiento no bloqueante es resultado de gestionar los puertos serie mediante
E/S por interrupciones. Para ello la subrutina SCAN dispondra de sendos bueres internos de 2000 bytes (a los que tienen acceso dicha subrutina y la rutina de tratamiento
de interrupcion) que contendran los caracteres ledos de los puertos y no consumidos
por ninguna llamada a SCAN. En particular esta subrutina debe asegurar que ning
un
caracter es ledo dos veces y que no se pierde ninguno (vease la figura 5.1). Los b
ueres
internos de la subrutina se deberan implementar como b
ueres circulares.
En ning
un caso esta subrutina debe esperar a que lleguen nuevos caracteres del dispositivo.
Se copiaran a lo sumo tantos bytes como indique el parametro Tama~
no.
Esta subrutina debera dejar el dispositivo preparado para realizar lecturas posteriores y,
al igual que la subrutina de inicializacion, debe dejar el puntero de pila (SP) apuntando a la
misma posicion de memoria a la que apuntaba antes de realizar la llamada a subrutina.
Se supondra que el programa que invoca a esta subrutina habra reservado espacio suficiente en el buer que se pasa como parametro (Buffer) y no deja ning
un valor representativo
en los registros del computador salvo el puntero de marco de pila (A6).
PRINT (Buffer, Descriptor, Tama~
no)
Par
ametros:
Buer: 4 bytes. Es el buer en el que se pasa el conjunto de caracteres que se desea
escribir en el dispositivo. Se pasa por direccion. Es un parametro de entrada.
Descriptor: 2 bytes. Es un n
umero entero. Es un parametro de entrada. Indica el
dispositivo sobre el que se desea realizar la operacion de escritura:
0 indica que la escritura se realizara del puerto A.
1 indica que la escritura se realizara del puerto B.
65
D0 es un n
umero positivo. Indicara el n
umero de caracteres que se han aceptado para su escritura en el dispositivo.
Descripci
on:
La rutina PRINT realiza la escritura en el correspondiente buer interno de tantos caracteres como indique el parametro Tama~
no contenidos en el buer que se pasa como parametro.
La escritura se debera realizar de forma no bloqueante, es decir, la subrutina finalizara inmediatamente despues de copiar los caracteres pasados en el parametro Buffer al
buer interno.
Adicionalmente, si alguno de los caracteres del buer que se pasa como parametro es el
retorno de carro (ASCII 13) se activar
a la transmision de caracteres para que se transmitan
los caracteres del correspondiente buer interno hasta el u
ltimo caracter de retorno de carro
que se ha copiado en el buer interno. Debido al comportamiento no bloqueante exigido,
la subrutina finalizara tras activar la transmision de caracteres.
Ademas se debera tener en cuenta lo siguiente:
Al igual que en la subrutina SCAN el comportamiento no bloqueante es resultado de
gestionar el puerto serie mediante E/S por interrupciones. Esto indica que el MC68681
generar
a una interrupci
on cuando alguna de los puerto est
e preparada para
transmitir y, por tanto, la rutina de tratamiento de interrupcion sera la encargada
de ir transmitiendo los caracteres por el puerto correspondiente (vease la figura 5.1).
Para permitir este comportamiento, la subrutina PRINT dispondra de sendos bueres
internos de 2000 bytes (a los que u
nicamente tienen acceso dicha subrutina y la rutina
de tratamiento de interrupcion) que contendr
a los caracteres pendientes de ser enviados
por los puertos serie. Los b
ueres internos de la subrutina se deberan implementar como
b
ueres circulares.
Una llamada a PRINT para uno de los puertos se limitara a copiar del parametro Buffer
los datos que se desean escribir al buer interno correspondiente y encolarlos al
conjunto de caracteres que estan pendientes de transmitirse. En el caso de que los
caracteres que se desean transmitir no quepan en su totalidad en el buer interno,
se encolaran los que quepan. La transmision efectiva de los caracteres encolados
sera activada solo si existe una lnea en el buer interno, es decir, si se ha encontrado
un retorno de carro despues de encolar los caracteres que se pasan como parametro.
En ning
un caso esta subrutina debe esperar a que finalice la transmision de caracteres
del dispositivo.
66
Esta subrutina debera dejar el dispositivo preparado para realizar escrituras posteriores
y, al igual que la subrutina de inicializacion, debe dejar el puntero de pila (SP) apuntando a
la misma posicion de memoria a la que apuntaba antes de realizar la llamada a subrutina.
Se supondra que el programa que invoca a esta subrutina habra reservado espacio suficiente en el buer que se pasa como parametro (Buffer) y no deja ning
un valor representativo
en los registros del computador salvo el puntero de marco de pila (A6).
RTI
Descripci
on:
La invocacion de la rutina de tratamiento de interrupcion es el resultado de la ejecucion
de la secuencia de reconocimiento de interrupciones expuesta en la pagina 8. Entre otras
acciones esta subrutina debe realizar las siguientes acciones:
Identificaci
on de la fuente de interrupci
on. Puesto que el MC68681 activa una
misma se
nal de interrupcion para las cuatro condiciones posibles, esta subrutina debe
identificar cual de las cuatro posibles condiciones ha generado la solicitud de interrupcion.
Tratamiento de la interrupci
on. Una vez identificada la fuente, se debe realizar el
tratamiento de la interrupcion.
Si la interrupcion es de recepcion indica que la cola FIFO de recepcion del puerto
no esta vaca (vease la pagina 38). En este caso se debe a
nadir el caracter que se
recibio por el puerto al buer interno correspondiente.
Si la interrupcion es de transmision indica que el puerto serie esta preparado
para transmitir un caracter. En este caso si quedan caracteres en el buer interno
de transmision que conforman una lnea, se debe transmitir un nuevo caracter por
el puerto y eliminarlo del buer interno. Este comportamiento implica que la
RTI solo transmite lneas completas.
Situaciones especiales. Hay situaciones en las que el tratamiento de la interrupcion
no se puede asociar al tratamiento general:
Si la interrupcion es de recepcion y el buer interno esta lleno, no se puede
a
nadir el caracter que se recibe por el puerto, pero se debe leer el caracter del
buer de recepcion del MC68681 para desactivar la peticion de interrupcion. Este
caracter no se a
nade al buer interno (se tira).
Si la interrupcion es de transmision y el u
ltimo caracter que se transmitio por el
puerto serie es el retorno de carro, se transmitira un salto de lnea (codigo ASCII
10).
Si la interrupcion es de transmision y el u
ltimo caracter que se transmitio fue un
salto de lnea provocado por la aparicion de un retorno de carro en el buer interno,
se debe comprobar si queda una lnea completa en dicho buer. Si no es as, es
decir, no hay un conjunto de caracteres finalizados con el caracter 13, se deben
67
Para deshacer el marco de pila creado a la entrada de la subrutina se deberan realizar las
siguientes acciones:
Se copia el valor del puntero de marco al puntero de pila.
Se restaura el valor que tuviera el puntero de marco antes de entrar en la subrutina.
Se retorna a la subrutina llamante.
Las dos primeras acciones son realizadas mediante la instruccion UNLK. Por tanto, el codigo
de salida de una subrutina que utilice marco de pila se muestra a continuaci
on.
UNLK A6
RTS
68
Asignaci
on de etiquetas y de memoria
Los puntos de entrada de las subrutinas deberan ir asociados a las etiquetas INIT, SCAN
y PRINT.
El rango de direcciones 0 a la 0x00003FF se reservar
an para ubicar la tabla de vectores
de interrupcion. El alumno debe ubicar todo el codigo (datos y variables globales privadas a
las subrutinas) a partir de la direccion hexadecimal 0x0000400 hasta la 0x00007FFF. La pila
se situara en las posiciones altas de memoria.
A7 (SP)
69
I_byte_3
I_byte_2
I_byte_1
I_byte_0
J_byte_3
J_byte_2
J_byte_1
J_byte_0
A6 (FP) Antiguo_FP_byte_3
Antiguo_FP_byte_2
Antiguo_FP_byte_1
Antiguo_FP_byte_0
Dir_Ret_byte_3
Dir_Ret_byte_2
Dir_Ret_byte_1
Dir_Ret_byte_0
Buffer_byte_3
Buffer_byte_2
Buffer_byte_1
Buffer_byte_0
Descriptor_byte_1
Descriptor_byte_0
Tamao_byte_1
Tamao_byte_0
Figura 5.2: Gestion de variables locales.
Ejemplos
Como aclaracion a la especificacion de las subrutinas, a continuaci
on se incluye una serie
de ejemplos con los argumentos que se pasan a cada una de las subrutinas y direcciones de
memoria que se modifican. Este conjunto de casos debe ser utilizado como ejemplo de la
especificacion a subrutinas, no como los casos de prueba con los que se evaluar
a la practica. Puesto que en este procesador el direccionamiento es a nivel de byte, cada una de las
direcciones que se muestran en este apartado contendr
an un byte.
70
INIT
Caso 1.
A7 = 32000
Resultado:
A7 = 32000
Debe dejar los puertos serie A y B preparados para la recepcion y transmision de caracteres, se habra habilitado la recepcion y transmision en ambos puertos, se habra establecido
correctamente el vector de interrupcion, se habra actualizado la entrada de la tabla de vectores de interrupcion y se habra inicializado como buer vaco dos b
ueres de 2000 caracteres
para cada una de los puertos.
LEECAR
Caso 2.
D0 = 0
Caracteres recibidos por la
lnea A y almacenados
en el buer interno
Representacion ASCII:
de computadores y mas
0x64, 0x65, 0x20, 0x63, 0x6F, 0x6D, 0x70, 0x75,
0x74, 0x61, 0x64, 0x6F, 0x72, 0x65, 0x73, 0x20
0x79, 0x20, 0x6D, 0x61, 0x73
Resultado:
D0 = 0x64
Caracteres recibidos por la
lnea A y almacenados
en el buer interno
Representacion ASCII:
e computadores y mas
71
Caso 3.
D0 = 0x03040503
Caracteres a enviar por
la lnea B y almacenados
en el buer interno
Representacion ASCII:
interrupcion
Resultado:
D0 = 0x69
Caracteres a enviar por
la lnea B y almacenados
el buer interno
Representacion ASCII:
nterrupcion
0x6E, 0x74, 0x65, 0x72, 0x72, 0x75,
0x70, 0x63, 0x69, 0xF3, 0x6E
Observese que los 30 bits mas significativos del parametro de entrada de D0 se ignoran.
Caso 4.
D0 = 0x00000003
Caracteres a enviar por
la lnea B y almacenados
en el buer interno
<vac
o>
Resultado:
D0 = 0xFFFFFFFF
Caracteres a enviar por
la lnea B y almacenados
el buer interno
<vac
o>
72
ESCCAR
Caso 5.
D0 = 1
D1 = 0x41
COS
Representacion ASCII:
Resultado:
D0 = 0
Caracteres recibidos por la
lnea B y almacenados
en el buer interno
COSA
Representacion ASCII:
Caso 6.
D0 = 2
D1 = 0x62
Resultado:
D0 = 0xFFFFFFFF
Caracteres a enviar por la
lnea A y almacenados
en el buer interno
LINEA
Caso 7.
D0 = 0x00000003
Caracteres a enviar por
la lnea B y almacenados
en el buer interno
<vac
o>
<vac
o>
Caso 8.
D0 = 1
Caracteres a enviar por
la lnea A y almacenados
en el buer interno
COS
Representacion ASCII:
Resultado:
D0 = 0
Caracteres a enviar por
la lnea A y almacenados
en el buer interno
COS
Representacion ASCII:
Caso 9.
D0 = 2
Caracteres recibidos por la
lnea B y almacenados
en el buer interno
COS<retorno_carro>
Representacion ASCII:
Resultado:
D0 = 4
Caracteres recibidos por la
lnea B y almacenados
en el buer interno
COS<retorno_carro>
Representacion ASCII:
73
74
SCAN
Caso 10.
A7 = 32000
Caracteres recibidos
por la entrada del
puerto A y almacenados
en el buer interno
Representacion ASCII:
Direcciones de Memoria:
32000: 0x00, 0x00, 0x13, 0x88,
32004: 0x00, 0x00,
32006: 0x00, 0x02,
5000: ??, ??, ??, ??, . . . , ??
de computadores <retorno_carro>
Resultado:
A7 = 32000
D0 = 0
Direcciones de Memoria:
Caracteres recibidos
por la entrada del
puerto B y almacenados
en el buer interno
Representacion ASCII:
Direcciones de Memoria:
32000: 0x00, 0x00, 0x13, 0x88,
32004: 0x00, 0x01,
32006: 0x00, 0x22,
5000: ??, ??, ??, ??, . . . , ??
Resultado:
A7 = 32000
D0 = 16
Direcciones de Memoria:
5000: 0x64, 0x65, 0x20, 0x63, 0x6F, 0x6D, 0x70, 0x75,
5008: 0x74, 0x61, 0x64, 0x6F, 0x72, 0x65, 0x73, 0x0D
75
y mas
Caso 12.
A7 = 32000
Direcciones de Memoria:
32000: 0x00, 0x00, 0x13, 0x88,
32004: 0x00, 0x01,
32006: 0x00, 0x22,
5000: ??, ??, ??, ??, . . . , ??
de
0x64, 0x65
Resultado:
A7 = 32000
D0 = 0
Direcciones de Memoria:
No se han copiado caracteres en el parametro de SCAN porque no hay una lnea completa
en el buer interno. El estado de este no se altera.
PRINT
Caso 13.
A7 = 32000
Resultado:
A7 = 32000
D0 = 0xFFFFFFFF
Direcciones de Memoria:
32000: 0x00, 0x00, 0x13, 0x88,
32004: 0x00, 0x10,
32006: 0x00, 0x11,
5000: ??, ??, ??, ??, . . . , ??
76
Caso 14.
A7 = 32000
Direcciones de Memoria:
32000: 0x00, 0x00, 0x13, 0x88,
32004: 0x00, 0x01,
32006: 0x00, 0x0D,
5000: 0x69, 0x6E, 0x74, 0x65, 0x72, 0x72, 0x75,
5007: 0x70, 0x63, 0x69, 0xF3, 0x6E, 0x0D
Resultado:
A7 = 32000
D0 = 13
Caracteres a enviar por
el puerto B y almacenados
en el buer interno
Representacion ASCII:
interrupcion <retorno_de_carro>
Caso 15.
A7 = 32000
Direcciones de Memoria:
32000: 0x00, 0x00, 0x13, 0x88,
32004: 0x00, 0x01,
32006: 0x00, 0x0F,
5000: 0x69, 0x6E, 0x74, 0x65, 0x72, 0x72, 0x75,
5007: 0x70, 0x63, 0x69, 0xF3, 0x6E, 0x0D, 0x31, 0x32
Resultado:
A7 = 32000
D0 = 15
Caracteres a enviar por
el puerto B y almacenados
en el buer interno
Representacion ASCII:
interrupcion <retorno_de_carro>12
77
Caso 16.
A7 = 32000
Direcciones de Memoria:
32000: 0x00, 0x00, 0x13, 0x88,
32004: 0x00, 0x00,
32006: 0x00, 0x02,
5000: 0x69, 0x6E
0x70, 0x65
Representacion ASCII:
pe
Resultado:
A7 = 32000
D0 = 2
Caracteres a enviar por
el puerto A y almacenados
en el buer interno
Representacion ASCII:
pein
En este caso, al no existir una lnea completa en el buer interno, no se activa la transmision de caracteres.
Caso 17.
A7 = 32000
Resultado:
A7 = 32000
D0 = 0
Direcciones de Memoria:
32000: 0x00, 0x00, 0x13, 0x88,
32004: 0x00, 0x00,
32006: 0x00, 0x00,
5000: ??, ??, ??, ??, . . . , ??
78
Dise
no y codificaci
on de casos de prueba
Los ejemplos que se han expuesto anteriormente intentan aclarar la especificacion de la
practica, pero para asegurar el correcto funcionamiento de las subrutinas de la practica es
necesario realizar un conjunto de casos de pruebas que cubran el mayor n
umero posible de
situaciones que se puedan presentar.
Para mostrar como se puede construir un caso de prueba se incluye un programa principal
que hace funcionar de forma concurrente las rutinas, SCAN, PRINT y la RTI. Este programa
principal tiene un bucle principal, en el que cada iteracion primero se queda en un bucle de
llamadas a SCAN hasta que se consigue leer del puerto serie A NLIN lneas de caracteres de
tama
no menor o igual a TAML. Una vez que se ha finalizado con las lecturas se queda un bucle
de llamadas a PRINT hasta que se consigue transmitir por la lnea B todos los caracteres ledos
en bloques de tama
no TAMB. Cuando ha finalizado el envo de todos los caracteres ledos se
salta al inicio del bucle principal, de tal forma que se repite indefinidamente.
Ademas de lo anterior hay que tener en cuenta los siguientes puntos:
La variable BUFFER se utiliza para almacenar todos los caracteres que se van a leer de
la lnea A. En la primera lectura se pasara como parametro la direccion de comienzo de
esta variable y en las sucesivas lecturas se pasara la direccion de comienzo incrementada
en el n
umero de caracteres que se han ledo (variable CONTC).
La variable CONTL contiene el n
umero total de lneas que quedan por leer. De esta forma
se realizaran iteraciones en el bucle hasta que esta variable alcance el valor 0, puesto
que se decrementa en una unidad por cada iteracion.
Las constantes DESA y DESB contienen los descriptores de lectura y escritura que se
pasar
an como parametros a SCAN y PRINT respectivamente.
El programa comienza invocando a la rutina INIT y estableciendo los manejadores de las
excepciones que se pueden producir. Estos manejadores se limitan a parar la ejecucion
del programa.
A continuacion se realiza la iteracion del bucle tal y como se ha indicado en el comienzo
de esta seccion.
Se comprueba si quedan lneas por leer. Si no es as se salta al comienzo del bucle
(etiqueta OTRAL).
Una vez que se ha finalizado con el bloque de lecturas, se ejecuta el bloque de escrituras
que consiste en escribir todos los caracteres ledos en el bloque anterior en bloques de
TAME caracteres.
En cada iteracion del bucle se resta el n
umero de caracteres que la rutina PRINT ha
aceptado para la transmision. Si no se ha escrito todo el bloque se repite la llamada a
PRINT con el conjunto de caracteres que no se ha transmitido.
El caso especial se trata al final del bucle. Esta situacion consiste en que el n
umero de
caracteres que quedan por transmitir sea menor que el tama
no de la iteracion. En este
caso se carga el n
umero de caracteres que quedan por transmitir en TAME y se salta a
la etiqueta ESPE.
79
DS.B
DC.W
DC.W
DC.L
DC.L
DC.W
EQU
EQU
EQU
EQU
EQU
2100
0
0
0
0
0
0
1
10
30
5
*
*
*
*
*
*
*
*
*
*
*
BUCPR:
OTRAL:
ESPL:
OTRAE:
ESPE:
BSR
MOVE.W
INIT
#$2000,SR
MOVE.W
MOVE.W
MOVE.L
MOVE.W
MOVE.W
MOVE.L
BSR
CMP.L
BEQ
ADD.L
ADD.L
ADD.W
SUB.W
BNE
#0,CONTC
#NLIN,CONTL
#BUFFER,DIRLEC
#TAML,-(A7)
#DESA,-(A7)
DIRLEC,-(A7)
SCAN
#0,D0
ESPL
#8,A7
D0,DIRLEC
D0,CONTC
#1,CONTL
OTRAL
MOVE.L
MOVE.W
MOVE.W
MOVE.W
MOVE.L
BSR
ADD.L
ADD.L
SUB.W
BEQ
SUB.W
BNE
CMP.W
#BUFFER,DIRLEC
#TAMB,TAME
TAME,-(A7)
#DESB,-(A7)
DIRLEC,-(A7)
PRINT
#8,A7
D0,DIRLEC
D0,CONTC
SALIR
D0,TAME
ESPE
#TAMB,CONTC
* Permite interrupciones
*
*
*
*
*
*
*
*
*
*
*
*
Si no se ha le
do una l
nea se intenta de nuevo
Restablece la pila
Calcula la nueva direcci
on de lectura
Actualiza el n
umero de caracteres le
dos
Actualiza el n
umero de l
neas le
das. Si no
se han le
do todas las l
neas se vuelve a leer
*
*
*
*
*
Direcci
on
Tama~
no de
Tama~
no de
Puerto B
Direcci
on
*
*
*
*
*
*
*
*
Restablece la pila
Calcula la nueva direcci
on del buffer
Actualiza el contador de caracteres
Si no quedan caracteres se acaba
Actualiza el tama~
no de escritura
Si no se ha escrito todo el bloque se insiste
Si el no de caracteres que quedan es menor que el
tama~
no establecido se transmite ese n
umero
80
OTRAE
CONTC,TAME
ESPE
SALIR:
BRA
BUCPR
FIN:
BREAK
BUS_ERROR:
BREAK
NOP
ADDRESS_ER:
BREAK
NOP
ILLEGAL_IN:
BREAK
NOP
PRIV_VIOLT:
BREAK
NOP
* Siguiente
bloque
* Siguiente
bloque
81
NORMAS DE PRESENTACION
Se recomienda a los alumnos que consulten periodicamente la pagina Web del proyecto:
http://www.datsi.fi.upm.es/docencia/Arquitectura_09/Proyecto_E_S
En esta pagina se publicaran noticias relacionadas con este proyecto.
CONVOCATORIA DE FEBRERO
El plazo de entrega del proyecto terminara el da 12 de Noviembre de 2014 a las
21:00. En este momento se realizara una correccion del proyecto para todos los grupos que lo
hayan entregado y no se les haya corregido. A partir del 13 de Noviembre el sistema de entrega
se configurara de tal forma que permita entregar u
nicamente la memoria del proyecto. Dicha
memoria se podra entregar hasta el 17 de Noviembre a las 12:00 en formato electronico.
La planificacion de las correcciones automaticas se realizara seg
un el calendario que se
especifica a continuacion:
Se realizaran tres correcciones los das 20, 24 y 27 de Octubre. Para solicitar una
correccion basta con realizar correctamente la entrega del proyecto.
Desde el 21 al 23 de Octubre y del 28 de Octubre al 11 de Noviembre se realizaran
correcciones de proyectos todos los das habiles a las 21:00. De estas correcciones, el
alumno podra disponer de tres correcciones (en las fechas que el alumno estime conveniente). Para solicitar una correccion basta con realizar correctamente la entrega del
proyecto.
El examen del proyecto se realizar
a el da 14 de Noviembre a las 19:00 en las
aulas que se especificar
an en su momento en la p
agina Web del proyecto.
CONVOCATORIA DE JUNIO
El plazo de entrega del proyecto terminara el da 15 de Abril de 2015 a las 21:00.
En este momento se realizara una correccion del proyecto para todos los grupos que lo hayan
entregado y no se les haya corregido. A partir del 16 de Abril el sistema de entrega se
configurara de tal forma que permita entregar u
nicamente la memoria del proyecto. Dicha
memoria practica se podra entregar hasta el 17 de Abril a las 18:00 en formato electronico.
La planificacion de las correcciones automaticas se realizara seg
un el calendario que se
especifica a continuacion:
Se realizaran tres correcciones los das 13, 25 de Marzo y el 7 de Abril. Para solicitar
una correccion basta con realizar correctamente la entrega del proyecto.
Desde el 16 al 24 de Marzo, el 26 y 27 de Marzo y desde el 8 al 14 de Abril se realizaran
correcciones de proyectos todos los das habiles a las 21:00. De estas correcciones, el
alumno podra disponer de tres correcciones (en las fechas que el alumno estime conveniente). Para solicitar una correccion basta con realizar correctamente la entrega del
proyecto.
82
Santiago
Rodrguez
D. 4107
Antonio
P
erez
D. 4108
Dir. Email
Lunes
Martes
Miercoles
Jueves
srodri@fi.upm.es
1113
1113
1617
1617
1517
11:30
13:30
1517
aperez@fi.upm.es
Viernes
ENTREGA DE LA PRACTICA
La entrega se compone de:
1. Una memoria, en formato DINA4, en la que deberan figurar claramente el nombre y
apellidos de los autores de la practica. Dicha memoria debera contener los siguientes
puntos:
Diagrama de flujo o pseudocodigo y comentario de los algoritmos utilizados.
Listado comentado de las subrutinas en ensamblador.
83
Descripcion del juego de ensayo (conjunto de casos de prueba) que el alumno haya
dise
nado y utilizado para probar el correcto funcionamiento de la practica.
Observaciones finales y comentarios personales de esta practica, estimando asimismo el tiempo empleado en su realizacion.
Esta memoria se entregar
a exclusivamente en formato electronico seg
un se indica en el
siguiente apartado.
2. La entrega de los ficheros que contienen la practica. Sera obligatorio entregar los siguientes ficheros:
autores: Es un fichero ASCII que debera contener los apellidos, nombre, n
umero
de matrcula y DNI de los autores de la practica. La practica se realizara individualmente o en grupos de dos personas. Cada lnea de este fichero contendr
a los
datos de uno de los autores de la practica, de acuerdo al siguiente formato:
No Matrcula; DNI; apellido apellido, nombre; dir. correo electr
onico
El n
umero de matrcula que se debe indicar en el fichero es el que asigna la
secretara de la Facultad (por ejemplo 990999) y no el que se utiliza como
identificador para abrir cuentas en el Centro de Calculo (por ejemplo a990999).
Este fichero solo se entrega cuando se registra el grupo.
es int.s: Contendr
a las subrutinas que componen la parte segunda de la practica.
Ademas, este fichero debera incluir un programa principal que se haya utilizado
para la depuracion de la practica. Este programa principal se utilizara para indagar
sobre posibles errores que se puedan producir.
memoria.pdf: Es un fichero PDF que debera contener la memoria de la practica.
84
85
MANDAR FICHEROS
Esta opcion permite mandar los ficheros de una practica, que deberan estar en el directorio
de trabajo del usuario. Si el comando se ejecuta correctamente se mostraran los siguientes
mensajes:
MANDANDO EL FICHERO es int.s ...OK.
Si alguno de los ficheros no se encuentra, el programa lo comunicar
a al usuario. Por
ejemplo:
MANDANDO EL FICHERO es int.s ...
No se puede abrir el fichero es int.s
Entrega abortada.
El servidor de entregas intenta asegurar que cada uno de los ficheros tiene el formato
correcto. En nuestro caso esto se traduce en que el fichero se va a poder ensamblar cuando se
realice la correccion. Si el comando de ensamblado no ha finalizado con exito se mostrara un
mensaje:
EL FICHERO es int.s NO TIENE EL FORMATO CORRECTO
ENTREGA NO REALIZADA
En este caso el alumno debera comprobar que se puede ensamblar correctamente el fichero
y comprobar que contiene todas y cada una de las etiquetas que es obligatorio que aparezcan
en dicho fichero.
En el caso de que se genere un error en la entrega de los ficheros, el programa de entrega
termina la ejecucion del programa y se muestra el promptdel sistema operativo. Si se desea
realizar una nueva entrega se volver
a a teclear el comando.
La realizacion de una entrega anula todas las entregas anteriores pendientes de
correccion. Si dicha entrega es err
onea, tambien se anula esta entrega.
CANCELAR ENTREGAS
Esta opcion permite cancelar todas las entregas realizadas desde la u
ltima correccion. El
grupo de practicas sera eliminado de la lista de proyectos pendientes de corregir. Si se han
realizado varias entregas se cancelaran todas las entregas.
CONSULTAR RESULTADOS
Esta opcion permite consultar los resultados de la correccion de la entrega de una proyecto.
El programa pide el nombre de fichero en el que se copiaran los resultados de la ejecucion del
conjunto de tests de pruebas que componen el corrector. El programa pedira un nombre de
fichero donde escribir los datos generados. Se mostrara el siguiente mensaje:
La salida ser
a redirigida a un fichero.
Nombre del fichero (ENTER para salida por pantalla) ?? result.txt
86
En este caso se grabaran los resultados de las pruebas en el fichero result.txt. Si como
respuesta al mensaje se teclea ENTER, los resultados seran mostrados por pantalla. El nombre
del fichero que se proporciona al programa (result.txt) no debe existir en el disco.
Esta opcion se incluye para permitir la correccion automatica de los proyectos. El alumno
no debe utilizar este programa para depurar su practica. Debe ser el propio alumno el que
construya su conjunto de pruebas que le permita comprobar que la practica funciona correctamente. Esta es la razon por la que los casos de prueba utilizados para la correccion de la
practica no se ponen a disposicion del alumnado.
BLOQUEO DE LA ENTREGA
Si el usuario se compromete a no entregar mas veces el proyecto, puede bloquear la entrega
para mayor seguridad. Si se ejecuta esta opcion no se podra volver a realizar una nueva
entrega de los ficheros asociados a la practica. Si el comando se ejecuta satisfactoriamente se
mostrara el mensaje:
ENTREGA BLOQUEADA.
AYUDA
Esta opcion mostrara en pantalla una breve descripcion de cada una de las opciones del
programa de entrega. No significa que se vaya a proporcionar ayuda para la realizacion de la
practica.
NOTICIAS
Esta opcion es puramente informativa. Permite notificar al alumno modificaciones en la
especificacion de la practica o, en general, noticias de interes de la asignatura asociada a la
practica. El programa pide el nombre de fichero en el que se copiaran las noticias.
La salida ser
a redirigida a un fichero.
Nombre del fichero (ENTER para salida por pantalla) ?? noticias.txt
En este caso se grabara la informacion relativa a la asignatura en el fichero noticias.txt.
Si como respuesta al mensaje se teclea ENTER, la informacion sera mostrada por pantalla.
FICHERO ADICIONAL
Esta opcion recupera un fichero binario que es complementario al fichero de consultas. Es
un fichero comprimido en formato ZIP que contiene el log de las escrituras en memoria de las
pruebas que han fallado. Estas trazas permiten conocer que dato se escribe en una posicion
de memoria y desde que instruccion. Su formato se compone de tres columnas de n
umeros
hexadecimales:
Direccion de memoria que ocupa la instruccion que ha provocado la escritura. Para
identificar dicha instruccion debe acceder al fichero del programa con extension .lis.
Direccion de memoria en la que se ha escrito el dato.
87
ABANDONAR
Termina la ejecucion del programa de entrega. Si se realiza con exito se mostrara el
mensaje:
Cerrando la conexion
y a continuacion aparecera el promptdel sistema operativo.
NINGUN
PROYECTO QUE NO SE ATENNOTA: NO SE CORREGIRA
POR LO TANTO COMO NO
GA A ESTAS NORMAS Y SE CONSIDERARA
PRESENTADO.
88
Ap
endice A
Instalaci
on del entorno de la
pr
actica en un computador con
sistema operativo Linux
El entorno de la practica compuesto por el ensamblador 68kasm y el emulador bsvc, se
puede instalar en un computador personal con un sistema operativo Linux.
Ademas del sistema operativo Linux se debe tener instalado el sistema de ventanas X y
el entorno Tcl/Tk.
A.1.
Instalaci
on en Linux
A.1.1.
Obtenci
on del entorno
A.1.2.
Instalaci
on del paquete
90
Si no se notifica ning
un error, el entorno de practicas queda instalado. Los programas
ejecutables, la documentacion y los ejemplos se encuentran en /usr/local/bsvc.
Si se produce alg
un error en la instalacion o no puede ejecutar el programa siga las
indicaciones de la seccion A.2 o conectese a la Facultad y realice la practica en batman seg
un
se indica en la seccion A.3.
A.2.
Compilaci
on de bsvc en Linux
En esta seccion se describe el procedimiento para instalar el entorno a partir de los ficheros
fuente. Para compilar los fuentes se necesita el compilador de C++ gcc 2.7.2 o superior y para
ejecutarlo tcl 7.5 y tk 4.1. El procedimiento que se describe se ha verificado con la versi
on de
gcc 2.7.2.1 y se ejecuta correctamente con tcl 7.6 y tk 4.2.
A.2.1.
Obtenci
on del entorno
Siga lo indicado en la seccion A.1.1 pero, en este caso, el fichero se llama bsvc-2.1-src.tar.gz.
A.2.2.
Instalaci
on del paquete
A. Instalaci
on en Linux
91
A.3.
Conexi
on remota a batman
92
Ap
endice B
Depuraci
on de fallos que se
manifiesten como excepciones en el
procesador MC68000
Una de las funciones del sistema operativo es capturar las excepciones que se producen debido al mal funcionamiento de los programas. Cuando se desarrolla codigo para un
computador sin sistema operativo (computador desnudo) estas excepciones no se manejan
a menos que lo haga el propio programa.
Las excepciones mas frecuentes se pueden producir con un procesador de la familia M68000
cuando se desarrolla codigo para un computador desnudo son:
Bus error: se produce cuando se direcciona fuera del rango de la memoria fsica disponible.
Address error: se produce cuando se utiliza una direccion impar para acceder a una palabra
o doble palabra (error de alineamiento).
Illegal instruction: se produce cuando se intenta ejecutar un codigo de instruccion inexistente. Si el programa se ha ensamblado correctamente se suele producir cuando se
pretende ejecutar datos.
Privilege violation: se produce cuando se intenta ejecutar en modo usuario una instruccion
privilegiada.
Una buena practica consiste en instalar manejadores para estas excepciones. El programa
de la figura B.1 instala estos manejadores y genera una excepcion de error de direccion.
El manejador de instruccion ilegal se ha instalado tambien en las entradas de la tabla de
vectores (vease la figura 1.5) correspondientes a las instrucciones para los coprocesadores, ya
que el computador simulado carece de ellos.
Los manejadores se limitan a una instruccion BREAK que detiene el procesador simulado y
una instruccion NOP cuyo proposito es servir de separador. De esta forma si se produce cualquiera de las excepciones manejadas se detiene el simulador y el PC se
nalar
a a la instruccion
siguiente a BREAK del manejador correspondiente.
94
START
EVEN
$0
$8000
START
ORG
$2000
MOVE.L
MOVE.L
MOVE.L
MOVE.L
MOVE.L
MOVE.L
#BUS_ERROR,8
#ADDRESS_ER,12
#ILLEGAL_IN,16
#PRIV_VIOLT,32
#ILLEGAL_IN,40
#ILLEGAL_IN,44
Install
Install
Install
Install
Install
Install
LEA
ADDQ.L
CLR.W
EVEN,A0
#1,A0
(A0)
ORG
DS.W
$3000
1
BUS_ERROR:
BREAK
NOP
ADDRESS_ER: BREAK
NOP
ILLEGAL_IN: BREAK
NOP
PRIV_VIOLT: BREAK
NOP
B.1.
Identificaci
on la instrucci
on que provoc
o la excepci
on
En el programa anterior resulta muy facil identificar la instruccion que provoco la excepcion. Sin embargo en un programa mas complejo esto no resulta tan obvio. La solucion es
bastante facil: basta con indagar en el marco de pila que creo la secuencia de procesamiento
de la excepcion.
El formato del marco de pila para todas las excepciones excepto los errores de bus y
direccion se muestra en la figura B.2.
En este marco de pila se almacena el PC que apuntar
a a la instruccion que provoco la
excepcion. Si se tratase de una interrupcion el PC apuntara a la siguiente instruccion. El
porque de esta diferencia es clara, el procesador espera a que se complete la instruccion para
reconocer una interrupcion, sin embargo si se trata de una excepcion no se puede proceder
a la ejecucion de la instruccion. El caso mas claro es quizas el de una instruccion ilegal, es
obvio que el procesador no puede ejecutarla.
B. Depuraci
on de fallos que se manifiesten como excepciones en el procesador
MC68000
95
Status register
Program counter
SSP
+2
+4
El formato del marco de pila para las excepciones de errores de bus y direcci
on se
muestra en la figura B.3.
SSP
Additional word
Access address
+2
+4
Instruction register
+6
Status register
+8
Program counter
+10
+12
Figura B.3: Marco de pila de procesamiento de las excepciones de bus y address error
En este marco de pila se almacena mucha mas informacion para identificar claramente
cuando se produjo la excepcion. Tengase en cuenta que la ejecucion de una instruccion puede
suponer varios accesos a memoria. As se salva el PC y el SR como en el caso anterior pero
ademas el contenido del registro de instruccion, la direccion que provoco la excepcion y una
palabra adicional donde se indica, entre otras cosas, si el ciclo de bus era de lectura o escritura.
Desafortunadamente, el simulador falla y el campo correspondiente a la direccion que provoco la excepcion siempre esta a cero. En cualquier caso, la informacion restante es suficiente
para identificar el problema.
B.2.
Ejemplo
96
B. Depuraci
on de fallos que se manifiesten como excepciones en el procesador
MC68000
97
Figura B.6: Contenido del marco de pila para la excepcion Address Error
determinar que esa direccion es 3001 pero en otros casos con un modo de direccionamiento
m
as complejo se necesitara trabajo extra.