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