Unidad 2

21 

Loading.... (view fulltext now)

Loading....

Loading....

Loading....

Loading....

Texto completo

(1)

Instituto Tecnológico de Tuxtla Gutiérrez.

Lenguajes de Interfaz

Tóala Pérez Manuel de Jesús 10270981

Catedrático: MC. Walter Torres Robledo

Ingeniería en Sistemas Computacionales.

Unidad 2 Programación básica al lenguaje ensamblador.

March 23, 2013

(2)

Contents

1 Introducción al lenguaje ensamblador. 2

1.1 Importancia de la programación en lenguaje ensamblador. . . 2

1.2 El procesador y sus registros internos . . . 3

1.3 La memoria principal (RAM) . . . 6

1.4 El concepto de interrupciones . . . 6

1.5 Llamadas a servicios del sistema . . . 7

1.6 Modos de direccionamiento . . . 7

1.7 Proceso de ensamblado y ligado . . . 9

1.8 Desplegado de mensajes en el monitor . . . 10

2 Programación básica 11 2.1 Ensamblador (y ligador) a utilizar . . . 11

2.2 Ciclos numéricos . . . 12

2.3 Captura básica de cadenas . . . 12

2.4 Comparación y prueba . . . 13

2.5 Saltos . . . 14

2.6 Ciclos condicionales . . . 14

2.7 Incremento y decremento . . . 15

2.8 Captura de cadenas con formato . . . 15

2.9 Instrucciones aritméticas . . . 15

2.10 Manipulación de la pila . . . 16

2.11 Obtención de cadena con representación decimal . . . 16

2.12 Instrucciones lógicas . . . 17

2.13 Desplazamiento y rotación . . . 17

2.14 Obtención de una cadena con la representación hexadecimal . . . 18

2.15 Captura y almacenamiento de datos numéricos . . . 18

2.16 Operaciones básicas sobre archivos de disco . . . 18

3 Preguntas 18

1 Introducción al lenguaje ensamblador.

1.1 Importancia de la programación en lenguaje

ensam-blador.

A pesar del hecho de que codicar en un lenguaje de alto nivel es más productivo, alguna de las ventajas de codicar en lenguaje ensamblador son:

ˆ Proporciona más control sobre el manejo particular de los requerimientos de hardware.

ˆ Genera módulos ejecutables más pequeños y más compactos. ˆ Con mayor probabilidad tiene una ejecución más rápida

(3)

Un programa escrito en lenguaje ensamblador requiere considerablemente menos memoria y tiempo de ejecución que un programa escrito en los conocidos lengua-jes de alto nivel, como Pascal y C. [1]

El lenguaje ensamblador da a un programador la capacidad de realizar tar-eas muy técnicas que serían difíciles, si no es que imposibles de realizar en un lenguaje de alto nivel. El conocimiento del lenguaje ensamblador permite un-a comprensión de lun-a un-arquitecturun-a de lun-a máquinun-a que ningún lenguun-aje de un-alto nivel puede ofrecer. Aunque la mayoría de los especialistas en software desar-rolla aplicaciones en lenguaje de alto nivel, que son más fáciles de escribir y de dar mantenimiento, una práctica común es recodicar en lenguaje ensam-blador aquellas rutinas que han causado cuellos de botella en el procesamiento. Los programas residentes y rutinas de servicio de interrupción casi siempre son desarrollados en lenguaje ensamblador. [1]

Los lenguajes de alto nivel fueron diseñados para eliminar las particular-idades de una computadora especíca, mientras que un lenguaje ensamblador está diseñado para una computadora especíca, o, de manera más correcta, para una familia especíca de microprocesadores. Por último, una buena razón para programar en lenguaje ensamblador es que no todos los computadores ofrecen la posibilidad de usar lenguajes de alto nivel. La mayoría de los computadores antiguos o los especializados no poseen compiladores de lenguaje de alto nivel, por tanto la única opción del programador es usar el lenguaje ensamblador.

1.2 El procesador y sus registros internos

Los registros del procesador se emplean para controlar instrucciones en ejecu-ción, manejar direccionamiento de memoria y proporcionar capacidad aritméti-ca. Son áreas del almacenamiento dentro del procesador, usadas para almacenar datos con los cuales está trabajando el procesador en un momento dado de la ejecución de una instrucción.

(4)

Figure 1: Diagrama Bloques Algunas características de los Registros internos

ˆ Cada Procesador contiene cierto número de estos. ˆ Los registros son la memoria más rápida de la PC ˆ La mayoría de las operaciones se realizan en los registros

ˆ El ancho de los registros (en bits), determina cuanta información puede manejar

ˆ El tamaño del procesador está ligado a los registros internos

