从小写转换为大写

Foo*_*Foo 3 assembly x86-16

我试图从小写转换为大写.我知道它很容易完成,

SUB AL, 20H
Run Code Online (Sandbox Code Playgroud)

但我得到了另一种解决方案,

AND AL, 0DFH
Run Code Online (Sandbox Code Playgroud)

请帮我理解这个.谢谢

And*_*ahl 5

看看位模式:

  • A(0x41): 0100 0001
  • a(0x61): 0110 0001
  • M(0x4d): 0100 1101
  • m(0x6d): 0110 1101
  • Z(0x5a): 0101 1010
  • z(0x7a): 0111 1010

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

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