You are on page 1of 27

2.

1 Macro Assembler
El Macro Assembler (MASM), es un paquete del ensamblador principalmente destinado a la plataforma de la compaa de las IBM PC y sus compatibles. Fue la oferta de Microsoft en el mercado de herramientas de programacin en el lenguaje ensamblador para la familia de los microprocesadores x86. El paquete d eeste lenguaje, trabaja bien con los compiladores de lenguajes de alto nivel de Microsoft para las PCs como Lenguaje C y el Lenguaje Pascal. Junto con el resto de paquetes de lenguajes de programacin Turbo, Turbo Assembler ya no es mantenido por Borland. El ensamblado de un programa se lleva a cabo invocando al MASM. Este puede ser llamado, usando un alna de comando de la siguiente manera: MASM nombre_archivo.asm [opciones] Donde: Nombre_archivo: Corresponde al nombre que se asigna al programa fuente. Opciones: Es el modo en que se realizar el ensamble.

Las opciones pueden ser: /a: Orden a los segmentos en orden alfabtico. /s: Ordena los segmentos en orden del fuente /c: Genera un archivo de referencias cruzadas. /iPATH: Busca el PATH para archivos incluidos. /l: Genera un listado de ensamble. /la: genera un listado expandido de ensamble. /z: despliega lnea fuente con mensaje de error. /zi, /zd, /zn: Debug info: zi = completa, zd= nmeros lnea, zn= ninguna.

Turbo Linker

El paquete Turbo Aseembler incluye el enlazador Turbo Linker, y es interoperable con el depurador Turbo Debugger. Para la compatibilidad con el ensamblador Microsoft, Macro Assembler (MASM) de Microsoft, TASM tambin ensambla los archivos de cdigo fuente del MASM por medio de su modo MASM. Formato del comando: TLINK archivo_objeto [opciones] Donde: Archivo_objeto: Es el nombre del archivo objeto. Opciones: Es el modo en que se enlaza el programa objeto.

Opciones: /x: sin mapa /m: mapa incluyendo nombres pblicos. /s: mapa ms mapa detallado de segmentos. /l: mapa ms nmeros de lnea de fuente. /i: inicializa todos los segmentos. /L: especifica las rutas de bsqueda de libreras. /v: informacin simbolgica de debug completa.

Turbo Debugger
Turbo Debugger es un conjunto de herramientas diseadas para ayudar a depurar programas desarrollados con la lneas de compiladores y ensambladores de Borland. Turbo Debugger ayuda a depurar los programas escritos para Win16, Win32 y DOS. Al cargar el programa en Turbo Debugger se puede controlar la ejecucin del programa y visualizar diferentes aspectos de la ejecucin del programa. Al monitorear las salidas del programa, como el cdigo de fuente, las estructuras de datos y valores del programa, es posible localizar an los errores ms difciles. Dentro de las caractersticas de Turbo Debugger se encuentran las siguientes:

Evaluacin completa de expresiones en ensamblador, C, C++ y Pascal. Control total de la ejecucin del programa, incluyendo animaciones. Acceso de bajo nivel a los registros del CPU y la memoria del sistema. Capacidad de inspeccin de datos completa. Facilidades para el manejo de ejecucin paso a paso de los programas, incluyendo puntos de ruptura (breakpoints). Soporte total de programacin orientada a objetos.

Formato del comando: TD archivo_ejecutable Donde: Archivo_ejecutable: Es el nombre del archivo en lazado.

Proceso de ensamble
El ensamblador (Assembler) convierte un archivo fuente simblico en un archivo objeto hexadecimal. El archivo fuente debe tener una extensin .ASM parar que pueda ser reconocido por el ensamblador. Una de las tareas que realiza el ensamblador durante el proceso de ensamblaje, es calcular el desplazamiento de cada elemento en el segmento de datos y de cada instruccin en el segmento de cdigo, para generar un programa con una extensin .obj. El ensamblador tambin crea un encabezado al frente del mdulo .OBJ generado, parte de este encabezado tiene informacin acerca de las direcciones incompletas que contenga dicho programa. El mdulo .OBJ generado an no est en forma ejecutable. Durante el proceso de enlace, el programa enlazador (linker) lee los archivos objeto (extensin .OBJ) creados por el ensamblador, los enlaza con el conjunto de instrucciones del procesador que componen el programa fuente, escrito en lenguaje ensamblador, y genera un archivo ejecutable de salida (extensin .EXE).

