Você está na página 1de 34

INVESTIGACIN

PROGRAMACIN BSICA
JAZMN MONTIEL RAMREZ

ISMA-VI
1|Pgina JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

ndice Introduccin......3 2.-Programacin bsica......4 2.1 Ensamblador (y ligador) a utilizar. . .. . . . . .. . . . . . .6 2.2 Ciclos numricos. . . . . . . . . . . . . . . . . . . . ..... . .. .-7 2.3 Captura bsica de cadenas. . . . . . . .................................8 2.4 Comparacin y prueba.... ............................................10 2.5 Saltos....11 2.6 Ciclos condicionales. . . . . .... . . . . . .. ....12 2.7 Incremento y decremento. . . . . . . ... . . . . . . . ............13 2.8 Captura de cadenas con formato. . . . . ............................15 2.9 Instrucciones aritmticas. . . . . . . . . ....................................16 2.10 Manipulacin de la pila. . . . ..19 2.11 Obtencin de cadena con representacin decimal. . ...............21 2.12 Instrucciones lgicas.....................................................24 2.13 Desplazamiento y rotacin.24 2.14 Obtencin de una cadena con la representacin hexadecimal.................26 2.15 Captura y almacenamiento de datos numricos.29 2.16 Operaciones bsicas sobre archivos de disco.........31 Conclusin.......33 Bibliografa.....34

2|Pgina JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

Introduccin
En esta investigacin se va a mencionar la utilidad de una pila, la cual consiste en salvaguarda (conservar) datos (la otra es la de

salvaguardar las direcciones de retorno de las llamadas a subrutinas) y esta es; un grupo de localidades de memoria que se reservan con la finalidad de proporcionar un espacio para el almacenamiento temporal de informacin.

Tambin se hace mencin a las instrucciones lgicas las cuales son operaciones bit a bit que trabajan sobre octetos o palabras completas por ejemplo: NOT negacin, AND producto lgico, OR suma lgica y XOR suma lgica exclusiva. En el desplazamiento del procesador se encuentran las instrucciones de rotacin e instrucciones de desplazamiento (tambin conocidas como instrucciones para corrimientos).

Estas instrucciones nos permiten la manipulacin de las posiciones individuales de los bits dentro de un registro o localidad de memoria, dichas instrucciones son cuatro (ROL, ROR, RCL, RCR).

3|Pgina JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

2.-Programacin bsica
Un programa en lenguaje ensamblador consiste en un conjunto de enunciados. Los dos tipos de enunciados o lneas de programacin son: 1.- Instruccin, tal como MOV y ADD, que el ensamblador traduce a cdigo objeto 2.- Directiva, que indican al ensamblador que realice una accin especfica, como definir un elemento de dato. ENUNCIADO O LINEA DE PROGRAMACIN: [Etiqueta] <Operacin o directiva> [operando (s) ] [ ; comentarios ]

NOTA: Los corchetes indican una entrada opcional ETIQUETA o IDENTIFICADOR.- Es un nombre para designar un dato y la direccin donde se encuentra dicho dato. Puede consistir de los siguientes caracteres: Letras del alfabeto: A-Z a -z Dgitos: (0 9) (no puede ser Caracteres especiales: signo de Subrayado ( Signo de pesos Arroba ( Punto ( . ) (no puede el primer interrogacin _ ( $ @ el primer carcter) () ) ) ) carcter)

ser

No debe tener espacios en blanco en medio de la etiqueta. Para definir una etiqueta se usan los directivos DW, DB. Una etiqueta puede tener los siguientes usos: a) Como variable.- Ejemplo: num db 65 ; A num se le asocia el valor 65 y la direccin donde se encuentra Tambin podemos hacer: num dw 6567H b) Como direccin.- En la cual puede continuar el programa: SUMA: ADD AX, DX _____________ _____________ JMP SUMA
4|Pgina JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

dicho dato.

COMENTARIOS.- Empiezan con ( ; ) y mejoran la claridad del programa, donde el propsito de un conjunto de instrucciones en especial no es claro. ESTRUCTURA DE UN PROGRAMA.- Un programa escrito en lenguaje ensamblador se ensambla por medio de un programa ensamblador: Los programas ms comunes para el 8088, 8086 con el Turboensamblador (TASM) de la compaa Borland y el de la compaa Microsoft (MASM). Los requerimientos mnimos para un programa escrito en lenguaje ensamblador son: .Model SMALL ; indica el modelo de memoria (SMALL) .STACK 200 ; indica el tamao del STACK (bytes) .DATA ; indica que la siguiente informacin ___ ; deber quedar en el segmento de datos ___ ___ .CODE ; indica que la siguiente informacin ___ ; es el programa ejecutable ___ ___ MOV AH,4CH ;necesario para terminar el programa INT 21H ; y regresar al prompt C> END ; Indica el fin del programa TIPOS DE MODELOS DE MEMORIA Model TYNY CS = DS En 1 solo segmento d 64K Model SMALL CS = 64Kb DS = 64Kb Model MEDIUM CS > 64Kb DS < 64Kb Model COMPAC CS < 64Kb DS > 64Kb Model LARGE CS > 64Kb DS > 64Kb(Los arreglos de datos deben ocupar menos de 64 K) Model HUGE CS > 64Kb DS > 64Kb(Los arreglos de datos Pueden ocupar ms de 64 Kb) INICIALIZACION DE DATOS Los datos pueden tener diferentes longitudes, as podemos hablar de BYTES (8 bits), de palabras WORD (16 bits) de doble palabra (32 bits). Dependiendo de la longitud del dato se usa un directivo diferente para declararlo. DB 1byte DW 2byte DD 4byte DF o DP 6byte DQ 8byte DT 10bytPodemos usar una etiqueta para definir un arreglo, ejemplo: Arreglo db 0, 1, 2, 3, 4 ; define 5 bytes con valores (0,1,2,3,4) Otra forma de inicializar arreglo. Arreglo db 0 db 1 db 2
5|Pgina JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

