Sei sulla pagina 1di 26

LENGUAJE DE INTERFAZ

UNIDAD II Programacin Bsica

NDICE
Programacin Bsica...02 Ensamblador (y ligador) a utilizar..04 Ciclos numricos ...05 Captura bsica de cadenas..06 Comparacin y prueba .06 Saltos..07 Ciclos condicionales..08 Incremento y decremento.09 Captura de cadenas con formato10 Instrucciones aritmticas ....10 Manipulacin de la pila .11 Obtencin de cadena con representacin decimal ..13 Instrucciones lgicas ...17 Desplazamiento y rotacin...18 Obtencin de una cadena con la representacin hexadecimal 19 Captura y almacenamiento de datos numricos21 Operaciones bsicas sobre archivos de disco...23

2. PROGRAMACIN BSICA
Para comenzar con la programacin en lenguaje ensamblador, es necesario contar con un conjunto de herramientas de programacin. Este conjunto de herramientas consta de un editor de texto capaz de producir archivos en cdigo ASCII, un ensamblador y un enlazador. Formatos de instrucciones En el lenguaje ensamblador existen tres tipos de instrucciones: instrucciones con dos operandos, instrucciones con un operando e instrucciones con operandos implcitos. El campo nemnico es ocupado por cualquiera de las instrucciones que forman parte del conjunto de la familia x86. Ejemplo: Mov (Transferir) En los dos campos siguientes Reg significa que el operando puede ser un registro, Mem indica que puede ser una direccin de memoria y dato indica que el operando puede ser un dato colocado directamente por el programador. Los campos dos y tres se encuentran entre parntesis cuadrados para indicar que son opcionales en algunas instrucciones. Los siguientes son algunos ejemplos de instrucciones de las tres formas: Instruccin con dos operandos: Mov AX,BX En este caso Mov es el nemnico, AX es el operando 1 y BX es el operando 2. Instruccin con un operando: INC BX En este caso INC es el nemnico y BX es el nico operando. Instrucciones con operandos implcitos o sin operandos:
PUSHF Donde PUSHF es el nemnico y nico elemento de la instruccin. FORMATO DE UN PROGRAMA El cdigo fuente de un programa en lenguaje ensamblador se constituye: El siguiente listado se utilizar para mostrar las diferentes partes. .COMMENT ************************************************************************* PRIMERO.ASM Ejemplo de un programa en lenguaje ensamblador. ************************************************************************* .MODEL TINY; Modelo de memoria para el programa .DATA;Declaracin de variables

Mensaje db 'Mi primer programa',10,13,'$' .CODE;Cuerpo del programa INICIO:; Punto de entrada al programa mov dx,OFFSET Mensaje ; Direccin de la cadena de texto mov ah,9 ; Funcin para imprimir cadenas int 21h ; Llamada al sistema operativo mov ah,4ch ; Funcin para terminar un programa int 21h ; Llamada al sistema operativo END INICIO; Fin del bloque principal del programa END Un programa en lenguaje ensamblador se compone de las siguientes partes: rea de comentarios Definicin del modelo de memoria rea de datos Cuerpo del programa

El rea de comentarios sirve para incluir comentarios acerca del programa que se est elaborando, comienza con la directiva .COMMENT y el comentario es colocado entre dos caracteres *. La definicin del modelo de memoria es la parte donde se indica que tipo de cdigo se va generar (16 o 32 bits). En este trabajo slo se escribirn programas ejecutables .COM, por lo que siempre se usa la directiva .MODEL TINY. El rea de datos es el lugar donde deben ser declaradas las constantes y variables del programa. Las variables son declaradas despus de la directiva .DATA y las constantes despus de .CONST. En el cuerpo del programa es donde se colocan las instrucciones en lenguaje ensamblador que se encargarn de realizar las tareas deseadas. El cuerpo del programa comienza con la directiva .CODE y termina con la directiva END. Esta parte corresponde al Begin y End de un programa en lenguaje Pascal. Adicionalmente se debe indicar un punto de entrada al programa. El punto de entrada se indica por medio de una etiqueta antes de la primera instruccin real del programa. En el ejemplo anterior el punto de entrada es INICIO: y el punto final de las instrucciones se indica por medio de la instruccin END INICIO. Cuando se requiere comentar las instrucciones de un programa, se debe colocar un punto y coma (;) y as el ensamblador interpreta todo lo que sigue como un comentario de una sola lnea. Si requiere comentarios de ms de una lnea puede usar la directiva .COMMENT.

