Você está na página 1de 5

UNIVERSIDAD DE SEVILLA

FACULTAD DE INFORMÁTICA

Y ESTADÍSTICA

PRÁCTICA:

SIMULACIÓN DEL MC68000

Estructura de Computadores
(Ingeniería Técnica en Informática de Sistemas)

DEPARTAMENTO DE
TECNOLOGÍA ELECTRÓNICA
1. OBJETIVOS En el ejemplo, las tres primeras líneas que aparecen en el programa sirven para asignar el
valor inicial al contador de programa y al puntero de pila del modo supervisor. Lo que se hace
Esta práctica tiene como objetivo la familiarización con el emulador BSVC del
es escribir en memoria en las posiciones $0 y $4 los valores de USP y PC mediante la
microprocesador MC68000 y profundizar en el manejo de su conjunto de instrucciones. Este
directiva DC.L. El USP tomará el valor $8000 y el PC tomará el valor que tome la etiqueta
emulador es un proyecto desarrrollado en la Universidad de Carolina del Norte por Bradford
START. En el ejemplo, START tomará el valor $2000, ya que de nuevo se hace uso de la
W. Mott.
directiva ORG (línea 4). Este segundo uso de la directiva garantiza que el programa no se
escribe en las posiciones de la $0 a la $3FF que es la zona reservada para la tabla de vectores
2. INTRODUCCIÓN AL LENGUAJE ENSAMBLADOR
de excepción.
En primer lugar, daremos una introducción a las directivas más básicas del ensamblador que
• Interprete el programa anterior y explique mediante palabras y también con un diagrama
se usan en la práctica. Para ello utilizaremos el programa example.s que se muestra a
de flujo la función que éste realiza.
continuación.

ORG $0
DC.L $8000 Valor inicial del puntero de pila 3. ESTUDIO EXPERIMENTAL
DC.L START Valor inicial del contador de programa
Esta práctica consta de 2 partes:
ORG $2000
START CLR.W SUM Parte I
MOVE.W COUNT,D0
LOOP ADD.W D0,SUM Su objetivo es conocer el emulador a través del uso de un programa ejemplo. Las tareas que
SUB.W #1,D0 abordaremos en este apartado serán: abrir el entorno, cargar un programa ya ensamblado y
BNE LOOP ejecutarlo.
BREAK
SUM DS.W 1 Para realizar estas tareas siga los puntos 4.1, 4.2 y 4.3 del apartado 4.
COUNT DC.W 25
Parte II
Cada línea de programa tiene cuatro campos separados por espacios. Los tres primeros
campos son obligatorios. En el primero se pueden insertar etiquetas; el segundo, corresponde Su objetivo es hacer prácticas sobre un conjunto de ejemplos que se proponen. Las tareas

al mnemónico de la instrucción; en el tercero se sitúan los operandos si los hay; y en el cuarto, que abordaremos sobre cada ejemplo serán: edición, ensamblado, carga y ejecución. Teniendo

se pueden introducir comentarios. en cuenta que en el apartado 4.4 se describe cómo llevar a cabo las tareas de edición y
ensamblado, siga el tutorial del apartado 5.
Las directivas (ORG, DC, DS) no forman parte del código ejecutable, son indicaciones para
el ensamblador que es el encargado de traducir el programa a código máquina. ORG sirve
4. GUÍAS DE USO DEL EMULADOR
para indicar a partir de qué dirección de memoria debe escribirse el código, DC sirve para
4.1 Abrir el entorno:
inicializar a un valor concreto una parte de la memoria, y DS para reservar una zona de
memoria. 1) Se arranca el programa (BSVC) desde la barra de Inicio.
2) En la ventana que se ha abierto, picar en File → Open Setup direcciones comprendidas entre la $000000 y la $00000F; en la segunda fila se encuentran los
siguientes 16 bytes, es decir, desde la dirección $000010 a la $00001F, y así sucesivamente.
3) En la nueva ventana se selecciona el fichero

byte 10

byte 12
byte 13
byte 14
byte 15
byte 11
byte 1
byte 2
byte 3
byte 4
byte 5
byte 6
byte 7
byte 8
byte 9
byte 0
C:\Archivos de Programa\BSVC\Samples\sim68000\simple.setup
Posición
Aparecerá una ventana dividida en dos partes, en la de la izquierda se muestran los registros 000000 00 00 80 00 00 00 20 00 00 00 00 00 00 00 00 00

accesibles del procesador. En la ventana de la derecha el emulador emitirá mensajes de 000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

información cuando se ejecuten programas. 000020 ..........


Nota: tanto las posiciones como
los contenidos están expresados
4.2 Cargar un programa ejemplo:
en base 16.

1) En la ventana principal de la aplicación, se pica en File → Load Program


