Anda di halaman 1dari 50

PROGRAMACIN DE UN

Captulo 2 MICROPROCESADOR

PROGRAMACIN DEL Modelo de programacin


Tipos de datos
MICROPROCESADOR 68000 Recursos de la CPU: registros de usuario y
registros especiales
Tamaos de los buses
Descripcin funcional Modelo de organizacin de la memoria
Modelo de programacin Sintaxis del ensamblador
Organizacin de los datos en memoria Cmo escribir un programa: comentarios,
Modos de ejecucin etiquetas, etc.

Directivas del ensamblador Directivas del ensamblador


Palabras reservadas que forman parte de
Modos de direccionamiento un programa y que no son instrucciones
Juego de instrucciones Modos de direccionamiento
Conceptos bsicos Modos de expresar la direccin efectiva de
Subrutinas los operandos de una instruccin
Interrupciones Juego de instrucciones
La pila o stack Conjunto de operaciones que puede
Temporizacin de instrucciones realizar una CPU

SEDG-2/DIE 1 SEDG-2/DIE 2
MODELO DE REGISTROS Y BUSES DE LA
PROGRAMACIN DEL 68000 CPU 68000
Recursos de la CPU manejables Bus interno de 32 bits
desde instrucciones: Registros de usuario (datos y direcciones)
(8) registros de datos Di de 32 bits de 32 bits
(9) registros de direccin Ai de 32 bits Registro de instruccin, IR (32 bits)
(1) registro contador de programa de 32 bits Contador de programa, PC (32 bits)
(1) registro de estado de 16 bits Registro de estado, SR (16 bits)
Fig. AGG-4.1 Unidad aritmtico-lgica, ALU (32 bits)
Bus de datos de 16 bits
Paso entre 16 y 32 bits a travs de buffer
68020 y 68030: bus de 32 bits
Bus de direcciones de 24 bits
Se presentan a travs de latches de salida
16 MBytes ($000000 a $FFFFFF)
68020 y 68030: bus de 32 bits (4 GBytes)
Bus de control
Reloj
8-20 MHz

SEDG-2/DIE 3 SEDG-2/DIE 4
EXTENSIN DE BIT DE
REGISTROS DE USUARIO
SIGNO
Registros de datos D0-D7 Objetivos:
Registros funcionalmente idnticos Aritmtica de direcciones que permita
Tipos de datos: desplazamientos negativos en memoria
BYTE: 8 bits (extensin .B) (en complemento a 2)
WORD: 16 bits (extensin .W) Transparente al programador
LONG: 32 bits (extensin .L) Ejemplos: D1 A0
Los datos se alinean con el LSB Caso positivo ($5 = 0101)
Los bits de mayor peso no involucrados
(BYTE, WORD) quedan inalterados
D1: 4EF 1 5A8 F
(32) (16)
Registros de direcciones A0-A7
Registros funcionalmente idnticos excepto A0: 4 E F 1 5 A 8 F 0 0 0 0 5A8 F
el A7 (Stack Pointer) que son dos, para los
modos usuario y supervisor (USP,SSP)
Caso negativo ($D = 1101)
Funcionamiento en modo LONG (32 bits),
aunque tambin en modo WORD (16 bits,
para memoria de 64 KBytes) D1: 3A1 8D5 F 6
Los datos se alinean con el LSB
(32) (16)
El modo WORD provoca la extensin de
signo de los 16 bits de mayor peso A0: 3 A 1 8 D 5 F 6 FFFFD5 F 6

SEDG-2/DIE 5 SEDG-2/DIE 6
EL REGISTRO DE CDIGOS
REGISTROS ESPECIALES
DE CONDICIN (CCR)
El contador de programa, PC Bit de acarreo, C
El registro de estado, SR Cambia con operaciones aritmticas (sin
signo), rotaciones y desplazamientos
Palabra de estado del procesador, PSW
Byte del sistema (modo supervisor) Lo ponen a 0: multiplicaciones, divisiones,
operaciones lgicas, CMP, MOVE y SWAP
Registro de cdigos de condicin, CCR
Byte de usuario (modo usuario) Bit de desbordamiento, V
Bit = Flag = Bandera Aritmtica con signo (Complemento a 2)
Cualquier bit es modificable mediante las Bit de cero, Z
instrucciones adecuadas Se pone a 1 si el resultado ha sido 0
Algunos bits no estn definidos
Bit de signo, N
Aritmtica con signo (Ca2: 0=pos, 1=neg)
Fig. AGG-4.2 Bit de extensin, X
Aritmtica sin signo (precisin mltiple)
Igual al bit C tras operaciones aritmticas y
desplazamientos
No lo afectan: multiplicaciones, divisiones,
operaciones lgicas, CMP, MOVE y SWAP
Evita verificar el valor de acarreo tras cada
operacin (pues C puede ser modificado)

SEDG-2/DIE 7 SEDG-2/DIE 8
ORGANIZACIN DE DATOS MODOS DE EJECUCIN EN
EN MEMORIA EL 68000
Mapa de memoria: libertad para Modo usuario
definir zonas de datos y programa Programas a nivel de aplicaciones
Proteccin: no se pueden escribir datos en Su puntero a pila (registro A7) es el USP
posiciones relativas al PC Para pasar a modo supervisor se debe
Almacenamiento de datos producir una excepcin
Fig. SMMO-2.3 Modo supervisor
Programas a nivel de sistema operativo
Su puntero a pila (registro A7) es el SSP
Maneja instrucciones adicionales
(privilegiadas)

Instrucciones privilegiadas:
Retorno de excepcin (RTE)
Activacin de lnea de reset para
inicializacin (RESET)
Parada del procesador (STOP)
Acceso a todo el registro de estado, SR

SEDG-2/DIE 9 SEDG-2/DIE 10
USO DEL SIMULADOR ORGANIZACIN DEL
SOBRE PC SIMULADOR

Editor ASCII
EJECUCIN MEMORIA REGISTROS

Fichero fuente *.ASM Ejecutar Ensamblador Ver


Paso/Paso -Desensamb Modificar
P. Ruptura -Ensamblar
- Ensambla el fichero -Aadir -Modificar
ENS68K fuente *.ASM -Eliminar Modificar
-Selecc. Ver
Fichero objeto *.OBJ -Restaurar Llenar
-Ver Buscar
Traza Substituir
- Linka (monta enlaces) el Opciones Copiar
LNK68K fichero objeto*.OBJ Mover
Borrar

Fichero ejecutable *.S28


PORTS BLOQUES SISTEMA CMARA
Ejecucin Aadir Aadir Leer Ver
Eliminar Mover Escribir Capturar
Inicial Eliminar Directorio
- Requisitos: PC con S.O.
SIM68K Ver Salvar Shell
MS-DOS, 32K de RAM
Ventana Leer
- No simula EXCEPCIONES,
Ver
VIA, DUART, ...

SEDG-2/DIE 11 SEDG-2/DIE 12
SINTAXIS DEL
ETIQUETAS
ENSAMBLADOR DEL 68000
Instruccin Etiqueta:
Opcode: Cdigo de instruccin (3, 4 5 Nombre simblico de la direccin en
letras maysculas o minsculas) que memoria de la instruccin que le sigue
corresponde a 1 o ms bytes en cdigo Formas de inclusin en el programa
mquina
a) En la misma lnea que la instruccin,
Operandos: De 0 a 4 operandos separados
pegada al margen izquierdo
por comas (,)
b) En la lnea anterior a la de la instruccin
OPCODE OP0,OP1,OP2,OP3 b.1) Pegada al margen izquierdo
b.2) Con espacio a la izquierda y seguida de :
Programa Ejemplos:
Instrucciones SUMA ADD.L D1,D2
Una por lnea separada del margen SUMA
izquierdo por, al menos, un espacio espacio ADD.L D1,D2
SUMA:
Comentarios
ADD.L D1,D2
El ensamblador los ignora
Se inician con * ;
Caracteres permitidos
Constantes Slo los 15 primeros son significativos
Datos fijos usados por el programa Todos los cdigos ASCII > 33 excepto:
Tratarlos como si fuesen etiquetas +, -, *, /, &, !, |, ^, >, <, (, )
Etiquetas El primer carcter no puede ser ni un
nmero, ni $ (hexadec), ni % (binario)
Directivas del ensamblador

