从小写转换为大写

时间:2012-05-01 06:51:00

标签: assembly x86-16

我正在尝试将小写转换为大写。我知道它可以轻松完成,

SUB AL, 20H

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

AND AL, 0DFH

请帮我理解这一点。感谢

2 个答案:

答案 0 :(得分: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将第六位设置为零,但保留其他位值。

答案 1 :(得分:2)

SUB AL, 20H从AL

中减去0x20

AND AL,0DFH将清除第5位(使其为'0')。 因为0x20是00100000,所以从一个值中减去它,就像清除第5位一样。