FILA

db 3 db 4 Directiva DUP para definir una cierta cantidad de datos. db 100 dup (0) ; define 100 bytes, todos con valor de( 0 )

2.1 Ensamblador (y ligador) a utilizar


El lengua je ensamblador, o assembler (assembly language en ingls), es un lengua je de programacin de bajo nivel para los computadores, microprocesadores, micro controladores y otros circuitos integrados programables. Implementa una representacin simblica de los cdigos de mquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representacin ms directa del cdigo mquina especfico para cada arquitectura legible por un programador. Caractersticas

El cdigo escrito en lengua je ensamblador posee una cierta dificultad de ser entendido ya que su estructura se acerca al lengua je mquina, es decir, es un lengua je de bajo nivel. El lengua je ensamblador es difcilmente portable, es decir, un cdigo escrito para un microprocesador, puede necesitar ser modificado, para poder ser usado en otra mquina distinta. Al cambiar a una mquina con arquitectura diferente, generalmente es necesario reescribirlo completamente. Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por por lo que se pueden crear segmentos de cdigo difciles y/o muy un microprocesador,

ineficientes de programar en un lenguaje de alto nivel, ya que, entre otras cosas, en el lengua je ensamblador se dispone de instrucciones del CPU que generalmente no estn disponibles en los lenguajes de alto nivel.

6|Pgina JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

Para crear un programa ejecutable utilizando lenguaje ensamblador es necesario realizar la serie de pasos, conocida como ciclo de desarrollo de programas. Para cada programa que se realice, habr eventualmente tres archivos en el disco. El paso inicial es crear un archivo de programa fuente. Para crear este programa es necesario usar un editor ASCII, como el programa EDIT de la versin 5.0 o posterior de MS-DOS. Este archivo contendr todas las instrucciones de lenguaje ensamblador que conforman nuestro programa. Por convencin, los archivos escritos en lenguaje ensamblador tienen asignados la extensin .ASM. Los mdulos de programa fuente que constituyen un programa ejecutable pueden estar organizados en una gran variedad de formas. Por ejemplo, pueden escribirse todos los procedimientos de un programa en un solo mdulo o pueden dividirse estos procedimientos en diferentes mdulos, de acuerdo a la especifidad de la tarea que realizan. El programa en ensamblador, con extensin .ASM, es despus usado para convertir el archivo de programa fuente en un archivo objeto, utilizando un traductor de lenguaje ensamblador, tal como el Macro Assembler, o MASM, de Microsoft o el Turbo Assembler, o TASM, de Borland.

2.2 Ciclos numricos


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

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 * LOOPNZ, LOOPNE realizar un * DEC decrementar bucle si no es cero * LOOP realizar un bucle * JCXZ salta si CX es cero * LOOPZ, LOOPE realizar un bucle si es cero El lenguaje ensamblador cuenta con una instruccin muy poderosa que permite la programacin de ciclos finitos, la instruccin LOOP. Esta instruccin trabaja en forma conjunta con el registro contador CX. El formato general de esta instruccin es: Mov CX, Numero_Veces Etiqueta:
7|Pgina JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

Instrucciones a realizar Loop Etiqueta La instruccin Loop ejecuta las instrucciones que se encuentran entre la Etiqueta: y Loop Etiqueta el nmero de veces que indique el campo No_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 repetir Regresa a la etiqueta y compara el ciclo La instruccin Loop decrementa el registro CX en cada iteracin y se detiene cuando CX es igual a cero.

2.3 Captura bsica de cadenas


Una cadena es una secuencia de bytes contiguos. Las operaciones que se realizan son las siguientes: Operaciones para Cadenas: LODS, STOS, MOVS, CMPS, SCAS, INS, OUTS Operacin Auxiliar: CLD (Auto-incrementa SI y/o DI), STD (Auto-decrementa SI y/o DI) ; INICIALIZACION CLD ; AUTO-INCREMENTO MOV SI, STR ; INICIO-CADENA LODSB ; OPERACION: AL=MEM[SI++] LODS LODS: LOaD String. Lee un caracter a la vez en el acumulador. Registros Implicados: Registros que debe inicializar antes de usar la instruccin Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de SI AL/AX/EAX: Dato consultado. LODSB usa AL, LODSW usa AX, LODSW usa EAX DS:SI: Apunta al elemento actual de la cadena consultada. STOS STOS: STOre String. Graba un caracter de una cadena a la vez Registros Implicados: Registros que debe inicializar antes de usar la instruccin Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de DI AL/AX/EAX: dato consultado. STOSB usa AL, STOSW usa AX, STOW usa EAX ES: DI: Apunta al elemento actual del bloque de memoria a grabar.