SEDG-2/DIE 13 SEDG-2/DIE 14
DIRECTIVAS DEL
DIRECTIVAS
ENSAMBLADOR ENS68K (1)
Directivas: ABSOLUTE
Mecanismo que informa al ensamblador de Es el modo por defecto
distintos aspectos del programa Las referencias a posiciones de memoria
Se procesan antes de la ejecucin (datos, saltos, etc.) son absolutas
A nivel de sintaxis se pueden tratar como Excepto en instrucciones con un modo de
cdigos mnemnicos de instrucciones direccionamiento relativo al PC
Separadas del margen izquierdo al menos un Todas las etiquetas son absolutas
espacio (si no seran etiquetas) Debe aparecer al principio del programa
Aplicaciones: Precisa cuidado en programacin modular
Asignar valores a etiquetas El cdigo slo es ejecutable en la posicin
Definir e inicializar datos para las que se ensambl (no reubicable)
Reservar memoria para variables RELATIVE
Indicar que hay referencias externas Las referencias a posiciones de memoria
Variables usadas en un fichero pero que se son relativas al PC
definen en otro Todas las etiquetas son relativas
Control del ensamblado (absoluto o relativo) Excepto las definidas con la directiva EQU
Control de listados de salida Debe aparecer al principio del programa
Definicin de macros No pueden modificarse posiciones de
Ensamblado condicional memoria relativas al PC (p.e. Etiquetas)
etc. MOVE #100,ETIQUETA LEA ETIQUETA,A0
error! MOVE #100,(A0)

SEDG-2/DIE 15 SEDG-2/DIE 16
DIRECTIVAS DEL DIRECTIVAS DEL
ENSAMBLADOR ENS68K (2) ENSAMBLADOR ENS68K (3)
ORIGIN expresin (ORG) etiqueta EQU expresin (EQUAL)
Posicin de memoria en la que situar el Asigna el valor de la expresin a etiqueta
cdigo que sigue La etiqueta ser absoluta
Modo absoluto: expresin = direccin Hace que el programa sea ms fcil de
Puede aparecer en cualquier punto del leer (si se usan etiquetas apropiadas) y de
programa modificar
En otros ensambladores (no en el ENS68K) Ejemplos: VALOR EQU 10
se puede especificar ms de un origen para
A EQU (25*2)/VALOR
separar mdulos
B EQU (VALOR+A)*5
Modo relativo: expresin = desplazamiento
respecto al valor del PC etiqueta HIGH expresin
Slo puede aparecer una vez; debe ser al Asigna el valor del WORD superior de la
principio del programa expresin a etiqueta
END Ejemplo:
Final del programa (se ignora lo que sigue) ETQ1 HIGH $AAAABBBB * ETQ1=$AAAA
Es una directiva obligatoria
SECTION etiqueta LOW expresin
Pone a 0 el PC (como ORG $000000) Asigna el valor del WORD superior de la
No disponible en el ENS68K expresin a etiqueta
Ejemplo:
ETQ2 LOW $AAAABBBB * ETQ2=$BBBB

SEDG-2/DIE 17 SEDG-2/DIE 18
DIRECTIVAS DEL DIRECTIVAS DEL
ENSAMBLADOR ENS68K (4) ENSAMBLADOR ENS68K (5)
DS.B expresin EXTERNAL lista (EXTERN)
DS.W expresin Define como externas (definidas en otros
mdulos) las etiquetas de la lista
DS.L expresin
As, el mdulo puede referenciar etiquetas
Reserva posiciones consecutivas en memoria no definidas en l
para el nmero de BYTE, WORD LONG
Se reservan 32 bits para cada etiqueta
indicado por la expresin (rellenas con 0)
Es una directiva para el LNK68K
Con WORD y LONG la direccin es par
DC.B expresin (DB, BYTE) GLOBAL lista (PUBLIC)
Indica que las etiquetas en la lista (definidas
DC.W expresin (DW, WORD) en este mdulo) se referencian en otros
DC.L expresin (DL, LONG) mdulos
Reserva un BYTE, WORD LONG en la Es una directiva para el LNK68K
posicin actual del PC y lo rellena con el TITLE cadena (TTL)
valor de la expresin
Ttulo cadena en los listados por impresora
Puede aadirse una etiqueta
PAGE (EJECT)
Ejemplos: ETQ1 DW $1234
Salto de pgina en listados por impresora
DC.L $12345678
ETQ2 DC.B 20
ETQ3 BYTE 4+ETQ2
DB valor,$C7,%11011
WORD 1224,$5678

SEDG-2/DIE 19 SEDG-2/DIE 20
OPERACIONES EN EL 68000 MODOS DE
(EXPRESIONES) DIRECCIONAMIENTO
Valores numricos Instruccin:
prefijo $: hexadecimal
OPCODE OP1,OP2
sin prefijo: decimal
prefijo %: binario
Cdigo de Direccin del Direccin del
instruccin operando fuente operando destino
Operaciones (orden de precedencia)
| or lgico Modos de direccionamiento
^ or exclusivo Maneras de especificar la direccin efectiva
(EA) de cada operando
& and lgico
Facilitan la realizacin de programas o
+ suma
aceleran su ejecucin
- resta
Accesos a estructuras de datos (tablas,
* multiplicacin arrays, vectores, etc.)
/ divisin Expanden cada cdigo de operacin en
> desplazamiento lgico a derecha varios cdigos de operacin efectivos
< desplazamiento lgico a izquierda El modo de direccionamiento influye en:
+,- cambio de signo Nmero de bytes que ocupa la instruccin
! negacin Nmero de ciclos requeridos para ejecutarla
() parntesis (uso ilimitado) En el 68000 hay 6 modos bsicos que dan
lugar a 14 modos al desarrollarse

SEDG-2/DIE 21 SEDG-2/DIE 22
MODOS DE
NOTACIN RTL (Register
DIRECCIONAMIENTO DEL
Transfer Language)
68000
Smbolos utilizados para describir la
Tab. AGG-4.1
manipulacin de informacin
SIMBOLO SIGNIFICADO

M - Posicin M de la memoria
[M] - Contenido de la posicin M
ea - Direccin efectiva
[M(EA)] - Contenido de la direccin EA
Ri(0:15) - Bits 0 al 15 del registro Ri
<-- - Transferencia de informacin
Ai - Registro de direccin i (i=0-7)
Di - Registro de datos i (i=0-7)
Xi - Registro i (direccin o datos)
< > - Indican un parmetro necesario
d8 - Offset de 8 bits (-128 a 127)
d16 - Offset de 16 bits (-32K a 32K)
d32 - Offset de 32 bits (-2G a 2G)

Base de los nmeros (prefijos)


Nmero binario: prefijo %
Nmero decimal: sin prefijo
Nmero hexadecimal: prefijo $

SEDG-2/DIE 23 SEDG-2/DIE 24
MODO IMPLCITO O MODO INMEDIATO O
INHERENTE LITERAL
Descripcin: Descripcin:
La operacin accede a un registro de la El operando (en vez de su direccin) est
CPU: SR, USP, SSP, PC, CCR incluido en la instruccin (usa 2 4 bytes)
Se genera un cdigo de operacin que se Precedido por el smbolo # (I en opcode)
refiere implcitamente a ese registro Ejemplos:
Ejemplo: MOVE $17122,CCR
MOVE.W #$8123,D3 [D3(0:15)] <-- $8123
Fig. AGG-4.4 MOVE.L #$8123,D3 [D3(0:31)] <-- $8123
ANDI.B #$9A,D5 con [D5] = $000000E7

Fig. AGG-4.5

El ENS68K genera el cdigo 44F9: llevar al


CCR el contenido de la posicin FUENTE Cdigo de la operacin: 0205
Tamao de la instruccin: 6 bytes Tamao de la instruccin: 4 bytes