Los registros internos del procesador se pueden clasicar en 6 tipos diferentes 1. Registros de segmento

2. Registros de propósito general 3. Registros de apuntadores 4. Registros de banderas

5. Registros de Puntero de instrucción 6. Registros de Pila

(5)

Los registros de segmento se utilizan para referenciar áreas de memoria. La plataforma IA-32 permite direccionar la memoria según el modelo de memoria lineal o el modelo de memoria segmentada. El modelo de memoria lineal pre-senta todo el espacio de direcciones de la memoria como un espacio contiguo.

Todas las instrucciones, los datos y la pila se encuentran en el mismo espacio de direcciones de memoria. Cada posición de memoria se referencia mediante una dirección especíca llamada "dirección lineal". El problema del enfoque an-terior consiste en que todos los datos se encuentran mezclados entre sí y a la vez distribuidos a lo largo de todo el espacio de direcciones memoria, lo cual hace que su manejo sea engorroso e ineciente. El modelo de memoria segmentada resuelve este problema dividendo el espacio de direcciones en segmentos inde-pendientes entre sí. Cada segmento contiene un tipo especíco de información, es decir el código (las instrucciones) se ubica en un segmento, los datos en otro y la pila en un tercer segmento.

Las posiciones de memoria en los segmentos se denen por direcciones lóg-icas. Una dirección lógica está compuesta por una dirección de segmento y un desplazamiento. El procesador traduce una dirección lógica a una dirección lineal.

Los registros de propósito general, como su nombre lo indica, se utilizan en la forma en que lo desee el programador.Cada uno de estos registros se puede direccionar como un registro de 16 bits (AX, BX, CX, DX) o como un registro de 8 bits (AH, AL, BH, BL, CH, CL, DH, DL). Cada uno de los registros de 16 bits está formado por la concatenación de dos registros de 8 bits: AX = AH:AL, BX = BH:BL, CX = CH:CL y DX = DH:DL, donde el bit 0 del registro AH es el bit 8 del registro AX.

Figure 2: Registros Apuntadores Y De Índices

SP (Apuntador de pila): Contiene el desplazamiento con respecto al seg-mento de pila del tope de la pila del programa. El registro SP se emplea para direccionar datos en la pila cuando se ejecutan las instrucciones push y pop y cuando se llama o se regresa de un procedimiento mediante las instrucciones: call y ret, respectivamente.

Registros De Segmentos

ˆ CS (Código): Tiene la dirección lógica del segmento en que se encuentra el código de un programa. Si el código ocupa más de un segmento, contiene la dirección lógica de uno de los segmentos.

(6)

ˆ DS (Datos): Tiene la dirección lógica del segmento en que se encuen-tran los datos estáticos de un programa. Si los datos ocupan más de un segmento, contiene la dirección lógica de uno de los segmentos

1.3 La memoria principal (RAM)

La memoria RAM (Random Access Memory) o memoria de acceso aleatorio de lectura/escritura volátil, se dispone como una hoja de trabajo para almace-namiento temporal y ejecución de programas. En la memoria de acceso aleatorio (RAM), las celdas de la memoria pueden accesarse para la transferencia de in-formación en cualquier posición aleatoria deseada. Esto es, el proceso de ubicar una palabra en la memoria es igual y requiere la misma cantidad de tiempo, sin importar la ubicación física de las celdas en la memoria.

Existen dos tipos de memorias RAM: Las RAM estáticas o SRAM y las RAM dinámicas o DRAM. En una RAM estática (SRAM) el valor almacenado en una celda se mantiene mediante un par de inversores y, mientras se sum-inistre electricidad, el valor puede mantenerse indenidamente. En una RAM dinámica (DRAM), el valor almacenado en una celda se mantiene como una carga en un condensador. Para acceder a la carga almacenada se usa sólo un transistor, tanto para leer el valor como para sobrescribirlo. Debido a que las DRAMs sólo usan un transistor por bit de almacenamiento, son mucho más densas y el precio por bit es menor. En comparación, las SRAMs requieren entre cuatro y seis transistores por bit. En las DRAMs la carga se almacena en un condensador, por lo tanto no puede mantenerse indenidamente y debe refrescarse periódicamente. [2]

Cualquiera que sea el tipo de memoria RAM utilizada, estática o dinámica, en general se utiliza para almacenar datos a corto plazo porque estos se pierden al retirarles la alimentación.[3]

1.4 El concepto de interrupciones

Una interrupción no es más que un evento que genera la ruptura de la ejecución de un programa para pasar a ejecutar otro relacionado con el evento causante de la interrupción. La interrupción, desde el puto de vista del mecanismo que la activa, puede ser de tipo:

