Программирование на Ассемблере под DOS


Задача 5.


Думаете, это все?? Разогнались!! Не все так просто :).
  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

 Аминь!!

 




Начало  Назад  Вперед



Книжный магазин