2.1 ENSAMBLADOR (Y LIGADOR) A UTILIZAR


Ensamblado
Un ensamblador es el programa que convierte un listado de cdigo fuente, escrito en un fichero de texto, en cdigo objeto, es decir, lenguaje mquina (el que finalmente interpretar el procesador) en el que slo le faltan las referencias a rutinas externas. El cdigo fuente es un fichero 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 cdigo objeto consta del cdigo en lenguaje mquina y de la informacin necesaria para enlazarlo con otros mdulos objeto. Con TASM el proceso de ensamblado se realiza escribiendo lo siguiente en la ventana de comandos: tasm /zi /l nombre donde nombre es el nombre del fichero .asm con el cdigo fuente. La extensin no es necesaria ponerla y los parmetros /zi y /l slo son tiles si queremos hacer un proceso de depuracin (debug) con el Turbo Debugger. Tras la ejecucin de esta lnea se nos crear un fichero nombre.obj

Linkadoy montado
Al construir un programa algunos de sus mdulos pueden colocarse en el mismo mdulo fuente y ensamblarse juntos, otros pueden estar en mdulos diferentes y ser ensamblados separadamente. En cualquier caso, los mdulos objeto resultantes, algunos de los cuales pueden estar agrupados en libreras, deben ser enlazados para formar el mdulo de carga, antes de que se pueda ejecutar el programa. Adems de dar como salida el mdulo de carga, el linkero enlazador imprime un mapa de memoria que indica donde sern cargados los mdulos objeto en la memoria. Despus de crearse el mdulo de carga, ste es cargado por el cargador en la memoria del ordenador y comienza la ejecucin. Para linkarcon TASM escribimos: tlink /v nombre Tras esto se nos crear el fichero ejecutable (.exe o .com) que el sistema operativo se encargar de cargar en memoria cuando lo ejecutemos. De nuevo, la extensin no es necesaria ponerla y el parmetro /v slo es til para el Turbo Debugger.

2.2 CICLOS NUMERICOS


Un bucle es un grupo de instrucciones que se ejecutan cclicamente un nmero concreto de veces. Para construir bucles disponemos de las siguientes instrucciones:

stas posibilitan el grupo de control ms elemental de nuestros programas. Un bucle es un bloque de cdigo que se ejecuta varias veces. Hay 4 tipos de bucles bsicos: o Bucles sin fin o Bucles por conteo, Bucles hasta o Bucles mientras. Las instrucciones de control de bucles son las siguientes: INC incrementar DEC decrementar LOOP realizar un bucle LOOPZ,LOOPE realizar un bucle si es cero LOOPNZ,LOOPNE realizar un bucle si no es cero JCXZ salta si CX es cero

2.3 CAPTURA BSICA DE CADENAS


Una cadena es una secuencia de bytes contiguos. Las operaciones que se pueden realizar sobre las cadenas son las siguientes:

2.4 COMPARACION Y PRUEBA


Existen dos instrucciones especiales en el microprocesador 8086: CMP y TEST. CMP (Comparar) compara si dos valores son iguales o diferentes. Su funcionamiento es similar al de la instruccin SUB (restar), slo que no modifica el operando de destino, solamente modifica las banderas de signo (SF), de cero (ZF) y de acarreo (CF). Por ejemplo: CMP AX,1235 Esta instruccin compara si el valor almacenado en el registro AX es igual que el valor 1235 en decimal. Por otro lado, la instruccin TEST realiza la operacin AND de los operandos especificados sin que el resultado se almacene en algn registro, modificando nicamente ciertas banderas. Su aplicacin ms comn es la de probar si algn bit es cero. Ejemplo: Test AL,1 Esta instruccin prueba si el bit menos significativo de AL es 1 y Test AL,128 prueba si el bit ms significativo de AL es 1. Por lo general estas instrucciones van seguidas de alguna de las instrucciones de salto, las cuales se estudian en otra seccin.

2.5 SALTOS

Transfieren el control dependiendo de las configuraciones en el registro de banderas. Por ejemplo, se pueden comparar dos datos y despus saltar considerando los valores de las banderas que la comparacin ha establecido. Cada instruccin posee un nico operando que no es ms que el desplazamiento que indica dnde ir si el test es positivo. Segn consideremos los datos a comparar con o sin signo, distinguimos tres tipos de saltos condicionales.

DATOS SIN SIGNO


