How does the *TEST *command work?

It is clear that this is *boolean and *. Flags are set. How many of them are there and by what principle are they established, if as a result of applying a logical function to two numbers, a number is obtained?

```
mov ax, 5878h
mov bx, 6B36h
mov cx, 5CFDh
P: mov al, bl
Q: test bh, cl
jpe E
mul ch
shl ax, 3
jmp F
E: imul cl
xor cl, ah
F: sub ah, cl
```

Here’s another example, in it when applying the test – the result is *True *, how did it happen?

## Answer 1, authority 100%

`TEST `

sets the PF, SF and ZF flags.

- Parity Flag – 1 if AND results in an even number of (1) bits set.
- Sign Flag – 1 if the AND result is negative (most significant – signed – bit = 1)
- Zero Flag – 1 if the result is AND = 0

and resets CF and OF. Here’s a general outline:

```
Operation
TEMP ← SRC1 AND SRC2;
SF ← MSB (TEMP);
IF TEMP = 0
THEN ZF ← 1;
ELSE ZF ← 0;
FI:
PF ← BitwiseXNOR (TEMP [0: 7]);
CF ← 0;
OF ← 0;
```

The AND result itself is discarded. In your example:

```
6Bh AND FDh = 69h = 01101001b
```

PF will be set to 1. `jpe `

will jump.