0 valutazioniIl 0% ha trovato utile questo documento (0 voti)
88 visualizzazioni24 pagine
Este documento describe los conceptos básicos de la programación en lenguaje ensamblador, incluyendo instrucciones para el movimiento y comparación de datos, cadenas y ciclos numéricos. Explica el funcionamiento del ensamblador, ligador y editor de código, así como instrucciones clave como MOV, CMP, LOD, STO, REP y LOOP para la manipulación de datos y la creación de bucles. También cubre temas como la comparación de datos con y sin signo y el uso de saltos condicionales basados en las banderas del
Este documento describe los conceptos básicos de la programación en lenguaje ensamblador, incluyendo instrucciones para el movimiento y comparación de datos, cadenas y ciclos numéricos. Explica el funcionamiento del ensamblador, ligador y editor de código, así como instrucciones clave como MOV, CMP, LOD, STO, REP y LOOP para la manipulación de datos y la creación de bucles. También cubre temas como la comparación de datos con y sin signo y el uso de saltos condicionales basados en las banderas del
Este documento describe los conceptos básicos de la programación en lenguaje ensamblador, incluyendo instrucciones para el movimiento y comparación de datos, cadenas y ciclos numéricos. Explica el funcionamiento del ensamblador, ligador y editor de código, así como instrucciones clave como MOV, CMP, LOD, STO, REP y LOOP para la manipulación de datos y la creación de bucles. También cubre temas como la comparación de datos con y sin signo y el uso de saltos condicionales basados en las banderas del
Unidad 2 2.1 Ensamblador (y ligador) a utilizar. Programacin bsica Lenguajes de programacin Binario: 10110000 01100001
(Hexadecimal: 0xb061) MOV al, 061h CDIGO Esta instruccin significa; Mueve el valor hexadecimal 61 (97 decimal) al registro "al". Lenguaje ensamblador *El compilador se encarga de traducir los mnemnicos a los cdigos de operacin. *El linker (ligador) genera el programa ejecutable, una vez compilado el programa fuente. *El programa editor crea el archivo de cdigo fuente Ligador Es un programa que enlaza todos los programas o mdulos obteniendo lo que denominamos programa ejecutable.
Adems incorporan las denominadas rutinas de libreras en caso de solicitarlas el propio programa.
La generacin de un mdulo ejecutable a partir de una coleccin de procedimientos traducidos independientemente requiere un ligador. 2.2 Ciclos numricos. Los ciclos permiten ejecutar un conjunto de instrucciones varias veces hasta que se cumpla una condicin.
El chequeo de la condicin puede estar al inicio o al final del ciclo, en caso de estar al final hay que tener en cuenta que la ejecucin se va a efectuar al menos una vez. En estos ciclos se utilizan los brincos "condicionales" basados en el estado de las banderas. Por ejemplo la instruccin jnz que salta solamente si el resultado de una operacin es diferente de cero y la instruccin jz que salta si el resultado de la operacin es cero.
2.3CAPTURA BASICA DE CADENAS
Instrucciones para cadenas
Operaciones para cadenas: LODS, STOS, MOVS, CMPS, SCAS, INS, OUTS. LODS: : LOaD String lee un carcter a la vez en el acumulador Operacin auxiliar: CLD (auto-incrementa SI y/o DI) STD (auto- decrementa SI y/o DI)
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. Operacin Equivalente LODSB MOV AL, DS:[SI] INC SI LODSW MOV AX, DS:[SI] ADD SI,2 VARIANTES DE LODSB STOS: STOre String. Graba un carcter 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
Operacin Equivalente STOSB MOV ES:[DI], AL INC DI STOSW MOV ES:[DI], AX ADD DI,2 VARIANTES DE STOSB SCAS: SCAn String. Busca valor del acumulador en la 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: ndice para la cadena donde se busca el dato. Operacin Equivalente SCASB CMP AL, ES:[DI] INC DI SCASW CMP AX, ES:[DI] ADD DI,2 VARIANTES DE 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, 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 ndice para la cadena que buscara el dato CX: mximo numero de comparaciones = tamao de la cadena
Operacin Equivalente REPE SCASB CYCLE: CMP AL, ES:[DI] JE END INC DI LOOP CYCLE REPNE SCASB CYCLE: CMP AL, ES:[DI] JNE END
INC DI LOOP CYCLE VARIANTES DE REP SCAS MOVS: MOVe String. Transfiere una cadena de (SI) a (DI). Nota: existe MOVBS, 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
Operacin Equivalente MOVSB MOV ES:[DI], DS:[SI] INC SI INC DI MOVSW MOV ES:[DI], DS:[SI] ADD SI,2 ADD DI,2 VARIANTES DE MOVSB 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: ndice para la cadena origen ES: DI: ndice para la cadena origen CX: tamao de la cadena
Operacin Equivalente REP MOVSB CICLO: MOV ES:[DI], DS:[SI] INC SI INC DI LOOP CICLO VARIANTES DE REP MOVSB 2.4 Comparacin y Prueba en lenguaje ensamblador
Instrucciones de comparacin y prueba Existen dos instrucciones especiales en el microprocesador 8086: CMP y TEST. CMP (Comparar) compara si dos valores son iguales o diferentes. Su funcionamiento es similar al de la instruccin SUB (restar), slo que no modifica el operando de destino, solamente modifica las banderas de signo (SF), de cero (ZF) y de acarreo (CF). Por ejemplo: CMP AX,1235 Esta instruccin compara si el valor almacenado en el registro AX es igual que el valor 1235 en decimal. Por otro lado, la instruccin TEST realiza la operacin AND de los operandos especificados sin que el resultado se almacene en algn registro, modificando nicamente ciertas banderas. Su aplicacin ms comn es la de probar si algn bit es cero. Ejemplo: Test AL,1 Esta instruccin prueba si el bit menos significativo de AL es 1 y Test AL,128 prueba si el bit ms significativo de AL es 1. Por lo general estas instrucciones van seguidas de alguna de las instrucciones de salto, las cuales se estudian en otra seccin. Iteraciones. Con los saltos condicionales y no condicionales se pueden crear estructuras de iteracin bastante complejas, aunque existen instrucciones especficas para ello tal como loop.
El bloque de instrucciones que se encuentra entre la etiqueta ITERA y la instruccin loop ser ejecutado hasta el registro CX sea igual a 0 cada vez que se ejecuta la instruccin loop p, el registro CX es decrementado en 1 hasta llegar a 0. Esta instruccin tiene la limitante de que debe encontrarse en el rango de +128 a 127 ( mximo nmero de bytes entre ITERA y loop) Un ciclo, conocido tambin como iteracin, es la repeticin de un proceso un cierto nmero de veces hasta que alguna condicin se cumpla. En estos ciclos se utilizan los brincos "condicionales" basados en el estado de las banderas. Por ejemplo la instruccin jnz que salta solamente si el resultado de una operacin es diferente de cero y la instruccin jz que salta si el resultado de la operacin es cero.
Las comparaciones con signo van de acuerdo con la interpretacin que usted le quiera dar a los bytes o palabras de su programa. Por ejemplo, suponga que tiene un byte cuyo valor es 11111111 en binario y que desea compararlo con otro cuyo valor es 00000000. Es 11111111 mayor que 00000000? S y NO eso depende de la interpretacin que usted le quiera dar. Si trabaja con nmeros enteros sin signo S LO SER, pues 255 es mayor que 0. Por el contrario, si tiene signo entonces SER MENOR puesto que 1 es siempre menor que 0. Lo anterior lleva a seleccionar las instrucciones de comparacin y de salto de acuerdo con la interpretacin que se les d a los bytes o palabras; reflexione sobre este punto
El ensamblador permite usar una variedad de instrucciones de salto que transfieren el control dependiendo de las configuraciones en el registro de banderas. Por ejemplo puede comprobar dos campos y despus saltar de acuerdo con los valores de las banderas que la comparacin establece. El formato condicional para el salto condicional es: