Sunteți pe pagina 1din 15

ESTRUCTURA Y FUNCIONAMIENTO DE COMPUTADORAS II

UNIDAD 1: LENGUAJE DE MQUINA Y ENSAMBLADOR. PROCESADOR Z80.


(PARTE A)

Licenciatura en Ciencias de la Computacin

Departamento de Informtica

Facultad de Ciencias Exactas, Fsicas y Naturales

Universidad Nacional de San Juan

Estructura y Funcionamiento de Computadoras II

1.1. 1.1.1.

LENGUAJE DE MAQUINA Conjunto (set) de instrucciones

Si un programador utiliza un lenguaje de alto nivel, tal como Pascal o Ada, muy poco de la arquitectura de la mquina es visible. Un lmite donde el diseador de la computadora y el programador de sta pueden ver la misma mquina es en el conjunto de instrucciones de la mquina. Desde el punto de vista del diseador, el conjunto de instrucciones de la mquina proporciona los requerimientos funcionales para la CPU: la implantacin de la CPU es una tarea que en gran parte involucra establecer el conjunto de instrucciones de la mquina. Desde el lado de usuario, aquel que elige programar en lenguaje de mquina (o ms probablemente en lenguaje ensamblador; como se ver ms adelante) es quien se llega a enterar de los registros y estructura de la memoria, los tipos de datos soportados directamente por la mquina y el funcionamiento de la ALU. Una descripcin del conjunto de instrucciones de mquina permite explicar acabadamente la CPU de la computadora y cada una de las operaciones que ella puede realizar. Conjunto (Set) de Instrucciones Una computadora slo puede reconocer, interpretar y procesar un grupo definido y limitado de rdenes, que corresponden a las operaciones que puede realizar. Esto se lleva a cabo a travs de la ejecucin de instrucciones, que determinan la operacin de la CPU. A estas instrucciones se hace referencia como instrucciones de mquina o instrucciones de la computadora. La CPU puede ejecutar una variedad de funciones y stas se reflejan en la variedad de instrucciones definidas en ella. La coleccin de diferentes instrucciones que la CPU puede ejecutar es referida como el conjunto, repertorio o set de instrucciones y constituye el llamado LENGUAJE DE MAQUINA o CODIGO ABSOLUTO de esa computadora. Cada fabricante establece el SET correspondiente a una mquina en particular, de modo que ello constituye una caracterstica de diseo. Esa mquina est hecha para ejecutar esas instrucciones y ninguna otra. Por ejemplo: SUMAR al valor actual del registro Acumulador de la CPU, un nmero entero codificado en binario de punto fijo en 8 bits, almacenado en la memoria principal, almacenando el resultado en el Acumulador. SUMAR dos nmeros enteros codificados en binario de punto fijo en 16 bits, almacenados en registros de 16 bits de la CPU, almacenando el resultado en el primero de los registros que se indiquen como sumandos. TRANSFERIR un nmero entero de 8 bits, almacenado en registro de la CPU, a una posicin de almacenamiento en la memoria principal. COMPARAR dos cantidades enteras de 8 bits .... ETC. Los ejemplos muestran que cada instruccin requiere que se especifique con todo detalle no slo la operacin a realizar, sino otros datos sin los cuales no podra llevarse a cabo. Los dos primeros ejemplos lo ilustran claramente. En ambos casos se trata de la operacin de SUMAR, pero las dos instrucciones tienen diferencias sustanciales. Por lo tanto, dos computadoras diferentes contarn ambas con instrucciones de SUMA, pero pueden diferir enormemente en cuanto a los distintos tipos de esta operacin incluidos en su SET. El nmero de instrucciones que componen el SET es distinto para distintas mquinas. Sin embargo, existe un grupo bsico de operaciones que todas incluyen, aunque con caractersticas propias para cada mquina.

1.1.2.

Representacin de instrucciones

Dado que la representacin de la informacin dentro de la computadora es binaria, cada instruccin es un cdigo binario que puede ser interpretado por los circuitos de la CPU. A cada instruccin del SET le corresponde una determinada configuracin binaria, establecida por el
Lenguaje de Mquina y Ensamblador. Z80. 1

Estructura y Funcionamiento de Computadoras II

diseador, con ajuste a un formato determinado. Por ejemplo, la siguiente configuracin corresponde a la operacin de Sumar los contenidos de los registros R12 y R11 de la CPU, con almacenamiento del resultado en R12, en una CPU IBM S/370 0001101011001011 (Fig. 1) y la siguiente a una instruccin de salto incondicional a la direccin 9A33 (hexadecimal) de la memoria principal, en un microprocesador Z80 110000111001101000110011 (Fig. 2)

1.1.3.

Elementos de una instruccin de mquina

