Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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).
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 )
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.
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.
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.
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
*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).
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
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
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.
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
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
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.
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.
- 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
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.
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.
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:
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.
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
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
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.
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.
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.