ˆ Hardware ˆ Software

Las interrupciones de hardware, están asociadas generalmente a un disposi-tivo físico (reloj del sistema, periférico) y consisten en la activación de una línea para dar a conocer a la UCP la Aparición del evento asociado. [4]

Las interrupciones de software consisten en instrucciones cuyo efecto es la ejecución de una rutina de servicio de interrupción (se suelen usar para llamadas al sistema operativo porque aíslan software de usuario y de sistema). [4]

(7)

1.5 Llamadas a servicios del sistema

La interfaz entre el sistema operativo y los programas de usuarios está denida por el conjunto de llamadas al sistema ofrecidas por el sistema operativo. Las llamadas al sistema con que cuenta la interfaz varían de un sistema operativo a otro. Puesto que el mecanismo real para emitir una llamada al sistema depende mucho de la máquina y muchas veces debe de expresarse en código ensamblador, se proporciona una biblioteca de procedimientos que permite hacer llamadas al sistema desde programas en C y también desde otros lenguajes. En cierto sentido, efectuar una llamada al sistema es como efectuar una llamada a un procedimiento especial, solo que las llamadas al sistemas entran al kernel y las llamadas a procedimientos no. [6]

Se trata de que una aplicación ejecute una rutina del sistema operativo, con objeto de que la rutina le preste un servicio. Por ejemplo, cuando un programa desea abrir un chero de disco, llama a un servicio del sistema que le permite llevar a cabo ésta tarea. Debe tenerse en cuenta que una aplicación no puede acceder directamente al disco, y debe hacerlo a través del sistema operativo. [5] Hay dos tipos de instrucciones relacionados con la llamada a servicios del sistema operativo:

ˆ Syscall. Instrucción de llamada a un servicio del sistema operativo, a través de su API. Cuando una tarea ejecuta esta instrucción pasa el control al sistema operativo. [5]

ˆ Sysret. Instrucción de retorno de un servicio. El sistema operativo ejecuta esta instrucción justo antes de devolver el control a la tarea que solicitó el servicio. Entre la ejecución de las instrucciones Syscall y Sysret, el sistema operativo accede al espacio de memoria de la tarea. Por ejemplo, el sistema operativo escribe en una estructura de datos de la tarea asociada a un chero si la apertura del chero se ha completado con éxito o no. Después de ejecutar la instrucción Sysret, se ejecuta la instrucción siguiente a la Syscall. [5]

1.6 Modos de direccionamiento

Los modos de direccionamiento de un procesador son las diferentes formas de trasformación del campo de operando de la instrucciónn en la dirección del operando. El campo de la operación de una instrucción especifíca la operación que se debe realizar. Ésta debe ser ejecutada sobre algunos datos almacena-dos en registros del computador o en palabras de memoria, es decir, sobre los operadores. El modo de direccionamiento especifíca la forma de interpretar la información contenida en cada campo de operando para localizar, en base a esta información del operando. Los ordenadores utilizan técnicas de direccionamien-to con los siguientes nes:

ˆ Dar versatilidad de programación al usuario proporcionando facilidades tales como índices, direccionamientos indirectos, etc., esta versatilidad nos servirá para manejar estructuras de datos complejas como vectores, matrices, etc. [7]

(8)

ˆ Reducir el número de bits del campo de operando. Los modos de direc-cionamiento pordrían clasicarse en propios e impropios; en los direccionamien-tos propios el operando está localizado en una dirección concreta de memoria, mientras que en los impropios en otros lugares tales como los registros del proce-sador, etc. [7]

Implícito: En este modo de direccionamiento no es necesario poner ninguna dirección de forma explícita, ya que en el propio código de operación se conoce la dirección del (de los) operando(s) al (a los) que se desea acceder o con el (los) que se quiere operar. Supongamos una arquitectura de pila, las operaciones aritméticas no requieren direccionamiento explícito por lo que se ponen como:

ˆ add ˆ sub

Porque cuando se opera con dos datos en esta arquitectura se sabe que son los dos elementos del tope de la pila:

Ejemplo de una pila: 1 2 3 4 5 6 <- pila top() es 1

ntop() es 2 donde top() representa el tope de la pila y ntop() el siguiente al tope de la pila y son estos argumentos con los que se opera al llamar a una orden en concreto.

Inmediato: En la instrucción está incluido directamente el operando. En este modo el operando es especicado en la instrucción misma.

En otras palabras, una instrucción de modo inmediato tiene un campo de operando en vez de un campo de dirección. [7] El campo del operando contiene el operando actual que se debe utilizar en conjunto con la operación especicada en la instrucción.

