Documentos de Académico
Documentos de Profesional
Documentos de Cultura
De acuerdo con esta idea, el diseño real de la computadora también es simple, como
verá.
(La belleza del diseño es que estas operaciones simples pueden usarse para
resolver problemas extremadamente complejos. El desafío del programador, por
supuesto, es producir la secuencia exacta de operaciones para realizar una tarea
determinada correctamente en todas las circunstancias posibles, ya que cualquier
error en la selección o secuencia de operaciones resultará en un programa "con
errores". Con la gran cantidad de instrucciones requeridas por los programas
modernos, no es sorprendente que algunos de los programas de hoy estén
realmente libres de errores.
El modelo que usaremos se llama Little Man Computer (LMC). El LMC original fue
creado por el Dr. Stuart Madnick en el MIT en 1965. En 1979, el Dr. Madnick produjo
una nueva versión del LMC, con un conjunto de instrucciones ligeramente
modificado; La última versión se utiliza en este libro. Es una fortaleza del modelo
original que opera de manera tan similar a una computadora real que aún es una
representación precisa de la forma en que funcionan las computadoras treinta y cinco
años después de su introducción.
El LMC consiste en una sala de correo amurallada, representada por la línea oscura
que rodea al modelo en el diagrama. Dentro de la sala de correo hay varios objetos:
Primero, hay una serie de cien buzones, cada uno numerado con una dirección que
va de 00 a 99. Se elige este sistema de numeración porque cada dirección del buzón
se puede representar con dos dígitos, y este es el número máximo de buzones que
se pueden representar por dos dígitos decimales.
Cada buzón está diseñado para contener una sola hoja de papel, sobre la cual se
escribe un número decimal de tres dígitos. Tenga en cuenta cuidadosamente que el
contenido de un buzón no es el mismo que la dirección de un buzón. Esta idea es
coherente con lo que ya sabe acerca de su casilla postal: el número de su casilla
postal identifica dónde va a recoger su correo, pero esto no tiene relación con el
contenido real de las letras que encuentra en ese buzón.
En tercer lugar, hay un contador manual de dos dígitos, el tipo en el que hace clic
para incrementar el conteo.
Finalmente, está el hombrecito. Será su papel realizar ciertas tareas que se definirán
en breve.
Nos gustaría que el hombrecito haga un trabajo útil. Para este propósito, hemos
inventado un pequeño grupo de instrucciones que él puede realizar. Cada instrucción
constará de un solo dígito. Usaremos el primer dígito de un número de tres dígitos
para decirle al hombrecito qué operación realizar.
En algunos casos, la operación requerirá que Little Man use un buzón particular para
almacenar o recuperar datos (¡en forma de números de tres dígitos, por supuesto!).
Debido a que la instrucción solo requiere un dígito, podemos usar los otros dos
dígitos en un número de tres dígitos para indicar la dirección de buzón apropiada
para usar como parte de la instrucción. Por lo tanto, al usar los tres dígitos en una
hoja de papel, podemos describir una instrucción para Little Man de acuerdo con el
siguiente diagrama:
La parte de instrucciones del código de tres dígitos también se conoce como "código
de operación" o "código de operación para abreviar". El número de código de
operación asignado a una instrucción en particular es arbitrario, seleccionado por el
diseñador de la computadora en función de varios factores arquitectónicos y de
implementación. Los códigos de operación utilizados por el autor se ajustan a la
versión de 1979 del modelo Little Man Computer.
The Little Man se acerca a la dirección del buzón especificada en la instrucción. Lee
el número de tres dígitos ubicado en ese buzón, y luego se acerca a la calculadora y
marca ese número en la calculadora. El número de tres dígitos en el buzón no se
modifica, pero, por supuesto, el número original en la calculadora se reemplaza por
el nuevo número.
GUARDAR instrucción — código de operación 3
Esta instrucción es muy similar a la instrucción LOAD. The Little Man se acerca a la
dirección del buzón especificada en la instrucción. Lee el número de tres dígitos
ubicado en el buzón y luego se acerca a la calculadora y lo agrega al número que ya
está en la calculadora. El número en el buzón no ha cambiado.
Esta instrucción es la misma que la instrucción ADD, excepto que Little Man resta el
valor del buzón del valor de la calculadora. El resultado de una resta puede dejar un
valor negativo en la calculadora. El Capítulo 5 discutió el uso de complementos para
implementar valores negativos, pero por simplicidad, el modelo LMC ignora esta
solución. Para los propósitos de nuestro modelo LMC, simplemente asumiremos que
la calculadora mantiene y maneja los valores negativos correctamente, y proporciona
un signo menos como indicador para indicar que el valor es negativo. Sin embargo,
Little Man no puede manejar números negativos fuera de la calculadora porque no
hay ninguna disposición en el modelo para almacenar el signo negativo dentro de la
restricción del sistema numérico de tres dígitos utilizado.
Instrucción de ENTRADA (o lea, si lo prefiere): código de opción 9, ‘‘ ‘’ ’’ 01
The Little Man se acerca a la calculadora y anota el número que ve allí en una hoja
de papel. Luego camina hacia la canasta de salida y coloca la hoja de papel allí para
que el usuario la recoja fuera de la sala de correo. El número original en la
calculadora no ha cambiado. Cada instrucción de SALIDA coloca una sola hoja de
papel en la canasta de salida. Múltiples salidas requerirán el uso de múltiples
instrucciones de SALIDA.
Las instrucciones que hemos definido hasta ahora se dividen en cuatro categorías:
■ instrucciones que mueven datos de una parte de la LMC a otra (LOAD, STORE)
Sin discutir cómo llegaron allí, por ahora supondremos que las instrucciones se
almacenan en los buzones, comenzando en el número de buzón 00. The Little Man
llevará a cabo las instrucciones observando el valor en el contador de ubicación de
instrucciones y ejecutando la instrucción encontrada en el Buzón cuya dirección tiene
ese valor. Cada vez que el Hombre pequeño completa una instrucción, caminará
hacia el contador de ubicación de la instrucción y lo incrementará. Nuevamente
realizará la instrucción especificada por el contador. Por lo tanto, Little Man ejecutará
las instrucciones en los buzones secuencialmente, comenzando desde el buzón 00.
Ahora que tenemos un método para guiar a Little Man a través de un programa de
pasos de instrucciones, consideremos un programa simple que permitirá al usuario
fuera de la sala de correo usar la computadora Little Man para sumar dos números.
El usuario colocará dos números en la cesta de entrada. La suma de los dos
aparecerá como resultado en la cesta de salida. La pregunta es qué instrucciones
deberemos proporcionar para que Little Man realice esta operación.
ENTRADA 901
Como el Hombre pequeño debe tener acceso a los datos, el primer paso,
claramente, es hacer que el Hombre pequeño lea el primer número de la cesta en la
calculadora. Esta instrucción deja el primer número para ser agregado en la
calculadora.
TIENDA 99 399
Tenga en cuenta que no es posible que el Hombre pequeño simplemente lea otro
número en la calculadora. Hacer eso destruiría el primer número. En su lugar,
primero debemos guardar el primer número en algún lugar.
Mailbox 99 fue elegido simplemente porque está claramente fuera del camino del
programa.
Cualquier otro lugar que esté más allá del final del programa es igualmente
aceptable.
Almacenar el número en una ubicación que esté dentro del programa destruiría la
instrucción en esa ubicación. Esto significaría que cuando el Hombre pequeño fuera
a realizar esa instrucción, no estaría allí.
Más en serio, no hay forma de que Little Man distinga entre una instrucción y un
dato, ya que ambos están compuestos por números de tres dígitos. Por lo tanto, si
tuviéramos que almacenar datos en una ubicación que el Hombre pequeño usará
como una instrucción, el Hombre pequeño simplemente intentaría realizar los datos
como si fuera una instrucción. Como no hay forma de predecir lo que podrían
contener los datos, no hay manera de predecir lo que podría hacer el programa.
Con el primer número guardado, estamos listos para que Little Man lea el segundo
número en la calculadora.
ADD 99 199
Tenga en cuenta que no hay ninguna razón específica para guardar el segundo
número. Si íbamos a realizar alguna operación que requiriera la reutilización del
segundo número, podría almacenarse en algún lugar.
En este programa, sin embargo, tenemos ambos números para realizar la suma. El
resultado es, por supuesto, dejado en la calculadora.
SALIDA 902
Todo lo que queda es que nosotros tengamos a Little Man enviando el resultado a la
canasta de salida.
El programa está completo, así que permitimos que el hombrecito tome un descanso.
Ya que tuvimos cuidado de ubicar los datos fuera del programa, este programa se
puede volver a ejecutar simplemente diciéndole al Hombre pequeño que comience
de nuevo.
UN CONJUNTO DE INSTRUCCIONES EXTENDIDO
Tenga en cuenta que esta instrucción también utiliza los dígitos de la dirección de
una manera inusual, ya que Little Man no usa los datos en la dirección especificada.
De hecho, el Hombre pequeño espera encontrar una instrucción en esa dirección, la
siguiente que se realizará.
The Little Man caminará hacia la calculadora y observará el número almacenado allí.
Si su valor actual es cero, se dirigirá al contador de ubicación de la instrucción y
modificará su valor para que se corresponda con la dirección especificada dentro de
la instrucción. La siguiente instrucción ejecutada por el hombrecito se ubicará en esa
dirección.
The Little Man caminará hacia la calculadora y observará el número almacenado allí.
Si su valor actual es positivo, se dirigirá al contador de ubicación de la instrucción y
modificará su valor para que se corresponda con la dirección especificada dentro de
la instrucción. La siguiente instrucción ejecutada por el hombrecito se ubicará en esa
dirección.
WHILE Value = 0 DO
Task;
NextStatement
Este bucle podría implementarse usando la instrucción Little Man BRANCH de la
siguiente manera.
60 Siguiente declaración
EJEMPLO
Aquí hay un ejemplo de un programa de Little Man que usa las instrucciones de
BRANCH para alterar el flujo del programa. Este programa encuentra la diferencia
positiva entre dos números (a veces conocida como la magnitud absoluta de la
diferencia). Para mayor comodidad, estamos introduciendo un conjunto de
abreviaturas para cada instrucción. Estas abreviaturas son conocidas como
mnemónicas (el primer "m" es silencioso). Una vez que aprenda a leer estos
mnemónicos, encontrará que los programas escritos con mnemónicos generalmente
son fáciles de leer. Es más común escribir programas de esta manera. Por un
tiempo, continuaremos imprimiendo tanto la mnemotécnica como el código, pero
eventualmente, dejaremos de imprimir el código. La mayoría de los programas
también están escritos con comentarios, que ayudan a aclarar el código. Las
instrucciones mnemotécnicas que usaremos se muestran en la Figura 6.3.
La abreviatura DAT se usa para indicar que un buzón particular se usará para
almacenar datos.
Los datos se pueden especificar por adelantado, por ejemplo, para usar como una
constante, o puede ser cero si la ubicación en particular se va a usar para almacenar
los datos más tarde, durante la ejecución del programa.
EL CICLO DE INSTRUCCIONES
Nos referiremos a los pasos que el Hombre pequeño toma para realizar una
instrucción como el ciclo de instrucción. Este ciclo, que es similar para todas las
instrucciones, se puede dividir en dos partes:
La parte de recuperación del ciclo es idéntica para cada instrucción. The Little Man
camina hacia el mostrador de ubicación y lee su valor. Luego va al buzón con la
dirección que corresponde a ese valor y lee el número de tres dígitos almacenado
allí. Ese número de tres dígitos es la instrucción a realizar. Esto se representa en los
dibujos de la Figura 6.5a.
La parte de recuperación del ciclo tiene que ocurrir primero: hasta que el Hombre
pequeño haya realizado la operación de recuperación, ¡ni siquiera sabe qué
instrucción ejecutará!
La parte de ejecución de cada instrucción es, por supuesto, diferente para cada
instrucción.
Pero incluso aquí, hay muchas similitudes. Las primeras seis instrucciones requieren
que el Hombre pequeño mueva los datos de un lugar de la sala de correo a otro. Las
primeras cuatro instrucciones involucran el uso de una segunda ubicación de buzón
para los datos.
Observe que las instrucciones ADD y SUBTRACT son casi idénticas a las
instrucciones LOAD. La única diferencia ocurre durante el paso de ejecución, cuando
el Little Man ingresa el número en la calculadora. En el caso de las instrucciones
aritméticas, el hombrecito suma o resta el número que lleva en la calculadora, en
lugar de simplemente
entrando en ella
Las principales pautas que definen una arquitectura de von Neumann incluyen:
■ La memoria se dirige de forma lineal; es decir, hay una sola dirección numérica
secuencial para cada ubicación de memoria.
RESUMEN Y REVISIÓN
The Little Man Computer cumple con todos los requisitos de una arquitectura de
computadora de von Neumann.
The Little Man realiza el trabajo siguiendo instrucciones simples, que se describen
con números de tres dígitos. El primer dígito especifica una operación. Los dos
últimos dígitos se usan para varios propósitos, pero generalmente para apuntar a una
dirección. Las instrucciones proporcionan operaciones que pueden mover datos
entre las ranuras de correo y la calculadora, mover datos entre la calculadora y las
cestas de entrada y salida, realizar sumas y restas, y permitir que Little Man deje de
funcionar. También hay instrucciones que hacen que Little Man cambie el orden en el
que se ejecutan las instrucciones, ya sea de forma incondicional o en función del
valor en la calculadora.
Ciclo de instrucción
(LMC)
Mnemotécnica
Código de operación
6.1 Sin mirar el libro, dibuja una computadora Little Man. Etiqueta cada uno de los
componentes en tu dibujo.
6.2 Las instrucciones en la computadora Little Man son tres dígitos, divididos en dos
partes.
6.3 Describa, paso a paso, lo que hace Little Man para ejecutar una instrucción de
STORE.
6.4 Describa, paso a paso, lo que hace Little Man para ejecutar una instrucción
INPUT.
6.5 Extienda el programa simple que se muestra en la Sección 6.3 para aceptar tres
entradas de un usuario, agregarlas y generar el resultado.
6.6 Si un usuario desea ingresar dos números, ¿qué debe hacer el programa Little
Man antes de ingresar el segundo número? ¿Por qué?
6.7 Escriba un programa de Little Man que acepte dos números como entrada y
emita los números en orden inverso.
6.8 Escriba un programa de Little Man que acepte dos números como entrada, resta
el primero del segundo y genera el resultado.
6.9 Explique con cuidado lo que hará el hombrecito cuando ejecute una instrucción
JUMP.
6.12 Incluso si se queda sin instrucciones para ejecutar, el Hombre pequeño solo
deja de intentar ejecutar las instrucciones bajo una condición. ¿Cuál es esa
condición? ¿Qué sucede si el hombrecito se queda sin instrucciones y esa condición
no se cumple?
6.13 El ciclo de instrucción se divide en dos fases. Nombra cada fase. La primera
fase es la misma para cada instrucción. ¿Cuál es el propósito de la primera fase que
hace esto cierto? Explica lo que hace el hombrecito durante la primera fase.
6.14 ¿Qué hace el Hombre Pequeño durante la segunda fase de un descanso para
tomar café o detener la instrucción?