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
0010 0000
)-即与第六位设置相同的位模式
0xdf是二进制的
1101111
。和:与AL相减将把第六位设置为零,但保留其他位值。SUB AL,20H
是从AL中减去0x20
和AL,0DFH将清除位5(使其为“0”)。
因为0x20是00100000,所以从值中减去它与清除位5相同