You are on page 1of 9

Lenguaje Ensamblador

La directiva .MODEL define el tipo de memoria que se utilizar; la directiva .CODE nos indica que lo que est a continuacin es nuestro programa; la etiqueta Programa indica al ensamblador el inicio del programa; la directiva .STACK le pide al ensamblador que reserve un espacio de memoria para las operaciones de la pila; la instruccin END Programa marca el final del programa. Las directivas .STACK, .CODE y .DATA .STACK, .CODE y .DATA definen los segmentos de pila, cdigo y datos, respectivamente. La directiva .STACK define el tamao de la pila. Por ejemplo .STACK 200h Define una pila de 200h (512) bytes de longitud. Eso es todo lo que tiene que hacerse en lo que se refiere a la pila; simplemente el programador debe asegurarse de que tiene una directiva .STACK en su programa y Turbo Assembler administrar la pila por l. Los programas normales, que no hacen un uso intensivo de la pila, 200h bytes es un buen tamao de pila. La directiva .CODE marca el inicio del segmento de cdigo del programa. Esta directiva le dice a turbo Assembler exactamente en qu segmento de cdigo debe ejecutar las instrucciones. La definicin del segmento de cdigo es an ms simple de definir que el segmento de pila, utilizando las directivas de segmento simplificadas, puesto que no requiere de operandos. Por ejemplo, .CODE sub ax,ax ; Inicializa el acumulador a cero mov cx,100 ; # de ciclos a ejecutar .DATA, por su parte, marca el inicio del segmento de datos. En este segmento debern Colocarse las variables de memoria. Por ejemplo: .DATA ErrorMessage DB 0Dh,0Ah,'*** Error ***',0Dh,0Ah,'$' Counter DW ? A diferencia de las directivas de segmento anteriores, .DATA presenta cierta complejidad: en el cdigo del programa, debe cargarse explcitamente el registro DS con el smbolo @data, antes de que se realicen accesos a localizaciones de memoria existentes en el segmento definido por .DATA. Puesto que un registro de segmento puede ser cargado con el contenido de un registro de propsito general o una localizacin de memoria, pero no con una constante, el registro de segmento es generalmente cargado con una secuencia de dos instrucciones: mov ax,@data mov ds,ax Esta secuencia de instrucciones inicializa DS para que apunte al segmento de datos que inicia con la directiva .DATA. Sin las dos instrucciones que inicializan el registro DS con el segmento definido por .DATA, las variables de memoria que residen en el segmento .DATA no podrn ser accesadas a menos que DS apunte a este segmento. Los registros de segmento CS y SS son inicializados por el DOS cuando un programa inicia, por lo tanto no debern ser cargados explcitamente como se hace con el registro DS. Mientras que CS apunta a las instrucciones y SS apunta a la pila, DS apunta a los datos. Los programas no pueden manipular directamente el cdigo y la pila; pero trabajan constantemente con los datos de manera directa.

