Actualizado el 12 de Mayo del 2021 (Publicado el 8 de Mayo del 2018)
853 visualizaciones desde el 8 de Mayo del 2018
696,2 KB
25 paginas
Creado hace 15a (19/04/2010)
Facultad de Informática
Universidad Complutense de Madrid
Curso 2009/10
Cuaderno de Prácticas
Laboratorio de Fundamentos de
Computadores
PARTE II:
Programación en ensamblador
Autor: Rafael Moreno Vozmediano
Facultad de Informática
Universidad Complutense de Madrid
Laboratorio de Fundamentos de computadores
Facultad de Informática
Universidad Complutense de Madrid
Curso 2009/10
La Máquina Rudimentaria:
Arquitectura del repertorio de instrucciones
1. Registros y memoria visibles al programador
1.1. Registros de propósito general: R1-R7
Los registros R1-R7 son registros de 16 bits que se pueden utilizar como registros
fuente y destino en operaciones aritmeticológicas.
Ejemplos:
Instrucción
ADD R1,R2,R3
SUB R1,R2,R3
Operación realizada
R3 R1 + R2
R3 R1 - R2
También se pueden utilizar como registro Ãndice en operaciones de movimiento de
datos con memoria:
Ejemplos:
Instrucción
LOAD 4(R1),R2
STORE R1,-10(R2)
Operación realizada
R2 Mem(R1 + 4)
Mem(R2 - 10) R1
1.2. El registro R0
El registro R0 es un registro especial, también de 16 bits, que siempre contiene el
valor 0. Este registro puede utilizarse como registro fuente (por ejemplo para
inicializar otros registros a 0), pero no debe utilizarse para guardar el resultado de
una operación.
Ejemplos:
Instrucción
ADD R0,R0,R3
LOAD 16(R0),R2
STORE R1,200(R0)
Operación realizada
R3 0
R2 Mem(16)
Mem(200) R1
Laboratorio de Fundamentos de computadores
Facultad de Informática
Universidad Complutense de Madrid
Curso 2009/10
1.3. El registro de estado
El registro de estado contiene dos bits de estado (Z y N) que se actualizan después
de cada operación:
Bit
Z
N
Significado
Cero
Negativo
Se actualiza si
El resultado de la última operación es cero
El resultado de la última operación es negativo
1.4. La memoria
La memoria contiene 256 palabras de 16 bits. Las direcciones de memoria son por
tanto de 8 bits (de la 0 a la 255).
2. Modos de direccionamiento y tipos de operandos
2.1. Direccionamiento directo de registro: Ri
En este modo de direccionamiento, el operando está contenido en un registro de
propósito general (Ri), que se puede utilizar como operando fuente o destino
(excepto si se trata del registro R0)
Ejemplos:
Instrucción
ADD R1,R2,R3
SUB R1,R2,R3
Operación realizada
R3 R1 + R2
R3 R1 - R2
El operando almacenado en el registro es un valor de 16 bits expresado en C’2. El
rango de valores que puede este operando es el siguiente:
Operando en registro (16 bits – C’2): Rango [-32768, +32767]
Laboratorio de Fundamentos de computadores
Facultad de Informática
Universidad Complutense de Madrid
Curso 2009/10
2.2. Direccionamiento inmediato: #valor5
En este modo de direccionamiento, el operando está contenido en el propio código
de instrucción máquina. Este modo de direccionamiento sólo puede utilizarse como
operando fuente, nunca como operando destino.
Ejemplos:
Instrucción
ADDI R1,#8,R3
SUBI R1,#10,R3
Operación realizada
R3 R1 + 8
R3 R1 - 10
El operando inmediato es un valor de 5 bits expresado en C’2. El rango de valores
que puede este operando es el siguiente:
Operando inmediato (5 bits – C’2): Rango [-16, 15]
2.3. Direccionamiento con dirección base y desplazamiento: Dir_base8(Ri)
En este modo de direccionamiento, el operando está contenido memoria. La
dirección de memoria del operando se calcula como la suma de la dirección base
(valor de 8 bits) y el contenido del registro Ãndice (Ri).
Este modo de direccionamiento se puede utilizar como operando fuente en
operaciones de LOAD (movimiento de memoria a registro) y como operando
destino en operaciones de STORE (movimiento de registro a memoria)
Ejemplos:
Instrucción
LOAD 4(R1),R2
STORE R1,10(R2)
Operación realizada
R2 Mem(R1 + 4)
Mem(R2 + 10) R1
2.4. Direccionamiento absoluto: Dir_absoluta8
En este modo de direccionamiento el operando expresa una dirección de memoria
de 8 bits. Este modo de direccionamiento se utiliza únicamente en las instrucciones
de salto.
Ejemplos:
Laboratorio de Fundamentos de computadores
Facultad de Informática
Universidad Complutense de Madrid
Instrucción
BR 56
Operación realizada
PC 56
Curso 2009/10
3. Repertorio de instrucciones
3.1. Instrucciones aritmeticológicas
(NOTA: La instrucción ASR es equivalente a dividir por 2)
3.2. Instrucciones de acceso a memoria:
Laboratorio de Fundamentos de computadores
Facultad de Informática
Universidad Complutense de Madrid
3.3. Instrucciones de salto
Curso 2009/10
Laboratorio de Fundamentos de computadores
Facultad de Informática
Universidad Complutense de Madrid
Curso 2009/10
El proceso de ensamblado
1. Directivas de ensamblador
Las directivas de ensamblador controlan acciones auxiliares que se realizan
durante el proceso de ensamblado, tales como reservar posiciones de memoria,
inicializar posiciones de memoria a un determinado valor, definir etiquetas, indicar
el inicio y el final del programa, o definir macros. Las directivas no son traducibles a
código máquina.
2. El ensamblado de programas
El proceso de ensamblado consiste en la traducción de un programa escrito en
ensamblador a lenguaje máquina. Esta traducción es directa e inmediata, ya que
las instrucciones en ensamblador no son más que nemotécnicos de las
instrucciones máquina que ejecuta directamente la CPU.
2.1. Ensamblado de programas sin macros
Si el programa no contiene macros, lo editaremos con un editor de texto (por
ejemplo, notepad) con la extensión .asm, por ejemplo: prog.asm
Laboratorio de Fundamentos de computadores
Facultad de Informática
Universidad Complutense de Madrid
Curso 2009/10
Para ensamblar el programa, abrir una ventana MS-DOS y ejecutar la siguiente
orden:
posten prog.asm
Esta orden genera un fichero con el mismo nombre, pero con extensión .cod
(prog.cod). Este fichero contiene el programa binario en lenguaje máquina que se
deberá simular con posterioridad en el simulador de la máquina rudimentaria.
El esquema del procedimiento serÃa el siguiente:
posten prog.asm
posten prog.asm
2.2. Ensamblado de programas con macros
Si el programa sà contiene macros, será necesario editar dos ficheros distintos
(usando cualquier editor de texto, por ejemplo notepad), ambos deberán llamarse
con la extensión .mr, por ejemplo:
• prog.mr que contendrá el código ensamblador del programa
• macros.mr que contendrá las macros utilizadas en el programa
lugar es necesario
Para ensamblar el programa, en primer
llamar al
preensamblador, que se encarga de expandir las macros. Para preensamblar el
programa, abrir una ventana MS-DOS y ejecutar la siguiente orden:
pren prog.mr macros.mr
Esta orden genera un fichero con el mismo nombre que el programa, pero con
extensión .asm (prog.asm), que contiene el código ensamblador con las macros
expandidas. A continuación es necesario llamar al programa ensamblador para
convertir este programa a código máquina, mediante la siguiente orden
Laboratorio de Fundamentos de computadores
Facultad de Informática
Universidad Complutense de Madrid
Curso 2009/10
posten prog.asm
Esta orden genera un fichero con el mismo nombre, pero con extensión .cod
(prog.cod), que contiene el programa binario en lenguaje máquina.
El procedimeinto completo serÃa el siguiente:
pren prog.mr macros.mr
posten prog.asm
Laboratorio de Fundamentos de computadores
Facultad de Informática
Universidad Complutense de Madrid
Curso 2009/10
3. Simulador de la máquina rudimentaria
El simulador de la Máquina Rudimentaria ha sido desarrollado por el Departamento
de Arquitectura de Computadores de la Universidad Politécnica de Cataluña y se
puede descargar de la siguiente dirección:
ftp://ftp.ac.upc.es/pub/archives/mr/fuentes
Para arrancar el simulador de la máquina rudimentaria, buscar la aplicación Mr.exe
con el siguiente icono:
Mr.exe
Se abrirá la siguiente ventana:
Laboratorio de Fundamentos de computadores
Facultad de Informática
Universidad Complutense de Madrid
Curso 2009/10
3.1. Carga del programa
Utilizar la opción Cargar del menú Archivo y seleccionar el programa deseado con
extensión .cod
3.2. Ejecución del programa
Ejecución del programa completo
Para ejecutar el programa completo, de principio a fin, ir al menú Ejecutar y
seleccionar la opción Run. Opcionalmente también se puede utilizar la tecla F9
Ejecución instrucción a instrucción
Para realizar una ejecución detallada del programa, instrucción a instrucción, ir al
menú Ejecutar y seleccionar la opción Step. Opcionalmente también se puede
utilizar la tecla F8.
Esta opción puede ser muy útil para depurar el programa
Ejecución ciclo a ciclo
Para ejecutar realizar una ejecución aún más detallada del programa, distinguiendo
entre los distintos ciclos de una instrucción, ir al menú Ejecutar y seleccionar la
opción Cicle. Opcionalmente también se puede utilizar la tecla F7.
Nótese que esta opción es interesante únicamente si deseamos re
Comentarios de: PARTE II: Programación en ensamblador (0)
No hay comentarios