我正在尝试从小写转换为大写。我知道这很容易做到,
SUB AL, 20H
但是我得到了另一个解决方案,那就是,
AND AL, 0DFH
请帮助我理解这一点。谢谢
查看位模式:
0100 00010110 00010100 11010110 11010101 10100111 1010小写 ASCII 是大写 ASCII + 0x20( 0010 0000) - 即与第六位设置相同的位模式。
0xdf 是1101 1111二进制的。AND:使用 AL 将第六位设置为零,但保留其他位值。
SUB AL, 20H从 AL 中减去 0x20
AND AL,0DFH将清除第 5 位(将其设为“0”)。因为 0x20 是 00100000 ,所以从一个值中减去它与清除位 5 相同。