Las instrucciones de modo inmediato son útiles para inicializar los registros en un valor constante. Cuando el campo de dirección especica un registro del procesador, la instrucción se dice que está en el modo de registro.[7]

Directo: El campo de operando en la instrucción contiene la dirección en memoria donde se encuentra el operando. En este modo la dirección efectiva es igual a la parte de dirección de la instrucción. El operando reside en la memoria y su dirección es dada directamente por el campo de dirección de la instrucción. [7]

En una instrucción de tipo ramicación el campo de dirección especica la dirección de la rama actual. Con este tipo de direccionamiento, la dirección efectiva es contenida en la misma instrucción, tal como los valores de datos inmediatos que son contenidos en la instrucción. Un procesador de 16 bits suma la dirección efectiva al contenido del segmento de datos previamente desplazado en 4 bits para producir la dirección física del operando. [7]

Indirecto: El campo de operando contiene una dirección de memoria, en la que se encuentra la dirección efectiva del operando. [7]

Absoluto: El campo de operando contiene una dirección en memoria, en la que se encuentra la instrucción. De registro: Sirve para especifícar registros.

Indirecto mediante registros: En este modo el campo de la dirección de la instrucción da la dirección en donde la dirección efectiva se almacena en la

(9)

memoria. El control localiza la instrucción de la memoria y utiliza su parte de dirección para acceder a la memoria de nuevo para leer una dirección efectiva. Unos pocos modos de direccionamiento requieren que el campo de dirección de la instrucción sea sumado al control de un registro especicado en el procesador. [7]

La dirección efectiva en este modo se obtiene del siguiente cálculo: Dir. efectiva = Dir. de la parte de la instrucción + Contenido del registro del proce-sador...

1.7 Proceso de ensamblado y ligado

Para crear un programa ejecutable utilizando lenguaje ensamblador es necesario realizar la serie de pasos, conocida como ciclo de desarrollo de programas, que se muestra en la gura.

Figure 3: Proceso para el ciclo de desarrolo de programas

Un ensamblador es el programa que convierte un listado de código fuente, escrito en un chero de texto, en código objeto, es decir, lenguaje máquina (el que nalmente interpretará el procesador) en el que sólo le faltan las referencias a rutinas externas.

El código fuente es un chero que contiene la secuencia de instrucciones en lenguaje ensamblador que forma el programa, así como ciertas directivas o comandos para el propio ensamblador, que ha sido creado utilizando un editor de texto.

El código objeto consta del código en lenguaje máquina y de la información necesaria para enlazarlo con otros módulos objeto.

Proceso de ligado Al construir un programa algunos de sus módulos pueden colocarse en el mismo módulo fuente y ensamblarse juntos, otros pueden estar

(10)

en módulos diferentes y ser ensamblados separadamente. En cualquier caso, los módulos objeto resultantes, algunos de los cuales pueden estar agrupados en librerías, deben ser enlazados para formar el módulo de carga, antes de que se pueda ejecutar el programa. Además de dar como salida el módulo de carga, el linker o enlazador imprime un mapa de memoria que indica donde serán cargados los módulos objeto en la memoria.

Después de crearse el módulo de carga, éste es cargado por el cargador en la memoria del ordenador y comienza la ejecución.[8]

Figure 4: Proceso de ligado

1.8 Desplegado de mensajes en el monitor

La pantalla es una malla de posiciones direccionables, en cualquiera de las cuales se puede colocar el cursor. El sistemas proporcionara espacio en la memoria para un are de despliegue de video, o buer. El área de despliegue monocromático inicia en la localidad BISOS B000[0]H y permite utilizar 4K bytes de memoria: 2KB disponibles para caracteres y 2K para atributos de cada carácter, como video inverso, intermitencia, intensidad y subrayado.

Funciones de la INT 10H del BIOS Funciones de la INT 21H del DOS 02H Fija el cursor 02H Despliega en pantalla 06H Recorre pantalla 09H Despliega pantalla

0AH Entrada desde el teclado 3FH Entrada desde el teclado 40H Despliega en pantalla Table 1: Funciones predenidad de la bios

(11)

Figure 5: Función para mostrar el conjunto de caracteres ASCII

2 Programación básica

2.1 Ensamblador (y ligador) a utilizar

El lenguaje ensamblador, o assembler (assembly language en inglés), es un lenguaje de programación de bajo nivel para los computadores, microproce-sadores, microcontroladores y otros circuitos integrados programables. Imple-menta una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y con-stituye la representación más directa del código máquina especíco para cada arquitectura legible por un programador.

Características

ˆ El código escrito en lenguaje ensamblador posee una cierta dicultad de ser entendido ya que su estructura se acerca al lenguaje máquina, es decir, es un lenguaje de bajo nivel.

