I am trying to convert from lower case to upper case. I know it can easily be done by,
SUB AL, 20H
But I am have been given another solutio
SUB AL, 20His subtracting 0x20 from AL
AND AL,0DFHwill clear bit 5 (make it '0') .
Because 0x20 is 00100000 ,subtracting it from a value its the same as just clear bit 5.
Look at the bit patterns:
0100 00010110 00010100 11010110 11010101 10100111 1010Lower case ASCII is upper case ASCII + 0x20 (0010 0000) - i.e. the same bit pattern with the sixth bit set.
0xdf is 1101 1111 in binary. AND:ing AL with that will set the sixth bit to zero but preserve the other bit values.