Mnemnico JE/JZ JNE/JNZ JNE/JNZ JAE/JNB JB/JNAE JBE/JNA Descripcin Salto si igual Salto si no igual Salto si superior Salto si superior o igual Salto si inferior alto si inferior o igual Flags Z=1 Z=0 C=0yZ=0 C=0 C=1 C=1oZ=1

DATOS CON SIGNO


Mnemnico JE/JZ JNE/JNZ JG/JNLE JGE/JNL JL/JNGE JLE/JNG Descripcin Salto si igual Salto si no igual Salto si mayor Salto si mayor o igual Salto si menor Salto si menor o igual Flags Z=1 Z=0 Z=0yS=0 S=0 S <>0 Z = 1 o S <> O

TESTS ARITMTICOS
Mnemnico JS JNS JC JNC JO JNO JP/JPE Descripcin Salto si signo negativo Salto si signo positivo Salto si carry Salto si no carry Salto si overflow Salto si no overflow Salto si paridad par S=1 S=0 C=1 C=0 O=0 O=O P=1 Flags

2.6 CICLOS CONDICIONALES


Ciclo For

La Sintaxis empleada por el ciclo for es la siguiente:

Las tres partes del ciclo se encuentran separadas por ; (punto y coma) La primer parte del ciclo especifica valores previos a su inicio. La segunda parte indica la condicin de terminacin para el ciclo, la cual est directamente relacionada con los valores iniciales. Finalmente, la ltima parte especifica cmo sern manipulados los valores iniciales en cada iteracin del ciclo. Ciclo IF Una caracterstica del ciclo if/else es el uso de llaves { }, en el ejemplo anterior pudo notar que no fueron utilizadas llaves { } para delimitar las condicionales, al no emplearse este mecanismo, se asume que el ciclo o condicional tendr efecto nicamente en la linea contigua a su inicio. Aunque es recomendable utilizar llaves ({ } ) para incrementar la legibilidad del cdigo, es importante sealar que esta sintaxis de no utilizar llaves ({ } ) es vlida y muy comn (Lamentablemente) .Existe otra variacin de if/else que agrupa las condicionales en una sola expresin:

Ciclo While En este ciclo el cuerpo de instrucciones se ejecuta mientras una condicin permanezca como verdadera, en el momento en que la condicin se convierte en falsa el ciclo termina. Su formato general es: Cargar o inicializar variable de condicin; While (condicin) { Grupo cierto de instrucciones; Instruccin(es) para salir del ciclo };

2.7 INCREMENTO Y DECREMENTO

Las instrucciones del ensamblador Instrucciones de transferencia Son utilizadas para mover los contenidos de los operandos. Cada instruccin se puede usar con diferentes modos de direccionamiento. MOV MOVS (MOVSB) (MOVSW) Instruccin MOV Propsito: Transferencia de datos entre celdas de memoria, registros y acumulador. Sintaxis: MOV Destino, Fuente Donde Destino es el lugar a donde se movern los datos y fuente es el lugar donde se encuentran dichos datos. Los diferentes movimientos de datos permitidos para esta instruccin son: Destino: memoria. Fuente: acumulador Destino: acumulador. Fuente: memoria Destino: registro de segmento. Fuente: memoria/registro Destino: memoria/registro. Fuente: registro de segmento Destino: registro. Fuente: registro Destino: registro. Fuente: memoria Destino: memoria. Fuente: registro Destino: registro. Fuente: dato inmediato Destino: memoria. Fuente: dato inmediato La instruccin MOV y los modos de direccionamiento. He aqu nuestra primera instruccin: MOV destino, origen Efectivamente, sirve para mover. Lo que hace es copiar lo que haya en "origen" en "destino". Lo de que primero vaya el destino y luego el origen es comn a todas las instrucciones del 8086 que tengan dos operandos, lo cual crear ms de un quebradero de cabeza al principio. MOV AX,BL MOV AX, BX sin embargo hace que el procesador coja el contenido de BX y lo copiara en AX; lo que haba anteriormente en AX se pierde (puesto que un registro al fin y al cabo es un nmero, en este caso de 16 bits, y ahora le hemos asignado un nuevo valor), mientras que BX no se ve afectado. Cuando decimos "mover" en

realidad sera ms apropiado "copiar", porque no alteramos en absoluto el operando origen.

2.8 CAPTURA DE CADENAS CON FORMATO