SEDG-2/DIE 25 SEDG-2/DIE 26
MODO ABSOLUTO (LARGO)
MODO INMEDIATO RPIDO
O DIRECTO
Descripcin: Descripcin:
El dato se incluye en el cdigo de La instruccin incluye la direccin absoluta
operacin generado (como en implcito) del operando (interviene la memoria)
Dato de 1 a 8 en sumas y restas 68000: Slo se usan 24 bits de direccin
Dato entre -128 y 127 para movimientos
Ejemplos:
Precedido por el smbolo # (Q en opcode) MOVE.L D3,$1234 [M($1234)] <-- [D3(16:31)]
Ejemplo: ADDQ.W #6,A0 [M($1236)] <-- [D3(0:15)]
MOVE.W $1234,D3 [D3(0:15)] <-- [M($1234)]
Fig. AGG-4.6 MULS $25022,D2

Fig. AGG-4.7

Cdigo: 5C48 (sumar 6 a A0) Cdigo: C5F9 (multiplicar con destino D2)
Tamao de la instruccin: 2 bytes Tamao: 6 bytes

SEDG-2/DIE 27 SEDG-2/DIE 28
MODO DIRECTO A
MODO ABSOLUTO CORTO
REGISTRO
Descripcin: Descripcin:
La instruccin incluye la direccin absoluta Los operandos son los contenidos de los
del operando en 16 bits. Extensin de signo: registros (datos y direcciones) de la CPU
Entre $0000 y $7FFF: 32 Kbytes ms bajos Ejemplos:
Entre $8000 y $FFFF: Se suma $FF0000 y se MOVE.L D0,D3 [D3] <-- [D0]
accede a los 32 Kbytes ms altos del mapa MOVE.W D0,D3 [D3(0:15)] <-- [D0(0:15)]
El ensamblador decide si es largo o corto MOVE.B D0,D3 [D3(0:7)] <-- [D0(0:7)]
MOVE.L A1,D0 [D0] <-- [A1]
Ejemplo: EORI.B #$FF,$8000
ADD.L D1,D2 [D2] <-- [D2]+[D1]
Fig. AGG-4.8 ADD.L #12,D2 [D2] <-- [D2]+12
EXT.L D3 (extensin de signo)
FF8000

Fig. AGG-4.9

Cdigo: 0A38 (funcin OR-EXCLUSIVO) Cdigo: 48C4 (extensin de D3). Tamao: 2


Tamao: 6 bytes El contenido de D3 se considera WORD

SEDG-2/DIE 29 SEDG-2/DIE 30
MODO INDIRECTO CON
MODO INDIRECTO
POSTINCREMENTO
Descripcin: Descripcin:
La direccin del operando (EA) est en un El registro de direcciones se incrementa tras
registro de direccin (entre parntesis) la obtencin del operando (smbolo (Ai)+)
Ejemplos: Incrementos: 1(.B), 2(.W) 4(.L) excepto A7

MOVE.L (A0),D3 [D3] <-- [M([A0])] Ejemplos:


MOVE.W D4,(A6) [M([A6])] <-- [D4(0:15)] MOVE.L (A0)+,D3 [D3] <-- [M([A0])]
ASL.W (A3) (desplazamiento [A0] <-- [A0]+4
aritmtico a la izda.) MOVE.B (A7)+,D4 [D4(0:7)] <-- [M([A7])]
[A7] <-- [A7]+2
Fig. AGG-4.11 CMPM (A0)+,(A4)+ (comparar memoria)

Fig. AGG-4.12

Comparacin: destino - fuente -> Z, N, V, C


SEDG-2/DIE 31 SEDG-2/DIE 32
MODO INDIRECTO CON MODO INDIRECTO CON
PREDECREMENTO DESPLAZAMIENTO
Descripcin: Descripcin: EA = [Ai] + d16
El registro de direcciones se decrementa La direccin del operando (EA) es el
antes de obtener el operando (smbolo -(Ai)) contenido de un registro de direcciones ms
Decrementos: 1(.B), 2(.W) 4(.L) excepto A7 un desplazamiento (smbolo dsp(Ai))
Desplazamiento: 16 bits (d16)
Ejemplos:
MOVE.L -(A0),D3 [A0] <-- [A0]-4
Ejemplos:
[D3] <-- [M([A0])] MOVE.L 9(A1),D3 [D3] <-- [M(9+[A1])]
MOVE.W -(A7),D4 [A7] <-- [A7]-2 MOVE.W -$4(A1),D0 [D0] <-- [M(-4+[A1])]
[D4(0:15)] <-- [M([A7])] CHK $24(A4),D3 (verificar registro
OR.B D3,-(A0) (funcin OR) frente a dato)

Fig. AGG-4.13 Fig. AGG-4.14

SEDG-2/DIE 33 SEDG-2/DIE 34
MODO INDIRECTO CON MODO RELATIVO AL PC
INDICE Y DESPLAZAMIENTO CON DESPLAZAMIENTO
Descripcin: EA = [Ai] + [Xj] + d8 Descripcin: EA = [PC] + d16
La direccin del operando (EA) es el La direccin del operando (EA) es el
contenido de un registro de direcciones ms contenido del contador de programa (PC)
el contenido de un registro (ndice) ms un ms un desplazamiento (smbolo dsp(PC))
desplazamiento (smbolo dsp(Ai,Xj)) Desplaz.: 16 bits (d16) codificado como d16-2
ndice: 16 (Xj Xj.W) 32 (Xj.L) bits Slo aplicable al operando fuente
Desplazamiento: 8 bits (d8)
Ejemplos:
Ejemplos: MOVE.B 9(PC),D2 [D2(0:7)] <-- [M(9+[PC])]
MOVE.L 9(A1,D0.W),D3 LEA $200(PC),A4 (cargar direccin efect.)
[D3] <-- [M(9+[A1]+[D0(0:15)])]
DIVU 8(A4,D7),D5 (divisin sin signo) Fig. AGG-4.16
Fig. AGG-4.15

SEDG-2/DIE 35 SEDG-2/DIE 36
MODO RELATIVO (PC) CON
INSTRUCCIONES
NDICE Y DESPLAZAMIENTO
Descripcin: EA = [PC] + [Xi] + d8 Aspectos relevantes
La direccin del operando (EA) es el Tamao del operando: 8, 16 32 bits
contenido del contador de programa (PC) Modos de direccionamiento permitidos de
ms el contenido de un registro (ndice) ms los operandos fuente y destino
un desplazamiento (smbolo dsp(PC,Xi))
Desplaz.: 8 bits (d8) codificado como d8-2
Slo aplicable al operando fuente Nomenclatura (en las tablas)
Ejemplos:
MOVE.B 9(PC,D1),D2 D Registro de datos
[D2(0:7)] <-- [M(9+[PC]+[D1])] A Registro de direccin
MOVE $B(PC,D1),D5 Rs Lista de registros D y/o A
Fig. AGG-4.17 -() Indirecto con predecremento
()+ Indirecto con postincremento
(EA) Varios modos de direccionamiento
#n Valor inmediato
* Flag afectado por la operacin
- Flag no afectado
1, 0 Valor incondicional del flag
U Accin sobre el flag no definida

SEDG-2/DIE 37 SEDG-2/DIE 38
JUEGO DE INSTRUCCIONES JUEGO DE INSTRUCCIONES
DEL 68000 (1) DEL 68000 (2)
Tab. AGG-4.2 Tab. AGG-4.3
Tab. AGG-4.6

SEDG-2/DIE 39 SEDG-2/DIE 40
JUEGO DE INSTRUCCIONES JUEGO DE INSTRUCCIONES
DEL 68000 (3) DEL 68000 (4)
Tab. AGG-4.7 Tab. AGG-4.8

SEDG-2/DIE 41 SEDG-2/DIE 42
JUEGO DE INSTRUCCIONES
MOVIMIENTO DE DATOS (1)
DEL 68000 (5)
Tab. AGG-4.11 MOVE f,d
Operandos de 8, 16 y 32 bits
Modos de direccionamiento independientes
en f y d
f: admite todos
d: admite todos excepto directo a Ai y
relativo al PC (para no modificar la memoria
del programa)
Ejemplos:
MOVE.B #4,D1
31 24 23 16 15 8 7 0

XXXXXXXX XXXXXXXX XXXXXXXX 00000100 D1

MOVE.W #4,D1
31 24 23 16 15 8 7 0