El enlazador enlaza las instrucciones que componen un mdulo para formar un solo programa con todas las instrucciones. Otra de las tareas del enlazador es combinar los programas ensamblados en forma separada en un solo programa ejecutable. Si un archivo tiene menos de 64K de longitud, se puede convertir de archivo ejecutable en archivo de comandos (extensin .COM). Este archivo se origina en la localidad 100H y tiene la ventaja de que requiere poco espacio en disco y en memoria, adems de que se ejecuta rpidamente. El Sistema Operativo ofrece soporte a dos tipos de programas ejecutables: .COM y .EXE Un programa .COM consta de un solo segmento que contiene cdigo, datos y pila. Un programa .EXE consta de segmentos de cdigo, programa y pila separados. Cuando se llama un programa desde el disco para su ejecucin, el cargador del sistema operativo realiza las siguientes acciones: Accede al programa .EXE en el disco. Construye un prefijo de segmento de programa (PSP) de 256 bytes (100H) en un lmite de prrafo en la memoria interna disponible. Almacena el programa en memoria inmediatamente despus del PSP. Carga la direccin del PSP en los registros DS y ES. Carga la direccin del segmento de cdigo en el CS y establece el IP al desplazamiento de la primera instruccin (generalmente cero) en el segmento de cdigo. Carga la direccin del a pila en el SS y establece el SP al tamao de la pila. Transfiere el control al programa para ejecucin, iniciando con la primera instruccin del segmento de cdigo. En esta forma, el cargador del DOS inicializa los registros CS:IP y SS:SP.

Aunque se debe observar que el cargador almacena la direccin del PSP tanto en el registro DS como en el ES, aunque normalmente se requiere la direccin del segmento de datos en estos registros. Como consecuencia, los programas tienen que inicializar el DS con la direccin del segmento de datos.

Procedimiento de depuracin
Una de las teoras en computacin dice que el programa que funciona bien desde la primera vez seguramente tiene errores. El nmero de errores posibles en un programa es proporcional al nmero de lneas e inversamente proporcional a la experiencia del programador. El dominio de la arquitectura del sistema as como del lenguaje ensamblador facilitan la escritura de programas sin errores. La prctica de la programacin en lenguaje ensamblador tambin ayuda a escribir programas libres de errores o al menos con los mnimos errores posibles. El propio ensamblador ayuda a encontrar errores ortogrficos o de sintaxis durante el proceso de ensamble. El enlazador tambin participa en la localizacin de errores en tiempo de ejecucin. An con esa ayuda, es posible que en el momento de ejecutar un programa, surjan problemas de diseo que lleven a resultados errneos. Por todo lo anterior se recomienda desarrollar un programa paso a paso evitando pensar y teclear inmediatamente. Se recomienda plantear el problema a resolver y las acciones a realizar. Elaborar un algoritmo que establezca los pasos a seguir hasta terminar un procedimiento. Elaborar un diagrama de flujo que defina claramente todas las rutas de ejecucin del programa, los procesos, entradas y salidas. Definir las variables que se vayan a utilizar incluyendo los tipos y tamaos.

Codificar el programa utilizando correctamente la sintaxis del lenguaje, la arquitectura del sistema, el conjunto de instrucciones, los modos de direccionamiento y el lenguaje ensamblador. Realizar una prueba de escritorio para evaluar todos los pasos anteriores, antes de capturar el programa. Capturar el programa utilizando el programa codificado ya corregido, si tiene muchas lneas es conveniente que alguien ms lo revise. Si a pesar de todo lo anterior surgen problemas durante la ejecucin, lo cual es altamente probable, se recomienda utilizar el Turbo Debugger, herramienta de depuracin que facilita la prueba de programas as como la correccin de errores al permitir la ejecucin paso a paso de los programas Adems de que permite visualizar el estado de los registros del procesador y las banderas que intervienen durante la ejecucin del programa, tambin permite visualizar el contenido de los segmentos en memoria. Aprender a programar en un lenguaje de programacin requiere de la dedicacin para el conocimiento previo de las instrucciones que maneja el mismo lenguaje. Corresponde al programador la dedicacin del tiempo necesario para hacerlo y poner en prctica los conocimientos adquiriros para el dominio del lenguaje.

