14 сентября 1998


+=======================================+ 
|               Coding...               | 
+======================================+| 
 X-treamer/Infotek                  +=+|| 
                                    +=++| 
      Раздел для начинаюших кодеров.. +=+ 
                                          
 Итак,  с  этого выпуска мы начнем  обзор 
команд  процессора  Z80.  Первый раздел - 
это команды 8 и 16-разрядной загрузки.    
 В  процессоре  Z80 постоянно храняться в 
рабочем виде следуюшие регистры:          
      BC - рагистры-счетчики ;            
      DE - разрядные регистры ;           
      HL - адресные регистры ;            
       A - аккумулятор  -  все основные   
арифметические  действия  производяться с 
ним ;                                     
       F - флаговый  регистр, недоступный 
в обычном виде ;                          
      SP - указатель адреса стека ;       
      PC - указатель  текушей позиции ис- 
полнения ;                                
   IX,IY - индексные регистры ;           
----------------------------------------- 
   Теперь  приступим  к  описанию  команд 
процессора 8-разрядной загрузки:          
   LD  A,B  -  загружается содержимое ре- 
гистра  B  в  регистр  A.  Сокрашенно это 
обозначается  как A----------------------------------------- 
  Далее - рассмотрим команды 16-разрядной 
загрузки:                                 
 команда также имеет формат LD dd,nn, где 
dd - один из регистров:                   
 BC, DE, HL, SP, IY, IX - двуполовинчатые 
регистры.   Заметьте,  что  здесь  нельзя 
присваивать   регистр   регистру.   Можно 
только напрямую заносить в регистр значе- 
ние типа WORD.                            
  Работа  с  ячейками  памяти осушествля- 
еться как с 8-разрядными, так и с 16-раз- 
рядными:                                  
  LD  (nn),A  -  примерно означает, что в 
ячейку памяти с адресом nn заноситься со- 
держимое  аккумулятора. Т.е. значение ре- 
гистра или числа в скобках означает адрес 
ячейки памяти. Может также быть следуюшая 
запись мнемоники ассемблера:              
       ld de,49152                        
       ld (de),a                          
 Это означает, что в ячейку памяти по ад- 
ресу  49152 (#С000) заноситься содержимое 
аккумулятора.                             
  Запись  в  ячейки  памяти  может быть и 
16-разрядной, например:                   
      ld de,49152                         
      ld (de),32768;                      
 Напрямую  задавать адреса в скобках ни в 
том, ни в другом случае нельзя.           
  Считывание  из ячейки памяти может быть 
также 8 и 16-разрядным:                   
      ld de,49152;                        
      ld  a,(de)  -  содержимое ячейки по 
адресу,  заданному в DE, заноситься в ак- 
кумулятор. Также,                         
      ld de,49152;                        
      ld hl,(de);                         
 означает,  что  содержимое двух ячеек по 
адресам 49152 и 49153 преобразовывается в 
число  типа  word и заноситься в пару ре- 
гистров hl.                               
----------------------------------------- 
 Не  будем пока затрагивать индексные ре- 
гистры  и перейдем к описанию 8 и 16-раз- 
рядной арифметики. Арифметическо/логичес- 
кое  устройство  Z80  (АЛУ) может склады- 
вать  и  вычитать  регистры,  а  также их 
инкременировать  и декреминировать, в от- 
личии  от Intel (outside;), который может 
только    складывать    (поэтому   он   и 
Supermazdie).  В  основном все логические 
операции  и операции сравнения работают с 
аккумулятором.   Начнем   мы  с  операции 
инкременирования  и  декременирования ре- 
гистров:  такие команды, как inc rr и dec 
rr,  где  rr - любой регистр или пара ре- 
гистров, означают буквально следуюшее:    
  inc rr - rr=rr+1 , а                    
  dec rr - rr=rr-1.                       
 Фактически эти команды, работая с 8 раз- 
рядными  регистрами занимают 4 такта, а с 
16 разрядными - 11 тактов, в то время как 
прямая операция сложения будет занимать 7 
и 15 тактов соответственно.               
 Команда  Add  A,r - команда прибавляет к 
аккумулятору  содержимое регистра r и яв- 
ляется  8-разрядной  арифметикой. Команда 
add a,n прибавляет к регистру а число n.  
 sub n - команда вычитания числа n из ак- 
кумулятора.  Она  присутствует  только  в 
8-разрядной  арифметике.  в  16-разрядной 
арифметике  нет работы напрямую с числами 
-  там есть только арифметика с регистра- 
ми,  например:  add rr,dd , где rr и dd - 
16-разрядные регистры. А ,например, чтобы 
прибавить  к  регистру  HL  число 80 надо 
сделать следуюшие действия:               
        ld de,80                          
        add hl,de.                        
 Также  там сушествуют команды инкремени- 
рования и декременирования, такие, как:   
   inc rr, dec rr.                        
 При арифметических действиях используют- 
ся следуюшие флаги: P/V.                  
  V   -  признак  переполения  результата 
арифметики-этот флаг включается, если ре- 
зультат в 8-разрядном регистре больше 255 
или в 16-разрядном регистре больше 65535. 
Или значение регистра меньше 0.           
  Р - флаг это признак четности результа- 
та.                                       
                                          
------------------------------------------
  Логика и работа с условиями:            
                                          
 Процессор  Z80  содержит  команды логики 
типа  наложения байта или регистра по OR, 
AND и XOR. Так,                           
  Xor  rr,  or  rr и and rr означает, что 
число или регистр rr объединяется с акку- 
мулятором  в результате логической опера- 
ции.  Тут  также  используется  флаг  P - 
признак четности.                         
 Операция сравнения аккумулятора с числом 
делается командой CP n, где n - какое ли- 
бо  число.  Результат работы этой команды 
представлен в следуюшей таблице:          
+---------------+-----------------------+ 
|  Результат    |   мнемоника флага.    | 
+===============+=======================+ 
| A=n           |         Z - 1         | 
| A<>n          |        NZ - 0         | 
| A>n           |         C - 1         | 
| Aret, сушествуют команды условного вызова, 
исполняемые относительно флагов:          
  Call NZ, nn - вызывает процедуру по ад- 
ресу nn, если флаг Z содержит 0. Обратная 
процедура - Call Z,nn. Есть и команды ус- 
ловного безусловного =) перехода:         
  JR  nz,nn  и JR z,nn - релоцируемые ко- 
манды и JP nz,nn и JP z,nn - нерелоцируе- 
мые команды безусловного перехода.        
----------------------------------------- 
  В следуюшем номере мы рассмотрим работу 
с  командами  перемешения блоков памяти в 
другую  область  памяти и в порт. Команды 
ротации,  проверки и установки/сброса би- 
тов.  А пока разберитесь с этими команда- 
ми.                                       
----------------------------------------- 
 Перейдем к новому эффекту. Вернее эффект 
не новый, я дам вам новую модификацию из- 
вестной  процедуры,  которая  поможет вам 
разрабатывать    новые    эффекты    типа 
256-color:                                
       Num     DB  #17                    
               ld  a,(num);               
               xor 8                      
               ld bc,#7FFD                
               out (c),a                  
               ld (num),a                 
               ret                        
  Эту  процедуру можно повешать на преры- 
вания  и она вечно будет мигать двумя эк- 
ранами.                                   



Other articles:



Similar articles:
Mail BUZZ'a - On the software market (Letter from BLAZ'a).
Rekalama - rekalama and announcements.
Novella - "The Last Stand" (by playing "Last Battle").

В этот день...   21 November