¿Cómo utilizar las instrucciones cmp en el ensamblaje? Maestro, por favor entre.
cmp es una instrucción de comparación y la función de cmp es equivalente a la instrucción de resta (sub). No guarda el resultado, solo afecta el bit de bandera correspondiente. Otras instrucciones aprenden los resultados de la comparación identificando estas banderas afectadas.
Formato del comando cmp: ? cmp ? Objeto de operación 1, objeto de operación 2
Tenga en cuenta que el cálculo es el objeto de operación 2 - objeto de operación 1, que es lo mismo que sub, no operando. 1- Operando 2 (formato ATT), pero no se guarda el resultado, pero se modifica el bit de bandera correspondiente en función del resultado. Código de muestra:
#include lt;stdio.hgt;
int main()
{
int eax = 100;
int ebx = 200;
int salida = -100;
asm volatile(
"movl 1, eax;\n\ t"
"movl 2, ebx;\n\t"
"cmpl eax, ebx;\n\t" //Se utiliza la instrucción de comparación cmpl
"sets al;\n\t" //Conjuntos para números negativos
"movzbl al, eax;\n\t"
"movl eax, 0\n \ t"
: "=m"(salida)
: "r"(eax), "r"(ebx)
: "eax" ) ;
printf("d \n", salida);
return 0;
}
La salida final es 1
Información ampliada
La instrucción cmp(compare) compara el tamaño de dos operandos
Ejemplo: cmpoprd1, oprd2
es el primero. La operación resta el segundo operando,
pero no afecta el valor del segundo operando
Afecta los CF, ZF, OF, AF y PF del indicador
Si después de ejecutar la instrucción
ZF=1, esto es simple, significa que los dos números son iguales, porque el cero es 1, lo que significa que el resultado es 0
Cuando hay no hay signo: p>
CF=1 indica que hay un acarreo o préstamo. cmp es una operación de resta, por lo que puede verse como un préstamo. Por lo tanto, en este momento oprd1lt; >
CF=0 Muestra que no hay préstamo, pero en este momento debes prestar atención a si ZF es 0. Si es 0, significa que el resultado no es 0, por lo que en este momento oprd1gt; oprd2
Referencia: comando CMP de la Enciclopedia Baidu