8|Pgina JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

SCAS SCAS: SCAn String. Busca valor del acumulador en una cadena Registros Implicados: Registros que debe inicializar antes de usar la instruccin Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de DI AL/AX/EAX: Dato a comparar. SCASB usa AL, SCASW usa AX, SCASW usa EAX. ES:DI: Indice para la cadena donde se buscar el dato. REP SCAS REP SCAS: REPite bsqueda de un dato mientras sea diferente (REPNE) o igual (REPE) en una cadena. Termina bsqueda si el dato es igual (REPNE), diferente (REPE) o el contador CX es cero Registros Implicados: Registros que debe inicializar antes de usar la instruccin Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de DI AL/AX/EAX: Dato a comparar. SCASB usa AL, SCASW usa AX, SCASW usa EAX ES:DI: Indice para la cadena donde se buscar el dato CX: Mximo no. comparaciones = Tamao de la cadena

MOVS MOVS: MOVe String. Transfiere una cadena de [SI] a [DI]. Nota: Existe MOVSB, MOVSW y MOVSD. Adems, no se modifica el registro AX Registros Implicados: Registros que debe inicializar antes de usar la instruccin Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de SI/DI DS:SI: ndice para la cadena origen ES:DI: ndice para la cadena origen REP MOVS REP MOVS: Copia una cadena en una sola instruccin. El nmero de caracteres a copiar se especifica en el registro CX. Registros Implicados: Registros que debe inicializar antes de usar la instruccin Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de SI/DI DS:SI: Indice para la cadena origen ES:DI: Indice para la cadena origen CX: Tamao de la cadena

9|Pgina JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

2.4 Comparacin y prueba


Instruccin genrica para comparar La instruccin es CMP, ste permite comparar 2 operandos, la sintaxis es la siguiente: CMP < Operador 1>, <Operador2> El operador 1, se compara con el 2. Los operandos pueden ser cualquier direccionamiento valido, cumpliendo las reglas de la instruccin MOV con respecto a los operandos. sta instruccin compara 2 operandos y luego cambia el registro de banderas en base al resultado de la comparacin. COMPARACION (*LA INSTRUCCIN CMP) La instruccin CMP por lo comn es utilizada para comparar dos campos de datos, uno de los cuales estn contenidos en un registro. El formato general para CMP es: | [etiqueta:] | CMP | {registro/memoria}, {registro/memoria/inmediato}| El resultado de una operacin CMP afecta la banderas AF, CF, OF, PF, SF y ZF, aunque no tiene que probar estas banderas de forma individual. El cdigo siguiente prueba el registro BX por un valor cero: X CMP BX, 00 ;Compara Bx con cero JZ B50 ;Si es cero salta a B50 . ;(accin si es diferente de cero) . B50: ;Destino del salto, si BX es cero Si el BX tiene cero, cmp establece ZF a 1 y puede o no cambiar la configuracin de otras banderas. La instruccin JZ (salta si es cero) solo prueba la bandera ZF. Ya qye ZF tiene 1 (que significa una condicin cero), JZ transfiere el control (salta) a la direccin indicada por el operando B50. Observe que la operacin compara el primer operando con el segundo; por ejemplo el valor del primer operando es mayor que, igual o menor que el valor segundo operando. *LA INSTRUCCIN CMPS CMPS compara el contenido de una localidad de memoria (direccionada por DS:SI). Dependiendo de la bandera de direccin, CMPS incrementa o disminuye tambin los registros SI y DI para bytes, en 2 para palabras y en 4 para palabras dobles. La operacin establece las banderas: AF, CF, OF, PF, SF y ZF. Cuando se combinan con un prefijo REP y una longitud en el CX, de manera sucesiva CMPS puede comparar cadenas de cualquier longitud. Pero observe que CMPS proporcionan una comparacin alfanumrica, esto es, una comparacin de acuerdo a con los valores ASCII. Considere la comparacin de dos cadenas que contienen JEAN y JOAN, una comparacin de izquierda a derecha, tiene el resultado siguiente: J:J Iguales E:O Diferentes (E es menor) A:A iguales N:N iguales Una comparacin de los 4 bytes termina con una comparacin de N con N (iguales). Ahora ya que los dos nombres son idnticos, la operacin debe terminar tan pronto como la comparacin entre 2 caracteres sea diferente. Algunas derivaciones de CMPS son las siguientes:
10 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

*CMPSB: Compara Bytes *CMPSD: Compara palabras dobles *CMPSW: Compara palabras Las comparaciones en ensamblador se realizan con la instruccin CMP destino, fuente cuya real funcin es restar del destino la fuente, y afectar las banderas, pero eso por ahora no importa, como la programacin en ensamblador es estructurada vamos a utilizar saltos para que nuestro programa no haga lo que no queremos. El salto que se usa para una comparacin donde el destino es mayor que la fuente es JA nombre_etiqueta, es decir, al juntar el cdigo anterior para pedir los nmeros con la comparacin y el salto, tendremos algo asi: PRIMERO: ;etiqueta a la que regresa el salto MOV AH,01 INT 21H SUB AL,48 CMP AL, 10; comparacion JA PRIMERO ; salto si DESTINO es mayor a FUENTE MUL diez MOV elnumero, AL ; ya se tiene el primer digito ahora el segundo SEGUNDO: MOV AG,01 INT 21H SUB AL,48 JA SEGUNDO ADD elnumero,AL