2.2 Ciclos numricos


La mayora de los programas constan de varios ciclos en los cuales una serie de pasos se repite hasta alcanzar un requisito o una condicin especfica y varias pruebas para determinar qu accin se debe realizar de entre varias posibles. Una instruccin usada comnmente para la transferencia de control es la instruccin JMP (Jump, salto, bifurcacin). Un salto es incondicional, ya que la operacin transfiere el control bajo cualquier circunstancia.

La instruccin JMP vaca el resultado de la instruccin previamente procesada; por lo que, un programa con muchas operaciones de salto puede perder la velocidad de procesamiento. La instruccin LOOP, requiere un valor inicial en el registro CX. En cada iteracin, LOOP de forma automtica disminuye 1 de CX. Si el valor en el registro CX es cero, el control pasa a la instruccin que sigue; si el valor en CX no es cero, el control pasa a la direccin del operando. La distancia debe ser un salto corto, desde 128 hasta + 128 bytes. Para una operacin que exceda ese lmite, el ensamblador enva un mensaje como salto relativo fuera de rango.

2.3. Tipos de ciclos

2.3.1. Ciclos Incondicionales


Los ciclos incondicionales utilizan la instruccin JMP. Cuando se utiliza esta instruccin dentro de un programa afecta los registros de banderas durante la ejecucin del mismo, como se muestra a continuacin. JMP (salto) Sintaxis: JMP direccin o JMP SHORT Direccin Indicadores: OF DF IF TF SF ZF AF PF CF - - - -- - -- - -- - -- - -- - -- - -

Transfiere el control incondicionalmente a la direccin indicada en el operando. La bifurcacin puede ser tambin directa o indirecta como se vio anteriormente, 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 (porque est demasiado alejada esa etiqueta) el ensamblador dar error. Los buenos ensambladores (como TASM) cuando dan dos pasadas, colocan donde es posible un salto corto, para economizar memoria, sin que el programador tenga que ocuparse de poner la instruccin short. Si el salto de dos bytes, que permite los desplazamientos de 64 K en la memoria sigue siendo insuficiente, se puede indicar con far que es largo (salto a otro segmento). Ejemplos: jmp etiqueta Jmp far ptr etiqueta OTRA: ;Fragmento del programa OPERA.ASM ;Despliega men de opciones

Mov Dx, Offset Pregunta Call Imprime Call ObtenTecla Cmp Al 49 Jae SIGUE Mov DX, Offset Error Call Imprime Jmp OTRA SIGUE: Cmp Al,53 Jbe TODOBIEN Mov Dx, Offset Error Call Imprime Jmp OTRA

; espera que el usuario selecciones la funcin a realizar (1 a 5) ;La seleccin del suauairo es mayor o igual a 1?

;NO, despliega mensaje de error.

;la seleccin del usuario es igual o ;menor a 5? ;NO, despliega mensaje de error

2.6. Ciclos Condicionales


Los ciclos inconcionales utilizan la instruccin LOOP para evaluar la condicin que se utilizar en el programa. Cuando se utiliza esta instruccin dentro de un programa afecta los registros de banderas durante la ejecucin del mismo, como se muestra en el siguiente ejemplo: Este tipo de transferencia de programa consiste en transferir el control del programa a subrutinas, procedimientos, rutinas de interrupcin o simplemente otro lugar del programa, siempre y cuando se cumpla con alguna condicin, o condiciones, en particular. ; Fragmento del programa HEXA.ASM Mov Ck, 15 ; Contador de los nmeros (van a ser 15).

Mov Bx, OFFSET Tabla Itera: Mov Al, Cl Xlat Mov Dl, Al Mov Ah, 2 Int 21h Mov Dl,10 Int 21h Loop Itera ; Etiqueta ; Pone en Al el nmero a traducir ; (empezando desde 15) y lo traduce. ; Despliega el nmero usando la ; funcin 2 de la int 21h. Dl tiene ; el carcter a ser desplegado. ; Salda una lnea dando un efecto de ; escalera. De nuevo se usa la funcin 2. ; Itera hasta llegar a 0 (de 15 a 0).