Cada instruccin debe contener la informacin requerida por la CPU para su ejecucin. La figura 8.1 muestra los pasos involucrados en la ejecucin de instrucciones y, por implicacin, define los elementos de una instruccin de mquina. Estos elementos son: Cdigo de operacin: Especifica la operacin a ser realizada (por ejemplo, SUMAR, E/S, TRANFERIR, ETC). La operacin est especificada por una configuracin de bits, conocido como el cdigo de operacin u opcode, que es parte del cdigo binario de la instruccin. Referencia del operando fuente: La operacin puede involucrar uno o ms operandos fuente, esto es, operandos que son entradas para la operacin. Referencia del operando resultado: La operacin puede producir un resultado. Referencia de la siguiente instruccin: sta le dice a la CPU dnde buscar la siguiente instruccin despus de que la ejecucin de esta instruccin se haya completado. La siguiente instruccin a ser buscada se localiza en la memoria principal o, en el caso de un sistema de memoria virtual, en la memoria principal o en la memoria secundaria (disco). En la mayora de los casos, la siguiente instruccin a ser buscada sigue de inmediato a la instruccin actual. En esos casos, no hay referencia explcita a la siguiente instruccin. Cuando es necesaria una referencia explcita, entonces se debe suministrar la direccin de la memoria principal o virtual.

Los operandos fuente y resultado pueden estar en una de tres reas: Memoria: En este caso, la instruccin debe suministrar las correspondientes direcciones. Registro de la CPU: Con raras excepciones, una CPU contiene uno o ms registros que pueden ser referenciados mediante instrucciones de mquina. Si slo existe un registro, la referencia a l puede ser implcita. Si existe ms de un registro, entonces a cada registro se le asigna un nmero nico y la instruccin debe contener el nmero del registro deseado. Dispositivo de E-S: La instruccin debe especificar el mdulo de E-S y el dispositivo para la operacin. Si se utiliza E-S mapeada a memoria, sta es otra direccin de la memoria principal o virtual.

1.1.4.

Formato de instrucciones

Una instruccin se divide en campos, en correspondencia a los elementos constituyentes de la instruccin. Esto se conoce como el formato de instruccin. El formato de las instrucciones constituye una caracterstica de diseo fijada por el fabricante, que
Lenguaje de Mquina y Ensamblador. Z80. 2

Estructura y Funcionamiento de Computadoras II

guarda estrecha relacin con las caractersticas fsicas (estructura, organizacin) del procesador. Esquemticamente, podemos representarlo como muestra la fig. 8.2.:

En el esquema, el cdigo de operacin ocupa los primeros 4 bits del formato. Es comn que el cdigo de operacin ocupe los ocho primeros bits (primer byte u octeto) de la instruccin. Dado que 8 bits permiten 28 combinaciones distintas, es posible disponer, en este caso, de hasta 256 instrucciones. Si el SET de instrucciones contuviera un nmero mayor de ellas, debera entonces destinarse un nmero mayor de bits para el cdigo de operacin. La extensin del campo o zona de referencia de operandos depende del tipo de operacin y de caractersticas de la mquina. Por ejemplo, en el caso de la Fig. 2, el operando es la direccin del salto (bifurcacin). Como en el microprocesador Z80 las direcciones son informaciones de 16 bits, la extensin del campo de operando ser de 16 bits. Sin embargo, una mquina con una estructura de direcciones de mayor capacidad requerir, para una operacin idntica, un campo de mayor extensin para el operando. Por otro lado, en una misma mquina, distintas instrucciones tendrn distintas extensiones del campo de operandos. Por ejemplo, en el Z80 la siguiente instruccin corresponde a la suma de una constante de 8 bits (el nmero decimal 25), al registro acumulador de la UAL: 1100011000011001 (Fig. 3) Esta instruccin consta de slo un octeto en el campo de operando, empleado para representar la constante de 8 bits, tal como est definido en la operacin. Existen, incluso, instrucciones que no contienen campo de operandos, o sea que solamente constan del cdigo de operacin. La siguiente instruccin, por ejemplo, opera la inversa booleana (NOT) sobre el contenido del registro acumulador, en un Z80: 00101111 (Fig. 4) Como esta operacin, dentro del set o repertorio, est definida exclusivamente para el acumulador, no es necesario consignar el operando (el acumulador) explcitamente. Es, entonces, una instruccin con operando implcito. Otros casos en que la instruccin no especifica operando corresponden a ciertas operaciones de control (operaciones de pausa, detencin, etc). En sntesis, el formato de las instrucciones y el cdigo de operacin son asignados por el fabricante al disear la computadora. Distintas CPU tienen, en general, distintos formatos de instrucciones y en la mayora de los casos, para una misma CPU el conjunto de instrucciones utiliza ms de un formato. La CPU debe estar habilitada para extraer los datos de los varios campos de instruccin a fin de realizar la operacin requerida. Es importante destacar que el cdigo de operacin no slo informa a la Unidad de Control la operacin que se va a realizar sino que brinda, adems, informacin acerca de: El tipo de los operandos (numricos o no-numricos, el convenio de codificacin en que estn representados: binario punto fijo, punto flotante, BCD, ASCII, EBCDIC. etc.). La ubicacin de los datos: en un registro, en la memoria (ya sea en una ubicacin propia o bin, como se muestra en el ejemplo de la Fig. 3, dentro de la misma instruccin)

1.1.5.

Tipos de instrucciones

