у нас требует, чтобы первой
Думаете, это все?? Разогнались!! Не все так просто :).
WRITE_HEX_DIGIT у нас требует, чтобы первой тетрадой были только одни нули. Я заострял на этом ваше внимание.
При печати первой тетрады это условие соблюдается. SHR слева нули дописывает.
А вот при печати второй цифры нужно вот что: ничего никуда не сдвигая, обнулить старшую тетраду, а младшую (которая, собственно, и есть "цифра") оставить в покое.
Решим мы эту команду при помощи логической операции "и" (and по-аглицкому). 0 0 1 1 0 1 0 1 ------- 0 0 0 1
А теперь и для особо одаренных: 0 and 0 = 0 0 and 1 = 0 1 and 0 = 0 1 and 1 = 1
Смотрите, интересно как получается:
Если мы AND чего-либо (нуля или единички) с 0 делаем, то у нас в результате 0 и только 0 получается.
А если AND с единичкой - то ЧТО БЫЛО, ТО И ОСТАЕТСЯ.
(Это и есть потаенный дZенский смысл команды AND)
Решение нашей проблемы (обнулить старшую тетраду, а младшую оставить без изменений) таким образом сводится к тому, что старшую тетраду нужно "AND 0", а младшую - "AND 1".
То есть значению DL с 00001111b (оно же - 0Fh) "AND" сделать.
На ассемблере это вот как выглядеть будет: and DL,00001111b
Естественно, 00001111b = 0Fh
Аминь!!