La directiva .MODEL .MODEL especifica el modelo de memoria para un mdulo de lenguaje ensamblador que usa las directivas de segmento simplificadas. Pocos programas de ensamblador requieren ms de 64 Kb de cdigo o datos, as que el modelo SMALL es til en casi todas las aplicaciones. Tipos de MODEL Tiny: El cdigo y los datos del programa deben ajustarse dentro del mismo segmento de 64 Kb. Cdigo y datos son near. Small: El cdigo del programa debe ajustarse dentro de un segmento simple de 64 Kb, y los datos del programa deben estar en otro segmento separado de 64 Kb. Cdigo y datos son near. Mdium: El cdigo del programa puede ser mayor que 64 Kb, pero los datos del programa deben ajustarse en un slo segmento de 64 Kb. El cdigo es far, mientras que los datos son near. Compact: El cdigo del programa debe estar dentro de un segmento de 64 Kb, pero los datos del programa pueden ocupar ms de 64 Kb. El cdigo es near, mientras que los datos son far. Ningn arreglo de datos puede ser mayor de 64 Kb. Large: El cdigo y los datos del programa pueden ocupar ms de 64 Kb, pero ningn arreglo de datos puede ser mayor de 64 Kb. El cdigo y los datos son far. Huge: El cdigo y los datos del programa pueden ocupar ms de 64 Kb y los arreglos de datos pueden exceder los 64 Kb. El cdigo y los datos son far. Los apuntadores a elementos dentro de un arreglo son far. La directiva .MODEL es requerida si se utilizan las directivas de segmento simplificadas, puesto que de otra manera TASM no podra saber cmo inicializar los segmentos definidos con .CODE y .DATA. La directiva .MODEL debe preceder a .CODE, .DATA y .STACK. La directiva END Todos y cada uno de los programas, independientemente que utilicen directivas de segmento simplificadas o estndar, deben contener una directiva END para marcar el final del cdigo fuente del programa. Las lneas de cdigo que sigan a la directiva END son ignoradas por Turbo Assembler. Si se omite la directiva END el ensamblador generar un error. Adems de terminar el programa fuente, END opcionalmente realiza una doble funcin al indicar dnde deber iniciar la ejecucin del programa. Muchas veces, por alguna razn, puede no desearse iniciar la ejecucin del programa en la primera instruccin del archivo, Conceptos bsicos de Lenguaje Ensamblador 8086 por lo que deber hacer uso de la directiva END y proporcionar la etiqueta donde se desee que empiece a ejecutarse el programa. En un programa consistente de nicamente un mdulo (esto es, un archivo de cdigo fuente), la directiva END deber siempre especificar la direccin de inicio de ejecucin del programa. En un programa consistente de ms de un mdulo, nicamente la directiva END en el mdulo conteniendo la instruccin en la que el programa empezar a ejecutarse deber especificar la direccin de inicio; las directivas END en todos los otros mdulos debern aparecer como END, sin especificar direccin de inicio. CONJUNTO DE INSTRUCCIONES Las instrucciones estn agrupadas en los siguientes grupos y subgrupos: 1) TRANSFERENCIA DE DATOS. A) DE PROPOSITO GENERAL 1.- MOV destino, Fuente ;Mueve datos 2.- PUSH fuente ;Mete datos a la Pila 3.- POP destino ;Saca datos de la Pila 4.- XCHG destino, fuente ;Intercambia contenidos 5.- XLAT ;Traduce (Uso para tablas) B) GRUPO DE ENTRADA-SALIDA.

1.- IN 2.- OUT C)

acumulador, puerto puerto, acumulador

;Lee un dato del Puerto ;Saca un dato por el puerto

DE OPERANDO DE DIRECCION. 1.- LEA destino, fuente ;Carga una direccin efectiva 2.- LDS destino, fuente ;Carga el reg. De segmento datos 3.- LES destino, fuente ;Carga el reg. De segmento extra TRANSFERENCIA DE BANDERAS. 1.- LAHF ;Carga al reg. AH con las banderas 2.- SAHF ;Enva el reg AH al reg. de Banderas 3.- PUSHF ;Guarda las banderas en el stack 4.- POPF ;Lo que saca del stack lo pone en el reg. De banderas

D)

2)

INSTRUCCIONES ARITMETICAS A) DE SUMA 1.- ADD destino, fuente ;Suma de nmeros binarios 2.- ADC destino, fuente ;Suma con carry 3.- INC destino ; Incrementos de 1 4.- DAA ;Ajuste decimal despus de sumar 5.- AAA ;Ajuste ASCII despus de sumar DE RESTA 1.- SUB destino, fuente ;resta valores binarios 2.- SBB destino, fuente ;resta con borrow 3.- CMP destino, fuente ;compara datos 4.- DAS ;Ajuste decimal despus de restar 5.- AAS ;Ajuste ASCII despus de restar DE MULTIPLICACION. 1.- MUL 2.- IMUL 3.- AAM D) fuente (sin signo) ;Multiplica sin signo fuente (con signo) ;Multiplica con signo(enteros) ;Ajuste ASCII para la multiplicacin

B)

C)

DIVISION 1.- DIV fuente (sin signo) ;Divide sin signo 2.- IDIV fuente (con signo) ;Divide con signo 3.- AAD ;Ajuste ASCII para la divisin

3)

INSTRUCCIONES DE MANIPULACION DE BITS A) 2.3.4.5.6.B) LOGICAS 1.- NOT destino AND destino, fuente OR destino, fuente XOR destino, fuente TEST destino, fuente NEG destino DE DESPLAZAMIENTO 1.- SHL destino, contador ;Corrimiento lgico a la izquierda ;Negacin lgica (No) ;Conjuncin lgica (y) ;Disyuncin lgica (o) ;OR Exclusiva ;Prueba bits ;Negacin

