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 solution which is,
AND AL, 0DFH
Please help me understand this. Thanks
Look at the bit patterns:
- A (0x41):
0100 0001
- a (0x61):
0110 0001
- M (0x4d):
0100 1101
- m (0x6d):
0110 1101
- Z (0x5a):
0101 1010
- z (0x7a):
0111 1010
Lower 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.
SUB AL, 20H
is subtracting 0x20 from AL
AND AL,0DFH
will clear bit 5 (make it '0') .
Because 0x20 is 00100000 ,subtracting it from a value its the same as just clear bit 5.
来源:https://stackoverflow.com/questions/10394521/converting-from-lower-case-to-upper-case