Considere una instruccin en lenguaje de alto nivel que podra estar expresada en un lenguaje tal como BASIC o FORTRAN. Por ejemplo: X=X+Y Esta declaracin instruye a la computadora para sumar el valor almacenado en Y al valor almacenado en X y poner el resultado en X. Cmo podra esto llevarse a cabo con instrucciones de mquina? Vamos a suponer que las variables X y Y corresponden a las localidades 513 y 514. Si suponemos un conjunto de instrucciones de mquina simple, esta operacin podra llevarse a cabo con tres
Lenguaje de Mquina y Ensamblador. Z80. 3

Estructura y Funcionamiento de Computadoras II

instrucciones: 1. Cargar un registro con el contenido de la localidad 513 de memoria. 2. Sumar el contenido de la localidad 514 de memoria al registro. 3. Almacenar el contenido del registro en la localidad 513 de memoria. Como se puede ver, la simple instruccin de BASIC puede requerir tres instrucciones de la mquina. Esto es tpico de la relacin entre un lenguaje de alto nivel y un lenguaje de mquina. Un lenguaje de alto nivel expresa las operaciones en una forma algebraica concisa, usando variables. Un lenguaje de mquina expresa las operaciones en una forma bsica e involucra el movimiento de datos hacia o desde registros. Con este ejemplo simple como gua, vamos a considerar los tipos de instrucciones que deben estar incluidos en una computadora prctica. Una computadora debe tener un conjunto de instrucciones que le permitan al usuario formular cualquier mecanismo de procesamiento de datos. Otra manera de ver esto es considerar las capacidades de un lenguaje de programacin de alto nivel. Cualquier programa escrito en un lenguaje de alto nivel se debe convertir a un lenguaje de mquina para poder ser ejecutado. Por consiguiente, el conjunto de instrucciones de la mquina tiene que ser suficiente para poder expresar cualquiera de las instrucciones desde un lenguaje de alto nivel. Con esto en mente, podemos categorizar los tipos de instrucciones como sigue: Procesamiento de datos: Instrucciones aritmticas y lgicas. Almacenamiento de datos: Instrucciones de memoria. Movimiento de datos: Instrucciones de E-S. Control: Instrucciones de prueba y bifurcacin. Las instrucciones aritmticas proporcionan capacidades computacionales para el procesamiento de datos numricos. Las instrucciones lgicas (Booleanas) operan sobre los bits de una palabra como bits en vez de como nmeros; de esta manera, proporcionan capacidades para el procesamiento de cualquier otro tipo de datos que el usuario pueda desear emplear. Estas operaciones se ejecutan, principalmente, sobre datos en los registros de la CPU. Por consiguiente, deben existir instrucciones de memoria para mover datos entre la memoria y los registros. Las instrucciones de E-S son necesarias para transferir programas y datos a la memoria y que los resultados de clculos regresen al usuario. Las instrucciones de prueba se emplean para verificar el valor de una palabra de datos o el estado de un clculo. Las instrucciones de bifurcacin se usan entonces para saltar a un conjunto diferente de instrucciones dependiendo de la decisin hecha.

1.1.6.

Nmero de direcciones

Una de las maneras tradicionales de describir la arquitectura del procesador es en trminos del nmero de direcciones contenidas en cada instruccin. Esta dimensin se ha vuelto menos significativa con el incremento de la complejidad del diseo de la CPU. No obstante, es til este punto para traer y analizar tal distincin. Cul es el nmero mximo de direcciones que se podra necesitar en una instruccin? Es evidente que las instrucciones lgicas y aritmticas requerirn la mayora de los operandos. De hecho, casi todas las operaciones lgicas y aritmticas son unitarias (un operando) o binarias (dos operandos). Por lo tanto, necesitaramos un mximo de dos direcciones para hacer referencia a los operandos. El resultado de una operacin se debe almacenar, sugiriendo una tercera direccin. Por ltimo, una vez que se ha finalizado una instruccin, la siguiente instruccin se debe buscar, y se requiere tambin su direccin. La lnea de razonamiento de arriba sugiere que una instruccin podra, con cierta razn, ser requerida para contener cuatro referencias de direccin: dos operandos, un resultado y la direccin de la siguiente instruccin. En la prctica, las instrucciones de cuatro direcciones son en extremo raras. La mayora de las CPUs es de la variedad de una, dos o tres direcciones, con la direccin de la siguiente instruccin implcita (obtenida del contador del programa). En la figura 8.3 se comparan las instrucciones tpicas de una, dos, y tres direcciones que se podran usar para calcular Y = (A - B) / (C + D * E). Con tres direcciones, cada instruccin especifica localidades de dos operandos y una localidad de resultado. Dado que nos gustara no alterar el valor de cualquiera de las localidades de los operandos, una localidad temporal, T, se usa para almacenar algunos resultados intermedios. Observe que existen cuatro instrucciones y que la expresin original tuvo cinco operandos. Cada instruccin se muestra en forma esquemtica indicando la operacin que lleva a cabo cada una.
Lenguaje de Mquina y Ensamblador. Z80. 4

Estructura y Funcionamiento de Computadoras II

Y T T Y Y Y T T T Y

AB D*E T+C Y/T A YB D T*E T+C Y/T D AC * E AC + C AC A AC B AC / Y AC

Tres direcciones

Dos direcciones

