Realtime #02
29 февраля 1996

Программирование - форма представления чисел в процессоре Z-80.

<b>Программирование</b> - форма представления чисел в процессоре Z-80.
   Здравствуйте!  Мы  продолжаем цикл ста-
 тей,  посвященных обучению программирова-
 нию на АССЕМБЛЕРЕ. И сегодня мы поговорим
 о такой вещи, как:                       
                                          
                                          
         ФОРМЫ ПРЕДСТАВЛЕНИЯ ЧИСЕЛ        
             В ПРОЦЕССОРЕ Z-80            
 _________________________________________
                                          
                                          
                                          
            1.Числовые системы.           
                                          
    Для  того , чтобы освоить программиро-
 вание  в  машинных  кодах  и на языке Ас-
 семблера  необходимо знать, как органозо-
 вано хранение информации в ячейках памяти
 и  в регистрах процессора . Основной еди-
 ницей хранения информации является байт ,
 который  в свою очередь состоит из восьми
 битов  . Бит может быть включен (равен 1)
 или  выключен (равен 0) , т.е. может при-
 нимать только два значения , а байт соот-
 ветственно  ,  может принимать 256 (два в
 восьмой  степени) значений и имеет диапа-
 зон от 0 до 255 .                        
                                          
    Те  числа , с которыми мы имеем дело в
 повседневной  практике , называются деся-
 теричными. Они строятся из разрядов (еди-
 ницы , десятки , сотни и т.д.), каждый из
 которых может быть выражен степенью числа
 10. Так 567=5*10Е2+6*10Е1+7*10Е0. Компью-
 теру   работать  в  десятеричной  системе
 очень  не удобно . Поскольку информация в
 нем представленна электрическими зарядами
 и  можно  выделить  только два устойчивых
 состояния - есть заряд / нет заряда ,  то
 самое  удобное  -  это  хранить  числа  в
 компьютере  в двоичной системе . Например
 обычное десятеричное число 156 может быть
 записано  в двоичной форме как 10011100В.
 Здесь  буква  В  на  конце означает , что
 число записано в двоичной (ВINАRY) систе-
 ме. Преобразовать его в десятеричную фор-
 му  можно  разложением по степени числа 2
 так,  как мы это делали для числа 567 вы-
 ше, раскладывая его по степеням числа 10.
                                          
 10011100 = 1*2Е7+0*2Е6+0*2Е5+1*2Е4+1*2Е3+
 +1*2Е2+0*2Е1+0*2Е0  = 128+0*64+0*32+16+8+
 +4+0*2+0*1 = 128+16+8+4= 156             
                                          
   Вы  видите очевидные недстатки двоичной
 формы   записи.   Во-первых   это   очень
 громозкая запись, а потому и очень утоми-
 тельная.  Во-вторых  она с трудом перево-
 дится в привычную нам десятеричную форму.
 Все это вызывало бы массу ошибок, если бы
 программисты,   разрабатывая   программу,
 применяли  двоичное представление чисел .
 Гораздо  удобнее в работе шестнадцатерич-
 ная система. Она имеет в качестве основа-
 ния число 16, поэтому уже двумя разрядами
 можно  выразить  256  целых чисел от 0 до
 255   (т.к.16Е2  =  256).  Поскольку  для
 шестнадцатеричной   системы   не  хватает
 арабских  цифр, то для выражения шестнад-
 цатеричных цифр 10...15 приходится прибе-
 гать к буквенным обозначениям :          
                                          
                   10-А                   
                   11-В                   
                   12-С                   
                   13-D                   
                   14-Е                   
                   15-F                   
                                          
    То  же  самое число 156 в шестнадцате-
 ричной  форме  запишется  как  9Сh. Здесь
 буква h в конце числа говорит о том , что
 она    записана    в    шестнадцатеричной
 (НЕXDЕСIМАL) системе.                    
                                          
    9С = 9*16Е1+12*16Е0 = 144+12 = 156    
                                          
    Перед  начинающим программистом встает
 вопрос:  в какой системе работать - деся-
 теричной или шестнадцатеричной ? За деся-
 теричную  есть только один довод - много-
 летняя  практика . Шестнадцатеричная сис-
 тема  удобна  той  простотой  , с которой
 в  нее переводится двоичная форма, а ведь
 двоичная  форма  отражает физическую суть
 операций  ,  что делает шестнадцатеричную
 систему   основной  для  программистов  .
 Простота  перевода  из двоичной системы в
 шестнадцатеричную  и наоборот обеспечива-
 ется  вследствие того, что число шестнад-
 цать  может  быть выражено четвертой сте-
 пенью числа два : 2Е4=16 . Поэтому , что-
 бы  перевести  числа  из двоичной формы в
 шестнадцатеричную можно перевод выполнять
 по  каждому  полубайту (по каждым четырем
 битам  отдельно). Выбирая в какой системе
 Вам  в  дальнейшем  работать , надо также
 учесть , что большинство прикладных прог-
 рамм,  поддерживающих  программирование в
 машинных кодах работают в шестнадцатерич-
 ной системе. Как утверждает МАXWЕLL 'Пос-
 ле перехода в шестнадцатетичную систему я
 начал  спокойно спать: не нужно сотни раз
 пересчитывать  адреса экрана - числа сами
 выстраиваются так, как я захочу'.        
                                          
  Ниже  приведена  таблица для связи между
 системами :                              
                                          
       DЕС  ВIN  НЕX  DЕС  ВIN  НЕX       
                                          
        0   0000  0    1   0001  1        
        2   0010  2    3   0011  3        
        4   0100  4    5   0101  5        
        6   0110  6    7   0111  7        
        8   1000  8    9   1001  9        
        10  1010  А    11  1011  В        
        12  1100  С    13  1101  D        
        14  1110  Е    15  1111  F        
                                          
                                          
  2.Двоичная дополнительная форма записи. 
                                          
    Приведенная выше двоичная форма позво-
 ляет  работать  с  целыми  положительными
 числами от 0 до 255 . Такая двоичная фор-
 ма  называется  абсолютной , а операции с
 такими   числами  -  абсолютной  двоичной
 арифметикой .                            
                                          
   В  то же время есть операции, в которых
 необходимо  наличие  целых  отрицательных
 чисел.  Например,  это  операции перехода
 (аналог  GО  ТО). Переход может быть осу-
 ществлен  как вперед на N шагов так и на-
 зад .                                    
                                          
   Когда процессор встречает такую команду
 он   воспринимает   следующий   за  кодом
 операции  операнд  N  не как записанный в
 абсолютно двоичной форме , а как записан-
 ный  в  дополнительной двоичной форме . В
 этой форме могут записываться целые числа
 от  0 до 127 и от -128 до -1. Таким обра-
 зом,  она  может служить для записи целых
 чисел  со знаком. Расмотрим пример с пос-
 тепенным  наращиванием  аккумулятора  для
 дополнительной двоичной арифметики .     
                                          
    Флаг С регистра F Регистр А НЕX DЕС   
                                          
            0 0000 0000  00  00           
                                          
            0 0000 0001  01  01           
          .......................         
                                          
           0 0111 1111  7F  127           
                                          
           0 1000 0000  80 -128           
                                          
           0 1000 0001  81 -127           
          .......................         
                                          
            0 1111 1111  FF -1            
                                          
            1 0000 0000  00  0            
                                          
          ..........ит.д.........         
                                          
    Запомните простое правило двоичной до-
 полнительной  арифметики:  чтобы поменять
 знак числа, надо все его еденицы заменить
 на  нули, а все нули - на еденицы и к ре-
 зультату прибавить 1 .                   
                                          
   +5 - это 0000 0101                     
   -5 - это 1111 1010 + 1 = 1111 1011     
                                          
    Сложение  и  вычитание  в этой системе
 выполняются  как  обычно (поразрядно), но
 перенос при переполнении старшего разряда
 игнорируется .                           
                                          
             Так 5 + (-5) = 0             
                                          
                                          
                 0000 0101                
               +                          
                 1111 1010                
               =                          
                 0000 0000                
                                          
                                          
                                          
   3.Десятеричная арифметика в двоичном   
                выражении .               
                                          
    Это особый вид представления целых чи-
 сел в регистрах процессора. Он называется
 ВСD-арифметикой.   ВСD   -  ВINАRY  СОDЕD
 DЕСIМАL  (ДВОИЧНЫЙ  КОД  ДЕСЯТЕРИЧНЫX ЧИ-
 СЕЛ).                                    
                                          
   Эта  форма основана  на том, что каждый
 разряд десятеричного числа можно предста-
 вить в виде четырех двоичных битов :     
                                          
                 0 - 0000                 
                 1 - 0001                 
                 2 - 0010                 
                 3 - 0011                 
                 4 - 0100                 
                 5 - 0101                 
                 6 - 0110                 
                 7 - 0111                 
                 8 - 1000                 
                 9 - 1001                 
                                          
   Значения от 1010 до 1111 - не использу-
 ются .                                   
                                          
    Четырехбитную группу называют полубай-
 том  и,  таким  образом, один байт в этой
 форме может содержать двухразрядное деся-
 теричное число от 0 до 99 .              
                                          
    Как  вы  видите, один полубайт в ВСD -
 арифметике  может содержать число от 0 до
 9,  в то время, как в абсолютной двоичной
 арифметике  от 0 до 15. Очевидно, что ВСD
 -  арифметика  является довольно расточи-
 тельной, но у нее есть свои преимущества.
                                          
   Для  двух чисел в ВСD -арифметике обыч-
 ные  принципы сложения и вычитания непри-
 менимы.  Это происходит потому, что в аб-
 солютной двоичной арифметике полубайт яв-
 ляется заполненным, когда он равен 1111 и
 тогда происходит переход к более старшему
 разряду.  В ВСD - арифметике полубайт за-
 полнен,  когда  он равен 1001 и уже здесь
 происходит  переход к более старшему раз-
 ряду.                                    
                                          
   В наборе команд процессора всего только
 три  команды, которые работают с числами,
 представленными в этой форме, но они дос-
 таточно  часто  встречаются, поскольку их
 применение   значительно   упрощает  пре-
 образование  чисел перед выдачей на экран
 в десятеричной форме .                   
                                          
   В  ВСD - арифметике участвуют флаги N и
 Н .                                      
                                          
     Флаг N - флаг сложения/вычитания.    
                                          
 Он  равен 1 для всех операций вычитания и
 равен 0 для всех операций сложения .     
                                          
       Флаг  Н - флаг полупереноса.       
                                          
 Он  включается  при переполнении младшего
 полубайта,  когда  начинается  заполнение
 старшего полубайта.                      
                                          
                   * * *                  
                                          
  Ну  вот и все на сегодня. Надеюсь, что я
 изъяснялся не слишком ученым языком и вам
 было все понятно. А я прощаюсь с вами. До
 встречи в третьем номере 'RЕАLТIМЕ'!     
                                          
                                          
                                          



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