2.- SAL 3.- SHR 4.- SAR C)

destino, contador ;Corrimiento algebraico a la izq. destino, contador ;Corrimiento lgico a la Derecha destino, contador ; Corrimiento algebraico a la Der.

GIROS ;Rotacin a la izquierda ;Rotacin a la derecha ; Rotacin a la izquierda con carry ; Rotacin a la derecha con carry ; Mueve cadenas

1.- ROL destino, contador 2.- ROR destino, contador 3.- RCL destino, contador 4.- RCR destino, contador 4)

INSTRUCCIONES DE CADENA 1.- MOVS cadena-destino, cadena-fuente MOVSB ----- MOVSW

2.- LODS cadena-fuente ;carga cadena 3.- STOS cadena-destino, cadena-fuente ;Almacena una cadena STOSB -----STOSW 4.- CMPS cadena-destino, cadena-fuente ;Compara cadenas CMPSB ------CMPSW 5.- SCAS cadena-destino SCASB ------SCASW ;Explora una cadena

5) INSTRUCCIONES DE TRANSFERENCIA DE PROGRAMA A) TRANSFERENCIA INCONDICIONAL 1.- CALL destino ;llama a un procedimiento 2.- RET (RETN, RETF) ;regresa de un procedimiento 3.- JMP destino ;Salto incondicional B) TRANSFERENCIA CONDICIONAL 1.- JB/JNAE (Salta si es bajo / no arriba ni igual) CF=1 2.- JAE/JNB (Salta si est arriba o igual / no est bajo) CF=0 3.- JBE/JNA (Salta si es bajo o igual / no est arriba) CF=1 o ZF=1 4.- JA/JNBE (Salta si est arriba / no bajo ni igual) CF=0 y ZF=0 5.- JE/JZ (Salta si fueron iguales) ZF=1 6.- JNE/JNZ (Salta si no es igual a) ZF=0 7.- JL/JNGE (menor/no ms grande ni igual) SF diferente de OF 8.- JGE/JNL (ms grande o igual /no menor) SF=OF 9.- JLE/JNG (menor o igual/no ms grande) ZF=1 o SF diferente de 0F. 10.- JG/JNLE (ms grande/no menos ni igual) ZF=0 o SF=OF 11.- JP/JPE (paridad puesto/si hay paridad par) PF=1 12.- JNP/JPO (paridad no puesta/ paridad impar) PF=0 13.- JS (bit de signo puesto) S=1 14.- JNS (bit de signo no puesto) SF=0 15.- JC (carry puesto) CF=1 16.- JNC (carry no puesto) CF=0 17.- JO (sobreflujo puesto) OF=1 18.- JNO (sobreflujo no puesto) OF=1 C)CONTROL DE ITERACIONES 1.- LOOP ETIQ 2.- LOOPE/LOOPZ ETIQ 3.- LOOPNE/LOOPNZ ETIQ ; Repetir hasta que CX=0 ;Repetir hasta que CX=0 o Z=1 ;Rep. hasta que CX=0 o Z=0

4.6) 1.2.7)

JCXZ

ETIQ

;Salta si CX=0

INSTRUCCIONES DE INTERRUPCION INT vector ;peticin de Interrupcin IRET ;Regreso de una interrupcin INSTRUCCIONES DE CONTROL DEL PROCESADOR a. 1.2.3.4.5.6.7.OPERACIONES CON BANDERAS STC Pone la bandera de carry C=1 CLC Limpia la bandera de carry C=0 CMC Complementa la bandera de carry STD Pone la bandera de direccin D=1 CLD Limpia la bandera de direccin D=0 STI Pone la bandera de interrupcin habilitada IF=1 CLI Limpia la bandera de interrupcin habilitada IF=0

B. INSTRUCCIONES DE CONTROL DEL PROCESADOR 1.- HLT Pone al micro en estado esttico. 2.- WAIT Entra en edo. de espera hasta TEST. 8) INSTRUCCIONES DE CONVERSION 1.- CBW Conversin de Byte a palabra 2.- CWD Conversin de palabra a doble palabra

que

se

active

la

lnea