AC AC AC Y AC AC AC Y

Una direccin

Los formatos de instruccin de tres direcciones no son comunes debido a que requieren un formato de instruccin relativamente largo para almacenar las referencias de tres direcciones. Con las instrucciones de dos direcciones, nuestro programa de muestra se expande a seis instrucciones. Ms simple es la instruccin de una direccin. Para que esto funcione, una segunda direccin debe ser implcita. Esto era comn en las primeras mquinas, donde la direccin implcita era un registro de la CPU conocido como el acumulador (AC o A). El acumulador contiene uno de los operandos y se utiliza para almacenar el resultado. En nuestro ejemplo, son necesarias ocho instrucciones para llevar a cabo el procedimiento. De hecho, es posible trabajar con cero direcciones para algunas instrucciones. Las instrucciones de cero direcciones son aplicables a una organizacin especial de memoria, llamada stack (pila). Un stack es un conjunto de localidades del tipo ltimo-en-entrar-primero-en-salir (LIFO). El stack se encuentra en una ubicacin conocida y, con frecuencia, al menos los dos elementos superiores estn en registros de la CPU. Por lo tanto, las instrucciones de cero direcciones haran referencia a los dos elementos superiores del stack. Los stacks se describen en el apndice de este captulo. Su uso se explora ms adelante en ste y en el captulo 9. En la tabla 8.1 se resumen las interpretaciones que se van a poner sobre las instrucciones con 0, 1, 2 o 3 direcciones. En cada caso en la tabla, se supone que la direccin de la siguiente instruccin est implcita, y que se realiza una operacin con dos operandos fuente y un operando resultado.

El nmero de direcciones por instruccin es una decisin bsica de diseo. Pocas direcciones por instruccin devienen en instrucciones ms primitivas, lo cual requiere una CPU menos compleja. Esto tambin deriva en instrucciones de longitud ms corta. Por otra parte, los programas contienen ms instrucciones totales, lo cual resulta, en general, en tiempos de ejecucin ms largos y programas ms complejos y largos. Tambin, existe un umbral importante entre las instrucciones de una direccin y las
Lenguaje de Mquina y Ensamblador. Z80. 5

Estructura y Funcionamiento de Computadoras II

de mltiples direcciones. Con las instrucciones de una direccin, el programador casi siempre tiene disponible slo un registro de propsito general, el acumulador. Con las instrucciones de mltiples direcciones, es comn tener mltiples registros de propsito general. Esto permite que algunas operaciones se lleven a cabo de manera exclusiva en los registros. Ya que las referencias de registro son ms rpidas que las referencias de memoria, esto acelera la ejecucin. Por razones de flexibilidad y habilidad para utilizar mltiples registros, la mayora de las mquinas contemporneas emplea una mezcla de instrucciones de dos y tres direcciones. Los compromisos de diseo involucrados en escoger el nmero de direcciones por instruccin se complican por otros factores. Existe el problema de si una direccin hace referencia a una localidad de memoria o a un registro. Puesto que existen pocos registros, se necesitan pocos bits para una referencia de registro. Tambin, como veremos en el siguiente captulo, una mquina puede ofrecer una variedad de modos de direccionamiento y la especificacin de los modos toma uno o ms bits. El resultado es que la mayora de los diseos de la CPU involucra una variedad de formatos de instruccin.

1.1.7.

Diseo del conjunto de instrucciones

Uno de los aspectos ms interesantes, y ms analizados, del diseo de computadoras es el diseo del conjunto de instrucciones. El diseo de un conjunto de instrucciones es muy complejo, ya que afecta muchos de los aspectos del sistema computacional. El conjunto de instrucciones define muchas de las funciones llevadas a cabo por la CPU y, por consiguiente, tiene un efecto significante en la implantacin de sta. El conjunto de instrucciones es el medio del programador para controlar la CPU. Por lo tanto, los requerimientos del programador deben ser considerados en el diseo del conjunto de instrucciones. Puede sorprenderle saber que algunos de los temas ms fundamentales relacionados con el diseo del conjunto de instrucciones permanecen en disputa. En realidad, en aos recientes, el nivel de desacuerdo concerniente a estos fundamentos ha crecido. Los ms importantes de tales temas de diseo fundamentales incluyen: Repertorio de operaciones: Cuntas y cules operaciones proporcionar, y cmo deberan ser las operaciones complejas. Tipos de datos: Los varios tipos de datos sobre los cuales las operaciones se realizan. Formato de las instrucciones: Longitud de la instruccin (en bits), nmero de direcciones, tamao de varios campos, etc. Registros: Nmero de registros de la CPU que se pueden referenciar mediante instrucciones, y su uso. Direccionamiento: El modo o modos por el cual la direccin de un operando se especifica. Estos temas presentan alta interrelacin y se deben considerar en el diseo de un conjunto de instrucciones. En la tabla siguiente (8.2.- basada en [HAYE88]) se listan los tipos de instrucciones comunes en las distintas categoras.

Lenguaje de Mquina y Ensamblador. Z80.

Estructura y Funcionamiento de Computadoras II

Lenguaje de Mquina y Ensamblador. Z80.

Estructura y Funcionamiento de Computadoras II