ˆ El lenguaje ensamblador es difícilmente portable, es decir, un código es-crito para un microprocesador, puede necesitar ser modicado, para poder

(12)

ser usado en otra máquina distinta. Al cambiar a una máquina con arqui-tectura diferente, generalmente es necesario reescribirlo completamente. ˆ Con el lenguaje ensamblador se tiene un control muy preciso de las tareas

realizadas por un microprocesador por lo que se pueden crear segmentos de código difíciles y/o muy inecientes de programar en un lenguaje de alto nivel, ya que, entre otras cosas, en el lenguaje ensamblador se dispone de instrucciones del CPU que generalmente no están disponibles en los lenguajes de alto nivel.

2.2 Ciclos numéricos

El lenguaje ensamblador cuenta con una instrucción muy poderosa que permite la programación de ciclos nitos, la instrucción LOOP . Esta instrucción traba-ja en forma conjunta con el registro contador CX. El formato general de esta instrucción es:

Mov CX,Numero_Veces Etiqueta:

Instrucciones a realizar LoopEtiqueta

La instrucción Loop ejecuta las instrucciones que se encuentran entre la Eti-queta: y Loop Etiqueta el numero de veces que indique el campoNo_Veces.

Por ejemplo, el siguiente grupo de instrucciones incrementa en 1 el registro AX, esto lo repite 100 veces.

Mov CX,100 ;100 veces

repetir: Nombre de la etiqueta

Inc AX ;AX = AX + 1

Loop repetirRegresa a la etiqueta y compara el ciclo

La instrucción Loop decrementa el registro CX en cada iteración y se detiene cuando CX es igual a cero.

2.3 Captura básica de cadenas

En el lenguaje ensamblador el tipo de dato cadena (string) no está denido, pero para nes de programación, una cadena es denida como un conjunto de localidades de memoria consecutivas que se reservan bajo el nombre de una variable.

Instrucciones para el manejo de strings

(13)

cinco instrucciones para el manejo de cadenas:

MOVS: Mueve un byte o palabra desde una localidad de memoria a otra. LODS : Carga desde la memoria un byte en AL o una palabra en AX. STOS : Almacena el contenido del registro AL o AX en la memoria. CMPS : Compara localidades de memoria de un byte o palabra.

SCAS : Compara el contenido de AL o AX con el contenido de alguna localidad de memoria.

Las instrucciones para cadenas trabajan en conjunto con la instrucción CLD, la cual permite establecer que el sentido en el que las cadenas serán procesadas será de izquierda a derecha.

Otra instrucción importante es el prejo de repetición REP, el cual permite que una instrucción para manejo de cadenas pueda ser repetida un número de-terminado de veces.

Los registros índice juegan un papel importante en el procesamiento de cadenas de datos, el par de registros CS:SI indican la dirección de la cadena original que será procesada, y el par ES:DI contienen la dirección donde las cadenas pueden ser almacenadas.

2.4 Comparación y prueba

Existen dos instrucciones especiales en el microprocesador 8086: CMP y TEST. CMP (Comparar) compara si dos valores son iguales o diferentes. Su fun-cionamiento es similar al de la instrucción SUB (restar), sólo que no modica el operando de destino, solamente modica las banderas de signo (SF), de cero (ZF) y de acarreo (CF).

Por ejemplo:

CMP AX,33Esta instrucción compara si el valor almacenado en el registro AX es igual que el valor 33 en decimal.

Por otro lado, la instrucción TEST realiza la operación AND de los operandos especicados sin que el resultado se almacene en algún registro, modicando únicamente ciertas banderas. Su aplicación más común es la de probar si algún bit es cero.

Por ejemplo:

Test AL,1Esta instrucción prueba si el bit menos signicativo de AL es 1 y

Test AL,128prueba si el bit más signicativo de AL es 1.

Por lo general estas instrucciones van seguidas de alguna de las instrucciones de salto.

(14)

2.5 Saltos

En los lenguajes de alto nivel como Pascal y C, los programadores pueden con-trolar el ujo de los programas por medio de instrucciones condicionales com-puestas; por ejemplo, en Pascal el siguiente conjunto de instrucciones permite tomar una decisión sobre el ujo del programa:

IF A = 5then write(?Error...?); else

A:=A+1;

En contraste, el lenguaje ensamblador no proporciona tales mecanismos. Este tipo de decisiones se realizan por medio de una serie de instrucciones que van teniendo un signicado consecutivo; es decir, el efecto de la instrucción siguiente depende del resultado anterior.

