Assembly 从小写转换为大写

Assembly 从小写转换为大写,assembly,x86-16,Assembly,X86 16,我正在尝试从小写转换为大写。我知道这很容易做到 SUB AL, 20H 但我得到了另一个解决方案,那就是 AND AL, 0DFH 请帮助我理解这一点。谢谢查看位模式: A(0x41):01000001 a(0x61):01100001 M(0x4d):010011101 m(0x6d):011011101 Z(0x5a):0101010 z(0x7a):0111010 小写ASCII是大写ASCII+0x20(0010 0000)-即与第六位设置相同的位模式 0xdf是二进制的1101

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

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

AND AL, 0DFH

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

查看位模式:

  • A(0x41):
    01000001
  • a(0x61):
    01100001
  • M(0x4d):
    010011101
  • m(0x6d):
    011011101
  • Z(0x5a):
    0101010
  • z(0x7a):
    0111010
小写ASCII是大写ASCII+0x20(
0010 0000
)-即与第六位设置相同的位模式


0xdf是二进制的
1101111
。和:与AL相减将把第六位设置为零,但保留其他位值。

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

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