Red de conocimiento informático - Conocimiento sistemático - ¿Qué es la instrucción TEST en ensamblador?

¿Qué es la instrucción TEST en ensamblador?

Hemos visto excelentes tutoriales y sabemos que test y cmp son más importantes, pero nunca he tenido claro cómo se comparan. Finalmente, decidí buscar mucha información y trabajar con todos. para descifrarlos.

Mire primero: registro de estado (es decir, registro de bandera)

El registro de palabra de estado del programa PSW (es decir, bandera) es un registro de 16 bits, que se compone de código de condición bandera (bandera) y banderas de control,

de la siguiente manera:

15 14 13 12 11 10 9 ?8 ?7 ?6 ?5 ?4 ?5 ?5 ?6 ?

OF DF IF TF SF ZF AF PF CF

Código de condición:

①OF (indicador de desbordamiento) indicador de desbordamiento, el desbordamiento es 1; de lo contrario, se establece en 0 . Señala un desbordamiento de cálculo, como una discrepancia entre la estructura y el objetivo.

②Bandera de símbolo SF (bandera de signo), cuando se establece en 1, el resultado de la operación es negativo; de lo contrario, se establece en 0.

③ZF (Bandera cero) Bandera cero, cuando se establece en 1, el resultado de la operación es 0; de lo contrario, se establece en 0.

④Bandera de transporte CF (Bandera de acarreo), establecida en 1 cuando se transporta, de lo contrario se establece en 0.

④Bandera de acarreo CF (Bandera de acarreo), se establece en 1 cuando se transporta, de lo contrario se establece en 0.

p>

④Nota: La bandera de acarreo almacena el dígito más a la derecha del resultado del cálculo. Nota: La bandera de acarreo se utiliza para guardar el dígito más a la derecha del valor calculado.

5AF (bandera de acarreo auxiliar) bandera de acarreo auxiliar, registra la posición del acarreo del tercer bit (medio byte) generado por la operación.

Es 1 cuando hay un acarreo, en caso contrario se establece en 0.

6PF (parity check flag) indicador de verificación de paridad. Establece el 1 en el operando de resultado en 1 cuando el número es par y en 0 en caso contrario.

Bit de indicador de control:

⑦Indicador de dirección DF (indicador de dirección), la dirección de la información de control en las instrucciones de procesamiento de cadenas.

⑧Indicador de interrupción IF (indicador de interrupción).

⑨Bandera de trampa TF (Trap Flag).

Por conveniencia, podemos decir jnz y jz

Condiciones de prueba

JZ ?ZF=1

JNZ ?ZF =0

Es decir, Jz = saltar si es 0 (si el resultado es 0, establezca el indicador cero de ZF en 1 y saltar)

Jnz = saltar si no es 0

Bien, echemos un vistazo a test y cmp

************************ *** ****** ********************************************** ******* *

prueba es una instrucción de operación lógica

Función: realizar operaciones lógicas entre BIT y BIT

Prueba (dos operandos y operación , solo modifica el bit de bandera, no se devuelve ningún resultado).

TEST realiza una operación AND en dos parámetros (destino, fuente) y establece el registro de bandera según el resultado. El resultado en sí no se guarda: TEST r/m,r/m/data

Banderas afectadas: C,O,P,Z,S (donde las banderas C y O se establecerán en C,O,P,Z,S).

La prueba se utiliza para probar un bit, como un registro:

test eax, 100b; El sufijo ?b indica binario

jnz ?******; El dígito a la derecha de eax es 1. jnz saltará

Mi idea es que si ZF=0 entonces jnz saltará, lo que significa que ZF no está configurado, es decir,

2 .Test Un uso muy común es probar si un lado del registro está vacío:

test ecx, ecx

jz en algún lugar

Si ecx es cero, establezca el indicador cero ZF en 1, salto Jz

************************************ ******** **************************** ****************

CMP Sí Una instrucción aritmética

Función: Comparar dos valores (registro, memoria, valor directo)

Sintaxis: CMP r/m,r/m /data

Banderas: C,P,A,Z,O

Comparación CMP. (Reste dos operandos, solo modifique el bit de bandera y no devuelva el resultado).

cmp es en realidad una resta, que solo establece el bit de bandera, no guarda la estructura y establece la bandera Z.

La bandera Z es muy similar al carry y también está un poco en el registro de bandera interno.

Ejemplo:

Cmp eax, 2; Si eax-2=0, es decir, eax=2, establezca el indicador cero en 1

Jz * ***; ?Saltar si se establece el indicador cero

****************************** ****** ********************************************** *******

La conclusión a la que llegué

Probar la lógica con el resultado de la operación cero y luego establecer el ZF (bandera cero) en 1;

El resultado de la operación de resta aritmética de cmp es cero, luego establezca ZF (bandera cero) en 1