Adding and Subtracting Integers:

The ADD, INC (Increment), SUB, and DEC (Decrement) instructions operate on 8 and 16-bit values on the 8086–80286 processors, and on 8-, 16-, and 32-bit values on the 80386/486 processors. They can be combined with the ADC and SBB instructions to work on 32-bit values on the 8086 and 64-bit values on the 80386/486 processors.

```These instructions have two requirements:
1.	If there are two operands, only one operand can be a memory operand.
2.	If there are two operands, both must be the same size.
```

To meet the second requirement, the PTR operator can be used to force an operand to the size required.
For example, if Buffer is an array of bytes and BX points to an element of the array, you can add a word from Buffer with:

```        add     ax, WORD PTR Buffer[bx] ; Add word from byte array
```

The next examples shows 8-bit signed and unsigned addition and subtraction.

 8-bit signed and unsigned addition ``` .DATA MEM8 BYTE 39 .CODE ; ADDITION ; SIGNED UNSIGNED MOV AL, 26 ; START WITH REGISTER 26 (1AH) 26 INC AL ; INCREMENT + 1 (01H) + 1 ADD AL, 76 ; ADD IMMEDIATE + 76 (4CH) + 76 ; ---- ---- ; 103 (67H) 103 ADD AL, MEM8 ; ADD MEMORY 39 (27H) + 39 ; ---- ---- MOV AH, AL ; COPY TO AH -114 (8EH) 142 (8EH) (Overflow flag=1) ADD AL, AH ; ADD REGISTER + 142 (8EH) ; ---- ; 28 (1CH) (Carry Flag=1) ```

 8-bit signed and unsigned subtraction ``` .DATA MEM8 BYTE 122 .CODE ; SUBTRACTION ; SIGNED UNSIGNED MOV AL, 95 ; LOAD REGISTER 95 (5FH) 95 DEC AL ; DECREMENT -1 (01H) -1 SUB AL, 23 ; SUBTRACT IMMEDIATE -23 (17H) -23 ; ---- ---- ; 71 (47H) 71 SUB AL, MEM8 ; SUBTRACT MEMORY -122 (7AH) -122 ; ---- ---- ; -51 (CDH) 205 (CDH) (Carry Flag=1) MOV AH, 119 ; LOAD REGISTER 119 (77H) SUB AH, AL ; SUBTRACT REGISTER -51 (CDH) ; ---- ; 86 (BAH) (Overflow flag=1) ```