The opposite of function 0Ch: it returns in AL the colour of the pixel at column CX, row DX of page BH, decoding the mode's memory layout. In the 16-colour EGA and VGA modes that means reading all four bit planes and putting the bits together, which is awkward to do by hand.

Typical uses are flood fill, collision tests in simple games ("is the pixel ahead not black?") and saving a small area before drawing over it. Like 0Ch it costs one interrupt per pixel. Here a pixel is drawn and read back, together with its untouched neighbour:

Prints "pixel 10,10 = 0Eh, pixel 11,10 = 00h"; on the screen a single yellow dot near the top left for 2 seconds, then the text screen comes back cleared.
MOV AX, 0013h ; 320x200, 256 colours: all pixels 0
INT 10h
MOV AX, 0C0Eh ; write a pixel, colour 0Eh (yellow)
MOV BH, 0
MOV CX, 10 ; x
MOV DX, 10 ; y
INT 10h
MOV AH, 0Dh ; read it back
MOV BH, 0
MOV CX, 10
MOV DX, 10
INT 10h ; AL = its colour
MOV [PIX1], AL
MOV AH, 0Dh ; and its neighbour, never drawn
MOV BH, 0
MOV CX, 11
MOV DX, 10
INT 10h
MOV [PIX2], AL
MOV CX, 001Eh ; wait 2 s: CX:DX = 1E8480h microseconds
MOV DX, 8480h
MOV AH, 86h ; BIOS: wait
INT 15h
MOV AX, 0003h ; mode 03h again: 80x25 text, clears the screen
INT 10h
MOV AH, 09h
MOV DX, OFFSET TXT1
INT 21h
MOV AL, [PIX1]
CALL PHEX2
MOV AH, 09h
MOV DX, OFFSET TXT2
INT 21h
MOV AL, [PIX2]
CALL PHEX2
MOV AH, 09h
MOV DX, OFFSET TXT3
INT 21h
PIX1 DB 0
PIX2 DB 0
TXT1 DB "pixel 10,10 = $"
TXT2 DB "h, pixel 11,10 = $"
TXT3 DB "h", 13, 10, "$"
PHEX2: ; print AL as two hex digits; changes AX, CX, DX
PUSH AX
MOV CL, 4
SHR AL, CL ; the high nibble first
CALL PDIG1
POP AX
AND AL, 0Fh ; then the low one, falling into PDIG1
PDIG1:
ADD AL, "0"
CMP AL, "9"
JBE PDIG2
ADD AL, 7 ; "A".."F"
PDIG2:
MOV DL, AL
MOV AH, 02h ; DOS: print DL
INT 21h
RET

Pitfalls

In text modes the result means nothing. In the CGA modes some BIOSes return the colour with the XOR bit or other high bits undefined, so AND AL, 3 (or AND AL, 0Fh in 16-colour modes) is a safe habit. To read a whole area, go to video memory: in mode 13h a byte per pixel; in the planar modes select each plane in turn with the graphics controller's Read Map Select register (index 4 at port 3CEh) and read it.