4) Para la depuración de programas, se pueden definir puntos de parada a lo largo del
2) En la ventana que se ha abierto, se selecciona el fichero código picando en la ventana de listado sobre la línea en que se quiere que se pare la
C:\Archivos de Programa\BSVC\Samples\sim68000\example.h68 ejecución. Así se puede avanzar con “Run” hasta ese punto y después seguir hasta otro o
seguir paso a paso. Cuando se quiere desactivar algún punto de parada basta picar de nuevo
3) En la ventana principal, se pica en Window → Program Listing y se abre una ventana con
sobre la línea en cuestión.
el programa que hemos cargado. A la derecha está escrito en lenguaje ensamblador y a la
izquierda su equivalente en código máquina. 5) Para empezar de nuevo es preciso picar en el botón de “Reset”, de esta forma el contador
de programa, PC, se inicializa a la dirección de memoria donde se encuentra la primera
4.3 Ejecutar un programa:
instrucción de programa.
1) Picar en la ventana principal el botón “Reset”. Con esto se inicializa el registro PC
6) Para modificar el contenido de los registros, hay dos opciones:
(contador de programa) y A7´(el puntero de pila del supervisor).
- Borrar todos los registros a la vez picando en la ventana principal en Registers->Clear All.
2) A partir de este momento es posible ejecutar el programa en una sola pasada picando el
botón “Run”, o bien paso a paso picando el botón “Single Step”. Se puede ir comprobando - Cambiar sólo un registro picando dos veces sobre él. Tras esto, se abre una ventana donde
cómo se ejecutan las instrucciones y ver en su caso como cambia el contenido de los registros. se pide el nuevo contenido.

3) Para ver el contenido de la memoria, se pica en la ventana principal en 6) Para modificar el contenido de la memoria, hay dos opciones:
Window → Memory Viewer. Tras ello, se abrirá una ventana donde la memoria se organiza
- Cambiar un bloque de memoria. Para ello picar en la ventana de memoria en Edit -> Fill
como puede verse en la figura. En la primera fila aparecen los 16 primeros bytes, es decir, las
Memory Block.

- Cambiar sólo el contenido de un byte picando dos veces sobre él en la ventana de


memoria. Tras esto, se abre una ventana donde se pide el nuevo contenido.
4.4 Crear un nuevo programa: ANDI #$0700,SR, para pasar a modo usuario que es lo habitual en el caso de la ejecución de
aplicaciones.
1) Ha de escribirse en un fichero con extensión .s (por ejemplo: example.s) en lenguaje
ensamblador.
Ejemplo 1
2) Posteriormente, hay que ensamblarlo para convertirlo en código máquina. Para ello, es
En este ejemplo, vamos a trabajar con distintos tipos de direccionamiento.
necesario abrir una ventana de MSDOS. Después, hemos de situarnos en el directorio donde
ORG $4
se encuentra el programa a ensamblar. Por último, se ejecuta el programa 68kasm.exe. Este DC.L $1000
programa ha de ejecutarse con la opción “-l”. Por ejemplo:
ORG $500
Var1 DC.L 5
68kasm.exe -l example.s Var2 DC.W 10

Esto genera dos ficheros, si no hay error en código: ORG $1000


ANDI #$0700,SR
- example.h68: es el que sirve de entrada al emulador MOVEA.L #Var1,A0
- example.lis: es el ensamblador junto con el código máquina. MOVE.L (A0),D0
MOVE.W 4(A0),D1
MOVEQ #4,D2
Si hay errores en el código, el fichero example.lis mostrará donde se encuentran los mismos MOVE.W (A0,D2.W),D3
y de que tipo son. BREAK

Conteste a las siguientes cuestiones:

5. EJEMPLOS PRÁCTICOS • ¿Qué ocurre si se sustituye MOVEA.L #Var1,A0 por MOVEA.L Var1,A0?
• ¿Y por LEA Var1, A0?
Para cada uno de los ejemplos de este apartado realice las siguientes tareas: • Indique los modos de direccionamiento indirectos utilizados en este código.

- edite un fichero (con extensión .s) en el que debe copiar el programa


Ejemplo 2
- utilice el programa de ensamblado (68kasm) como se explica en el apartado 4.4.
El código fuente de este ejemplo es el siguiente:
- cargue el programa en el emulador
ORG $4
- ejecute el programa de dos modos: DC.L $600

- instrucción a instrucción, comprobando que los registros del procesador y la ORG $400
Var1 DC.L 3
memoria modifican sus valores del modo esperado
Var2 DC.L 5
- de una pasada, comprobando que el programa funciona adecuadamente
ORG $600
ANDI #$0700,SR
Antes de comenzar conviene aclarar un detalle. Al abrir el entorno BSVC el emulador, por
defecto, se sitúa en modo supervisor. Esto puede comprobarse analizando el contenido del MOVE.L Var1,D0
MOVE.L Var1,D1
registro de estado SR. En los programas que se listan en este apartado, se usa la instrucción MULS D1,D0
MOVE.L Var2,D2
MOVE.L Var2,D3
MULS D3,D2
ADD.L D0,D2
MOVE.L Var1,D0
MOVE.L Var2,D1
SUB D1,D0
DIVS D0,D2
BREAK

Conteste a las siguientes cuestiones:

• ¿Cuánto valen Var1 y Var2?


• ¿Qué función realiza el código?
• Dependiendo de los valores almacenados en Var1 y Var2 ¿Qué errores podrían producirse?
• Indique los tres modos de direccionamiento utilizados en el código.

Ejemplo 3

El código fuente de este ejemplo es el siguiente:

ORG $4
DC.L $1000
ORG $700
String DC.B ’Esta práctica es bastante útil’,0

ORG $1000
ANDI #$0700,SR
MOVEA.L #String,A0
Sig MOVE.B (A0)+,D0
CMP.B #’a’,D0
BNE NoE
ADD.B #1,D7
NoE CMP.B #0,D0
BNE Sig
BREAK

El primer concepto novedoso es la declaración de una cadena de caracteres, como


observamos, se declara escribiéndola entre comillas. Al final de la cadena se ha añadido 0 que
permitirá localizar fácilmente el fin de cadena.

• Indique qué función realiza este código.

Você também pode gostar