Permiten el movimiento, comparacin o bsqueda rpida en bloques de datos: MOVC transferir carcter de una cadena MOVW transferir palabra de una cadena CMPC comparar carcter de una cadena CMPW comparar palabra de una cadena SCAC buscar carcter de una cadena SCAW buscar palabra de una cadena LODC cargar carcter de una cadena LODW cargar palabra de una cadena STOC guardar carcter de una cadena STOW guardar palabra de una cadena REP repetir CLD poner a 0 el indicador de direccin STD poner a 1 el indicador de direccin

2.9 INSTRUCCIONES ARITMTICAS


Estas instrucciones son las que realiza directamente el 8086/8088

INSTRUCCIONES ARITMTICAS
ADICIN ADD suma ADC suma con acarreo AAA ajuste ASCII para la suma DAA ajuste decimal para la suma SUSTRACCIN SUB resta SBB resta con acarreo negativo AAS ajuste ASCII para la resta DAS ajuste decimal para la resta MULTIPLICACIN MUL multiplicacin IMUL multiplicacin entera AAM ajuste ASCII para la multiplicacin DIVISIN DIV divisin IDIV divisin entera AAD ajuste ASCII para la divisin CONVERSIONES CBW pasar octeto a palabra CWD pasar palabra a doble palabra NEG negacin

10

2.10 MANIPULACIN DE PILA


Una de las funciones de la pila del sistema es la de salvaguardar (conservar) datos (la otra es la de salvaguardar las direcciones de retorno de las llamadas a subrutinas): PUSH introducir POP extraer PUSHF introducir indicadores POPF extraer indicadores

Instrucciones de la pila. Estas instrucciones permiten el uso de la pila para almacenar y extraer datos. Instruccin POP Propsito: Recupera un dato de la pila Sintaxis: POP destino Esta instruccin transfiere el ltimo valor almacenado en la pila al operando destino, despus incrementa en dos el registro SP. La instruccin POP CS, poco til, no funciona
correctamente en los 286 y superiores.

Este incremento se debe a que la pila va creciendo desde la direccin ms alta de memoria del segmento hacia la ms baja, y la pila solo trabaja con palabras (2 bytes), entonces al incrementar en dos el registro SP realmente se le est restando dos al tamao real de la pila. Ejemplos: POP AX POP PEPE Instruccin POPF Propsito: Extrae las banderas almacenadas en la pila. Sintaxis: POPF

11

Este comando transfiere bits de la palabra almacenada en la parte superior de la pila hacia el registro de banderas. La forma de transferencia es la siguiente:

BIT BANDERA 0 CF 2 PF 4 AF 6 ZF 7 SF 8 TF 9 IF 10 DF 11 OF Estas localizaciones son las mismas para el comando PUSHF Una vez hecha la transferencia se incrementa en 2 el registro SP disminuyendo as el tamao de la pila. Instruccin PUSH Propsito: Coloca una palabra en la pila. Sintaxis: PUSH fuente La instruccin PUSH decrementa en dos el valor de SP y luego transfiere el contenido del operando fuente a la nueva direccin resultante en el registro recin modificado. El decremento en la direccin se debe a que al agregar valores a la pila sta crece de la direccin mayor a la direccin menor del segmento, por lo tanto al restarle 2 al valor del registro SP lo que hacemos es aumentar el tamao de la pila en dos bytes, que es la nica cantidad de informacin que puede manejar la pila en cada entrada y salida de datos. Ejemplo: PUSH CS Instruccin PUSHF Propsito: Coloca el valor de las banderas en la pila

12

Sintaxis: PUSHF Este comando decrementa en 2 el valor del registro SP y luego se transfiere el contenido del registro de banderas a la pila, en la direccin indicada por SP. Las banderas quedan almacenadas en memoria en los mismos bits indicados en el comando POPF.

2.11 OBTENCION DE CADENA CON REPRESENTACION HEXADECIMAL


Procesos de Control NOP (Operacin nula). Sintaxis: NOP Indicadores:

Realiza una operacin nula, es decir, el microprocesador decodifica la instruccin y pasa a la siguiente. Realmente se trata de la instruccin XCHG AX,AX. ESC (Salida a un coprocesador). Sintaxis: ESC cdigo_operacin, origen Indicadores:

Se utiliza en combinacin con procesadores externos, tales como los coprocesadores de coma flotante o de E/S, y abre al dispositivo externo el acceso a las direcciones y operandos requeridos. Al mnemnico ESC le siguen los cdigos de operacin apropiados para el coprocesador as como la instruccin y la direccin del operando necesario.

