Comparación en lenguaje ensamblador

LA INSTRUCCION CMP

La instrucción CMP pro lo común es utilizada para comparar dos campos de datos, uno de los cuales están contenidos en un registro. El formato general para CMP es:

|  [etiqueta:]  |  CMP  |  {registro/memoria}, {registro/memoria/inmediato} |

El resultado de una operación CMP afecta la banderas AF, CF, OF, PF, SF y ZF, aunque no tiene que probar estas banderas de forma individual. El código siguiente prueba el registro BX por un valor cero:

X CMP BX, 00  ;Compara Bx con cero
 JZ B50  ;Si es cero salta aB50
 .   ;(Acción si es diferente de cero)
 .
B50: …   ;Destino del salto, si BX es cero

Si el BX tiene cero, cmp establece ZF a 1 y puede o no cambiar la configuración de otras banderas. La instrucción JZ (salta si es cero) solo prueba la bandera ZF. Ya que ZF tiene 1 (que significa una condición cero), JZ transfiere el control (salta) a la dirección indicada por el operando B50.

Observe que la operación 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?

LA INSTRUCCION CMPS

CMPS compara el contenido de una localidad de memoria (direccionada por DS:SI). Dependiendo de la bandera de dirección, CMPS incrementa o disminuye también los registros SI y DI en 1 para bytes, en 2 para palabras y en 4 para palabras dobles. La operación establece las banderas AF, CF, OF, PF, SF y ZF.

Cuando se combinan con un prefijo REP y una longitud en el CX, de manera sucesiva CMPS puede comparar cadenas de cualquier longitud. Pero observe que CMPS proporciona una comparación alfanumérica, esto es, una comparación de acuerdo a con los valores ASCII. Considere la comparación de dos cadenas que contienen JEAN y JOAN. Una comparación de izquierda a derecha, tiene el resultado siguiente:

J:J Iguales
E:O Diferentes (E es menor)
A:A Iguales
N:N Iguales
Una comparación de los 4 bytes termina con una comparación de N con N (iguales). Ahora ya que los dos nombres no son idénticos, la operación debe terminar tan pronto como la comparación entre 2 caracteres sea diferente.

Algunas derivaciones de CMPS son las siguientes:

  • CMPSB. Compara bytes.
  • CMPSD. Compara palabras dobles.
  • CMPSW. Compara palabras.

A continuación se muestra la codificación del uso del CMPS y sus derivaciones:

TITLE     P12CMPST (COM) Uso de CMPS para operaciones en cadenas
               .MODEL     SMALL
               .CODE
               ORG           100H
BEGIN:  JMP             SHORT MAIN
;————————————————————————————-
NOM1   DB                ‘Assemblers’ ;Elementos de datos
NOM2   DB                ‘Assemblers’
NOM3   DB                10     DUP (‘ ‘)
;————————————————————————————-
MAIN     PROC          NEAR                      ;Procedimiento principal
              CLD ;Izquierda a derecha
              MOV            CX, 10                     ;Iniciar para 10 bytes
              LEA              DI, NOM2
              LEA              SI, NOM1
              REPE          CMPSB                  ;Compare NOM1:NOM2
             JNE              G20                        ;No es igual, saltarlo
             MOV             BH,01                     ;Igual, fijar BH
G20:
             MOV             CX, 10                    ;Iniciar para 10 bytes
             LEA               DI, NOM3
             LEA               SI, NOM2
             REPE           CMPSB                  ;Compare NOM2:NOM3
            JE                  G30                        ;Igual, salir
            MOV              BL, 02                     ;No es igual, fijar BL
G30:
            MOV             AX, 4C00H               ;Salir a DOS
            INT               21H
MAIN   ENDP
            END             BEGIN