XXXXXXXX XXXXXXXX 00000000 00000100 D1

MOVE.L #4,D1
31 24 23 16 15 8 7 0

00000000 00000000 00000000 00000100 D1

SEDG-2/DIE 43 SEDG-2/DIE 44
MOVIMIENTO DE DATOS (2) MOVIMIENTO DE DATOS (3)

MOVE f,d (cont.) MOVE f,d (cont.)


Ejemplos: Manejo de la pila: Llevar a la pila (PUSH)
MOVE.B $2000,$2500 Fig. AGG-4.19
15 8 7 0 15 8 7 0

$2000 00000001 $2500 00000001


$2002 $2502

MOVE.W D1,$3000
31 24 23 16 15 8 7 0

XXXXXXXX XXXXXXXX 00000000 00001111 D1

15 8 7 0

Manejo de la pila: Cargar de la pila (POP)


$3000 00000000 00001111
Fig. AGG-4.20
$3002
MOVE.L D2,D7
31 24 23 16 15 8 7 0

00000000 11000000 00000000 10000001 D2

31 24 23 16 15 8 7 0

00000000 11000000 00000000 10000001 D7

SEDG-2/DIE 45 SEDG-2/DIE 46
MOVIMIENTO DE DATOS (4) MOVIMIENTO DE DATOS (5)

MOVEA f,d MOVEQ f,d


f es una direccin y d es un Ai Para movimientos rpidos de datos
Operandos de 16 y 32 bits (direccin) Operando fuente de 8 bits (parte del opcode)
Modos de direccionamiento independientes Modos de direccionamiento
en f (admite todos) y d (directo a registro Ai) f: inmediato de 8 bits, #n
Ejemplo: Extensin de signo: permite d: directo a registro de datos, Di
desplazamientos negativos en Ca2 El dato en Di pasa a ser de 32 bits por
MOVEA.W D1,A3 extensin de signo
A) Ejemplo: MOVEQ #-3,D1
31 24 23 16 15 8 7 0
31 24 23 16 15 8 7 0
XXXXXXXX XXXXXXXX 00000000 00001111 D1 11111111 11111111 11111111 11111011 D1

31 24 23 16 15 8 7 0

00000000 00000000 00000000 00001111 A3 MOVEM


Movimiento mltiple desde/a posiciones o
B)
registros consecutivos (D0,..., D7, A0,..., A7)
31 24 23 16 15 8 7 0
Modos de direccionamiento:
XXXXXXXX XXXXXXXX 10000000 00001111 D1
(EA) a Rs (tamao palabra, extensin signo)
Rs a (EA)
31 24 23 16 15 8 7 0
Ejemplo: MOVEM $1000,D0-D2/A0-A2/D7
11111111 11111111 10000000 00001111 A3 MOVEM $1000,A0-A2/D7/D0-D2

SEDG-2/DIE 47 SEDG-2/DIE 48
MOVIMIENTO DE DATOS (6) MOVIMIENTO DE DATOS (7)

MOVEP f,d LEA f,d


Movimiento de datos a un perifrico Carga direccin efectiva de f en d (slo para
Entre registro de datos y registros de 8 bits operandos de 32 bits)
en posiciones consecutivas pares o impares Permite aplicar modos de direccionamiento
Modos de direccionamiento: avanzados
f, d: a registro, indirecto con desplazamiento Modos indirectos para acceder a arrays
evitando repetir el clculo de la direccin
f, d: indirecto con desplazamiento, a registro
Programacin independiente de la posicin
Ejemplos: Suponiendo que [A1] = $2500
Modos de direccionamiento:
MOVEP.L D1,2(A1)
f: todos menos directo a Xi, indirectos con
31 24 23 16 15 8 7 0
predecremento o postincremento e inmediatos
00000000 00100010 00110011 10001000 D1 d: directo a registro de direcciones Ai
15 8 7 0
PEA f
$2500 $2501
Carga direccin efectiva de f en la pila
$2502 00000000 $2503
00100010
modificando el valor del puntero de pila (SP)
00110011 Equivale a: LEA <EA>,Ai
MOVE.L Ai,-(A7)
10001000

MOVEP.W D1,3(A1) Sirve para poner la direccin de un operando


15 8 7 0
en la pila antes de llamar a una subrutina
$2500 $2501
Modos de direccionamiento:
$2502 00110011 $2503
10001000 f: todos menos directo a Xi, indirectos con
predecremento o postincremento e inmediatos

SEDG-2/DIE 49 SEDG-2/DIE 50
MOVIMIENTO DE DATOS (8) MOVIMIENTO DE DATOS (9)

Ejemplo de LEA-PEA
LINK Ai,#-m
P1 DS.W 1 ; Parmetro P1 Enlaza memoria con la pila reservando m
... bytes (m: 16 bits sin signo -> 32Kbytes)
PEA P1 ; Direccin de P1 en pila Salva [Ai] en la pila (decrementa el SP)
BSR ZZ ; Llama a subrutina Salva en Ai la base de la memoria reservada:
LEA 4(A7),A7 ; Elimina de pila acceso con modo indirecto y desplazamiento
... d(Ai) o desplazamiento e ndice d(Ai,Xj)
ZZ LEA 4(A7),A0 ; Direccin de P1 en A0
Decrementa el SP en m posiciones
MOVEA.L (A0),A0 ; Leer direccin de P1
MOVE.W (A0),D0 ; Leer el valor de P1 Ejemplo: LINK An,#-8
Fig. AGG-4.21
$2000 $732F
(P1)

$3FFB $3FFB 0000


$3FFD $3FFD 2000
$4000 $4000 A0 $3FFB
(PILA)

A7 $4000 A7 $3FFB A0 $2000 ULNK Ai


Restaura la situacin antes del LINK:
D0 $732F Recupera el anterior SP de [Ai]
Recupera el anterior [Ai] de la pila (cambia SP)

SEDG-2/DIE 51 SEDG-2/DIE 52
MOVIMIENTO DE DATOS (10) MANIPULACIN DE BITS
Caractersticas (opcode b,d):
EXG f,d Datos de 8 bits en memoria y de 32 bits en Di
Intercambia el contenido de dos registros de b: Nmero de bit. Modo directo a Di o inmediato
datos o de direccin
d: Destino. Todos los modos menos directo a Ai
Modos (ambos iguales): directo a Di o Ai y relativo al PC (excepto en BTST)
Ejemplo: EXG A0,A1 El valor inicial de b afecta a Z (CCR)
Z se pone a 1 si el bit nmero b es 0
A0 $003FF902 A0 $00200000
BTST b,d
Comprueba el estado del bit b del destino d
A1 $00200000 A1 $003FF902
BCLR b,d
Pone a 0 el bit b del destino d
SWAP Di BSET b,d
Intercambia las palabras alta y baja del
Pone a 1 el bit b del destino d
contenido de un registro de datos
Ejemplo: SWAP D0 BCHG b,d
Complementa el bit b del destino d
D0 $003FF902 D0 $F902003F Ejemplos:
Tab. AGG-pg.182

SEDG-2/DIE 53 SEDG-2/DIE 54
OPERACIONES LGICAS (1) OPERACIONES LGICAS (2)
Caractersticas: OR f,d y ORI f,d
Datos de 8, 16 o 32 bits Funcin OR con modos de direccionamiento:
Bits del CCR: f: todos menos directo a Ai (ORI: inmediato)
Ponen C y V a 0, y Z a 1 si el resultado es nulo d: todos menos directo a Ai y relativos al PC
N reproduce el bit de mayor peso Un operando debe ser Di
NOT d Ejemplo: OR.B D1,$201
31 24 23 16 15 8 7 0
Funcin complementario con cualquier modo
XXXXXXXX XXXXXXXX XXXXXXXX 11010011 D1
Ejemplo: NOT.B $201
15 8 7 0 15 8 7 0
Complementa los bits del byte $201
AND f,d y ANDI f,d 01110110 11110111
$200 $201 $200 $201
Funcin AND con modos de direccionamiento:
f: todos menos directo a Ai (ANDI: inmediato)
d: todos menos relativos al PC (y a Ai en ANDI) EOR f,d y EORI f,d
Un operando debe ser Di Funcin OR-EXCLUSIVO con modos
Ejemplo: AND.B D1,$201 f: directo a Di (EORI: inmediato)
31 24 23 16 15 8 7 0 d: todos menos directo a Ai y relativos al PC
XXXXXXXX XXXXXXXX XXXXXXXX 11010011 D1 Ejemplo: EORI.B #$D3,$201
15 8 7 0 15 8 7 0 15 8 7 0 15 8 7 0

