3

我正在尝试从小写转换为大写。我知道这很容易做到,

SUB AL, 20H

但是我得到了另一个解决方案,那就是,

AND AL, 0DFH

请帮助我理解这一点。谢谢

4

2 回答 2

6

查看位模式:

  • 一个(0x41):0100 0001
  • 一个(0x61):0110 0001
  • 米(0x4d):0100 1101
  • 米(0x6d):0110 1101
  • Z (0x5a):0101 1010
  • z (0x7a):0111 1010

小写 ASCII 是大写 ASCII + 0x20( 0010 0000) - 即与第六位设置相同的位模式。

0xdf 是1101 1111二进制的。AND:使用 AL 将第六位设置为零,但保留其他位值。

于 2012-05-01T07:02:17.790 回答
2

SUB AL, 20H从 AL 中减去 0x20

AND AL,0DFH将清除第 5 位(将其设为“0”)。因为 0x20 是 00100000 ,所以从一个值中减去它与清除位 5 相同。

于 2012-05-01T07:02:20.303 回答