13

Ejemplo: ESC 21,AX HLT (Parada hasta interrupcin o reset). Sintaxis: HLT Indicadores:

El procesador se detiene hasta que se restaura el sistema o se recibe una interrupcin. Como en los PC se producen normalmente 18,2 interrupciones de tipo 8 por segundo (del temporizador) algunos programadores utilizan HLT para hacer pausas y bucles de retardo. Sin embargo, el mtodo no es preciso y puede fallar con ciertos controladores de memoria. LOCK (Bloquea los buses). Sintaxis: LOCK Indicadores:

Es una instruccin que se utiliza en aplicaciones de recursos compartidos para asegurar que no accede simultneamente a la memoria ms de un procesador. Cuando una instruccin va precedida por LOCK, el procesador bloquea inmediatamente el bus, introduciendo una seal por la patilla LOCK. WAIT (Espera). Sintaxis: WAIT Indicadores:

14

Provoca la espera del procesador hasta que se detecta una seal en la patilla TEST. Ocurre, por ejemplo, cuando el coprocesador ha terminado una operacin e indica su finalizacin. Suele preceder a ESC para sincronizar las acciones del procesador y coprocesador. XLAT (traduccin). Sintaxis: XLAT tabla Indicadores:

La instruccin XLAT tabla carga en el registro AL el contenido de la posicin [BX][AL], en donde el registro BX ha de apuntar al comienzo de una tabla. Dicho de otra manera, AL hace de ndice de la tabla y de almacn destino del contenido de la tabla. Por ejemplo, el siguiente programa: DATOS SEGMENT TABLA DB 2, 3, 5, 8, 16, 23 DATOS ENDS CODIGO SEGMENT MOVE BX, OFFSET TABLA ;Inicializa BX con la direccin donde comienza la tabla MOVE AL, 5 XLAT TABLA CODIGO ENDS Hace que al final el contenido de AL sea 16 ya que es el quinto elemento de la tabla y AL antes de XLAT TABLA contena el valor 5. Otro ejemplo: MOV BX, OFFSET TABLA MOV AL, 4 XLAT TABLA

15

Para finalizar con las instrucciones de transferencia veremos un grupo de tres instrucciones: LEA o cargar direccin efectiva LDS o cargar el puntero en DS LES o cargar el puntero en ES denominadas de transferencia de direcciones. LEA (carga direccin efectiva). Sintaxis: LEA destino, origen Indicadores:

Transfiere el desplazamiento del operando fuente al operando destino. Otras instrucciones pueden a continuacin utilizar el registro como desplazamiento para acceder a los datos que constituyen el objetivo. El operando destino no puede ser un registro de segmento. En general, esta instruccin es equivalente a MOV destino, OFFSET fuentey de hecho los buenos ensambladores (TASM) la codifican como MOV para economizar un byte de memoria. Sin embargo, LEA es en algunos casos ms potente que MOV al permitir indicar registros de ndice y desplazamiento para calcular el offset: En el ejemplo de arriba, el valor depositado en DX es el OFFSET de la etiqueta DATOS ms el registro SI. Esa sola instruccin es equivalente a estas dos: MOV DX, OFFSET DATOS ADD DX, SI LDS (carga un puntero utilizando DS). Sintaxis: LDS destino, origen Indicadores:

Traslada un puntero de 32 bits (direccin completa de memoria compuesta por segmento y desplazamiento), al destino indicado y a DS. A partir de la direccin indicada por el operando origen, el procesador toma 4 bytes de la memoria: con los dos primeros forma una palabra que deposita en destino y, con los otros dos, otra en DS.

16

Ejemplo: PUNT DD 12345678H LDS SI, PUNT Como resultado de esta instruccin, en DS: SI se hace referencia a la osicin de memoria 1234h: 5678h; 'DD' sirve para definir una variable larga de 4 bytes (denominada PUNT en el ejemplo). LES (carga un puntero utilizando ES). Sintaxis: LES destino, origen Esta instruccin es anloga a LDS, pero utilizando ES en lugar de D

2.12 INSTRUCCIONES LGICAS


El microprocesador 8086 cuenta con un grupo de instrucciones lgicas que operan a nivel de bit, estas instrucciones son: AND, OR, XOR y NOT.

17