$200 01110110 $201 $200 01010010 $201 $200 01110110 $201 $200 10100101 $201

SEDG-2/DIE 55 SEDG-2/DIE 56
DESPLAZAMIENTOS Y DESPLAZAMIENTOS
ROTACIONES LGICOS
Grupos (L: izquierda, R: derecha) Para operandos sin signo
Desplazamiento aritmtico: ASL, ASR Tipos:
Desplazamiento lgico: LSL, LSR LSL (a izquierda) LSR (a derecha)
Rotacin: ROL, ROR, ROXL, ROXR
Argumentos (1 2) OPERANDO 0 0 OPERANDO
Un argumento: desplazamiento/rotacin de
Introduce 0s Introduce 0s
un bit en un dato de 16 bits en memoria (EA)
Modo: todos los absolutos e indirectos Posibilidades:
Dos argumentos (f,d): LSL.Z #<d3>,Dn LSR.Z #<d3>,Dn
f indica el nmero de bits a desplazar/rotar LSL.Z Dm,Dn LSR.Z Dm,Dn
con modos directo a Di o inmediato LSL.W <dem> LSR.W <dem>
d se expresa con modo directo a Di
.Z indica operandos de tipo .B, .W .L
Equivalencias
<d3> = valor de 3 bits (desplaza de 1 a 8)
Desplazamiento a derecha = divisin por 2n
Dm: cuentan los 6 bits inferiores (de 1 a 64)
Desplazamiento a izquierda = multiplicacin
por 2n <dem> = (An), (An)+, -(An), d(An), d(An,Xi),
Abs.W, Abs.L
Diferencias
Bits del CCR:
Tratamiento de los bits de los extremos
El bit saliente se copia a C y X (V siempre 0)
Hay dos tipos de desplazamientos para
considerar nmeros con signo y sin signo Si el bit superior del resultado es 1, N=1
Si el resultado es nulo, Z=1

SEDG-2/DIE 57 SEDG-2/DIE 58
DESPLAZAMIENTOS EJEMPLOS DE
ARITMTICOS DESPLAZAMIENTOS
Para operandos con signo LSL.W #3,D1 5 2 9 8 A 2 1 5 D1
Tipos: N=0 0101 0010 1001 1000 1010 0010 0001 0101
ASL (a izquierda) ASR (a derecha) Z=0
5 2 9 8 1 0 A 8 D1
V=0
0101 0010 1001 1000 0001 0000 1010 1000
OPERANDO 0 OPERANDO C=X=1

Introduce 0s Realimenta signo LSR.W #2,D1 5 2 9 8 A 2 1 5 D1


Posibilidades: N=0 0101 0010 1001 1000 1010 0010 0001 0101

Z=0
ASL.Z #<d3>,Dn ASR.Z #<d3>,Dn 5 2 9 8 2 8 8 5 D1
V=0
ASL.Z Dm,Dn ASR.Z Dm,Dn 0101 0010 1001 1000 0010 1000 1000 0101
ASL.W <dem> ASR.W <dem> C=X=0
ASL.L #3,D1 5 2 9 8 A 2 1 5 D1
Bits del CCR: N=1 0101 0010 1001 1000 1010 0010 0001 0101