Registros
Los registros se pueden clasificar como: Registros de propsito general. Almacenan datos y estn disponibles para ser usados por el programador. Registros de segmento. Estos registros permiten direccionar la memoria. Apuntador de instruccin. Este es un registro especial que apunta a la siguiente instruccin a ejecutar. Registros de punto flotante. Como su nombre lo indican estos registros se utilizan para realizar operaciones de punto flotante. Registros de propsito general Los registros de propsito general se utilizan para almacenar datos temporalmente. Debido a que estos registros han evolucionado desde una mquina de 8 bits (el 8080) un grupo de registros an se puede utilizar con un tamao de 8 bits para mantener compatibilidad con toda la lnea de procesadores. Aun cuando estos registros pueden mantener cualquier tipo de datos, algunos tienen cierta funcionalidad especfica o son usados de manera especial por algunas instrucciones. La siguiente tabla muestra los nombres de los registros y sus usos ms comunes: Registro Descripcin eax Acumulador para operaciones aritmtico lgicas ebx Registro base para acceder a memoria ecx Contador para algunas instrucciones edx Registro de datos usado para algunas operaciones de entrada/salida edi Apuntador a destino para operaciones con cadenas de caracteres esi Apuntador a origen para operaciones con cadenas de caracteres esp Apuntador de pila ebp Apuntador de marco de pila En gas los registros se denotan anteponiendo el smbolo de % al nombre del registro. Los registros %eax, %ebx, %ecx y %edx pueden ser direccionados como registros con tamaos de 8, 16 o 32 bits

cambiando su nomenclatura de acuerdo al tamao. De forma similar, los registros %edi, %esi, %ebp y %esp se pueden direccionar como registros de 16 o 32 bits. Registros de segmento Los registros de segmento se utilizan para referenciar reas de memoria. La plataforma IA-32 permite direccionar la memoria segn el modelo de memoria lineal o el modelo de memoria segmentada. El modelo de memoria lineal presenta todo el espacio de direcciones de la memoria como un espacio contiguo. Todas las instrucciones, los datos y la pila se encuentran en el mismo espacio de direcciones de memoria. Cada posicin de memoria se referencia mediante una direccin especfica llamada "direccin lineal". El problema del enfoque anterior consiste en que todos los datos se encuentran mezclados entre s y a la vez distribuidos a lo largo de todo el espacio de direcciones memoria, lo cual hace que su manejo sea engorroso e ineficiente. El modelo de memoria segmentada resuelve este problema dividendo el espacio de direcciones en segmentos independientes entre s. Cada segmento contiene un tipo especfico de informacin, es decir el cdigo (las instrucciones) se ubica en un segmento, los datos en otro y la pila en un tercer segmento. Las posiciones de memoria en los segmentos se definen por direcciones lgicas. Una direccin lgica est compuesta por una direccin de segmento y un desplazamiento. El procesador traduce una direccin lgica a una direccin lineal. Nota: Aun cuando la siguiente informacin es muy til para aprender acerca de cmo est estructurada la memoria no es imprescindible para comenzar a programar en lenguaje ensamblador. Si quieres, puedes pasar directamente al tema acerca de las banderas. Los procesadores de la familia Intel poseen un grupo de registros creados con el fin de soportar el modelo de memoria segmentada, los cuales son conocidos como registros de segmento: Registro de segmento Descripcin cs Segmento de cdigo ds Segmento de datos ss Segmento de pila es Apuntador de segmento extra fs Apuntador de segmento extra gs Apuntador de segmento extra El contenido de los mismos es interpretado de diferente forma dependiendo si el procesador se encuentra trabajando en modo real o en modo protegido. Los procesadores ms antiguos de esta familia trabajaban en modo real, en el cual un registro de segmento simplemente contena una direccin lineal que sealaba el comienzo de un segmento. De esta forma, si un programa intentaba acceder a un dato ubicado en el desplazamiento "D" del segmento apuntado por el registro ds, la traduccin a una direccin lineal consista en tomar el contenido de dicho registro, multiplicarlo por 0x10 (esto es la direccin de inicio del segmento de datos en uso) y sumarle el desplazamiento "D". Por ejemplo:

Sin embargo, con el paso de los aos este enfoque result ser insuficiente, ya que por ejemplo, no haba forma de determinar si un desplazamiento causaba que la direccin lineal cayera fuera del