El lenguaje ensamblador proporciona un conjunto de instrucciones conocidas como instrucciones de salto. Estas instrucciones son utilizadas en conjunto con instrucciones de comparación y prueba para determinar el ujo del programa.

2.6 Ciclos condicionales

Existen dos tipos de instrucciones de salto: las instrucciones de salto condicional y las de salto incondicional.

Las instrucciones de salto condicional, revisan si ha ocurrido alguna situación para poder transferir el control del programa a otra sección,por ejemplo:

CMP AX,0 JEotro ... ... otro : ... ... End

En este ejemplo, la instrucción JE (Salta si es igual) revisa si la prueba implíci-ta en la instrucción anterior resultó positiva, es decir, si la comparación de AX con 0 fue cierta. En caso de que AX sea igual a 0, JE transere el control del programa a las instrucciones que se encuentran después de la etiqueta "otro". En caso contrario ejecuta las instrucciones siguientes a JE.

(15)

descripción:

JA o JNBE:Salta si está arriba o salta si no está por debajo o si no es igual (jump if above or jump if not below or equal). El salto se efectúa si la bandera de CF=0 o si la bandera ZF=0.

JAE o JNB:Salta si está arriba o es igual o salta si no está por debajo (jump if above or equal or jump if not below). El salto se efectúa si CF=0.

JB o JNAE: Salta si está por debajo o salta si no está por arriba o es igual (jump if below or jump if not above or equal). El salto se efectúa si CF=1.

JBE o JNA: Salta si está por debajo o es igual o salta si no está por arriba (jump if below or equal or jump if not above). El salto se efectúa si CF=1 o ZF=1.

JE o JZ: Salta si es igual o salta si es cero (jump if equal or jump if zero). El salto se efectúa si ZF=1.

JNE o JNZ: Salta si no es igual o salta si no es cero (jump if not equal or jump if not zero). El salto se efectúa si ZF=0.

JG o JNLE:Salta si es mayor o salta si no es menor o igual (jump if greater or jump if not less or equal). El salto se efectúa si ZF=0 u OF=SF.

JGE o JNL:Salta si es mayor o igual o salta si no es menor (jump if greater or equal or jump if not less). El salto se efectúa si SF=OF.

2.7 Incremento y decremento

Las instrucciones INC y DEC permiten incrementar los contenidos de los reg-istros.

Ejemplos:

INC AX ;AX=AX+1

INC VAR1 ;VAR1=VAR1+1

DEC AX ;AX=AX-1

DEC VAR1 ;VAR1=VAR1-1y de las variables almacenadas en memoria.

2.8 Captura de cadenas con formato

2.9 Instrucciones aritméticas

Existen 8 instrucciones aritméticas básicas: ADD (Suma), SUB (Resta), MUL (Multiplicación sin signo), DIV (División sin signo), IMUL (Multiplicación con signo), IDIV (División con signo), INC (Incremento unitario) y DEC

(16)

(Decre-mento unitario). Las instrucciones ADD y SUB permiten realizar sumas y restas sencillas y tienen el siguiente formato:

ˆ ADD Destino, Fuente ˆ SUB Destino, Fuente

Ejemplos:

ADD AX,BX ;AX=AX+BX

ADD AX,10;AX=AX+10

SUB AX,BX ;AX=AX-BX

SUB AX,10 ;AX=AX-10

En las operaciones de suma y resta el resultado siempre es almacenado en el operando de destino, el cual puede ser un registro o una variable.

2.10 Manipulación de la pila

La pila es un grupo de localidades de memoria que se reservan con la nalidad de proporcionar un espacio para el almacenamiento temporal de información. La pila de los programas es del tipo LIFO (Last In First Out, Ultimo en entrar, Primero en salir).

Para controlar la pila el microprocesador cuenta con dos instrucciones básicas: Push (Meter) y Pop (sacar).

El formato de estas instrucciones es el siguiente: Push operando

Pop operando

Cuando se ejecuta la instrucción Push, el contenido del operando se alma-cena en la ultima posición de la pila.

Por ejemplo:

Si AX se carga previamente con el valor 5, una instrucción Push AX almace-naría el valor 5 en la ultima posición de la pila.

Por otro lado la instrucción Pop saca el último dato almacenado en la pila y lo coloca en el operando.

Siguiendo el ejemplo anterior, la instrucción Pop BX obtendría el número 5 y lo almacenaría en el registro BX.

2.11 Obtención de cadena con representación decimal

En las computadoras el formato natural para la aritmética es el binario. La representación del número decimal 1, 527 en los tres formatos decimales:

(17)

ˆ BCD desempaquetado 01 05 02 07 (cuatro bytes) ˆ BCD empaquetado 15 27 (dos bytes)

El procesador realiza aritmética en valores ASCII y BCD un dígito a la vez. Ya que los datos son ingresados desde un teclado signican que están en for-mato ASCII, la representación en memoria de un número decimal ingresado tal como 1234 es 31323334H. Pero realizar aritmetica sobre tal número implica un tratamiento especial. Las instrucciones AAA y AAS realizan aritmética de manera directa sobre números ASCCI

2.12 Instrucciones lógicas

Se cuenta con un grupo de instrucciones lógicas que operan a nivel de bit, estas instrucciones son: AND, OR, XOR y NOT.

Las instrucciones que se enlistan antes requieren dos operandos, a excepción de la operación NOT que sólo requiere uno.

La operación OR establece el resultado a 1 si cualquiera de los dos operan-dos es 1, de lo contrario el resultado será 0.

La instrucción XOR coloca en 0 el resultado si los operandos son iguales, de lo contrario establece 1.

Finalmente, la instrucción NOT cambia de estado todos los bits del operan-do, los unos por ceros y los ceros por unos.

La principal aplicación de estas instrucciones es el enmascaramiento de informa-ción. La operación AND nos permite poner a cero cualquier bit de un dato; la operación OR nos permite poner a uno cualquier bit de un dato y la operación XOR permite borrar el contenido de algún registro o localidad de memoria, así como para negar algún bit.

2.13 Desplazamiento y rotación

El microprocesador cuenta con un conjunto de instrucciones que permiten la manipulación de las posiciones individuales de los bits dentro de un registro o localidad de memoria, estas instrucciones se encuentran divididas en dos grupos: instrucciones de rotación e instrucciones de desplazamiento (también conocidas como instrucciones para corrimientos).

Las instrucciones para rotación son cuatro y nos permiten mover de forma cíclica los bits que forman parte de un registro o localidad de memoria, estas instruc-ciones son ROL, ROR, RCL , RCR.

ROL y ROR funcionan de forma muy semejante; al ejecutar una instrucción ROL, el bit más signicativo del dato es desplazado hacia la bandera de acarreo y también hacia la posición del bit memos signicativo, por lo cual todos los

(18)

bits restantes son rotados o movidos hacia la izquierda. La instrucción ROR funciona igual, sólo que ésta trabaja hacia la derecha.

Las instrucciones RCL y RCR permiten la rotación de los bits de una lo-calidad de memoria o registro, considerando también el contenido de la bandera de acarreo. En el caso de RCL, el bit más signicativo pasa hacia la bandera de acarreo, el bit que se encontraba en la bandera de acarreo pasa al bit menos signicativo y nalmente los bits restantes son rotados hacia la izquierda. La instrucción RCR funciona igual, pero aplica su rotación hacia la deecha.

2.14 Obtención de una cadena con la representación

hex-adecimal

2.15 Captura y almacenamiento de datos numéricos

2.16 Operaciones básicas sobre archivos de disco

3 Preguntas

Esta arquitectura fue utilizada en la computadora ENIAC

1. Mencione alguna de las ventajas de codicar en lenguaje ensamblador son: a)El programa sólo corre en un CPU b)Es facil escribir programas grandes y complejos c)Proporciona más control sobre el manejo particular de los requerimientos de hardware.R= (c)

2. En un programa escrito en lenguaje ensamblador requiere considerable-mente menos memoria y tiempo de ejecución que un programa escrito en los conocidos lenguajes de alto nivel. a) verdadero b)falso R= a)verdadero 3. El conocimiento del lenguaje ensamblador permite una comprensión de la arquitectura de la máquina que ningún lenguaje de alto nivel puede ofrecer a) verdadero b)falso R= a)verdadero

4. Los lenguajes de alto nivel fueron diseñados para eliminar las particu-laridades de una computadora especíca, mientras que un lenguaje en-samblador está diseñado para una computadora especíca a) verdadero b)falso. R=a)verdadero

5. La memoria ____________ se dispone como una hoja de traba-jo para almacenamiento temporal y ejecución de programas.R= RAM (Random Access Memory)

6. 6-Existen dos tipos de memorias RAM: ____________ y las____________ R=Las RAM estáticas o SRAM yl as RAM dinámicas o DRAM.

(19)

7. 7- En una RAM estática (SRAM) el valor almacenado en una celda se mantiene mediante un par de inversores y, mientras se suministre elect-ricidad, el valor puede mantenerse indenidamente a) verdadero b)falso R=a)verdadero

8. 8.En una memoria_____________el valor almacenado en una celda se mantiene como una carga en un condensador. Para acceder a la carga almacenada se usa sólo un transistor, tanto para leer el valor como para sobrescribirlo R= RAM dinámica (DRAM),