El bit saliente se copia a C y X (se ponen a 0 Z=0


9 4 C 5 1 0 A 8 D1
si el desplazamiento (#<d3> Dm) es 0) V=1
1001 0100 1100 0101 0001 0000 1010 1000
Si el bit superior del resultado es 1, N=1 C=X=0
Si el resultado es nulo, Z=1 ASR.L #2,D1 D 2 9 8 A 2 1 5 D1
El bit V se pone a 1 si se ha detectado un N=1 1101 0010 1001 1000 1010 0010 0001 0101
cambio de signo durante el desplazamiento Z=0
(error) F 4 A 6 2 8 8 5 D1
V=0
1111 0100 1010 0110 0010 1000 1000 0101
C=X=0

SEDG-2/DIE 59 SEDG-2/DIE 60
ROTACIONES SIMPLES ROTACIONES EXTENDIDAS

Los bits salientes se realimentan Los bits salientes se realimentan a


Tipos: travs de X (CCR)
ROL (a izquierda) ROR (a derecha) Tipos:
ROLX (a izquierda) RORX (a derecha)
OPERANDO OPERANDO
C C
X X
OPERANDO OPERANDO
Posibilidades: C C
ROL.Z #<d3>,Dn ROR.Z #<d3>,Dn
ROL.Z Dm,Dn ROR.Z Dm,Dn Posibilidades:
ROL.W <dem> ROR.W <dem>
ROLX.Z #<d3>,Dn RORX.Z #<d3>,Dn
ROLX.Z Dm,Dn RORX.Z Dm,Dn
Bits del CCR: ROLX.W <dem> RORX.W <dem>
El bit C es una copia del ltimo bit rotado
El bit X no se modifica Bits del CCR:
V siempre es 0 Los bits C y X son copia del ltimo bit rotado
Si el bit superior del resultado es 1, N=1 (X acta como un bit ms del operando)
Si el resultado es nulo, Z=1 V siempre es 0
Si el bit superior del resultado es 1, N=1
Si el resultado es nulo, Z=1

SEDG-2/DIE 61 SEDG-2/DIE 62
CONTROL DE PROGRAMA SALTOS INCONDICIONALES

Caractersticas: BRA d
Alteran la secuencia de programa (saltos) Salto simple relativo al PC
.S indica salto con desplazamiento de 8 bits d: desplazamiento de 8 bits (-128 a 127) o de
con modo relativo al PC (p.e. BHI.S etiqueta) 16 bits (-32768 a 32767) relativo al PC
Saltos incondicionales: JMP d
Saltan siempre Salto simple absoluto
Saltos simples: BRA, JMP d es la direccin de salto (modo absoluto)
Saltos a subrutina: BSR, JSR, RTS, RTR BSR d
Los saltos a subrutina guardan en la pila Salto a subrutina relativo al PC
(usuario o supervisor) el valor del PC que se d es un desplazamiento de 8 16 bits
recupera con la ltima instruccin de la
subrutina (RTS, RTR) JSR d
Salto a subrutina absoluto
Saltos condicionales
d es la direccin de salto (modo absoluto)
Saltan si se cumple cierta condicin (CCR)
Decisiones en funcin de resultados previos RTS
Suelen usarse tras una comparacin Retorno de subrutina (recupera el PC)
aritmtica (CMP f,d) o lgica (TST d) RTR
Instrucciones: Bcc, DBcc, Scc, donde cc Retorno de subrutina (recupera el PC)
indica el cdigo de condicin Recupera el byte inferior del CCR que se debe
salvar en la pila al empezar la subrutina

SEDG-2/DIE 63 SEDG-2/DIE 64
SALTOS CONDICIONALES SALTOS CONDICIONALES
(1) (2)
La accin se realiza si se cumple la Bcc d
condicin cc en el CCR Salta si se cumple cc
Condiciones: d: desplazamiento relativo al PC (8 16 bits)
No existe con las dos ltimas condiciones
Tab. AGG-4.9
Tab. AGG-4.10

DBcc r,d
Si cc no se cumple, decrementa r, y si r-1
salta a d (para bucles)
r: modo directo a registro de datos
d: modo relativo al PC (16 bits)
Scc d
Si se cumple cc pone el byte en d a $FF, y si
no se cumple lo pone a $00
Es una instruccin de manipulacin de bits

SEDG-2/DIE 65 SEDG-2/DIE 66
GENERADORES DE
CONTROL DE SISTEMA
EXCEPCIONES
Caractersticas:
TRAPV
Modifican de algn modo el funcionamiento
Genera una excepcin (vector n7) si el bit V
de la CPU
del CCR est a 1.
Categoras:
Se utiliza para manejar las situaciones de
Instrucciones que operan con el CCR
desbordamiento
Instrucciones generadoras de excepciones
Instrucciones privilegiadas TRAP f
Siempre genera una excepcin
Operaciones con el CCR:
f: modo inmediato con valor de 0 a 15 (4 bits)
Funcionan en modos usuario y supervisor
que el ensamblador incorpora al opcode
ANDI #n,CCR El vector se obtiene sumando 32 al valor
ORI #n,CCR inmediato en f (vectores del 32 al 47)
EORI #,CCR CHK f,d
Operaciones lgicas de un valor inmediato Compara los contenidos de f y d
con el CCR Modos de direccionamiento:
MOVE f,CCR f: direccin efectiva
d: directo a registro de datos Di
Escribe en el CCR el contenido del byte en
la direccin efectiva f Genera la excepcin n6 si se da alguno de
los siguiente casos:
MOVE SR,d En Di hay un valor negativo
Permite copiar el contenido del SR completo [Di] > [f]
a la direccin efectiva d

SEDG-2/DIE 67 SEDG-2/DIE 68
INSTRUCCIONES INSTRUCCIONES
PRIVILEGIADAS (1) PRIVILEGIADAS (2)

Caractersticas: MOVE f,USP


Slo en modo supervisor (realizan funciones MOVE USP,d
delicadas slo permitidas al S.O.)
Permiten modificar el puntero de pila de
En modo usuario generan la excepcin n 8 usuario (A7 = USP) estando en modo
supervisor
Manipulacin del SR completo: f, d: modo directo a registro de direccin Ai
Afectan al byte del sistema y al byte de RESET
usuario (CCR) Genera un impulso de reset para los
ANDI #n,SR dispositivos externos ( no afecta a la CPU)

ORI #n,SR STOP #n


Detiene la ejecucin del programa
EORI #n,SR
Carga el SR con el valor inmediato indicado
Operaciones lgicas de un valor inmediato en su argumento y espera hasta que haya
con el SR una excepcin
MOVE f,SR RTE
Escribe en el SR el contenido de la palabra Instruccin de retorno tras una excepcin
(16 bits) que est en la direccin efectiva f
Recupera de la pila el SR y luego el PC

SEDG-2/DIE 69 SEDG-2/DIE 70
INSTRUCCIONES
SUMAS BINARIAS
ARITMTICAS
Caractersticas
Operaciones con/sin signo
Realizan [f]+[d]->[d]
La CPU no distingue (al operar y al generar
los bits C y V) si las operaciones son con Operandos de 8, 16 y 32 bits (menos ADDA)
signo o sin signo Modifican el CCR (menos ADDA)
El programador es el que hace la distincin ADD f,d
En un nmero con signo, el bit ms Suma binaria (admite todos los modos
significativo representa el signo y el resto de menos relativo al PC en d)
bits representan el mdulo Un operando (f d) debe ser un registro Di
Si el nmero es negativo se expresa en Ca2
ADDA f,d
Las restas usan el Ca2 del sustraendo
Suma de direcciones (operandos de 16 y 32)
Aritmtica sin signo: usar bit C del CCR
f y d: todos los modos (uno debe ser Ai)
Aritmtica con signo: usar bit V del CCR
No afecta ningn bit del CCR
ADDI f,d
Grupos:
Suma inmediata (f en modo inmediato)
Operaciones aritmticas (suma, resta,
d admite todos los modos
multiplicacin, divisin) binarias y decimales
Cambio de signo ADDQ f,d
Extensin de signo Suma rpida (f en modo inmediato con 3 bits
Comparacin se incorpora al opcode)
Actualizacin del CCR segn un dato d admite todos los modos

SEDG-2/DIE 71 SEDG-2/DIE 72
EJEMPLOS DE SUMAS
RESTAS BINARIAS
BINARIAS
Aritmtica sin signo: usar bit C Caractersticas
Aritmtica con signo: usar bit V Realizan [d]-[f]->[d]
Se hace como una suma expresando [f] en
complemento a 2 (en aritmtica con signo y
sin signo)
Ca2 = Ca1 + 1
En las restas sin signo, la CPU genera el bit
C invirtiendo el bit de acarreo que se genera
Tab. AGG-4.4 a bajo nivel en la ALU
En las restas con signo, verificar el bit V
Operandos de 8, 16 y 32 bits (menos SUBA)
Modifican el CCR (menos SUBA)
SUB f,d
SUBA f,d
SUBI f,d
SUBQ f,d
Presentan las mismas caractersticas que las
instrucciones de suma correspondientes

SEDG-2/DIE 73 SEDG-2/DIE 74
EJEMPLOS DE RESTAS
MULTIPLICACIONES
BINARIAS
Tab. AGG-4.5 Caractersticas:
Realizan [f]*[d]->[d]
Operandos de 16 bits (resultado de 32 bits):
f admite todos los modos menos directo a Ai
d tiene que ser un registro de datos Di
Bits del CCR:
C y V son siempre 0 (no hay desbordamiento)
X no se modifica
Z y N reflejan el resultado de la operacin
MULU f,d
Multiplicacin sin signo
Ejemplo: Al final, Z=0 y N=1
MOVE.W #$FFFF,D0 ; D0=65535
MOVE.W #$FFFF,D1 ; D1=65535
MULU DO,D1 ; D1=4294836225=$FFFE0001
MULS f,d
Multiplicacin con signo
Ejemplo: Al final, Z=0 y N=1 (signo correcto)
MOVE.W #$2,D0 ; D0=2
MOVE.W #$FFFF,D1 ; D1=-1
MULS DO,D1 ; D1=-2=$FFFFFFFE

SEDG-2/DIE 75 SEDG-2/DIE 76
DIVISIONES ARITMTICA EXTENDIDA

Caractersticas:
El bit X del CCR:
Realizan [d]/[f]->[d]
No siempre es una copia del C
Operandos ([f]=0 produce una excepcin)
Ejemplo: MOVE slo afecta a C y as X
f (16 bits): cualquier modo menos directo a Ai puede recordar un acarreo anterior
d (32 bits): tiene que ser un Di (cociente en En las rotaciones (ROXL, ROXR), X acta
bits 0-15 y resto en bits 16-31)
como un bit ms del operando
(+25)/(-2) = (-12) y resto = +1
(-25)/(-2) = (+12) y resto = -1
Tambin permite aritmtica extendida o
(-25)/(+25) = (-1) y resto = +0 multiprecisin: incorporar acarreos anteriores
(o negativo) a una aritmtica multiregistro
Bits del CCR:
C es siempre 0 y X no se modifica
V a 1 con divisor pequeo (cociente grande) ADDX f,d
Z y N reflejan el resultado de la operacin Realiza [f]+[d]+[X]->[d]
DIVU f,d Afecta al CCR como ADD excepto en Z
Divisin sin signo Si el resultado es no nulo: Z=0
DIVS f,d Si el resultado es nulo: Z queda inalterado

Divisin con signo SUBX f,d


Ejemplo: Realiza [d]-[f]-[X]->[d]
MOVE.W #$A79C00,D0 ; D0=10984448 Caractersticas como ADDX
MOVE.W #$F830,D1 ; D1=-2000
DIVS D1,D0 ; Cociente=-5492=$EA8C
; Resto=448=$01C0

SEDG-2/DIE 77 SEDG-2/DIE 78
EJEMPLO DE SUMA
ARITMTICA DECIMAL (BCD)
EXTENDIDA
Cdigo BCD
Suma de 2 nmeros de 64 bits sin
Codifica cada dgito (0-9) en 4 bits (NIBBLE)
signo:
63 32 31 0
Nibble dgito Nibble dgito
Nmero A: D0 D1 0000 0 0101 5
63 32 31 0 0001 1 0110 6
Nmero B: D2 D3 0010 2 0111 7
0011 3 1000 8
La suma A+B se almacenar en D4,D5 0100 5 1001 9

MOVE.L D1,D5 ; Se lleva A a D4,D5


MOVE.L D0,D4 Hay 6 combinaciones (10 al 15) sin asignar
ADD.L D3,D5 ; D5=D1+D3, carry->C,X Ejemplo: 217(10 ---> (0010)(0001)(0111)BCD
ADDX.L D2,D4 ; D4=D0+D2+X, carry->C Se necesitan ms bits que en binario
Comportamiento del bit Z con ADDX En clculos financieros no se permite la
conversin decimal-binario y se usa BCD
Si funcionara como en ADD:
Terminales punto de venta, sistemas de
Si D1+D3 genera un X=0 y D0=D2=0, se entrada de pedidos, terminales bancarios, ...
pondra Z=1 (incorrecto si D1+D3 no es 0)
Funcionamiento con ADDX: Aritmtica decimal en el 68000
Se evita el caso anterior Permite sumar y restar en BCD
Si D1+D3=0 genera un Z=1 que se mantiene Para realizar multiplicaciones o divisiones
inalterado slo si D0+D2=0 (correcto) hay que basarse en las sumas y restas

SEDG-2/DIE 79 SEDG-2/DIE 80
RESTA Y NEGACIN
SUMA DECIMAL (BCD)
DECIMAL (BCD)
ABCD f,d
Realiza [f]+[d]+[X]->[d]
SBCD f,d
Realiza [d]-[f]-[X]->[d]
Operandos de 8 bits (bytes) y modo igual:
Directo a Di o indirecto con predecremento Modo y bits del CCR como ABCD
Bits del CCR (N y V no estn definidos): Ejemplo: Restar B=52 menos A=20
C y X a 1 si hay acarreo o acarreo negativo MOVE.B #$20,D1
Si el resultado es 0 Z queda inalterado, y si MOVE.B #$52,D0
no es 0 Z se pone a 0 MOVE.W #4,CCR ; Poner X=0,Z=1
SBCD.B D1,D0 ; D0=D0-D1-X=52-20=32
Ejemplo: Sumar cadenas A=564728 (en A0)
y B=390112 (en A1) NBCD d
MOVE.W #4,CCR ; X=0,Z=1 (para BCD) Realiza [0]-[d]-[X]->[d]
MOVEQ.W #2,D0 ; Contador
ADDQ.W #3,A0 ; Lmite para A0 Si X=0, obtiene el complemento a 10 de d
ADDQ.W #3,A1 ; Lmite para A1 Si X=1, obtiene el complemento a 9 de d
BUCLE ABCD.B -(A0),-(A1) ; (A1-1) =
Ejemplo: Cadena A=564728 en A0
DBF D0,BUCLE ; = (A0-1)+(A1-1)+X
BCS ERROR ; Si C=1, ERROR MOVE.W #4,CCR ; X=0,Z=1 (siempre)
MOVEQ.W #2,D0 ; Contador
[A0] 0101 0110 ADDQ.W #3,A0 ; Lmite para A0
[A0]+1 0100 0111 BUCLE NBCD.B -(A0) ; (A0-1) = -(A0-1)-X
[A0]+2 0010 1000 [A1] 1001 0101 95=56+39, X=0 DBF D0,BUCLE
[A1]+1 0100 1000 48=47+01, X=0
[A1] 0011 1001 [A1]+2 0100 0000 40=28+12, X=0 [A0] 0101 0110 [A1] 0100 0011 43=0-56-1, X=1

[A1]+1 0000 0001 [A0]+1 0100 0111 [A0]+1 0101 0010 52=0-47-1, X=1

[A1]+2 0001 0010 (0=8+2, X=1) [A0]+2 0010 1000 [A0]+2 0111 0010 72=0-28, X=1

SEDG-2/DIE 81 SEDG-2/DIE 82
CAMBIO DE SIGNO Y INSTRUCCIONES DE
EXTENSIN DE SIGNO COMPARACIN
Instrucciones de cambio de signo: Caractersticas
Corresponden a la negacin binaria Realizan [d]-[f] pero slo se afectan los
Afectan a los bits del CCR bits del CCR (el resultado no se guarda)
NEG d (Ver tabla de condiciones en instrucciones
de control de programa)
Realiza 0-[d]->[d]
Obtiene el complemento a 2 del operando
CMP f,d
f: admite todos
Modos de direccionamiento
d: directo a registro de datos Di
d: Todos menos directo a Ai y relativos al PC
CMPA f,d
NEGX d
Comparacin de direcciones
Realiza 0-[d]-[X]->[d]
f: admite todos
Iguales modos que NEG
d: directo a registro de direcciones Ai
CMPI f,d
Instruccin de extensin de signo: f: inmediato
EXT d d: todos menos directo a Ai, indirectos con
Permite ampliar la longitud de un dato con predecremento o postincremento, y relativos
a PC
signo sin alterar su valor
El dato original se mantiene en el byte o CMPM f,d
palabra de menor peso Comparacin en memoria
d: modo directo a registro de datos Di f, d: Indirecto con postincremento

SEDG-2/DIE 83 SEDG-2/DIE 84
ACTUALIZACIN DEL CCR Y
SUBRUTINAS
OTRAS
Actualizacin del CCR: Subrutina
El contenido del CCR depende de un dato Programa auxiliar separado del principal
en un registro o en memoria que evita repetir cdigo varias veces
No se admiten directo a Ai o relativos al PC Elementos
Bits en el CCR: a) Instruccin llamada a subrutina
Ponen a 0 los bits C y V Rompe la secuencia de ejecucin (salto)
Modifican N y Z segn el valor del dato Guarda automticamente el valor del PC en
El bit X no se cambia la pila (stack) o en registros auxiliares
TAS d Carga automticamente la direccin de la
subrutina en el PC
Slo acta sobre datos de 8 bits
b) Instruccin fin de subrutina
Adems pone a 1 el bit de signo (bit 7) en d
Identifica el fin de la subrutina
TST d Recupera automticamente de la pila (o de
Slo modifica el CCR registros auxiliares) el valor que tena el PC
antes del salto
c) Instrucciones para salvar el contenido de la
Otras instrucciones: CPU antes del salto
CLR d Salvan otros registros (acumulador, SR,
Pone a 0 el contenido de d (N=V=C=0, Z=1) etc.) antes del salto
El programador las introduce explcitamente
NOP en el programa
Slo retarda 4 ciclos y usa memoria