1.1.8.

Tipos de operandos

Las instrucciones de mquina operan sobre los datos. Las categoras generales ms importantes de datos son: direcciones, nmeros, caracteres y datos lgicos. Direcciones Las direcciones son, de hecho, una forma de datos. En muchos casos, algn clculo se debe ejecutar sobre la referencia de operando en una instruccin para determinar la direccin de la memoria principal o virtual. En este contexto, las direcciones se pueden considerar como enteros sin signo. Otros tipos comunes de datos son los nmeros, caracteres y datos lgicos, y cada uno de stos se analiza, de manera breve, en esta seccin. Ms all de eso, algunas mquinas definen tipos de datos o estructuras de datos especializados. Por ejemplo, existen operadores de mquina que operan en forma directa sobre una lista o un conjunto de caracteres. Nmeros Todos los lenguajes de mquina incluyen tipos de datos numricos. Incluso en el procesamiento de datos no numricos, hay una necesidad de los nmeros para que acten como contadores, anchuras de campo, y cosas por el estilo. Una distincin importante entre los nmeros utilizados en la matemtica ordinaria y los nmeros almacenados en una computadora es que estos ltimos estn limitados. Esto es cierto en dos sentidos. Primero, existe un lmite para la magnitud de los nmeros representables en una mquina y, segundo, en el caso de los nmeros de punto flotante, hay un lmite para su precisin. Siendo as, el programador tiene que vrselas con la comprensin de las consecuencias del redondeo, desbordamiento positivo (overflow) y desbordamiento negativo (underflow). En las computadoras, son tres los tipos de datos numricos comunes (ya conocidos por el alumno de esta asignatura): Enteros o de punto fijo. Punto flotante. Decimales (codificados en binario: BCD, ASCII, EBCDIC, empaquetados (packed) o desempaquetados (unpacked)) Caracteres Una forma comn de datos es el texto o cadena de caracteres. Mientras que los datos textuales son los ms convenientes para la comprensin humana, no pueden en forma de caracteres, almacenarse o transmitirse con facilidad mediante sistemas de procesamiento de datos y de comunicaciones. Tales
Lenguaje de Mquina y Ensamblador. Z80. 8

Estructura y Funcionamiento de Computadoras II

sistemas estn diseados para los datos binarios. Por lo tanto, se ha ideado un nmero de cdigos mediante el cual los caracteres se representan por una secuencia de bits. Quiz el primer ejemplo ms comn de esto es el cdigo Morse. En la actualidad, el cdigo de caracteres de uso ms comn en Estados Unidos es el cdigo ASCII (American - Standard Code for Information Interchange), vase la tabla 5. 1, promulgado por el American National Standards Institute (ANSI). ASCII tambin se utiliza en gran medida fuera de Estados Unidos. Otro cdigo utilizado para codificar caracteres es el Extended Binary Coded Decimal Interchange Code (EBCDIC). ste se emplea en las mquinas IBM S/370. Datos lgicos Por lo general, cada palabra u otra unidad direccionable (byte, media palabra, etc.) se trata como una unidad de datos simple. Algunas veces es til, sin embargo, considerar una unidad de n bits como consistiendo de n elementos de datos de 1 bit, cada elemento debe tener el valor de 0 o 1. Cuando los datos se ven de esta manera, se consideran como datos lgicos. Existen dos ventajas del esquema orientado a bits. Primero, algunas veces podemos desear almacenar un arreglo de elementos de datos binarios o Booleanos, en los cuales cada elemento puede tomar slo los valores 1 (cierto) y 0 (falso). Con los datos lgicos, la memoria se puede utilizar de manera ms eficiente para este almacenamiento. Segundo, hay ocasiones en que deseamos manipular los bits de un elemento de datos. Por ejemplo, si las operaciones de punto flotante se implementan en software, necesitamos estar habilitados para recorrer los bits significativos en algunas operaciones. Otro ejemplo: para convertir de ASCII en decimal empaquetado, necesitamos extraer los 4 bits de ms a la derecha de cada byte. Observe que, en los ejemplos anteriores, los mismos datos se tratan algunas veces como lgicos y otras ocasiones como numricos o texto. El tipo de una unidad de datos est determinado por la operacin que se est llevando a cabo sobre l. Mientras ste no es el caso en los lenguajes de alto nivel (por ejemplo, Pascal), es casi siempre el caso en el lenguaje de mquina.

1.1.9.

Tipos de operaciones

El nmero de diferentes cdigos de operacin vara en gran medida de mquina a mquina. Sin embargo, los mismos tipos generales de operaciones se encuentran en todas las mquinas. Una categorizacin tpica y til es la siguiente: Transferencia de datos. Aritmticas. Lgicas. Conversin. E-S. Control del sistema. Transferencia de control. En la tabla 8.2. (anterior) se listan los tipos de instrucciones comunes en las distintas categoras.

1.1.10. Representacin simblica de las instrucciones de mquina


