INC adds 1 to a byte or word register or memory operand. It is shorter than ADD x, 1: incrementing a 16-bit register such as INC SI takes a single byte of code.

Flags: CF is not touched

INC sets OF, SF, ZF, AF and PF exactly like ADD x, 1 would, but it leaves CF as it was. So INC AL with AL = FFh gives AL = 0 and ZF = 1, yet CF keeps its old value: you cannot detect the wrap with JC, test ZF instead. OF becomes 1 when a signed value steps from 7Fh to 80h (or 7FFFh to 8000h).

Keeping CF is deliberate. In a loop that adds long numbers word by word with ADC, the pointers and counters can be stepped with INC without losing the carry between iterations.

With ADD AL, 1 in place of INC AL, CF would be cleared and the program would print 6.
STC ; CF = 1
MOV AL, 5
INC AL ; AL = 6, CF still 1
ADC AL, 0 ; adds the kept carry: AL = 7
ADD AL, '0' ; digit -> character
MOV DL, AL
MOV AH, 02h ; DOS: print DL
INT 21h

Memory operands

In INC [BX] nothing says whether a byte or a word is meant, so MASM wants the size spelled out. A named variable carries its own size.

INC BYTE PTR [BX] ; one byte at DS:BX
INC WORD PTR [SI+2] ; one word
INC COUNT ; COUNT DW 0: a word

Pitfall

Because CF is untouched, INC cannot start a multi-word increment. To add 1 to DX:AX use ADD AX, 1 followed by ADC DX, 0; INC AX would leave the carry out of the low word behind.

Later CPUs

In 64-bit mode the one-byte register forms (opcodes 40h–47h) were reassigned as REX prefixes, and only the longer encoding remains. 16-bit code is not affected.