Otras instrucciones que se utilizan para los ciclos condicionales son las siguientes: LOOPE/LOOPZ; ciclo si igual, si cero. Z=1 y CX <> 0 LOOPNE /LOOPNZ; ciclo si no igual, si no cero. Z=0 y CX <> 0.

2.4 Comparacin y prueba


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 la instruccin CMP es el siguiente: | [etiqueta:] | CMP | {registro/memoria}, {registro/memoria/inmediato}| El resultado de una operacin realizada con la instruccin CMP afecta las siguientes banderas AF, CF, OF, PF, SF y ZF, aunque no se tienen que probar estas banderas de forma individual. El cdigo siguiente prueba el registro BX por un valor cero: Este ejemplo se puede realizar con dos tipos de instrucciones diferentes de la siguiente forma: CMP BX, 00 JZ B50 B50: ; Destino del salto, si BX es cero ; Compara BX con cero ; Si es cero salta a B50

; (Accin si es diferente de cero)

Si el BX tiene cero, CMP establece la bandera 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. Debido a que 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 del segundo operando?

2.5 Saltos
Los saltos que se definen en un programa se utilizan para cambiar el flujo durante la ejecucin. Un salto puede ser evaluado utilizando una instruccin dependiendo de las necesidades o condiciones que se vayan a evaluar. Saltos condicionales para nmeros sin signo. JA/JNBE JAE/JNB JB/JNAE JBE/JNA JC JE/JZ Jump Jumps above or equal to/ Jumps not bellow Jumps below / jumps not above or equal to Jumps below or equal to /Jumps not above Jumps carry set Jumps equal / Jumps 0

Saltos condicionales para nmeros con signo JG/JNLE JGE/JNL JL/JNGE JLE/JNG JNC JNE/JNZ JNO JNP/JPO JNS Jumps greater / Jumps not less than or equal to Jumps Jumps less than / Jumps not greater or equal to Jumps less than or equal to / Jumps not greater than Jumps not carry Jumps not equal to/ Jumps not o Jumps no overflow Jumps no parity / Jumps parity ocd

Jumps no sign (positive)

2.7 Incremento y decremento


El incremento y decremento en el lenguaje ensamblador se lleva a cabo con las instrucciones INC y DEC. Estas instrucciones son las ms bsicas a la hora de hacer operaciones con registros:

La instruccin INC incrementa el valor de un registro, o de cualquier posicin en memoria, en una unidad, y DEC lo decrementa. La instruccin DEC decrementa el valor de un registro, o de cualquier posicin en memoria, en una unidad. La instruccin INC AX, incrementa en uno el valor del registro AX. INC WORD PTR [BX + 4], incrementa la palabra situada en CS: [BX +4] en uno. La instruccin DEC AX, decrementa el registro AX en una unidad (le resta uno). DEC WORD PTR [BX+4], decrementa la palabra situada en CS:[BX+4] en una unidad. Estas dos instrucciones, son equivalentes a la instruccin a++ o a- - del lenguaje C.

2.9 Instrucciones aritmticas


El procesador 8086 incorpora instrucciones suficientes para efectuar operaciones bsicas de suma, resta, multiplicacin y divisin. Cada instruccin tiene capacidad para trabajar con operandos de 8 o 16 bits, con signo o sin l. Existen tres instrucciones que se pueden utilizar en las instrucciones de sumas: ADD (suma) ADC (suma con acarreo) requieren de dos operandos. INC (incrementa) necesita slo un operando.

ADD destino, fuente; Suma el operando fuente al operando destino y deja el resultado en el registro destino. MOV DX, 5 MOV DX, 6 ADD DX, CX

La instruccin ADD, tambin puede usarse con localidades de memoria como se muestra en los siguientes ejemplos: MOV AX, 5 MOV DX, 6 ADD AX, DX ADD M1, AX ADD destino, fuente: cuando se realiza esta operacin se afecta el registro de banderas: 0 S Z A P C