Las instrucciones que se enlistan antes requieren dos operandos, a excepcin de la operacin NOT que slo requiere uno. En la figura se puede observar que para la operacin AND si los dos operandos son 1, el resultado ser 1, en cualquier otra situacin ser 0. La operacin OR establece el resultado a 1 si cualquiera de los dos operandos es 1, de lo contrario el resultado ser 0. La instruccin XOR coloca en 0 el resultado si los operandos son iguales, de lo contrario establece 1. Finalmente, la instruccin NOT cambia de estado todos los bits del operando, los unos por ceros y los ceros por unos. La principal aplicacin de estas instrucciones es el enmascaramiento de informacin. La operacin AND nos permite poner a cero cualquier bit de un dato; la operacin OR nos permite poner a uno cualquier bit de un dato y la operacin XOR permite borrar el contenido de algn registro o localidad de memoria, as como para negar algn bit.

2.13 DESPLAZAMIENTO Y ROTACIN


El microprocesador cuenta con un conjunto de instrucciones que permiten la manipulacin 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 rotacin e instrucciones de desplazamiento (tambin conocidas como instrucciones para corrimientos). Las instrucciones para rotacin son cuatro y nos permiten mover de forma cclica los bits que forman parte de un registro o localidad de memoria, estas instrucciones son: ROL, ROR, RCL, RCR. ROL y ROR funcionan de forma muy semejante; al ejecutar una instruccin ROL, el bit ms significativo del dato es desplazado hacia la bandera de acarreo y tambin hacia la posicin del bit memos significativo, por lo cual todos los bits restantes son rotados o movidos hacia la izquierda. La instruccin ROR funciona igual, slo que sta trabaja hacia la derecha. Las instrucciones RCL y RCR permiten la rotacin de los bits de una localidad de memoria o registro, considerando tambin el contenido de la bandera de acarreo. En el caso de RCL, el bit ms significativo pasa hacia la bandera de acarreo, el bit que se encontraba en la bandera de acarreo pasa al bit menos significativo y finalmente los bits restantes son rotados hacia la izquierda. La instruccin RCR funciona igual, pero aplica su rotacin hacia la derecha.

18

Para ilustrar el uso de estas instrucciones, tomaremos como ejemplo la instruccin ROL (Rotacin a la izquierda). Las instrucciones de rotacin y desplazamiento tienen diferentes formas de utilizarse dependiendo del modelo del microprocesador, los siguientes ejemplos muestran estas formas: En el microprocesador 8086 existen dos formas, con contador implcito y con contador explcito. La forma con contador implcito se utiliza para realizar una sola rotacin a la vez y tiene el siguiente formato: ROL AX, 1; Rotar AX un bit La forma con contador explcito se utiliza para realizar rotaciones n veces sobre un registro o localidad de memoria: MOV CL, 3; Nmero de rotaciones ROL AX, CL; Rotar AX 3 veces En el microprocesador 80386 y superiores existe una variante de contador implcito, la cual nos permite establecer el contador directamente como un operando, su forma es la siguiente: ROL AX,3 ; Rotar AX 3 veces, slo en 80386 y posteriores En el caso de las instrucciones de desplazamiento, tambin existen cuatro: SHL, SHR, SAL, SAR. SHL y SHR se utilizan para desplazar los bits de un registro o localidad de memoria, sin considerar el signo de su contenido. SAL y SAR se utilizan para desplazar los bits de un registro o localidad de memoria, considerando su contenido como una cantidad con signo. Las instrucciones SHL y SHR funcionan de forma idntica, slo que en sentidos opuestos. La instruccin SHL inserta un 0 en la posicin del bit menos significativo y desplaza todos los dems bits una posicin hacia la izquierda, colocando el bit ms significativo en la bandera de acarreo. La instruccin SHR inserta un 0 en la posicin ms significativa, desplaza todos los bits una posicin hacia la derecha y finalmente coloca el bit menos significativo en la bandera de acarreo. Algunos ejemplos de su uso son los siguientes:

19

SHL AX, 1; Desplaza el contenido de AX una posicin a la izquierda MOV CX, 3; Nmero de veces SHR AX, CL; Desplaza AX 3 veces hacia la derecha SHL BX, 4; Desplaza BX 4 veces hacia la izquierda, slo en 386 y posteriores Las dos instrucciones restantes SAL y SAR son muy parecidas a las instrucciones SHL y SHR, slo que estas dos instrucciones consideran el contenido de los registros como cantidades con signo, por lo cual el bit en la posicin ms significativa del dato (bit de signo) se conserva sin cambio.