2.5 Saltos

JMP Salta. JE, JZ salta si es igual a cero. JNE, JNZ salta si no es igual a cero. JS salta si el signo es negativo JNS salta si el signo no es negativo. JP, JPE salta si la paridad es par JNP, JOP salta si la paridad es impar. JO salta si hay capacidad excedida. JNO salta si no hay capacidad excedida. JB, JNAE salta si es por abajo (no encima o igual).
ISMA-VI

JNB, JAE salta si no est por abajo (encima o igual). JBE, JNA salta si es por abajo o igual (no encima). JNBE, JA salta si no es por abajo o igual (encima). JL, JNGE salta si es menor que (no mayor o igual). JNL, JGE salta si no es menor que (mayor o igual). JLE, JNG salta si es menor que o igual (no mayor).

11 | P g i n a JAZMN MONTIEL RAMREZ UNIDAD II

JNLE, JG salta si no es menor que o igual (mayor). CALL (Llamada a subrutina).

Transfiere el control incondicionalmente a la direccin indicada en el operando. La bifurcacin puede ser tambin directa o indirecta como anteriormente vimos, pero adems puede ser corta (tipo SHORT) con un desplazamiento comprendido entre -128 y 127; o larga, con un desplazamiento de dos bytes con signo. Si se hace un JMP SHORT y no llega el salto (por qu est demasiado alejada esa etiqueta) el ensamblador dar error. Los buenos ensambladores (como TASM ) cuando dan dos posadas colocan all donde es posible en salto corto, para economizar memoria, sin que el programador tenga que ocuparse de poner un SHORT, Si el salto de dos bytes, que permite desplazamiento de 64 Kb en la memoria sigue siendo insuficiente, se puede indicar con far que es largo (salto a otro seguimiento).

RET / RETF (Retorno de subrutina). Sintaxis: RET [valor] o RETF [Valor] Indicadores: OF DF IF TF SF ZF AF PF CF

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 situacin para poder transferir el control del programa a otra seccin, por ejemplo: CMP AX,0 JE otro ::::::::::: ::::::::::: otro : :::::::::: :::::::::: End En este ejemplo, la instruccin JE (Salta si es igual) revisa si la prueba implcita en la instruccin anterior result positiva, es decir, si la comparacin de AX con 0 fuera cierta. En caso de que AX sea igual a 0, JE transfiere el control del programa a las instrucciones que se encuentran despus de la etiqueta "otro". En caso contrario ejecuta las instrucciones siguientes a JE. La siguiente es una lista de las instrucciones de salto condicional y su descripcin:
12 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

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 efecta si la bandera de CF=0 o si la bandera Z F=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 efecta si CF =0. JB o JNAE: S alta 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 efecta 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 efecta 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 s e efecta 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 efecta 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 efecta 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 j ump if not less). El salto se efecta si SF=OF. LOOP (bucle). Sintaxis: LOOP desplazamiento Indicadores OF DF IF TF SF ZF AF PF CF Decrementa el registro contador CX; si CX es cero, ejecuta la siguiente instruccin, en caso contrario transfiere el control a la direccin resultante de sumar a IP + desplazamiento. El desplazamiento debe estar comprendido entre -128 y +127. Ejemplo: MOV CX,10 BUCLE: LOOP BUCLE Con las mismas caractersticas que la instruccin anterior: LOOPE/LOOPZ Bucle si igual, si cero. Z=1 Y CX<>0 LOOPNE/LOOPNZ Bucle si no igual, si no cero. Z=0 y CX<>0

2.7 Incremento y decremento


Las instrucciones INC y DEC permiten incrementar los contenidos de los registros. Ejemplos: INC AX ; AX=AX+1 INC VAR1 ;VAR1=VAR1+1 DEC AX ;AX=AX-1
13 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

DEC VAR1 ;VAR1=VAR1-1 y de las variables almacenadas en memoria. Las instrucciones del ensamblador Instrucciones de transferencia son utilizadas para mover los contenidos de los operando. 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

Ejemplo de una 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 operando, lo cual crear ms de un quebradero de cabeza al principio. MOV AX,BL MOV AX, BX Sin embargo hace que el procesador tome 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. INCREMENTO: Consiste en sumar uno al contenido de un registro que se especifica en la instruccin. Su esquema es: R R+1 Donde "R" representa un registro cualquiera de 8 a 16 bits. Si se trata de un registro doble (de 16 bits) se incrementa el registro de orden bajo (por ejemplo, en el "BC" se incrementa "C"), y si ello hace que este pase a valer "0", se incrementa tambin el de orden alto. DECREMENTO: Es la inversa de la anterior, consiste en restar uno al contenido de un registro. Su esquema es: R R-1 Si se trata de un registro doble, se decrementa el de orden bajo y, si esto hace que pase a valer 255 (FFh), se decrementa tambin el de orden alto.
14 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

