小文字から大文字に変換しようとしています。私はそれが簡単にできることを知っています、
SUB AL, 20H
しかし、私は別の解決策を与えられました。
AND AL, 0DFH
これを理解するのを手伝ってください。ありがとう
ビットパターンを見てください:
0100 0001
0110 0001
0100 1101
0110 1101
0101 1010
0111 1010
小文字のASCIIは、大文字のASCII + 0x20( )-つまり、6番目のビットが設定され0010 0000
た同じビットパターンです。
0xdfは1101 1111
バイナリです。AND:それでALを実行すると、6番目のビットがゼロに設定されますが、他のビット値は保持されます。
SUB AL, 20H
ALから0x20を引いています
AND AL,0DFH
ビット5をクリアします(「0」にします)。0x20は00100000なので、値から減算すると、ビット5をクリアするのと同じになります。