Las instrucciones que se utilizan para llevar a cabo las operaciones aritmticas de suma son: ADD Adds bytes or words ADC Adds bytes or words plus carry flag AAA Adjusts ASCII after addition DAA Adjusts BCD after addition INC Add 1 to byte or word Las instrucciones que se utilizan para llevar a cabo las operaciones aritmticas de resta son: SUB Subtracts bytes or words SBB Subtracts bytes or words minus carry flag ASS Adjusts ASCII after subtraction DAS Adjusts BCD after subtraction DEC Subtracts 1 from byte or word NEG Changes sign of byte or word CMP Compares bytes or word

Las instrucciones que se utilizan para llevar a cabo las operaciones aritmticas para la multiplicacin son: MUL Multiplies unsigned byte or Word IMUL multiplies signed byte or word AAM Adjusts ACII after multiplication Instrucciones que se utilizan para llevar a cabo las operaciones aritmticas para la divisin son: DIV Divides unsigned byte or Word IDIV Divides signed byte or word CBW Converts byte to word CWD Converts word to double word AAD Adjusts ASCII before division

Divide Proc Near Mov AX, CantUnoR Mov Bx, CantDosR Cmp bx, 9 Jnz DIVIDE01 ;Carga el dividendo ;Carga el divisor ; evita error de ;DIVISION POR CERO

AJUSTES
Las operaciones que se llevan a cabo entre los registros y la memoria se realizan en formatos binarios; cuando se desea presentar datos numricos o resultados en pantalla, generalmente se hace en formatos codificados, como cdigo ASCII o BCD.

Sin embargo, el procesador tambin permite la manipulacin aritmtica de nmeros tanto en cdigo BCD como en ASCII. Esto se logra por medio de instrucciones que ajustan los nmeros para aritmtica BCD o aritmtica ASCII. A continuacin se muestran las instrucciones para realizar estas operaciones. AAA DAA AAS DAS AAM AAD DAA Adjusts ASCII after addition Adjust BCD after addition Adjust ASCII after subtraction Adjust BCD after subtraction Adjust ASCII after multiplication Adjust ASCII before division (ajuste incremental para la suma)

Sintaxis: DAA Convierte el contenido del registro AL en un par de valores BCD. Si los cuatro bits menos significativos de AL son un nmero mayor que 9, el indicador AF se pone a 1 y se suma 6 al registro AL. Si los cuatro bits ms significativos de AL tras la operacin anterior son un nmero mayor que 9, el indicador CF se pone a 1 y se suma 60h al registro AL. Ejemplo: add al, cl daa En el ejemplo anterior, si los registros AL y CL contenan dos nmeros en cdigo BCD empaquetados, la instruccin DAA hace que el resultado de la suma en el registro AL siga siendo tambin un cdigo BCD empaquetado.

0000 BA1234 0003 BB3099 0006 8AC3 0008 02C2 000A 27 000B 8AC8 000D 8AC7 000F 12C6 0011 27 0012 8AE8

mov dx, 1234H mov bx,3099H mov bl, dl add al, dl daa mov cl, al mov al, bh adc al, dh daa mov ch, al

;carga 1,234 ;carga 3,099 ;Suma bl con dl

;ajusta a BCD ; resultado a cl ;sum bh, dh y carry

; Ajustaa a BCD ; resultado a ch, resultado en cx

2.10 Manipulacin de la pila


La pila es una estructura de la memoria que utiliza el mtodo LIF (ltimo en entrar, primero en salir) para manipular los datos. La pila siempre est relacionada con los registros SS, SP y BP. Cualquier clculo de Memoria que se realice siempre estar en funcin de SS. Los desplazamientos dentro del segmento SS se manejan a travs de los registros SP y BP. La pila siempre crece de las localidades de memoria alta a las localidades de memoria baja. Para almacenar algn dato en la estructura de la pila, el CPU decrementa el apuntador de pila en dos (SP=SP-2) y despus almacena el dato en la localidad especificada por SS:SP. De manera similar, para sacar un dato de la pila, el CPU lo mueve de la localidad especificada SS:SP al registro indicado, y despus incrementa el apuntador en dos (SP=SP+2).

La operacin de decrementar o incrementar en dos se debe a que la pila solo trabaja con palabras (una palabra tiene 16 bits o dos bytes). Aunque se guarde slo un byte, siempre se almacenarn dos.