COMPLEMENTO: Consiste en realizar un "complemento a 1" del acumulador, es decir, cambiar los "unos" por "ceros" y los "ceros" por "unos". NEGACIN: Consiste en realizar un "complemento a 2" del acumulador, es decir, realizar un "complemento a 1" y, luego, sumarle "1". Lo que se obtiene es el "negativo" del nmero que tenamos en el acumulador. El efecto es el mismo que si restramos el acumulador de "cero", es decir: A 0-A EL FLAG DE ACARREO: Existen dos instrucciones que afectan al indicador de acarreo del registro "F", es posible ponerlo a "1" o "complementarlo" (ponerlo a "1" si era "0" y viceversa). No se ha previsto una instruccin para poner a "0" el flag de acarreo, dado que esto se puede conseguir haciendo un "AND" o un "OR" del acumulador consigo mismo.

2.8 Captura de cadenas con formato


Permiten el movimiento, comparacin o bsqueda rpida de 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.

STOS STOS: STOre String. Graba un caracter de una cadena a la vez Registros Implicados: Registros que debe inicializar antes de usar la instruccin Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de DI AL/AX/EAX: Dato consultado. STOSB usa AL, STOSW usa AX, STOSW usa EAX ES:DI: Apunta al elemento actual del bloque de memoria a grabar LODS LODS: LOaD String. Lee un caracter a la vez en el acumulador Registros Implicados: Registros que debe inicializar antes de usar la instruccin Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de SI AL/AX/EAX: Dato consultado. LODSB usa AL, LODSW usa AX, LODSW usa EAX DS:SI: Apunta al elemento actual de la cadena consultada REP SCAS

15 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

REP SCAS: REPite bsqueda de un dato mientras sea diferente (REPNE) o igual (REPE) en una cadena. Termina bsqueda si el dato es igual (REPNE), diferente (REPE) o el contador CX es cero Registros Implicados: Registros que debe inicializar antes de usar la instruccin Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de DI AL/AX/EAX: Dato a comparar. SCASB usa AL, SCASW usa AX, SCASW usa EAX ES:DI: Indice para la cadena donde se buscar el dato CX: Mximo no. comparaciones = Tamao de la cadena

2.9 Instrucciones aritmticas


Existen 8 instrucciones aritmticas bsicas ADD (suma), SUB (resta), MUL (multiplicacin). DIV (divisin sin signo), IMUL (Multiplicacin con signo), IDIV (Divisin con signo), INC (Incremento unitario) y DEC (Decremento 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. Estas instrucciones son las que realiza directamente el 8086/8088: o IMUL multiplicacin entera Grupo de adicin: o AAM ajuste ASCII para la o ADD suma multiplicacin o ADC suma con acarreo o AAA ajuste ASCII para la suma Grupo de divisin: o DAA ajuste decimal para la o DIV divisin suma o IDIV divisin entera o AAD ajuste ASCII para la divisin Grupo de sustraccin: o SUB resta Conversiones: o SBB resta con acarreo negativo o CBW pasar octeto a palabra o AAS ajuste ASCII para la resta o CWD pasar palabra a doble o DAS ajuste decimal para la resta palabra NEG negacin. Grupo de multiplicacin: o MUL multiplicacin

Instrucciones Aritmticas
16 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

Este tipo de instrucciones realizan operaciones aritmticas con los operandos. Y son: ADD, ADC, DAA, AAA, SUB, SBB, DAS, AAS, NEG, MUL, IMUL, AAM, DIV, IDIV, AAD, CBW, CWB, INC, DEC. ADD y ADC realizan la suma y la suma con acarreo (bit CF del registro de estado) de dos operandos, respectivamente, y guardan el resultado en el primero de ellos. Admiten todos los tipos de direccionamiento (excepto que ambos operando estn en memoria). ADD/ADC reg, reg ADD/ADC mem, reg ADD/ADC reg, mem ADD/ADC reg, inmediato ADD/ADC mem, inmediato Ejemplo: ; J = 34+f MOV AX, F ADD AX, 34 MOV J, AX

SUB y SBB realizan la resta y la resta con acarreo, respectivamente, de dos operandos y guardan el resultado en el primero de ellos. Admiten todos los modos de direccionamiento, excepto dos operando en memoria. SUB/SBB reg, reg SUB/SBB mem, reg SUB/SBB reg, mem SUB/SBB reg, inmediato SUB/SBB mem, inmediato Ejemplo: ; J = F-34 MOV AX, F SUB AX, 34 MOV J, AX

Estas instrucciones afectan a los bits OF, SF, ZF, AF, PF, CF del registro de estado. DAS realizan la correccin BCD empaquetado del resultado de una resta en AL. Actan de manera similar a la instruccin de ajuste de la suma. NEG realiza la operacin aritmtica de negado de un operando y guarda el resultado en el mismo operando. Admite todos los tipos de direccionamiento, excepto inmediato. NEG reg NEG mem La operacin que realiza es: 0 operando. Estas instrucciones afectan a los bits OF, SF, ZF, AF, PF, CF del registro de estado. DAA realizan la correccin BCD empaquetado del resultado de una suma en AL.

17 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

El 8086/88 realiza las sumas asumiendo que los operados son ambos valores binarios, de manera que se suman dos valores codificados en BCD empaquetado el resultado puede no ser un valor vlido en este formato:
Instrucciones Generales Mnemnico/Operando Instrucciones de Adicin aaa adc destino, fuente add destino, fuente daa inc destino Instrucciones de Substraccin aas cmp destino, fuente Das dec destino neg destino sbb destino, fuente sub destino, fuente Instrucciones de Multiplicacin Aam imul fuente mul fuente Instrucciones de Divisin Aad Cbw Cwd div fuente idiv fuente Ajuste ASCII para divisin Convierte bytes a palabras Convierte palabras a dobles palabras Divide Divisin de Enteros Ajuste ASCII para multiplicacin Multiplicacin con enteros Multiplicar Ajuste ASCII para substraccin Compara Ajuste decimal para substraccin Decrementa byte o palabra Negar (complemento a dos) Substrae Substrae Ajuste ASCII para adicin Suma con acarreo Suma bytes o palabras Ajuste decimal para adicin Incremento Descripcin

Existen dos formas de incrementar el poder matemtico del lenguaje ensamblador. Primero, se puede comparar) o escribir) un paquete de funciones matemticas con rutinas que implementan las funciones matemticas de alto nivel que se necesitan. Otra solucin es comprar un chip coprocesador matemtico,
18 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