9. Una ___________ no es más que un evento que genera la ruptura de la ejecución de un programa para pasar a ejecutar otro relacionado con el evento causante de la interrupción R= interrupción

10. La __________________ es parte de un computador que se en-carga de almacenar la información que éste maneje. R=Memoria. 11. El ___________ es un chip que sirve como cerebro del ordenador.

R=CPU.

12. La arquitectura de ___________________ es una técnica de implementación por la cual se solapa la ejecución de múltiples instruc-ciones.R=segmentación .

13. Las ___________________ son un recurso que reduce los tiem-pos de espera del procesador por los servicios solicitados a un distiem-positivo. R=Interrupciones.

14. La arquitectura de computadoras es el diseño conceptual y la estructura operacional fundamental de un sistema de computadora. R=Verdadero 15. La Unidad de Control: Se encargada de Coordinar todos los componentes

y los ujos de datos.

16. Se denomina CPU a los circuitos que permiten almacenar y recuperar la información. R=Falso

17. La memoria RAM s e puede denir como una memoria rapida y pequeña, situada entre la memoria principal y el procesador. R=Falso

18. El modelo de arquitectura de cómputo segmentada fue utilizada en la computadora ENIAC y consiste en una unidad central de proceso que se comunica a través de un solo bus. R=Falso

19. Es es el diseño conceptual y la estructura operacional fundamental de un sistema de computadora. A)*La arquitectura de Computadoras. B) La ergonomia C) Memoria caché.

(20)

20. ¾Cuál de las siguientes armaciones sobre la memoria caché es cierta? A)* La caché de nivel es la más pequeña y la más rápida. b) La caché de nivel 1 es la más grande y más lenta. C) La caché de nivel 2 es igual de rápida que la memoria principal. D) Se puede producir producir un fallo en la caché de nivel 2 que no se ha producido antes en la de nivel 1.

21. La tecnología de la RAM se ha dividido en A)*2 . B)1 C)3 D)5 E)Ninguna de las anteriores

22. En que partes esta dividida la RAM .A) Volátil B)Estatica C)*Estática y dinámica. D)Dinamica.

23. Su sistema de trabajo se basa en la microprogramación. Consiste en hac-er que cada instrucción sea inthac-erpretada por un mini programa.A)*CISC B)RISC

24. las comunicaciones entre la CPU y la memoria principal se realizan a través de __ canales funcionalmente distintos: el de direcciones y el de datos. R:2

25. 1981, solo trabaja con un ancho de banda de __bits. R=16

26. Cuantas unidades conforman la Unidad Central de Procesos (CPU).R=4 27. VESA (Video Electronics Standard Association), trabaja a ___ bits.

R=32

28. El actual PCI (Peripheral Component Interconnect), su ancho de banda es de ___ bits.R=64

References

[1] Martínez, Jaime Garza JAOR. Organización y arquitectura de computado-ras. Estado de México, México.: Pretince Hall; 2000.

[2] Canal, Ramón; Elias, Eduard; González, José; Marcuello, Pedro; Molina, Carlos, Peña, M.A.; Valero, Miguel. Estructura y Diseño de Computadores. Barcelona, 2000. Reverté. ISBN: 84-291-2619-8.

[3] Blanco Viejo, Cecilio.Electrónica Digital.

U-niversidad de Oviedo. ISBN: 84-8317-372-7.

http://books.google.com.mx/books?id=myOXwYAhOwgC&pg=PA209&dq=MEMORIA+RAM&hl=en&sa=X&ei=qx4jUZ3PDbSO2QWP7IH4Cg&ved=0CE8Q6AEwBQ#v=onepage&q&f=false [4] Gil, José ; Peñalver, Lourdes; Pont, Ana; Robles, Antonio. Estructura de

computadores (vol I); Un recorrido por la Unidad Central de Procesos. Uni-versidad Politécnica de Valencia. ISBN: 84-7721-415-8.

(21)

[5] García, Manuel; López, José. Apuntes de Organización de Computadoras. Ediciones de la Universidad de Oviedo. 2007. ISBN: 978-84-8317-606-1. [6] Tanenbaum, Andrew S. Sistemas Operativos Modernos; Segunda Edición. Pearson Educación. México, 2003. ISBN: 970-26-0315-3. Pag: 976.

[6] http://www.infor.uva.es/∼cllamas/2/2-2.pdf

[7] Apuntes de Modos de Direccionamiento. Departamento de Informática, U-niversidad de Valladolid. www.infor.uva.es/~bastida/OC/modos.pdf [8] http://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r86194.PDF

Figure

Actualización...

Related subjects :