Condition: jumps if PF = 1. PF is set when the lowest 8 bits of a result contain an even number of 1 bits, and cleared when the count is odd. Only the low byte counts, even after a word operation. JPE ("parity even") is the same instruction under a clearer name.

Prints Y. Try 7 (three 1 bits): N.
MOV AL, 3 ; 0000 0011: two 1 bits
TEST AL, AL ; set the flags from AL
MOV DL, "Y" ; MOV leaves the flags alone
JP SHOW1 ; taken: DL stays "Y"
MOV DL, "N"
SHOW1:
MOV AH, 02h ; DOS: print the character in DL
INT 21h

Parity comes from the 8080 and from serial links, where a parity bit was added to each character to catch transmission errors. It has nothing to do with a number being even or odd; for that test bit 0 with TEST AL, 1. A later use is the 8087 coprocessor: store its status word, copy the high byte into AH and SAHF, and condition bit C2 lands in PF, so JP detects an unordered comparison.

Range

On the 8086 JP exists only in the SHORT form: two bytes, opcode 7Ah and a signed 8-bit displacement counted from the end of the instruction. The target must lie within −128..+127 bytes of that point. To go farther, invert the test and hop over an unconditional JMP, which can reach the whole segment. MASM 6 makes this rewrite itself when it finds the target out of range (its default OPTION LJMP), so the listing may show two instructions where you wrote one.

JNP SKIP1 ; the opposite test, a short hop
JMP FARAWAY ; any distance in the segment
SKIP1:

Later CPUs

The 80386 added a near form of every conditional jump, 0Fh 8Ah followed by a 16-bit displacement (32-bit in 32-bit code), so from the 386 on JP can reach anywhere in the segment. Code for the 8086 must stay with the short form.