От авторов - после долгого перерыва (около 3-х месяцев) вышел второй номер нашего журнала.

Игры - лучшая десятка игр октября в г.Ульяновске.

Система - программа для начинающих и опытных программистов - ассемблер МАSМ v1.0.

Система - описание программы SСRЕЕN ЕDIТОR для создания "картинок" составленных из цветных спрайтов.

Система - обзор системных программ: KSA Sound Tracker, Mega Screen, Pro Tracker.

Программирование - форма представления чисел в процессоре Z-80.

Программрование - процедура установки прерываний IM2.

Программирование - процедура бегущей строки.

Программирование - процедура индикаторов каналов на "AY" (эквалайзер).

Железо - схема ZX-СОVОX / LРТ-СОVОX'а для проигрывания цифровой музыки.

Железо - о винчестерах: что это такое, зачем оно нужно и как выглядит изнутри.

Железо - доработка порта #FD в Scorpion 256.

Отдых - Воспоминания штандартенфюрера Макс-Отто Фон Штирлица.

Отдых - психоделические ежики.

Отдых - известные на весь мир законами Мерфи.

Тусовка - раздел,в котором каждый желающий сможет передать кому-либо привет, поздравить друзей с днем рождения и т.д.

Конкурс - неужели в нашем городе никто не умеет рисовать?

Почтовый ящик - письма читателей: Alex Doom, Жека и Толян.

Реклама - авторы журнала.


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

Похожие статьи:
ZXNet - Действующие BBS сети SKY NET.
Информация - форвардинг программ на r.c.s от Андрея Савичева.
ENLIGHT'97 - Условия конкурса.
Программистам - обмен опытом: "3-colour". Несколько слов о конвертации картинок в формат RGB.
Сеть - Сетевые новости. Список BBS ZX-Net 095.

В этот день...   26 апреля