Professional Documents
Culture Documents
computador
v 3.0.
Objetivo de la Práctica
• Ayudar a comprender el funcionamiento y la estructura de un computador Von
Neuman mediante el estudio y la programación de un modelo sencillo.
Índice
• Utilizan notaciones cercanas a las habituales en el ámbito en que se usan. Con estos
lenguajes las operaciones se expresan con sentencias o frases muy parecidas al
lenguaje matemático o al lenguaje natural (inglés).
Las instruccione
i es máquina se almacennan y se trattan
en ele computaador como cadenas de “unos” y
“ceroos”. Se pueden
p esccribir direectamente en
binarrio, o bien utilizar
u códiigos intermeedios como o el
octall o el heexadecimal. Como see puede uno u
imagginar esta es una forrma muy engorrosa de
escriibir y maneejar estas innformacionees, por lo que
q
la programacción directa utilizzando esttas
instruucciones reequiere de técnicos
t especialistas en
el proopio hardware de la mááquina.
• Código de operación:
C o e
especifica la operaciónn que realizaa la instruccción.
• C
Campo de modo de direccionam
d miento: Inddica la formma en la queq se
e
expresan loss operandoss, aunque esto
e puede estar
e implíccito en el có ódigo
d operaciónn.
de
• D
Direcciones s de los opeerandos: Dependiendoo de la operración, pued de ser
q en la insstrucción see expliciten uno, dos o más
que m operanndos, cada unou de
loos cuales puuede direcciionarse de forma
f distinnta.
• Realizan un
R na única y sencilla fuunción, por lo que su decodificacción e
innterpretacióón es muy seencilla.
• E
Emplean u númeroo fijo de operandos
un o con una representa ación
d
determinad da: No debenn tener una sintaxis ammbigua.
• L codificaación de las instrucciiones es baastante sisttemática, puesto
La p
q ello faciilita su decoodificación. Siguen el mismo
que m patróón.
• L instruccciones son
Las n autoconttenidas e independieentes. Es decir,d
c
contienen tooda la inforrmación neccesaria paraa ejecutarsee, no requiriendo
d la información de
de d otras in nstruccionees y no ddependiend do su
innterpretacióón de la posición que ocupan en laa memoria o en el progrrama.
1.2.3.- Definición de un juego de instrucciones
• Debe ser eficaz: Ha de permitir una alta velocidad de cálculo, sin exigir
a cambio una alta complicación de la Unidad de Control ni de la Unidad
Aritmética.
• Transferencia de información
• Aritmético-Lógicas y de desplazamientos de bits.
• Trasnferencias de control: Saltos, llamadas a procedimientos, Parada
del procesador,...
• Misceláneas: Entrada-Salida, Temporizaciones, ...
Las instrucciones MMX pueden empaquetar varios tipos de datos dentro de estos
registros de 64 bits:
Estos tipos de datos resultan útiles debido a que, normalmente, los programas
multimedia trabajan con pequeñas unidades de datos.
Ejemplo: Un píxel de color en modo color real , la resolución de color más
utilizada, usa 24 bits: 1 byte por cada color RGB. Este modo permite trabajar
con hasta 16,7 millones de colores, mucho más de lo que es capaz de distinguir
el ojo humano.
2. Cuando se ejecuta una instrucción MMX, los ocho valores de píxel de cada
registro MMX se procesan simultáneamente. Aquí, la instrucción compara
los píxels de los registros 1 y 2 en busca de igualdad.
• Escribir las instrucciones utilizando para representar los códigos de operación una
notación simbólica o mnemotécnica en lugar de códigos numéricos. Normalmente
estos códigos simbólicos están constituidos por unas pocas letras que, en forma
abreviada indican la operación a realizar. Usualmente, debido al origen de los
fabricantes de computadores, los nemotécnicos son abreviaturas en inglés.
Como hemos visto el formato de instrucción está constituido normalmente por los
campos:
Cada fabricante de procesadores impone su propio juego de instrucciones que tiene que
proporcionar a los fabricantes de compiladores para que elaboren el código máquina
apropiado.
Está construido bajo una arquitectura de 10 bits. Tanto el bus de datos y el bus de
direcciones son de 8 bits. Lo cual permite direccionar hasta 210 (1024) posiciones de
memoria distintas y representar hasta 210 (1024) datos distintos.
La representación de los números se hace en signo y magnitud. Con 108 bits, el rango
de números representables es de : [-1023,+1023].
INSTRUCCIONES DE TRANSFERENCIA
Instrucción Significado
(1) MOVE operando1, operando2 Carga el operando 2 en el operando 1,
cuando el operando 1 es un registro o una
posición de memoria.
Dependiendo del tipo de direccionamiento, así funcionará la instrucción. Uno de los dos
operandos debe ser un registro.
Ejemplo:
MOVE A, [Dirección]
Carga en el registro A el valor almacenado en la dirección especificada en la instrucción
MOVE [Dirección], B
Carga el contenido de B en la dirección de memoria especificada en la instrucción
MOVE #valor, A
Error, no está permitida esta operación.
Instrucción Significado
(2) ADD Operando1, Operando2 Carga en el registro A la suma del
operando1 más el operando2
Uno de los dos operandos debe ser un registro:
Ejemplo:
ADD B, #15
Carga en A el contenido de B más el valor 15
ADD [10], A
Carga en A el contenido de la dirección de memoria 10 más el contenido de A
ADD [10], #15
Error, no está permitida esta operación
Instrucción Significado
(3) SUBTRAC Operando1, Operando2 Carga en el registro A la resta del
operando1 menos el operando2
Uno de los dos operandos debe ser un registro:
Ejemplo:
SUBTRAC B, #15
Carga en A el contenido de B menos el valor 15
SUBTRAC [10], A
Carga en A el contenido de la dirección de memoria 10 menos el valor del registro A
SUBTRAC [10], #25
Error, no está permitida esta operación
Instrucción Significado
(4) INCREMENT registro Incrementa en 1 el valor del registro
indicado. El registro puede ser A ó B
Instrucción Significado
(5) MUL Operando1, Operando2 Carga en el registro A el producto del
operando1 por el operando2
Uno de los dos operandos debe ser un registro:
Ejemplo:
MUL A, #15
Carga en A el contenido de A por el valor 15
MUL [10], B
Carga en A el contenido de la dirección de memoria 10 por el valor del registro B
MUL [10], #25
Error, no está permitida esta operación
Instrucción Significado
(6) DIV Operando1, Operando2 Realiza la división del operando1 entre el
operando2 y Carga en el registro A el
cociente y en el registro B el resto
Uno de los dos operandos debe ser un registro:
Ejemplo:
DIV B, #15
Carga en A el contenido de B dividido entre 15 y en B el resto
DIV [10], A
Carga en A el contenido de la dirección de memoria 10 dividida entre A y en B el resto
DIV [10], #25
Error, no está permitida esta operación
INSTRUCCIONES DE COMUNICACIÓN
Instrucción Significado
(7) PORT Puerto, Registro Si el puerto es de entrada (IN) carga en el
registro indicado el contenido de ese
puerto
Si es de salida (OUT) carga en el puerto el
contenido del registro indicado
Los puertos se van a representar con la entrada y la salida estandar de la máquina:
Instrucción Significado
(8) STOP Detiene el funcionamiento del procesador
Dentro de un programa se pueden escribir tantas instrucciones STOP como se quiera, el
procesador se detendrá al encontrar la primera instrucción.
Instrucción Significado
(9) COMPARE registro, Operando Compara el contenido del registro indicado
con el operando indicado, estableciendo
los indicadores C y Z de la máquina
Instrucción Significado
(A) JUMP TO Dirección Carga en el CP la dirección de
memoria especificada en la instrucción
Instrucción Significado
(B) JUMP IF LESS THAN Dirección Almacena en el CP la dirección
especificada en la instrucción si C=1
Instrucción Significado
(C) JUMP IF GREATER THAN Dirección Almacena en el CP la dirección
especificada en la instrucción si C=0
Instrucción Significado
(D) JUMP IF EQUAL TO Dirección Almacena en el PC la dirección
especificada en la instrucción si Z=1
Instrucción Significado
(E) JUMP IF NOT EQUAL TO Dirección Almacena en el PC la dirección
especificada en la instrucción si Z=0
• Direccionamiento inmediato
Ejemplo: INCREMENT A
• Direccionamiento indirecto
• Deberán estar formados por una lista de instrucciones separadas por saltos de línea
(una instrucción debajo de otra) en un fichero de tipo texto con extensión hmj.
• La primera instrucción se almacena en la dirección de memoria 0, el contenido
inicial de los registros, de la memoria y de los indicadores es 0.
• Al principio de cada instrucción se deberá escribir el número de línea de esa
instrucción. Los números de línea no tienen porqué ser correlativos, pero si que
deben formar una sucesión monótona estrictamente creciente.
• Los comentarios se indican con “//“ y se considera comentario todo lo escrito
desde ahí hasta el final de la línea.
3.5.- Ejemplos de Programas
Ejemplo 1
Almacenar en A el valor de 8
0 MOVE A, #8
1 STOP
Ejemplo 2
0 MOVE A, #67
1 MOVE I, #10
2 MOVE [I], A
3 STOP
Ejemplo 3
Almacena en A el resultado de 20 + 15 – 5
0 MOVE A, #15
1 SUBTRACT A, #5 //A:=15-5
2 ADD A, #20 //A:=20+10
3 STOP
Ejemplo 4
0 PORT IN, A
1 COMPARE A, [10]
2 JUMP IF NOT EQUAL TO 5
3 PORT OUT, A
4 STOP
Ejemplo 5
Mostrar por el puerto de salida la serie numérica de 0 hasta un número dado por el
puerto de entrada.
Ejemplo 6
0 MOVE B, #7
1 MOVE [200], B
2 MOVE B, #0
3 MUL B, [200]
4 PORT OUT A
5 INCREMENT B
6 COMPARE B, #11
7 JUMP IF LESS THAN 3
8 STOP
Ejemplo 7
Dados dos números por el puerto de entrada, mostrarlos por orden creciente en el puerto
de salida.
0 PORT IN, A
1 PORT IN, B
2 COMPARE A, B
3 JUMP IF GREATER THAN 7
4 PORT OUT A
5 PORT OUT B
6 JUMP TO 9
7 PORT OUT B
8 PORT OUT A
9 STOP
Ejemplo 8
0 PORT IN, A
1 MOVE [200], A //almaceno el número de elementos de la serie que tengo que mostrar
2 MOVE A, #0
3 MOVE [201],A //almaceno el número de elementos de la serie que llevo mostrados
4 COMPARE A, [200]
5 JUMP IF LESS THAN 7
6 JUMP 30
7 MOVE A, #1
8 PORT OUT A //Muestra 1
9 MOVE [201],A
10 COMPARE A, [200]
11 JUMP IF LESS THAN 13
12 JUMP TO 31
13 MOVE B, #1
14 PORT OUT A //Muestra 1
15 MOVE [202], A //salvo el valor de A
16 INCREMENT A
17 MOVE [201], A
18 COMPARE A, [200]
19 JUMP IF LESS THAN 21
20 JUMP TO 31
21 MOVE A, [202]
22 ADD A, B
23 MOVE B, [202]
24 PORT OUT A //Muestra el siguiente elemento de la serie
25 MOVE [202], A
26 MOVE A, [201]
27 INCREMENT A
28 MOVE [201], A
29 COMPARE A, [200]
30 JUMP IF LESS THAN 21
31 STOP
3.6.- Programa compilador de ficheros HMJ
El programa funciona bajo el Sistema Operativo MS-DOS y se ejecuta :
C:\> HMJ-10.exe
hmj>_
Sobre ese entorno se pueden ejecutar programas hmj y comprobar el valor de los
registros, los indicadores y las posiciones de memoria.
Ejemplo:
4.- Ejercicios
Programa 1 (Práctica Junio 2001):
Implementar un programa que lea por el puerto de entrada un número entero positivo n y
muestre por el puerto de salida un 1 si el número es primo y un 0 si no lo es.
Implementar un programa que lea por el puerto de entrada n números enteros y los muestre por
el puerto de salida ordenados de menor a mayor. El valor de n debe ser leído por la máquina.
Implementar un programa que lea por el puerto de entrada un número n y muestre por el puerto
de salida, los n primeros números primos.
Implementar un programa que lea por el puerto de entrada dos números enteros positivos: (a, b)
y muestre por el puerto de salida su Máximo Común Divisor (mcd).
Implementar un programa que lea por el puerto de entrada dos números enteros positivos: (a, b)
y muestre por el puerto de salida su Mínimo Común Múltiplo (mcm).
Realizar los siguientes programas utilizando las instrucciones del computador HMJ-8:
Realiza el siguiente programa utilizando las instrucciones del computador HMJ-8: Dado un
número n por el puerto de entrada, mostrar 1 si es primo y 0 si no lo es.
El logaritmo por defecto en base n de un número X es el mayor entero p tal que np ≤ X. Por
ejemplo, el logaritmo por defecto en base 10 del número 9 es 0, el de 85 es 1, el de 277 es 2, etc,
...
Diseñar un programa en ensamblador del computador sencillo HMJ-10 que reciba como
parámetros sendos números n y X y calcule el logaritmo por defecto en base n del número X.
Los números n y X son enteros positivos de 10 bits representados en signo y magnitud, y se
encuentran almacenados en los registros A y B respectivamente al comenzar la ejecución. El
programa devolverá el valor calculado por el puerto de salida. Suponer que X>0, y que siempre
se cumplirá que np<210, o sea, que np siempre cabra en un número de 10 bits.