Echo #03
31 марта 1997

Книга - Тайники ZX-Spectrum: Компьютерная арифметика.

<b>Книга</b> - Тайники ZX-Spectrum: Компьютерная арифметика.
   Глава 4.

   К О М П Ь Ю Т Е Р Н А Я
   А Р И Ф М Е Т И К А


   Единичная  ячейка  памяти  компьютеров,
сделанных  на  процессоре Z80, размещает в
себе  одно слово (байт), состоящее из 8-ми
цифр, каждая из которых может быть либо 0,
либо 1. Переход от двоичного представления
к  десятичному  очень прост. Выпишем в ряд
по  очереди  числа 2^7, 2^6,..., 2^1, 2^0.
Затем,  под  каждым  из этих чисел выпишем
одну  цифру двоичного представления. Скла-
дывая между собой только те числа верхнего
ряда,  под которыми оказались единицы, по-
лучим  десятичное значение. Например, дво-
ичное число 01001101:

   128 64 32 16 8 4 2 1
   0   1  0  0  1 1 0 1
   -----------------------
       64       8 4   1  =77

   Содержимым  ячейки памяти (байта) может
быть  положительное число в диапазоне 0...
255.

   Иногда выгодней рассматривать эти числа
как значения со знаком. Самый старший раз-
ряд  (самый  левый бит) определяет знак 0,
если +; 1, если -. При такой интерпретации
мы  имеем  числа  в диапазоне -128... 127.
Однако,    компьютер    всегда   выполняет
действия лишь над натуральными числами без
знака. Поэтому в ZX-SPECTRUM для представ-
ления  чисел применяется код дополнения до
двух.  Числа,  меньшие нуля записываются в
нем   как   256+K.   Например,   число  -7
представляется  как 256-7=249. В этой сис-
теме  самый  старший  бит интерпретируется
как  знак числа. Поэтому проблем , связан-
ных с арифметикой, не существует. Основные
арифметические операции ведут к верным ре-
зультатам независимо от выбора способа за-
писи  чисел.  Например, 246+1=247 является
очевидным  равенством для чисел без знака,
но  также является верным равенством, если
считать   246   как   -7,  так  как  тогда
247=256+(-6) обозначает -6.

   Использование таких маленьких чисел не-
достаточно,  поэтому большие числа необхо-
димо  хранить в нескольких байтах, следую-
щих  один  за другим. В ZX-SPECTRUM важную
роль  играют 16-значные числа (16 бит). Их
цифры  делятся на 2 группы по 8 бит. Левый
байт называется старшим, а правый младшим.
Во  всех  компьютерах,  организованных  на
Z80, принято правило, что если два очеред-
ных байта с адресами X, X+1 содержат како-
е-либо число, то под адресом X размещается
младший байт, а в X+1 - старший. Чтобы оп-
ределить  какое число содержат эти ячейки,
необходимо  старший байт умножить на 256 и
прибавить  младший.  Если  это должно быть
отрицательное число, представленное в коде
дополнения   до   двух,   то  еще  отнимем
2^16=65536. Эти 16-битовые числа позволяют
хранить   числа   в  диапазоне  0..  65535
(беззнаковые)  или -32728... 32727 (знако-
вые).

   При  программировании  в  машинном коде
часто  возникает  необходимость выполнения
разных  операций над битами. Использование
десятичного представления при этом затруд-
нительно,  а  двоичного слишком громоздко.
Поэтому  наиболее  удобным  является 16-ая
запись. Для записи 16-ричных чисел (гексо-
децимальных)  используют числа от 0 до 9 и
буквы от A до F (10 - это A, 11 B, 12 - C,
13 - D, 14 - E, 15 - F).

   Пересчет   16-ричного  представления  в
10-ичное  нетруден. Правило: умножать оче-
редную цифру на очередную степень числа 16
и   складывать   произведения.   Например,
16-ричное  число FFFF представляется в ви-
де:

  15*16^3+15*16^2+15*16^1+15*16^0=15*4096+
+15*256+15*16+15=65535

   Переход от двоичной формы к 16-ричной и
обратно особенно прост. Делим цифры бинар-
ного  числа  на  группы по 4 бита и каждую
четверку  представляем  16-ричной  цифрой.
Например,  1001111110  =  0010 0111 1110 =
27E.

   Как    видно,   главным   преимуществом
16-ричных чисел является простота перехода
к  двоичному представлению и наоборот, при
одновременно высокой плотности записи. Да-
лее  16-ричным числам будет предшествовать
знак #.

   Способы кодирования больших чисел и чи-