La pila se utiliza por omisin con las instrucciones, CALL, INT, RET, e IRET para guardar o restaurar la direccin de retorno antes de ejecutar las rutinas indicadas por dichas instrucciones. Tambin puede usarse para pasar parmetros entre rutinas, o bien de un lenguaje de alto nivel a ensamblador. La pila es manipulada mediante dos instrucciones: PUSH (pone o almacenan la pila) y POP (quita o saca de la pila). Un concepto muy importante en el manejo de la pila es que los valores extrados deben estar en un orden inverso al que tenan cuando se guardaron (debido a que es una estructura LIFO). Ejemplo de rutina de interrupcin Procedimiento que activa TF 0000 TRON PROC NEAR

0000 50 0001 55 0002 8B EC 0004 8B 46 08 0007 80 CC 01 000A 89 46 08 000D 5D 000E 58 000F CF

PUSH AX PUSH BP MOV BP, SP MOV AX, [BP+8] OR AH, 1 MOV [BP+8], AX POP BP POP AX IRET

; Salva registros

; Toma SP ; Toma banderas ; Activa TF ; Guarda bandera ; Restaura ; Registros ;

2.12. Instrucciones lgicas


El ensamblador tiene capacidad para ejecutar cuatro tipos diferentes de instrucciones lgicas: AND, OR, NOT y XOR. Las cuales efectan sus operaciones bit por bit sobre sus operandos, la instruccin NOT difiere de las dems instrucciones lgicas en que complementa todos los bits de su operando. AND (Y lgico), Sintaxis; AND destino, origen Indicadores: OF, DF, IF, TF, SF, ZF, AF, PF, CF o x x ? x o

Realiza una operacin de Y lgico entre el operando origen y destino quedando el resultado en el desino. Son vlidos los operandos byte o palabra, pero ambos deben ser del mismo tipo. Ejemplos: And ax, bx And bl, byte ptr es:[si +10h]

OR (O Lgico):

Sintaxis: OR destino, origen

Indicadores: OF, DF, IF, TF, SF, ZF, AF, PF, CF o x x ? x o

Realiza una operacin O lgico a nivel de bits ente los dos operandos, almacenndose despus el resultado en el operando destino Ejemplo: OR ax,bx

NOT (no logico) Sintaxis: Not destino

Indicadores: OF, DF, IF, TF, SF, ZF, AF, PF, CF - - - - - - - - - - -

Realiza el complemento a uno del operando destino, invirtiendo cada uno de sus bits , los indicadores no resultan afectados Ejemplo: NOT ax XOR (O logicco) Sintaxias: XOR destino, origen Indicadores : OF, DF, IF, TF, SF, ZF, AF, PF, CF 0 Operacin x x ? x 0

OR exclusive a nivel de bits entre los operandos origen y destino

almacenndose el resultado en este ultimo Ejemplo: XOR di,ax

Existen ocasiones en las cuales es importante tener la capacidad de probar un bit especfico dentro de un byte o palabra se encuentra encendido apagado Es obvio que la instruccin CMP no sirve para ese propsito, puesto que trabaja sobre el conjunto de bits que forman el byte o palabra En estos casos se usa la instruccin TEST, a cual establece si el bits sometido a prueba no se encuentra encendido, la bandera de cero se enciende de lo contrario se apaga El principal uso de esta instruccin se presenta al trabajar con puerto para probar el estado de algn bits en particular:

Mov Dx, 3FDh Espera: In AL,DX Test AL, 1 Jz Espera

TEST (comprobacin lgica) Sintaxis: TEST destino, origen Indicadores: Indicadores: OF, DF, IF, TF, SF, ZF, AF, PF, CF 0 x x ? x 0

Realiza una operacin Y lgica entre los dos operandos pero sin almacenar el resultado. Los indicadores son afectados con la operacin Ejemplo: TEST al,bh

Desplazamiento y rotacin

Las instrucciones de desplazamiento y rotacin manipulan nmeros binarios al nivel de bits de la misma manera que as instrucciones : AND, OR,NOT, y XOR Por lo general los desplazainentos y rotaciones encuentran sus aplicaciones comunes en el falta mas

Las instrucciones de desplazamiento colocano mueven hacia la izquierda o derecha dentro de un registro de localidad de memoria Tambin realiza operaciones aritmticas simples, como la multiplicacin por potencia de 2 (desplazamiento hacia la izquierda) y a divisin entre potencias de 2 ( desplazamiento derecho)