aunque esto puede ser muy caro. Como una tercera opcin , y probablemente la mejor, es utilizar un lenguaje de alto nivel como Pascal o C para codificar las expresiones de punto flotante. Estos lenguajes vienen con un detector automtico de presencia de coprocesador matemtico o cambiar a un software emulador para sistemas que carezcan del chip opcional. Despus de escribir el programa, se puede combinar el cdigo compilado de alto nivel, con nuestro programa en lenguaje ensamblador. Ya que el coprocesador matemtico tiene requerimientos estrictos acerca de los datos y formatos de instrucciones, la mayora de los compiladores generan cdigo mquina optimizado, y hay poca ventaja en escribir expresiones de punto flotante directamente en lenguaje ensamblador.

2.10 Manipulacin de la 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 La pila es un grupo de lo calidades de memoria que se reservan con la finalidad de proporcionar un espacio para el almacenamiento temporal de informacin. 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 bsicas: Push (Meter) y Pop (sacar). El formato de estas instrucciones es el siguiente: Push operando y Pop operando Cuando se ejecuta la instruccin Push, el contenido del operando se almacena en la ltima posicin de la pila. Por ejemplo: Si AX se carga previamente con el valor 5, un a instruccin Pus h AX almacenara el valor 5 en la ultima posicin de la pila. Por otro lado la instruccin Pop saca el ltimo dato almacenado en la pila y lo coloca en el operando. Siguiendo el ejemplo anterior, la instruccin Pop BX obtendra el nmero 5 y lo almacenara en el registro BX Uso del Stack El Stack es un segmento especial de memoria que opera en conjuncin con varias instrucciones del 8086. Como con todos los segmentos, la localizacin del stack y su tamao (hasta 64K) dependen del programador determinarlo. En los programas de lenguaje ensamblador, la forma ms fcil de crear un stack es usar la directiva STACK. Un stack tiene tres propsitos principales:
19 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

- Preservar valores de los registros temporalmente. - Almacenar direcciones al las cuales las rutinas regresaran. - Almacenar variables dinmicas. El ltimo de stos viene a jugar ms frecuentemente en los lenguajes de programacin de alto nivel, donde las variables son pasadas va stack hacia y desde, funciones y procedimientos. Similarmente, variables temporales pueden se almacenadas en el stack. Estos usos son raros en la programacin pura en lenguaje ensamblador, aunque se puede almacenar variables de memoria de sta manera si se desea. Como opera el Stack Conceptualmente, un stack es como una torre de platos en una cocina de un restaurante. El plato de encima de la pila est fcilmente disponible. Pero para tomar los platos de abajo, otros platos de encima primeramente deben ser removidos. Colocar un nuevo plato en la pila es llamado push, Remover un plato de la parte superior de la pila, es llamado pop. Ya que de la manera en que el ltimo plato colocado en el stack es el primer plato disponible a ser removido, ste tipo de stack es llamado stack LIFO o UEPS, por "Last-In-First-Out". No como los platos, los valores en la computadora no pueden moverse fsicamente hacia arriba y hacia abajo. Por lo tanto, para simular la accin de un movimiento de los valores del stack, requiere de utilizar registros para localizar la direccin base del Stack y la direccin OFFSET del plato superior - que es, la localidad donde el valor superior de la pila es almacenado. En programacin 8086, el registro segmento ss direcciona al segmento de stack base. El registro sp direcciona el desplazamiento OFFSET tope del Stack en dicho segmento. Manipulacin del Stack El punto principal de la manipulacin del stack es simple: Para cada push en un programa, debe haber su correspondiente pop. Igualando pops y pushes mantiene el stack en forma correcta- en otras palabras, en sincronizacin con la habilidad del programa para almacenar y recuperar el valor que necesita. Considere lo que sucede si se falla en ejecutar un correspondiente pop para cada push. En ste caso, pushes futuros causarn que el stack crezca mas y ms largo, eventualmente rebasando el espacio segmento permitido para el programa. Este grave error normalmente termina en un crash sobre escribiendo otras reas de memoria por el puntero del stack. Un error similar ocurre si se ejecutan ms pops que pushes, causando un bajoflujo y tambin resultar en un crash. Una forma de prevenir stos problemas es escribir los programas en pequeos mdulos, o subrutinas. En cada modulo, realizar un push con todos los registros que se utilizarn. Entonces, justo antes de que sta seccin de cdigo termine, realizar un pop a los mismos registros retirndolos pero en orden inverso. push push push ax bx cx pop
JAZMN MONTIEL RAMREZ ISMA-VI