Es difcil tanto para el programador como para el lector de libros de texto tratar con las representaciones binarias de las instrucciones de mquina. Por lo tanto, se ha convertido en una prctica comn el usar una representacin simblica de las instrucciones de la mquina. Los cdigos de operacin se representan por medio de abreviaturas, llamadas mnemnicos, que indican la operacin. Los ejemplos comunes incluyen: ADD Adicin (suma). SUB Sustraccin (resta). MPY Multiplicacin. DIV Divisin. LOAD Cargar datos desde la memoria. STOR Almacenar datos en la memoria.

Lenguaje de Mquina y Ensamblador. Z80.

Estructura y Funcionamiento de Computadoras II

Los operandos tambin se pueden representar de manera simblica. Por ejemplo, la instruccin: ADD R, Y puede significar la suma del valor contenido en la localidad de datos Y al contenido del registro R, almacenando el resultado en R. En este ejemplo, Y se refiere a la direccin de una localidad en la memoria, y R se refiere a un registro particular. Observe que la operacin se lleva a cabo sobre el contenido de una localidad, no sobre su direccin. Siendo as, es posible escribir un programa en lenguaje de mquina en forma simblica. Cada cdigo de operacin tiene una representacin binaria fija, y el programador especifica la localidad de cada operando simblico. Por ejemplo, el programador debe comenzar con una lista de definiciones: X = 513 Y = 514 y as en forma sucesiva. Un programa simple aceptara esta entrada simblica, convertira los cdigos de operacin y las referencias de operandos en una forma binaria, y construira instrucciones de mquina binarias.

1.1.11. Operaciones de transferencia de control


Para todos los tipos de operacin analizados hasta este momento, la instruccin especifica la operacin a ser realizada y los operandos. De manera implcita, la siguiente instruccin a ser ejecutada es aquella que sigue inmediatamente, en la memoria, a la instruccin actual. Por lo tanto, en el curso normal de eventos, las instrucciones se ejecutan en forma consecutiva desde la memoria. La CPU tan slo incrementa el contador del programa antes de empezar a buscar la siguiente instruccin. Sin embargo, una fraccin significativa de las instrucciones en cualquier programa tiene como funcin cambiar la secuencia de ejecucin de las instrucciones. Para estas instrucciones, la operacin llevada a cabo por la CPU consiste en actualizar el contador del programa para que contenga la direccin de alguna instruccin en la memoria. Existe un nmero de razones de por qu las operaciones de transferencia de control son necesarias. Entre las ms importantes estn: 1. En el uso prctico de las computadoras, es esencial habilitar la ejecucin de cada instruccin ms de una vez y quiz muchas miles de veces. Esto puede requerir miles o quizs millones de instrucciones para implantar una aplicacin. Esto sera impensable si cada instruccin tuviera que escribirse por separado. Si una tabla o una lista de elementos va a ser procesada, se requiere un lazo de programa. Una secuencia de instrucciones se ejecuta de manera repetida para procesar todos los datos. 2. Casi todos los programas involucran la toma de alguna decisin. Nos agradara que la computadora realizara alguna accin si una condicin se cumple y otra si una condicin distinta se cumple. Por ejemplo, una secuencia de instrucciones calcula la raz cuadrada de un nmero. Al inicio de la secuencia, el signo del nmero se verifica. Si el nmero es negativo, el clculo no se realiza, pero se reporta una condicin de error. 3. Componer en forma correcta un programa de computadora grande o aun de tamao medio es una tarea difcil en exceso. Ayuda si existen mecanismos para la divisin de la tarea hasta en piezas ms pequeas que se puedan trabajar una a la vez. Ahora, volvamos a centrar nuestro inters en un examen detallado de las operaciones de transferencia de control ms comunes que podernos encontrar en los conjuntos de instrucciones: Bifurcacin. Brinco. Llamada a la subrutina. Instrucciones de bifurcacin Una instruccin de bifurcacin, tambin llamada instruccin de transferencia, tiene como uno de sus operandos la direccin de la siguiente instruccin a ser ejecutada. Con mayor frecuencia, la instruccin es una instruccin de bifurcacin condicional. Esto es, la bifurcacin se efecta (el contador del programa se actualiza con la direccin especificada en el operando) slo si una cierta condicin se cumple. De otra manera, la siguiente instruccin en secuencia se ejecuta (por lo general, el contador del programa se incrementa).
Lenguaje de Mquina y Ensamblador. Z80. 10

Estructura y Funcionamiento de Computadoras II