2.14 OBTENCIN DE UNA CADENA REPRESENTACIN HEXADECIMAL


Instrucciones de Desplazamiento Lineal AL/SHL (Desplazamiento aritmtico a la izquierda). Sintaxis: SAL/SHL destino, contador Indicadores:

CON

LA

Desplaza a la izquierda los bits del operando el nmero de bits especificado en el segundo operando que debe ser CL si es mayor que 1 los bits desplazados.

SAR (Desplazamiento aritmtico a la derecha). Sintaxis: SAR destino, contador Indicadores:

Desplaza a la derecha los bits del operando destino el nmero de bits especificado en el segundo operando. Los bits de la izquierda se rellenan con el bit de signo del primer operando. Si el nmero de bits a desplazar es 1 se puede especificar directamente, si es mayor se especifica a travs de CL. Ejemplos: SAR AX, CL

20

SAR BP,1 SHR (Desplazamiento lgico a la derecha). Sintaxis: SHR destino, contador Indicadores:

Ejemplos: SHR AX,CL SHR CL,1

2.15 CAPTURA NUMERICOS


Bloques en ensamblador

ALMACENAMIENTO

DE

DATOS

MODELOS DE MEMORIA. Los modelos de memoria constituyen las diversas maneras de acceder a la memoria por parte de los compiladores de C. En el caso del Turbo C se pueden distinguir los siguientes: TINY: Se emplea en los programas donde es preciso apurar el consumo de memoria hasta el ltimo byte. Los 4 registros de segmento (CS, DS, ES, SS) estn asignados a la misma direccin, por lo que existe un total de 64 Kb donde se mezclan cdigo, datos y pila. Los programas de este tipo pueden convertirse a formato COM. SMALL: Se utiliza en aplicaciones pequeas. Los segmentos de cdigo y datos son diferentes y no se solapan. Por ello, hay 64 kb para cdigo y otros 64 Kb a repartir entre datos y pila. Segmentos Punteros Modelo Cdigo Datos Pila Cdigo Datos Tiny 64 Kb near near Small 64 Kb 64 Kb near near Medium 1 Mb 64 Kb far near Compact 64 Kb 1 Mb near far Large 1 Mb 1 Mb far far Huge 1 Mb 1 Mb

21

(Bloques > 64 Kb) far far MEDIUM: Este modelo es ideal para programas largos que no manejan demasiados datos. Se utilizan punteros largos para el cdigo (que puede extenderse hasta 1 Mb) y cortos para los datos: la pila y los datos juntos no pueden exceder de 64 Kb. COMPACT: Al contrario que el anterior, este modelo es el apropiado para los programas pequeos que emplean muchos datos. Por e llo, el programa no puede exceder de 64 Kb aunque los datos que controla pueden alcanzar el Mb, ya que los punteros de datos son de tipo far por defecto. LARGE: Empleado en las aplicaciones grandes y tambin por los programadores de sistemas que no tienen paciencia para andar forzando continuamente el tipo de los punteros (para rebasar el lmite de 64 Kb). Tanto los datos como el cdigo pueden alcanzar el Mb, aunque no se admite que los datos estticos ocupen ms de 64 Kb. Este modo es el que menos problemas da para manejar la memoria, no siendo quiz tan lento y pesado como indica el fabricante. HUGE: Similar al anterior, pero con algunas ventajas: por un lado, todos los punteros son normalizados automticamente y se admiten datos estticos de ms de 64 Kb. Por otro, y gracias a esto ltimo, es factible manipular bloques de datos de ms de 64 Kb cada uno, ya que los segmentos de los punteros se actualizan correctamente. Sin embargo, este modelo es el ms costoso en tiempo de ejecucin de los programas. Usando la pila Una seccin de la memoria del programa es reservado para el uso de una pila. La Intel 80386 y procesadores superiores contienen un registro llamado puntero a la pila, esp, el cual almacena la direccin del tope de la pila, la figura 1 de abajo muestra 3 valores enteros, 49, 30 y 72, almacenados en la pila(cada entero ocupando 4 bytes) con el registro esp apuntando a la direccin del tope de la pila.

A diferencia de una pila creciendo hacia arriba, en las mquinas Intel crecen hacia abajo. En la Figura 2 muestra las capas de la pila despus de la ejecucin pushl $15.El puntero de la pila es decrementado de cuatro en cuatro y el nmero 15 es almacenando como lugares de 4 bytes, 1988, 1989, 1990 y 1991

22