; ------ Programa objetivo cx


20 | P g i n a UNIDAD II

pop

bx

pop

ax

En ste ejemplo, los registros ax, bx y cx, son posiblemente utilizados; por lo tanto, stos registros son almacenados en el stack para preservar los valores de los registros. Por ltimo, los valores son retirados (pop) del stack en orden inverso, restaurando los valores originales de los registros y manteniendo el stack en sincrona. PUSH y POP realizan las operaciones de apilado y desapilado en la pila del procesador respectivamente, admiten todos los tipos de direccionamiento (excepto inmediato). Los operandos deben ser siempre de 16 bits.

2.11 Obtencin de cadena con representacin decimal


En las computadoras el formato natural para la aritmtica es el binario. La representacin del nmero decimal 1; 527 en los tres formatos decimales: ASCI I 31 35 32 37 (cuatro bytes) BCD desempaquetado 01 05 02 07 (cuatro by tes ) BCD empaquetado 15 27 (dos bytes) El procesador realiza aritmtica en valores ASCI I y BCD un dgito a la vez. Ya que los datos son ingresados desde un teclado significan que estn en formato ASCI I, la representacin en memoria de un nmero decimal ingresado tal como 1234 es 31323334H. Per o realizar aritmtica sobre tal nmero implica un tratamiento especial. Las instrucciones AAA y AAS realizan aritmtica de manera directa sobre nmeros ASCCI Procesos de Control NOP (Operacin nula). Sintaxis: NOP Indicadores:

Realiza una operacin nula, es decir, el microprocesador descodifica 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 operando requeridos. Al mnemnico ESC le siguen los cdigos de operacin apropiados para el coprocesador as como la instruccin y la direccin del operando necesario.
21 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

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 HLTpara 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:

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
22 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

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 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. Estas son las instrucciones equivalentes 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. Ejemplo: PUNT DD 12345678H LDS SI, PUNT Como resultado de esta instruccin, en DS: SI se hace referencia a la posicin 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).
23 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

Sintaxis: LES destino, origen. Esta instruccin es anloga a LDS, pero utilizando ES en lugar de D.

2.12 nstrucciones lgicas


Son operaciones bit a bit que trabajan sobre octetos o palabras completas: NOT negacin , AND producto lgico (), OR suma lgica y suma lgica exclusive. Se cuenta con un grupo de instrucciones lgicas que operan a nivel de bit, estas instrucciones son: AND, OR, XOR y NOT.Las instrucciones que se enlistan antes requieren dos operando, a excepcin de la operacin NOT que slo requiere uno. 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 operando 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 lo calidad de memoria, as como para negar algn bit. AND: FUNCION LOGICA Y OR: FUNCION LOGICA O XOR: FUNCION LOGICA O EXCLUSIVO TEST: FUNCION LOGICA Y SIN RESULTADO Los operadores lgicos permiten combinar expresiones simples en expresiones ms complejas. Al escribir expresiones en las que se combinan varias comparaciones mediante lgicos es conveniente utilizar parntesis, aunque en muchos casos no sean necesarios porque las comparaciones tienen precedencia sobre los operadores lgicos.

2.13 Desplazamiento y rotacin


Las instrucciones para rotacin son cuatro y nos permiten mover de forma cclica los bits que forman parte de un registro o lo calidad 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, p ero aplica su rotacin hacia la derecha
24 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

Las instrucciones de desplazamiento son cuatro: shl, shr, sar y sal; y su objetivo es desplazar los bits de un operando un determinado nmero de posiciones a la izquierda o a la derecha. La estructura de los operandos manejados por estas instrucciones y su significado es idntico para las cuatro instrucciones. Todas ellas trabajan sobre un operando fuente y un operando destino. El Operando Destino contiene el dato que va a ser objeto del desplazamiento y debe ser del tipo, registro o memoria. El Operando Fuente determina la cantidad de posiciones que va a ser desplazado el operando destino. El operando fuente slo puede ser un dato inmediato de 8 bits (I8) o bien el registro CL. SHL (Shift Left = desplazamiento a la izquierda) Se desplazan a la izquierda los bits del operando destino tantas posiciones como indique el operando fuente. El desplazamiento de una posicin se realiza de la siguiente forma: el bit de mayor peso del operando se desplaza al bit CF del registro de estado, el resto de los bits se desplazan una posicin hacia la izquierda, y la posicin de menor peso se rellena con un 0. Este proceso se representa en la figura siguiente.

SHR

(Shift

Right

desplazamiento

la

derecha)

La instruccin shr funciona de la misma forma que shl, pero desplazando los bits a la derecha en lugar de a la izquierda, tal y como se muestra en la figura siguiente.

SAR

(Shift

Arithmetic

Right

desplazamiento

aritmtico

la

derecha)