Existen dos maneras comunes de generar la condicin a ser verificada en una instruccin de bifurcacin condicional. Primero, la mayora de las mquinas proporcionan un cdigo de condicin de 1 bit o mltiples bits que se establece como el resultado de algunas operaciones. Este cdigo puede ser visto como un registro corto visible al usuario. Por ejemplo, una operacin aritmtica (SUMA, RESTA, etc.) podra establecer un cdigo de condicin de 2 bits con uno de los siguientes cuatro valores: 0, positivo, negativo, desbordamiento. En tal mquina podran existir cuatro instrucciones de bifurcacin condicional diferentes: BRP X Bifurcar a la localidad X si el resultado es positivo. BRN X Bifurcar a la localidad X si el resultado es negativo. BRZ X Bifurcar a la localidad X si el resultado es cero. BRO X Bifurcar a la localidad X si ocurre desbordamiento (overflow). En todos estos casos, el resultado referido se deriva de la operacin ms reciente que puso el cdigo de condicin. Otra propuesta que se puede utilizar con un formato de instruccin de tres direcciones es llevar a cabo una comparacin y especificar una bifurcacin en la misma instruccin. Por ejemplo, BRE Rl, R2, X (Bifurcar a X si el contenido de Rl = contenido de R2). Una bifurcacin puede ser ya sea hacia adelante (una instruccin con una direccin mayor), o hacia atrs (una direccin ms baja). Una bifurcacin incondicional y una condicional se pueden utilizar para crear un lazo para repeticin de instrucciones. Cdigos de condicin Hemos mencionado que los cdigos de condicin son bits en registros especiales que pueden ser puestos por ciertas operaciones y utilizados en instrucciones de bifurcacin condicional. Tales condiciones estn puestas por operaciones aritmticas y de comparacin. La operacin de comparacin en la mayora de los lenguajes resta dos operandos, como lo hace una operacin de resta. La diferencia es que la operacin de comparacin slo pone los cdigos de condicin mientras que una operacin de resta comn tambin almacena el resultado de la diferencia en el operando destino. Como un ejemplo, en la tabla 8.8 se listan los cdigos de condicin utilizados en las mquinas 80386/80486.

Instrucciones de salto o brinco Otra forma comn de instrucciones de transferencia de control es la instruccin de salto. sta incluye una direccin implcita. Por lo comn, el brinco implica que una instruccin sea brincada; por consiguiente, la direccin implcita es igual a la direccin de la siguiente instruccin ms una longitud de instruccin. Debido a que la instruccin de bifurcacin no requiere un campo de direccin destino, tiene libertad
Lenguaje de Mquina y Ensamblador. Z80. 11

Estructura y Funcionamiento de Computadoras II

para hacer otras cosas. Un ejemplo tpico es la instruccin de incremento-y-brinco-si-cero o bien decremento-y-brinco-si-no-cero. Se ver un ejemplo al tratar el set de instrucciones de un procesador en particular, ms adelante. Instrucciones de llamada a subrutina Quiz la innovacin ms importante en el desarrollo de los lenguajes de programacin es la subrutina. Una subrutina es un programa de computadora autocontenido que est incorporado en un programa ms grande. En cualquier punto del programa es factible invocar o llamar a la subrutina. Esto es, en ese punto, la computadora es instruida para ir y ejecutar la subrutina entera y entonces retornar al punto desde el cual el llamado tuvo lugar. Las dos razones principales para el uso de subrutinas son la economa y la modularidad. Una subrutina permite que la misma pieza de cdigo se pueda emplear en muchas ocasiones. Esto es importante para la economa en un esfuerzo de programacin, y para hacer uso ms eficiente del espacio de almacenamiento en el sistema (el programa se debe almacenar). Las subrutinas tambin permiten que grandes tareas de programacin sean subdivididas en unidades ms pequeas. Este uso de la modularidad facilita en gran medida la tarea de programacin. El mecanismo de subrutinas involucra dos instrucciones bsicas: una instruccin de llamado que bifurca desde la localidad presente a la subrutina, y as como una instruccin de retorno que regresa desde la subrutina al lugar desde el cual fue llamada. Ambas son formas de instrucciones de bifurcacin. En la figura 8.6 se ilustra el uso de subrutinas para construir un programa. En este ejemplo, existe un programa principal que inicia en la localidad 4000. Este programa incluye un llamado a la subrutina SUB 1, que inicia en la localidad 4500. Cuando esta instruccin de llamado se encuentra, la CPU suspende la ejecucin del programa principal y comienza la ejecucin de SUB 1 en busca de la siguiente instruccin de la localidad 4500. Dentro de SUB 1, existen dos llamados a SUB2 en la localidad 4800. En cada caso, la ejecucin de SUB 1 se suspende y SUB2 se ejecuta. La instruccin RETURN ocasiona que la CPU regrese al programa donde ocurri la llamada y contine la ejecucin en la instruccin despus de la correspondiente instruccin CALL. Este comportamiento se muestra en la figura 8.7.

Existen varios puntos dignos de mencionar: 1. Una subrutina puede ser llamada desde ms de una localidad. 2. Un llamado de subrutina puede aparecer en una subrutina, lo cual permite el anidamiento de subrutinas a una profundidad arbitraria. 3. Cada llamado de subrutina se aparea con un retorno en el programa llamado Ya que nos gustara habilitar la llamada a una subrutina desde una variedad de puntos, la CPU debe saber cmo guardar la direccin de retorno para que sta tome lugar de manera apropiada. Existen tres
Lenguaje de Mquina y Ensamblador. Z80. 12

Estructura y Funcionamiento de Computadoras II

lugares comunes para almacenar la direccin de retorno: Registro. Inicio de la subrutina. Tope del stack.

1.1.12. Programacin en Lenguaje de Mquina