SAL/SHL (desplazamiento lgico a la izquiereda) Sintaxis: SAL/SHL destino, contador Indicadores Indicadores: OF, DF, IF, TF, SF, ZF, AF, PF, CF o x x ? x x

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

CF ALTO bajoo SAL/SHL

SHR (desplazamiento lgico a la derecha)

Sintaxis SHR destino, contador Indicadores: OF, DF, IF, TF, SF, ZF, AF, PF, CF o x x ? x x

Desplaza a la derecha los bits del operando destino el numero de los bits especificados en el segundo operando los bits de la izquierda se llenan con el valor de cero. Si el numero de bits a desplazar es 1 se puede especificar directamente en el caso en que no ocurra se pone el valor en CL 0 -->alto bajo -o SAL/SHL

SAR(desplazamiento aritmtico a la dderecha) Sintaxis: SAR destino contador Indicadores: OF, DF, IF, TF, SF, ZF, AF, PF, CF o x x ? x x

desplaza a la derecha los bits del operando destino el numero de bits especificado en el segundo operando. Los bits de la izquierda se llenan con l bits de signo del primer operando Si el numero de bits a desplazar es 1 se puede especificar directamente si es mayor se especifica a travs de CL

Alto

bajo

CF

HR ECX, 10 ; ECX el el desplazado lgicamente 10 lugares a la derecha SAL DATA 1, CL ; el contenido de la localidad de memoria del segmento de datos1 es desplazado aritmticamente a la izquierda el nmero especificado en CL SAR SI, 2; , 14, ; SI es desplazado aritmticamente 2 lugares hacia la derecha SAR EDX, 14, ; edx es desplazado aritmticamente 14 lugares hacia la derecha

DESPLAZAMIENTO CIRCULAR Las instrucciones de rotacin colocan datos binarios desplazando en forma circular a la informacin en un registro o localidad de memoria, ya sea de un extremo a otro o por medio de la bandera de acarreo Una cuenta de rotacin puede ser inmediata o colocarse en el registro CL

RCL (rotacin a la izquierda con acarreo) Sintaxis: RCL destino, contador Indicadores: OF, DF, IF, TF, SF, ZF, AF, PF, CF o - x

Rotar a la izquierda los bits del operando destino junto con el indicador de acarreo CF en el nmero de bits especificado en el segundo operando Si el nmero de bits a desplazar es 1 se puede especificar directamente, en caso contrario el valor debe cargarse en CL y especificar CL como segundo operando.

No es conveniente que CL sea mayor de 7 en bytes o 15 en palabras

CF

Alto

bajo

RCL

RCR ( rotacin a la derecha con acarreo9 Sintaxis: RCR destino, contador Ndicadores: OF DF IF TF SF ZF AF PF CF X-------x Rotar a la derecha los bits del opernndo destino no junto con el indicador de acarreo CF en numero de birts especificado en el segundo operando

Si el numero de bits es 1 se puede especificar directamente, en caso contrario su valor debe cargarse en CL y especificar CL como segundo operando

Alto

bajo

CF

RCR

ROL 8rotacion a la izquierda) Sintaxis : ROL destino, contador

incadores: OF DF IF TF SF ZF AF PF CF X-------x Rota a la izquiereda los bits del oprendo destino, el numero de bits especificando en el Segundo operando, que puede ser 1 o CL peviamente cargado con el valor de numero de veces

CF

Alto

bajo

ROL

ROR ( rotacin a la derecha )} Sintaxis: ROR destino, contador Indicadores: OF DF IF TF SF ZF AF PF CF X-------x

Rota a ala derecha los bits del operando destino e numero de bits especificado en ele Segundo operando si el nmero de bits es 1 se puede poner directamente, en caso contrario debe ponerse a travs de CL

Alto

bajo

CF

EJEMPLOS ROL SI, 14 ; rota 14 lugares a la izquierda RCL BL, 6 ; rota a BL 6 lugares a la izquierda a travs del acarreo ROL ECX, 18 ; Rota a ECX 18 lugares a la izquiereda RCR AH, CL ; Rota a AH hacia la derecha el nmero de lugares especificado por CL a ;travs del acarreo.

You might also like