segmento. Para solventar ste y otros problemas de seguridad, se implement a partir del procesador 80286 el modo protegido. En el modo protegido, el registro de segmento ya no contiene la direccin base del segmento, sino un selector de segmento, el cual permite seleccionar un descriptor de segmento. Este ltimo no es ms que una estructura de ocho bytes, la cual posee un formato definido y contiene entre otras cosas la direccin base del segmento en cuestin:

Descriptor de segmento del 80286

Descriptor de segmento del 80386 y posteriores De esta manera, la direccin base del segmento pasa ahora a ocupar 24 32 bits (dependiendo del procesador), en contraposicin a los 16 bits que pueden almacenarse en el registro de segmento en modo real. Adicionalmente se cuenta con un campo de lmite de segmento que puede ocupar 16 20 bits, lo que determina el tamao mximo de los segmentos en 64KB o 1MB. El descriptor de segmento del 80386 incluye una bandera (G) que indica que el campo lmite debe ser multiplicado por 4K, permitiendo entonces la existencia de segmentos entre 4KB y 4 GB. El descriptor de 80386 incluye dos banderas adicionales. La primera de ellas (D/B), permite determinar si se est trabajando en modo de 16 32 bits. La segunda (AVL) puede ser utilizada por los sistemas operativos para marcar el segmento descrito como disponible o no (Available). El campo de permisos de acceso posee los siguientes subcampos:

El campo RPL (Request Privilege Level) permite indicar el nivel de privilegio con el cual se est accediendo al segmento, siendo 00 el nivel ms bajo y 11 el ms alto. Este valor debe ser mayor o igual al del campo DPL del descriptor correspondiente. Adicionalmente el campo TI (Table Indicador) es una bandera que permite escoger la tabla en la cual ser seleccionado el descriptor de segmento con los bits restantes (0 = tabla de descriptores globales, 1 = tabla de descriptores locales). Los descriptores globales son utilizados por todos los programas y a menudo se les conoce como descriptores de sistema, mientras que los descriptores locales son exclusivos de un

programa particular y a menudo se les conoce como descriptores de aplicacin. De esta forma, el mismo acceso a memoria que ejemplificamos anteriormente, se llevara a cabo de la siguiente manera en modo protegido: En primer lugar, el descriptor de segmento indica que debe seleccionarse el descriptor nmero 2 (Selector = 0000000000010) de la tabla de descriptores locales (TI = 1) con un nivel de privilegio de 1 (RPL = 01). De esta manera, se procede a interpretar los ocho bytes correspondientes al mismo en la TDL. Dicho descriptor indica que la direccin base del segmento en cuestin es la 0x00020000, y que el tamao del mismo es de 0x0A000, lo que quiere decir que el lmite del mismo corresponde a la direccin 0x2A000. Dado que el RPL es mayor que el DPL (00) se permite el acceso al segmento. De manera similar, se verifica que la direccin lineal resultante (0x20000 + 0x8A00) se encuentra dentro de los lmites del segmento. El proceso de traduccin de direcciones es un poco ms complejo de lo que puede intuirse a partir de esta breve explicacin, involucrando el uso de una cach para agilizar el acceso a las tablas de descriptores. Es importante tener en mente tambin que la memoria puede estar paginada, en cuyo caso ser necesario transformar las direcciones lineales (virtuales) a direcciones fsicas o reales. Por ltimo, cabe acotar que los registros ES, FS y GS apuntan a segmentos de datos (o seleccionan descriptores de segmentos de datos). Registro apuntador de instruccin El registro apuntador de instruccin (eip) o contador de programa contiene la direccin de la prxima instruccin a ejecutarse. Registros de punto flotante Son ocho registros los cuales son tratados como una pila. Se denominan %st(0), %st(1), %st(2), etc. %st(0) se ubica en el tope de la pila.