сел  с  плавающей  запятой  для  различных
компьютеров  различны.  В  ZX-Бейсике  все
числа  хранятся  в  5-ти  последовательных
байтах. Целые числа из диапазона -65536...
65535  кодируются  иначе,  чем  остальные.
Первый  байт в их представлении всегда ра-
вен 0. Последний байт положительного числа
равен 0, а отрицательного 255. В третьем и
четвертом разместятся соответственно млад-
ший  и старший байты данного числа, причем
отрицательные  значения  хранятся  в  коде
дополнения до 2-х. Например, число 38 выг-
лядит   так:   0   0   0  38  0,  а  число
743=2*256+231  имеет  вид:  0 0 231 2 0. В
свою очередь, число -1231 запишется как  0
255      251     49     0,     так     как
256*251+49=65536-1231.

   С  остальными  числами все запутано еще
больше. Используется факт, что каждое чис-
ло  можно  однозначно  представить в виде:
2^N*M, где M - число в диапазоне [1/2, 1].
В первом байте ZX-SPECTRUM хранит значение
N+128.  В остальных 4-х размещено число  M
в  двоичной форме, а точнее M*2^32, с тем,
что самый старший бит, который всегда дол-
жен быть равен 1, служит для хранения зна-
ка числа. Единица означает минус, а нуль -
плюс.

   Допустим,   что  пять  последовательных
ячеек  памяти содержат числа 130 212 16 34
178. Они интерпретируются как число:

   -2^(150-128)*(212/2^8+16/2^16+34/2^24+
+178/2^32),

   а  байты  106 112 4 231 78 представляют
число:

   2^(106-128)*((128+112)/2^8+4/2^16+231/
/2^24+78/2^32).

   Достоинством  языков высокого уровня (в
том  числе  ZX-Бейсика)  является  то, что
программист освобожден от записи представ-
ления различных чисел в память.



Другие статьи номера:

Введение - Об управлении интерфейсом газеты.

Ассемблер - одна интересная штучка с ассемблером.

Крышу снесло - DI:HALT не всегда вызывает зависание...Santa Claus.

Начнем развлекаться - Основные события 1996 года. Словарь программиста.

Собственное мнение - IMP рассказывает о развитие российской ZX-демосцены.

Чего слышно за бугром - Что сейчас делают всем известные Западные производители ПО на Спекки?..

Час оттяга - Записки Терминатора Т-1000.

Мелкие новости - Что происходит со Спекки в Белоруссии?..

Анкета - Анкетирование продолжается...

Фантастика - Фантастическая повесть "Лед и пламя" (продолжение).

Прикольчик - Прикольчик'с Новополоцка?. Какие же письма поступают к нам в лабораторию.

Описание - Описание-проходилка игры BLINKY'S SCARRY SCHOOL.

Презентация - REALSOFT представляет стратегическую игру Technodrom.

Оттяг - Оттягиваться можно по разному. Задачник - "задачки" математические.

Программистам - О дополнительных функциях TR-DOS 5.04.

Программистам - О формате музыкальных модулей Sound Tracker Pro и исходник проигрывателя.

HARDWARE - Переключатель режимов работы Profi/Pentagon.

Маленькие хитрости-2 - Как перекинуть целый экран в один INT.

Маленькие хитрости-2 - О корректной обработке Retry/Abort/Ignore в TR-DOS.

Интересное письмо - Письма читателей, содержащие разные вещи: - Если вы записали дискеты на глючном дисководе;

Презентация-2 - Описание программы TEXT PRINT v1.2.

Юмор - Рассказ про Штирлица.

Юмор - Штирлиц: Слоны идут на север.

Книга - Тайники ZX-Spectrum: оглавление.

Книга - Тайники ZX-Spectrum: Клавиатура.

Книга - Тайники ZX-Spectrum: Редактор.

Книга - Тайники ZX-Spectrum: ZX-Бейсик.

Книга - Тайники ZX-Spectrum: Компьютерная арифметика.

Книга - Тайники ZX-Spectrum: Использование Памяти.

Книга - Тайники ZX-Spectrum: Системные переменные Бейсика.

Книга - Тайники ZX-Spectrum: Каналы и Потоки.

Книга - Тайники ZX-Spectrum: Системные Процедуры.

Книга - Тайники ZX-Spectrum: Ошибки в Системе.

Реклама - Реклама и объявления ...

Послесловие - О том, что не вошло в этот номер.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Список BBS - Список станций BBS.
Обзор Warez'а - Converter Utility v2.1, Hrust RiP arhivator v0.99, Tornado Screen Packer v1.00, Real Commander v1.96, Quick Commander v2.6, ZX-Amp v1.0, DFC v4.00, ANSI v0.1, HorrorWord v1.00, The Pusher Crack Music System v6.02, Burial gfx Editor v2.40c, File Extractor, Brujeria.
For Coderz - Программирование для видеорежима 384x304.
Inferno - Вступление от редактора.
Interface - History of Antique Toy.

В этот день...   30 сентября