Function 0Ah is function 09h without the colour: AL goes into CX cells from the cursor of page BH, and the attribute bytes are left as they are. Text written this way takes on whatever colours that part of the screen already has, which is what you want when filling in a form or a status bar painted once, or when changing a field's text without disturbing its highlight.
Like 09h it leaves the cursor where it was and draws control characters as symbols. In graphics modes there is no attribute to keep, and it draws the character in colour BL exactly like 09h. Here a bar is painted blue with blanks, then filled with "=" signs that keep the blue:
MOV AH, 09hMOV DX, OFFSET MSG1 ; "Blue bar: "INT 21hMOV AH, 03h ; the cursor: DH = row, DL = columnMOV BH, 0INT 10hPUSH DXMOV AX, 0920h ; 09h: blanks...MOV BX, 001Fh ; ...on page 0 in white on blueMOV CX, 12INT 10hMOV AX, 0A00h + "=" ; 0Ah: the characters onlyMOV BH, 0MOV CX, 12INT 10h ; each cell keeps its bluePOP DXADD DL, 13 ; past the bar and one blankMOV AH, 02hMOV BH, 0INT 10hMOV AH, 09hMOV DX, OFFSET MSG2INT 21hMSG1 DB "Blue bar: $"MSG2 DB "<- = signs that kept the blue", 13, 10, "$"
Pitfalls
On a screen just cleared every cell has the attribute of the clear, normally 07h, so 0Ah there looks just like DOS output: the colour must come from somewhere first, from 09h, a scroll with an attribute in BH (INT 10h AH=06h) or a direct write. Neither 0Ah nor 09h moves the cursor, so a program that forgets to move it writes everything into the same place.