SALTOS
INCONDICIONALES CALL (Llamada a subrutina). Sintaxis: CALL destino Indicadores: OF DF IF TF SF ZF AF PF CF- - - - - - - - Transfiere el control del programa a un procedimiento, salvando previamente en la pila la direccin de la instruccin siguiente, para poder volver a ella una vez ejecutado el procedimiento. El procedimiento puede estar en el mismo segmento(tipo NEAR) o en otro segmento (tipo FAR). A su vez la llamada puede ser directa a una etiqueta (especificando el tipo de llamada NEAR -por defecto- o FAR) o indirecta, indicando la direccin donde se encuentra el puntero. Segn la llamada sea cercana o lejana, se almacena en la pila una direccin de retorno de 16 bits todos palabras de 16 bits indicando en este ltimo caso tanto el offset (IP) como el segmento (CS) a donde volver. Ejemplos: CALL PROC1, DIR DD 0F000E987H, CALL DWORD PTR DIR En el segundo ejemplo, la variable dir almacena la direccin a donde saltar. De esta ltima manera -conociendo su direccin- puede llamarse tambin a un vector de interrupcin, guardando previamente los flags en la pila (PUSHF), porque la rutina de interrupcin retornar (con IRET en vez de con RETF) sacndolos. 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 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 (porque est demasiado alejada esa etiqueta) el ensamblador dar error. Los buenos ensambladores (como TASM) cuando dan dos pasadas colocan all donde es posible un salto corto, para economizar memoria, sin que el programador tenga que ocuparse de poner short . Si el salto de dos bytes, que permite desplazamientos de 64 Kb 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

RET / RETF (Retorno de subrutina) Sintaxis: RET [valor] o RETF [valor] Indicadores: OF DF IF TF SF ZF AF PF CF- - - - - - - - Retorna de un procedimiento extrayendo de la pila la direccin de la siguiente direccin. Se extraer el registro de segmento y el desplazamiento en un procedimiento de tipo FAR (dos palabras) y solo el desplazamiento en un procedimiento NEAR (una palabra). si esta instruccin es colocada dentro de un bloque PROC-ENDP (como se ver en el siguiente captulo) el ensamblador sabe el tipo de retorno que debe hacer, segn el procedimiento sea NEAR o FAR. En cualquier caso, se puede forzar que el retorno sea de tipo FAR con la instruccin RETF. Valor , si es indicado permite sumar una cantidad valor en bytes a SP antes de retornar, lo que es frecuente en el cdigo generado por los compiladores para retornar de una funcin con parmetros. Tambin se puede retornar de una interrupcin con RETF 2, para que devuelva el registro de estado sin restaurarlo de la pila. Condicionales encuentra en la posicin IP+ desplazamiento (desplazamiento comprendido entre -128 y +127) si se cumple la condicin. Algunas condiciones se pueden denotar de varias maneras. Todos los saltos son cortos y si no alcanza hay que aparselas como sea. En negrita se realzan las condiciones ms empleadas. Donde interviene SF se consideran con signo los operandos implicados en la ltima comparacin u operacin aritmtico-lgica, y se indican en la tabla como '' (-128 a +127 -32768 a +32767); en los dems casos, indicados como '+', se consideran sin signo (0 a 255 0 a 65535): JA/JNBE: Salto si mayor (above), si no menor o igual (not below or equal), si CF=0 yZF=0. +JAE/JNB: Salto si mayor o igual (above or equal), si no menor (not below), si CF=0. +JB/JNAE/JC: Salto si menor (below), si no superior ni igual (not above or equal), si acarreo, si CF=1. +JBE/JNA: Salto si menor o igual (not below or equal), si no mayor (not above), siCF=1 ZF=1. +JCXZ: Salto si CX=0. JE/JZ: Salto si igual (equal), si cero (zero), si ZF=1. JG/JNLE :Salto si mayor (greater), si no menor ni igual (not less or equal), si ZF=0 y SF=0. JGE/JNL: Salto si mayor o igual (greater or equal), si no menor (not less), si SF=0. JL/JNGE :Salto si menor (less), si no mayor ni igual (not greater or equal), si SF<>OF. JLE/JNG: Salto si menor o igual (less or equal), si no mayor (not greater), si ZF=0 ySF<>OF. JNC: Salto si no acarreo, si CF=0. JNE/JNZ: Salto si no igual, si no cero, si ZF=0. JNO : Salto si no desbordamiento, si OF=0. JNP/JPO : Salto si no paridad, si paridad impar, si PF=0. JNS : Salto si no signo, si positivo, si SF=0. JO: Salto si desbordamiento, si OF=1. JP/JPE: Salto si paridad, si paridad par, si PF=1. JS: Salto si signo, si SF=1 FUENTES: http://platea.pntic.mec.es/jdelucas/ensamblador.htm www.uhu.es/tomas.mateo/ac2/manual%20ensamblador%20UHU.pdf www.dte.us.es/tec_inf/itis/estr_comp/docweb/tema4/tema4ec-3.pdf

You might also like