SEDG-2/DIE 85 SEDG-2/DIE 86
SUBRUTINAS ANIDADAS INTERRUPCIONES

Nivel de anidamiento Interrupciones


Se produce cuando una subrutina llama a Mecanismo de conexin del sistema P
otra subrutina (sub-subrutina) con el mundo exterior, sincronizando la
Mecanismos para recordar el valor del PC: ejecucin con eventos externos
a) En registros auxiliares de la CPU Similares a subrutinas, excepto que se
Alta velocidad de acceso pero nivel limitado activan desde un terminal de entrada HW
b) En una zona de memoria (pila o stack) Se pueden producir en cualquier momento
Slo necesita un registro auxiliar en la CPU
durante la ejecucin del programa
que apunte a la posicin del ltimo valor Llaman a subrutinas de atencin (igual
almacenado en la pila (puntero de pila o SP) mecanismo que con subrutinas en general)
Menor velocidad pero nivel ilimitado Fig. AGG-2-23
Fig. AGG-2.20

SEDG-2/DIE 87 SEDG-2/DIE 88
LA PILA (STACK) Y EL TEMPORIZACIN DE
PUNTERO DE PILA (SP) INSTRUCCIONES (1)
Pila stack Controlador de la CPU
Zona de memoria RAM de tamao variable Subsistema secuencial sncrono (CLK) que
Puntero de pila o stack pointer (SP) realiza las acciones elementales de 1 ciclo
necesarias para ejecutar una instruccin
Registro especial que apunta a la posicin
Tprograma = N de ciclos X TCLK
del ltimo valor introducido en la pila
68000: dos punteros de pila (A7) para los Velocidad de ejecucin de un P
modos usuario (USP) y supervisor (SSP) Depende de:
Funcionamiento de pila tipo LIFO Mxima frecuencia de reloj (tecnologa)
N de ciclos necesarios para cada instruccin
LIFO: el ltimo dato en entrar sale primero
La arquitectura puede acelerar la ejecucin
Se implementa haciendo que la pila se
llene hacia direcciones ms bajas Pipelining: varias acciones en paralelo

