Я пытаюсь преобразовать из нижнего регистра в верхний регистр. Я знаю, что это легко сделать,
SUB AL, 20H
Но мне дали другое решение, которое,
AND AL, 0DFH
Пожалуйста, помогите мне понять это. Спасибо
Я пытаюсь преобразовать из нижнего регистра в верхний регистр. Я знаю, что это легко сделать,
SUB AL, 20H
Но мне дали другое решение, которое,
AND AL, 0DFH
Пожалуйста, помогите мне понять это. Спасибо
Посмотрите на битовые шаблоны:
0100 0001
0110 0001
0100 1101
0110 1101
0101 1010
0111 1010
ASCII нижнего регистра — это ASCII верхнего регистра + 0x20 (0010 0000
) — то есть тот же битовый шаблон с установленным шестым битом.
0xdf — это 1101 1111
в двоичном формате. И: соединение AL с этим установит шестой бит в ноль, но сохранит другие значения битов.
SUB AL, 20H
вычитает 0x20 из AL
AND AL,0DFH
очистит бит 5 (сделает его «0»). Поскольку 0x20 равно 00100000, вычитание его из значения равносильно очистке бита 5.