El lenguaje de mquina es el que realmente interpreta el hardware del computador. Est formado por el conjunto bsico (SET) de instrucciones de mquina. Una CPU puede entender y ejecutar slo instrucciones de mquina. Tales instrucciones tan slo son nmeros binarios almacenados en la computadora. Si un programador desea programar de manera directa en lenguaje de mquina, entonces sera necesario introducir el programa como datos binarios, codificando todas las instrucciones combinando ceros y unos. Por otra parte hay que recordar que un procesador es simplemente un dispositivo capaz de realizar un gran nmero de tareas a una gran velocidad. Si una computadora es un buen ajedrecista no es debido a la inteligencia del microprocesador sino a la del programador, que ha sabido dividir el problema en un gran nmero de tareas elementales que son ejecutadas por el microprocesador. Estas tareas son, esencialmente, clculos. Un procesador es, por lo tanto, un individuo que puede ejecutar un cierto nmero de clculos sucesivos rpidamente sin preocuparse en saber para qu van a servir. Esto es el problema del programador. Veamos un ejemplo para entrar ms en detalle. Se quiere que el microprocesador calcule el importe que queda sabiendo que tenamos $57 y hemos gastado $23. Para entregarle el problema al procesador, deberemos descomponerlo de una manera como la siguiente: 1 ) ponga el nmero 57 en la casilla 1; 2) ponga el nmero 23 en la casilla 2; 3) tome el contenido de la casilla 1; 4) efecte una sustraccin con el contenido de la casilla 2; 5) ponga el resultado en la casilla 3. Ahora el procesador puede efectuar las operaciones 1, 2, 3, 4 y 5 dando el resultado 34 en la casilla 3. Puede verse que es un procedimiento nada fcil. Suele decirse que cuando se programa empleando el lenguaje absoluto de mquina la herramienta ms valiosa que tiene el programador es la goma de borrar. Debe atender un enorme volumen de datos administrativos y recordar docenas de cdigos numricos para las operaciones de la computadora, tratando de no cometer errores cuando los usa. Adems, tiene que llevar la cuenta del espacio de almacenamiento que usa para las instrucciones, los datos y las reas de trabajo y hacer el clculo real de cualquier direccin que necesita para referencia en su programa. Considere esta sentencia simple de BASIC: N=1+J+K Suponga que deseamos programar esta sentencia en lenguaje de mquina e inicializar I, J, y K a 2, 3 y 4, respectivamente. Esto se muestra en la figura siguiente.

El programa inicia en la localidad 101 (hexadecimal). La memoria reservada para las cuatro variables inicia en la localidad 201. El programa consiste de cuatro instrucciones: 1. Cargar el contenido de la localidad 201 en el AC (acumulador). 2. Sumar el contenido de la localidad 202 al del AC. 3. Sumar el contenido de la localidad 203 al del AC. 4. Almacenar el contenido del AC en la localidad 204. Es claro que es proceso tedioso y muy propenso a errores. Una ligera mejora es escribir el programa en notacin hexadecimal en vez de binaria
Lenguaje de Mquina y Ensamblador. Z80. 13

Estructura y Funcionamiento de Computadoras II

Se ilustra en la figura siguiente:

Se escribira el programa como una serie de lneas. Cada lnea contiene la direccin de una localidad de la memoria y el cdigo hexadecimal del valor binario almacenado en esa localidad. Entonces, necesitamos un programa (traductor) que acepte esta entrada, convierta cada lnea a un nmero binario y la almacene en la localidad especificada. Esta es slo una ligera mejora. Para hacer mucho ms, podemos hacer uso del nombre simblico o mnemnico de cada instruccin. Vamos a emplear eso en vez del cdigo de operacin actual. Esto resulta en el programa simblico mostrado en la figura siguiente

Cada lnea de entrada an representa una localidad de la memoria. Cada lnea consiste de tres campos, separados por espacios. El primer campo contiene la direccin de una localidad. Para una instruccin, el segundo campo contiene el smbolo de tres letras para el cdigo de operacin. Si es una instruccin de referencia a la memoria, entonces un tercer campo contiene la direccin. Para almacenar los datos arbitrarios en una localidad, inventamos una pseudoinstruccin con el smbolo DAT. Esto es tan slo una indicacin de que el tercer campo en la lnea contiene un nmero hexadecimal para ser almacenado en la localidad especificada en el primer campo. Para este tipo de entrada necesitamos un programa un poco ms complejo. El programa acepta cada lnea de entrada, genera un nmero binario basado en el segundo y tercer (si existe) campo, y lo almacena en la localidad especificada por el primer campo. El uso de un programa simblico hace la vida mucho ms fcil pero es an torpe. En particular, debemos dar una direccin absoluta para cada palabra. Esto significa que el programa y los datos pueden ser cargados nicamente en un lugar en la memoria, y debemos conocer ese lugar en cualquier momento. En cualquiera de estas tres variantes de la programacin en lenguaje de mquina, lo peor es que la revisin de un programa (cosa que ocurra con mucha frecuencia, como actualmente), lo cual en general implica agregar o borrar una o ms lneas, cambiar las direcciones de todas las palabras subsecuentes. Todos estos detalles suponan muchos errores y demasiado tiempo dedicado a verificar, calcular, llevar tablas y otros trabajos de tipo administrativo.

Lenguaje de Mquina y Ensamblador. Z80.

14

S-ar putea să vă placă și