Esta instruccin desplaza los bits del operando destino a la derecha tantos bits como indique el operando fuente. Esta forma de funcionamiento es similar a la de la instruccin shr; sin embargo, ambas instrucciones se diferencian en que sar, en vez introducir ceros por la izquierda del operando, replica el bit de mayor peso (bit de signo) en cada desplazamiento. esquemticamente, la instruccin sar trabaja de la siguiente forma:

25 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

El desplazamiento a la derecha realizado por la instruccin sar recibe el nombre de aritmtico porque sirve para dividir un operando entre una potencia entera de 2. El desplazamiento aritmtico a la derecha de un operando (considerado con signo) n posiciones equivale a la divisin entera del operando entre 2n. SAL (Shift Arithmetic Left = desplazamiento aritmtico a la izquierda) El objetivo de un desplazamiento aritmtico a la izquierda es multiplicar un operando, interpretado con signo, por una potencia de 2.

Para llevar a cabo este tipo de desplazamiento, hay que desplazar los bits del operando hacia la izquierda introduciendo ceros por su derecha. En realidad, este tipo de desplazamiento es idntico al llevado a cabo por la instruccin shl; por tanto, sal y shl son, de hecho, la misma instruccin y se codifican con el mismo cdigo mquina.

2.14 Obtencin de una cadena con la representacin


hexadecimal
Procesos de Control NOP (Operacin nula). Sintaxis: NOP Indicadores: OF DF IF TF SF ZF AF PF CF 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).
26 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

Sintaxis: ESC cdigo_operacin, origen Indicadores: OF DF IF TF SF ZF AF PF CF 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. Ejemplo: ESC 21,AX HLT (Parada hasta interrupcin o reset). Sintaxis: HLT Indicadores: F F F 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: OF DF IF TF SF ZF AF PF CF O D IF TF SF ZF AF PF C

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:
27 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

WAIT Indicadores: OF DF IF TF SF ZF AF PF CF 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: OF DF IF TF SF ZF AF PF CF 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. Ejemplo: MOV BX, OFFSET TABLA MOV AL, 4 XLAT TABLA 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: OF DF IF TF SF ZF AF PF CF 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.
28 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

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 DATO S 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: OF DF IF TF SF ZF AF PF CF 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 endestino y, con los otros dos, otra en DS. Ejemplo: PUNT DD 12345678H LDS SI, PUNT Como resultado de esta instruccin, en DS:SI se hace referencia a la posicin 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.15 Captura y almacenamiento de datos


Numricos 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:
29 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

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. 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 ello, 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 punter 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

30 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

2.16 Operaciones bsicas sobre archivos de disco


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. 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 este dispositivo. 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
31 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

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 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.

32 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

CONCLUSIN
Se puede observar que un ensamblador es un lenguaje de bajo nivel para las computadoras el cual es difcil de entender ya que utiliza de manera simblica los nmeros en cdigo binario, en un lenguaje ensamblador se realizan los ciclos numricos por medio de bucles y este es un es un grupo de instrucciones que se ejecutan cclicamente N veces.

Una captura bsica de cadenas se realiza por medio de instrucciones y una cadena es un conjunto de localidades de memoria consecutivas que se reserva bajo el nombre de una variable; esta trabaja mediantes instrucciones LCD. Para realizar una comparacin y prueba se utiliza CMP para comparar este compara si dos valor es son iguales o diferentes.

Las instrucciones se realizan por medios de saltos las cuales se utilizan junto con las de comparacin y prueba esto para poder determinar un flujo de diagrama. Tambin existen ciclos condicionales los cuales son instrucciones, una instruccin de salto condicional, revisa si ocurre alguna situacin para poder transferir el control del programa a otra seccin.

33 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

BIBLIOGRAFA
Martnez, Jaime Garza JAOR. Organizacin y arquitectura de computadoras. Estado de Mxico, Mxico.: Pretince Hall; 2000. Canal, Ramn; Elias, Eduard; Gonzlez, Jos; Marcuello, Pedro; Molina,Carlos, Pea, M.A.; Valero, Miguel. Estructura y Diseo de Computadores .Barcelona, 2000. Revert. ISBN: 84-291-2619-8. Blanco Viejo, Cecilio.Electrnica Digital. Universidad de Oviedo. ISBN: 84-8317-3727.http://books.google.com.mx/books?id=myOXwYAhOwgC&pg=PA209&dq=MEMORIA +RAM&hl=en&s Gil, Jos; Pealver, Lourdes; Pont, Ana; Robles, Antonio. Estructura de computadores (vol I); Un recorrido por la Unidad Central de Pro cesos. Universidad Politcnica de Valencia. ISBN: 84-7721-415-8. Garca, Manuel; Lpez, Jos. Apuntes de Organizacin de Computadoras.Ediciones de la Universidad de Oviedo. 2007. IS BN: 978-84-8317-606-1. Tanenbaum, Andrew S. Sistemas Operativos Modernos; Segunda Edicin.Pearson Educacin. Mx ico, 2003. ISBN: 970-26-0315-3. Pg.: 976. http://www.infor.uva.es /cllamas/2/2-2.pdf Apuntes de Modos de Direccionamiento. Departamento de Informtica, Universidad de Valladolid. www.infor.uva.es/~bastida/OC/mo d os .pd.

34 | P g i n a JAZMN MONTIEL RAMREZ ISMA-VI UNIDAD II

Você também pode gostar