Inicialmente el programador carga el SP Tiempo de ejecucin por instruccin


con la direccin de comienzo de la pila Lo da el fabricante en tablas
Con cada llamada a subrutina: Formato: c(r/w)
El CP se almacena en la direccin del SP c = N de ciclos de reloj empleados
(palabra baja) y en la anterior (palabra alta) r = N de accesos a memoria para lectura
El contenido del puntero de pila se w = N de accesos a memoria para escritura
decrementa en dos unidades
Acceso a memoria:
El programador puede guardar el contenido
de otros registros mediante instrucciones Sin estados de espera: ~4 ciclos
MOVE (acciones PUSH y POP) Con estados de espera (memorias lentas):
hay que aadirlos a cada operacin R W

SEDG-2/DIE 89 SEDG-2/DIE 90
TEMPORIZACIN DE TEMPORIZACIN DE
INSTRUCCIONES (2) INSTRUCCIONES (3)
Posibilidades en las tablas: Posibilidades en las tablas (cont.):
a) El tiempo de ejecucin incluye el tiempo de b) El tiempo de ejecucin no incluye el tiempo
clculo de la (EA) de todos los modos de de clculo de la (EA) que se obtiene de otra
direccionamiento que admite la instruccin tabla y se suma
c(r/w) indica los ciclos empleados El tiempo de clculo de (EA) es independiente
Tab. AGG-pg.565a Se expresan como c(r/w)+
Ejemplo: BSET.B #4,(A0)
Tab. AGG-pg.565b Tabla: BSET.B = 12(2/1)+
(EA): Indirecto con registro Ai = 4(1/0)
Total = 12 + 4 = 16 ciclos

Tab. AGG-pg.564

SEDG-2/DIE 91 SEDG-2/DIE 92
TEMPORIZACIN DE RESET Y ARRANQUE DEL
INSTRUCCIONES (4) P
Posibilidades en las tablas (cont.) El proceso de arranque del P
c) El tiempo de ejecucin depende del factor 1) Conexin de la alimentacin
de repeticin con que se ejecutan ciertas Los registros de la CPU adoptan contenidos
acciones dentro de la instruccin aleatorios (no coherentes)
Es el caso de instrucciones como 2) Proceso de RESET de origen hardware
desplazamientos, rotaciones, movimientos
mltiples, ... Ejecucin de un programa generado por el
usuario y grabado en ROM que realiza las
El factor de repeticin (n) es un valor entero acciones de inicializacin del sistema (por
Ejemplo: MOVEM d(A2),D0-D4 ejemplo, situar el PC en la posicin que se
Tabla: M->R(long), d(An) = 16+8n(4+2n/0) desee ejecutar)
n: registros Di = 5
Total = 16 + 8 x 5 = 56 ciclos

Tab. AGG-pg.569b Formas de activar el arranque


1) Mediante un pulsador que active un
terminal de la CPU al ser utilizado por el
operador
2) Mediante un circuito sencillo que sustituya
al operador, permitiendo que el sistema
arranque autmticamente al aplicarse la
alimentacin

SEDG-2/DIE 93 SEDG-2/DIE 94
PROGRAMA: Introducir texto PROGRAMA: Comparacin de
en un buffer cadenas de caracteres
ABSOLUTE
TTL Introducir texto en un buffer ORG $25000
BACK_SP EQU $08 ; ASCII de back-space MAIN LEA.L STRING1,A6 ; Carga direcciones
DELETE EQU $7F ; ASCII de delete LEA.L STRING2,A5
CARR_RET EQU $0D ; ASCII retorno de carro MOVE.W #LONGITUD,D0
* BSR COMPSTR ; No coinciden
ORG $004000 ; Origen de datos LEA.L STRING1,A6
LEA.L STRING2,A5
LINEABUF DS.B 64 ; Reserva bytes para buffer
MOVE.W #LONGITUD-1,D0
*
BSR COMPSTR ; Coinciden
* Este procedimiento lee un carcter y lo
FINAL BRA.S FINAL
* almacena en un buffer *
* COMPSTR CLR.B D1 ; Flag de comparacin
ORG $0010000 ; Origen de programa DBF D0,LAZO ; Si LONG=0 sale
LEA.L LINEABUF,A2 ; Carga A2 RTS
SIGUI BSR OBTEN_DATO ; Llama a subrutina *
CMP.B #BACK_SP,D0 ; Ve si es espacio LAZO CMPM.B (A5)+,(A6)+ ; Compara e increm
BEQ MOVE_LEFT ; Si lo es, se trata DBNE D0,LAZO ; Repite si no iguales
CMP.B #DELETE,D0 ; Ve si es delete BEQ FIN ; Termina si iguales
MOVE.B #$FF,D1 ; Si no, activa flag D1
BEQ CANCEL ; Si lo es, se trata
FIN RTS
CMP.B #CARR_RET,D0 ; Ve si es CR
*
BEQ EXIT ; Si lo es, salir
STRING1 DC.B CADENA 1
MOVE.B D0,(A2)+ ; Almacena en (A2) STRING2 DC.B CADENA 2
BRA SIGUI ; Repetir LONGITUD EQU STRING2-STRING1
... ..... *
END END

SEDG-2/DIE 95 SEDG-2/DIE 96
PROGRAMA: Medir longitud PROGRAMA: Obtener el
de una cadena de caracteres mximo de una tabla

ABSOLUTE
ABSOLUTE
ORG $25000
ORG $25000 ; RAM
MAIN LEA.L TABLA,A6
CR EQU 13 ; Retorno carro ASCII
MOVE.W #CONT,D0
MAIN LEA.L STRING,A6 BSR MAXIMO ; Llama a subrutina
BSR LONGCAD ; Llama subrutina FINAL BRA.S FINAL
FINAL BRA.S FINAL *
* MAXIMO CLR.W D1 ; Max inicial D1=0
LONGCAD MOVE.W #$FFFF,D0 ; D0=-1 LAZO MOVE.W (A6)+,D2
LAZO ADDQ.W #1,D0 ; D0=D0+1 CMP.W D2,D1
CMPI.B #CR,0(A6,D0.W) ; Ve si es CR BCC SIGUE D1 sigue
; Si D2
BNE LAZO MOVE.W D2,D1 ; Si no, guarda mx
SIGUE DBF D0,LAZO
RTS
RTS
*
STRING DC.B SOY UN STRING ; 13 bytes
TABLA DC.W $12A2,$32,$9025,$A478,$4A,$355
DC.B CR ; 1 byte
FINTABLA DC.W $3500
* CONT EQU (FINTABLA-TABLA+1)/2
FINAL END END

- La inicializacin de D0 debe tener en cuenta que


DBF decrementa hasta -1

SEDG-2/DIE 97 SEDG-2/DIE 98
CONSTRUCCIONES DE CONSTRUCCIONES DE
ALTO NIVEL (1) ALTO NIVEL (2)

IF L THEN S WHILE L DO S
TST.B D0 ; Ve si D0 est activado
REPETIR TST.B D0
BEQ SALIR ; Si es 0, salir
BEQ SALIR ; Si es 0, salir
S ; Si no, ejecuta S
S ; Cuerpo del bucle
SALIR
BRA REPETIR ; Repetir el bucle
SALIR
IF L THEN S1 ELSE S2
TST.B D0
REPEAT S UNTIL L
BEQ ELSE ; Si es 0, ejecuta S2
NEXT S ; Cuerpo del bucle
S1
TST.B D0
BRA EXIT ; Omite la parte de ELSE
BEQ NEXT ; Repetir el bucle
ELSE S2
...
EXIT FOR I=N-1 DOWNTO -1
MOVE.W #N-1,D1 ; D1 es el contador
FOR I=N1 TO N2 NEXT S ; Cuerpo del bucle
DBF D1,NEXT ; Decrementar D1 e
MOVE.B #N1,D0 ; D0 es el contador
; iterar si no es -1
NEXT S ; Cuerpo del bucle
ADDQ.B #1,D0 ; Incrementa contador
CMP.B #N2+1,D0 ; Ve si ha terminado
BNE NEXT

SEDG-2/DIE 99 SEDG-2/DIE 100

Anda mungkin juga menyukai