Now coming on to add and subtract exchange instruction. Here, it means either ASX8, SA8, or 16. What it means that here we are going to perform three operations. That is addition, subtraction, and moving or exchanging the data. As you can see in the figure, we have Rn and Rm and we are going to perform an ASX16 operation. The data in Rm is flipped or exchanged between the two half-words. It is, as you can see, the lower 16-bit of Rm is exchanged to the upper 16-bit and vice versa. Post exchanging this content in Rm, now we're going to perform addition on the upper 16 bit and subtraction in the lower 16-bit of Rn and Rm. That's why we have add, subtract and exchange or ASX16 instructions. You could also have SAX instruction between the addition and subtraction or swapped. Basically, S means subtract, A means add, and X means exchange. The exchange remains the same only for the Rm, while the add and subtract can be swapped. Again, within this ASX and SAX instruction, you have assigned and unsigned saturating variations for these operations available in the architecture. The compiler can choose relevant instructions as per your program's requirements. Now coming on to saturating arithmetic, what does it mean? Typically, a general-purpose microprocessor does not implement integer arithmetic operation using the saturating arithmetic. Instead, they use the easier-to-implement modular arithmetic in which the values exceeding the maximum value wrap around with the minimum value, just like our hours on the clock passing from 12-1. For example, for an eight-bit binary unsigned arithmetic, when a correct answer is 258, in modular arithmetic, the answer will be two, while in saturating arithmetic, it will be 255. The saturating arithmetic also enables the overflow of additions and multiplications to be detected consistently without an overflow bit or extracellular computation by simple comparison with maximum or minimum value. In DSP the saturating arithmetic enables efficient algorithms for many problems. For example, adjusting the volume level of a sound signal can result in an overflow and the saturation causes significantly less distortion in the sound than the wraparound methods. In Arm architecture on an overflow of a saturating arithmetic, a Q flag is set, and this is a sticky thread, which needs to be cleared manually by the software. This Q flag is available in the application program status register or the  API server register. Similar to our earlier example of UADD8, which performs the unsigned add operation across each bit line. Here we have an example of QADD8, which means the bytes of R1 are added to the corresponding bytes of R2, saturates it to eight bits, and then writes the corresponding bytes into R0. It kicks starts with 0-7 bits as the first byte, and then the second byte from 8-15, the third byte from 16-23, and the last one from 24-31. Without any doubt for the digital signal processing, we will definitely require multiply operations. There are a whole host of different multiplying operations available in the architecture and they can be broadly categorized into two groups. Instructions are available only with these extensions that can perform more complex operations and the instructions are available on all ARMv7-M processors. For example, the standard multiply instruction does what you expect. It multiplies two 32-bit values together and creates a 32-bit output value. On the other hand, the more complex operations can be performed in a single instruction. This instruction SMLATB here, this instruction performs a signed multiply-accumulate operation on half-words. It takes the top half word from one resistor and multiplies it with the bottom half-word of another, adds the 32-bit value as an acculength and then writes out to 32-bit reset. Despite performing multiple operations, instructions like these typically take a single cycle to execute on most of the cortex M processors enabling fast and efficient processing of pairs of values, such as complex numbers with real and imaginary components.