Справочник программиста на персональном компьютере фирмы IBM. Приложения
Страница 3. Битовые операции в Бейсике


Приложение Б. Битовые операции в Бейсике.


   В Бейсике нельзя использовать числа в двоичной форме. Он расс-
матривает цепочку битов 11000000  как 11 миллионов, а не как 192.
Однако  манипуляции с цепочками битов часто необходимы при  прог-
раммировании,  поскольку  требуется  читать и изменять содержимое
статусных байтов и статусных регистров.
   В  большинстве случаев к цепочкам битов применяются две  логи-
ческие  операции.  Это операции ИЛИ (OR) и И (AND) и обе они дос-
тупны в Бейдиапазоне
от 0 до 255.  Хотя мы привыкли  записывать эти числа в десятичной
форме,  они могут записываться также в двоичной или  шестнадцати-
ричной форме - их значения  при  этом  не изменяются, а программы
могут с одинаковой легкостью читать эти значения как в той, так и
в другой форме. Вместо  того,  чтобы  говорить, что в одном байте
могут  храниться числа от 0 до 255, можно сказать, что могут хра-
ниться двоичные числа от 00000000 до 11111111 или шестнадцатирич-
ные  числа от 00 до FF.  Поскольку можно перепутать разные формы,
то двоичные  и  шестнадцатиричные  числа  отмечаются  специальным
образом. В языке ассемблера за двоичными числами следует буква B,
а за шестнадцатиричными числами  -  буква  H, например, 11111111B
или  FFH.   Бейсик фирмы Microsoft  предваряет  шестнадцатиричные
числа символами &H, например  &FFH; к сожалению, он не распознает
числа в двоичной форме.

Двоичные числа:

   Когда  содержимое  байта представляется в двоичной  форме,  то
требуется 8 цифр. Каждая цифра соответствует одному биту, которые
нумеруются  от 0 до 7.  Как и в десятичных числах цифры  распола-
гаются справа налево, от младших к старшим разрядам. В отличии от
десятичных  чисел, в которых каждая последующая цифра весит в  10
раз больше своей  соседки  справа,  двоичные  цифры  имеют только
вдвое  больший  вес.  Таким образом, самая правая  цифра  считает
единицы, вторая - двойки,  третья  - четверки и т.д., до значения
128 для восьмой цифры байта.  Это означает, что если первая цифра
равна 1, то прибавление к ней 1  приводит  к тому, что она станет
0, а 1 будет перенесена во вторую цифру, как для десятичных чисел
9 + 1 = 0 и перенос единицы  в  следующий  разряд.  Вот как числа
первого десятка представляются в двоичной форме:

   00000000               0
   00000001               1
   00000010               2
   00000011               3
   00000100               4
   00000101               5
   00000110               6
   00000111               7
   00001000               8
   00001001               9
   00001010              10

   В этой последовательности большинство нулей слева необязатель-
ны, т.е. эту последовательность можно записать и в виде 0, 1, 10,
11, 100, 101 и т.д.  Нули включены только для того, чтобы  напом-
нить Вам, что байт составляется восемью цифрами, соответствующими
битам.  В то время как набор нулей и единиц может быть  несколько
утомительным, Вы можете легче  работать с двоичными числами, если
будете представлять их себе следующим образом:

   бит     7     6     5     4     3     2     1     0
значение  128   64    32    16     8     4     2     1

Когда  Вы встречаете двоичное число 10000001, то установлены биты
7 и 0.  Бит 7 соответствует 128,  а бит 0 - 1, поэтому десятичное
значение байта равно 129.  Если этот байт представляет символ, то
он соответствует коду ASCII  129,  который представляет букву u с
умляутом (в альтернативной кодировке ГОСТа - букву Б).  Наоборот,
чтобы определить цепочку битов  для  буквы A, которая равна ASCII
 блоки.
Набору блоков предшествует "лидер", который состоит из 256 байтов
ASCII  1.  Лидер завершается нулевым битом синхронизации.   Затем
следует байт синхронизации со  значением  16H, а затем 256 байтов
данных.  После этого идут 2 байта контроля ошибок, а затем  новый
блок данных, сопровождающийся  парой  байт проверки ошибок и т.д.
Вся  последовательность  завершается  четырехбайтным   "хвостом",
содержащим коды ASCII 1.
   Для чтения данных с кассеты на  до использовать функцию 2 пре-
рывания 15H.  Нет необходимости открывать файл, как это  делается
при дисковых операциях. ES:BX  указывают  на буфер в памяти, куда
будут  посылаться данные, а CX - число байтов, которые надо  счи-
тать.  При возврате DX сообщит  сколько байтов прочитано на самом
деле, а ES:BX будут указывать на последний считанный байт плюс 1.
Флаг переноса будет  равен  0,  если  чтение  прошло успешно, а в
противном  случае AH будет содержать 1, если проблема с контролем
ошибки, 2 - при ошибке чтения данных  и 3 - при отсутствии данных
на ленте.

   Функция  3 прерывания 15H записывает данные на кассету.  ES:BX
указывают на первый  байт  данных,  а  CX  содержит число байтов,
которое  надо  записать.  При возврате ES:BX указывают  на  байт,
следующий за последним записанным.  Мотор управляется функциями 0
(включение) и 1 (выключение) прерывания 15H. Для этих функций нет
выходных регистров.

 
« Предыдущая статья   Следующая статья »