La instruccin popl %eax copia el valor del tope de la pila(4 bytes) a eax e incrementa esp en 4. Qu sucede si no quieres copiar el valor del tope de la pila a un registro?. Puedes ejecutar la instruccin addl $4, %esp el cual simplemente incrementa el puntero de la pila. #Listing 3 .globl main main: movl $10, %eax call foo ret foo: addl $5, %eax ret En Listing 3, la instruccin call foo pone la direccin de la instruccin despus de call en la llamada al programa sobre la pila y va hacia foo. La subrutina termina con ret, el cual transfiere el control a la instruccin cuya direccin se toma desde el tope de la pila. Obviamente el tope de la pila debe contener una direccin vlida.

2.16 OPERACIONES BASICAS SOBRE ARCHIVOS DE DISCO


ENTRADA Y SALIDA Funciones que realiza Vamos a sealar las funciones que debe realizar un computador para ejecutar trabajos de entrada/salida: - Direccionamiento o seleccin del dispositivo que debe llevar a cabo la operacin de E/S. - Transferencia de los datos entre el procesador y el dispositivo (en uno u otro sentido). - Sincronizacin y coordinacin de las operaciones.

23

Esta ltima funcin es necesaria debido a la deferencia de velocidades entre los dispositivos y la CPU y a la independencia que debe existir entre los perifricos y la CPU (por ejemplo, suelen tener relojes diferentes). Se define una transferencia elemental de informacin como la transmisin de una sola unidad de informacin (normalmente un byte) entre el procesador y el perifrico o viceversa. Para efectuar una transferencia elemental de informacin son precisas las siguientes funciones: - Establecimiento de una comunicacin fsica entre el procesador y el perifrico para la transmisin de la unidad de informacin. - Control de los perifricos, en que se incluyen operaciones como prueba y modificacin del estado del perifrico. Para realizar estas funciones la CPU gestionar las lneas de control necesarias. Definiremos una operacin de E/S como el conjunto de acciones necesarias para la transferencia de un conjunto de datos (es decir, una transferencia completa de datos). Para la realizacin de una operacin de E/S se deben efectuar las siguientes funciones: - Recuento de las unidades de informacin transferidas (normalmente bytes) para reconocer el fin de operacin. - Sincronizacin de velocidad entre la CPU y el perifrico. - Deteccin de errores (e incluso correccin) mediante la utilizacin de los cdigos necesarios (bits de paridad, cdigos de redundancia cclica, etc.) - Almacenamiento temporal de la informacin. Es ms eficiente utilizar un buffer temporal especfico para las operaciones de E/S que utilizan el rea de datos del programa. - Conversin de cdigos, conversin serie/paralelo, etc. Dispositivos externos Una de las funciones bsicas del ordenador es comunicarse con los dispositivos exteriores, es decir, el ordenador debe ser capaz de enviar y recibir datos desde estos dispositivos. Sin esta funcin, el ordenador no sera operativo porque sus clculos no seran visibles desde el exterior. Existe una gran variedad de dispositivos que pueden comunicarse con un ordenador, desde los dispositivos clsicos (terminales, impresoras, discos, cintas, etc.) hasta convertidores A/D y D/A para aplicaciones de medida y control de procesos, De todos los posibles perifricos, algunos son de lectura, otros de escritura y otros de lectura y escritura (es importante resaltar que este hecho siempre se mira desde el punto de vista del proceso). Por otra parte, existen perifricos de almacenamiento tambin llamados memorias auxiliares o masivas. La mayora de los perifricos estn compuestos por una parte mecnica y otra parte electrnica. Estas partes suelen separarse claramente para dar una mayor modularidad. A la componente electrnica del perifrico se le suele denominar

24

controlador del dispositivo o, tambin, adaptador del dispositivo. Si el dispositivo no tiene parte mecnica (como, por ejemplo, la pantalla de un terminal), el controlador estar formado por la parte digital del circuito. Frecuentemente los controladores de los dispositivos estn alojados en una placa de circuito impreso diferenciada del resto del perifrico. En este caso es bastante habitual que un mismo controlador pueda dar servicio a dispositivos de caractersticas similares. El principal problema planteado por los perifricos es su gran variedad que tambin afecta a las velocidades de transmisin. Por tanto, el mayor inconveniente que encontramos en los perifricos es la diferencia entre sus velocidades de transmisin y la diferencia entre stas y la velocidad de operacin del ordenador.

25

Potrebbero piacerti anche