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.
STC ; CF = 1MOV AL, 5INC AL ; AL = 6, CF still 1ADC AL, 0 ; adds the kept carry: AL = 7ADD AL, '0' ; digit -> characterMOV DL, ALMOV AH, 02h ; DOS: print DLINT 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:BXINC WORD PTR [SI+2] ; one wordINC 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.