Программирование в машинных кодах и на языке ассемблера 1993 г.

Система команд процессора - Загрузка числа в регистр. Копирование и обмен содержимого регистров. Загрузка регистров из памяти. Команды записи данных из регистров в память.


5. Система команд процессора.

 

Система команд процессора Z-80 довольно обширна и потому наилучший способ ее изучения состоит в том, чтобы сгруппировать похожие по своему действию команды и осваивать их по группам.

Мы выделим 19 основных групп команд, но некоторые из этих групп будут иметь подгруппы.

Начиная освоение машинных кодов, в главе 1 мы использовали десятичную систему для записи кодов операций, операндов и адресов. Это делалось для более быстрой адаптации читателей к особенностям программирования на уровне процессора. Теперь же, когда мы установили, что профессионально эффективнее работать в шестнадцатеричной системе, мы будем применять ее. Указывать суффикс «H» в записи чисел и адресов уже не будем.

 

5.1. Загрузка числа в регистр

 

5.1.1. Загрузка одиночного регистра.

Эти команды существуют для всех одиночных регистров.

Команды - двухбайтные. Сначала следует код операции, за ним - само число n. При засылке числа в регистр, старое значение, находившееся в нем, утрачивается.

 

Мнемоника

Код

Мнемоника

Код

LD A,n

3E n

LD B,n

06 n

LD C,n

0E n

LD D,n

16 n

LD E,n

1E n

LD H,n

26 n

LD L,n

2E n

 

 

 

5.1.2. Загрузка регистровой пары.

В регистровую пару может быть загружено двухбайтное число, т.е. от 0 до 65535. Эти команды для всех регистров, кроме IX и IY - трехбайтные. За кодом операции следуют два байта, задающие число. Для операций с индексными регистрами IX и IY эти команды - четырехбайтные, т.к. код операции включает в себя префикс DD (для регистра IX) или FD (для регистра IY).

Наиболее часто двухбайтное число, засылаемое в регистровую пару, является адресом, но это может быть и просто целое число. Следует помнить, что всегда первый байт числа загружается в младший регистр пары, а второй - в старший.

 

Мнемоника

Код

Мнемоника

Код

LD HL,nn

21 n n

LD BC,nn

01 n n

LD DE,nn

11 n n

LD IX,nn

DD 21 n n

LD IY,nn

FD 21 n n

LD SP,nn

31 n n

 

5.2. Копирование и обмен содержимого регистров

 

5.2.1. Копирование одиночных регистров.

Для аккумулятора и шести регистров общего назначения существуют 49 команд, позволяющих копировать содержимое одного регистра в другой. Ни одна из этих команд на флаги не влияет.

Все эти команды - однобайтные. Коды этих команд приведены в таблице ниже.


 

 

LD A,r

LD H,r

LD L,r

LD B,r

LD C,r

LD D,r

LD E,r

A

7F

67

6F

47

4F

57

5F

H

7C

64

6C

44

4C

54

5C

L

7D

65

6D

45

4D

55

5D

B

78

60

68

40

48

50

58

C

79

61

69

41

49

51

59

D

7A

62

6A

42

4A

52

5A

E

7B

63

6B

43

4B

53

5B

 

Для регистров I и R существуют команды копирования только в паре с аккумулятором.

 

Мнемоника

Код

Мнемоника

Код

LD A,I

ED 57

LD A,R

ED 5F

LD I,A

ED 47

LD R,A

ED 4F

 

5.2.2. Копирование содержимого регистровых пар.

Эти команды работают только с указателем стека. В этой группе только три команды. Они также не изменяют содержимого флагов.

 

Мнемоника

Код

Мнемоника

Код

LD SP,HL

F9

LD SP,IX

DD F9

LD SP,IY

FD F9

 

 

 

В тех случаях, когда Вам надо скопировать содержимое произвольной регистровой пары в другую произвольную, например из BC в DE, Вы можете воспользоваться двумя командами копирования одиночных регистров - LD D,B и LD E,C.

Второй способ для этой цели - произвести переброску через стек, но для этого надо воспользоваться командами для работы со стеком см. раздел 5.11.

 

5.2.3. Команды обмена.

В этой подгруппе три команды:

EX DE, HL (код ED) -    обмен между собой содержимым регистров HL и DE.

                        На флаги не влияет.

EXX (код D9) -          переключить основной набор регистров на

                        альтернативный.

EX AF,A'F' (код 08) -   переключить аккумулятор и флаговый

                        регистры на альтернативные.

 

5.3. Загрузка регистров из памяти

 

Эти команды требуют указания адреса, откуда данные могут быть загружены в регистр. Существуют три основных метода адресации:

·         прямая адресация;

·         косвенная адресация;

·         индексная адресация.

В соответствии с этими тремя методами мы и рассмотрим три подгруппы в этой группе.

 

5.3.1. Загрузка регистра прямой адресацией.

После кода команды следует двухбайтный адрес ячейки nn, содержимое которой загружается в данный регистр. Единственный случай, когда такой командой загружается одиночный регистр - это загрузка аккумулятора, во всех остальных случаях загружаются два байта в регистровую пару. Предполагается, что второй байт берется из ячейки nn+1. При этом содержимое указанного адреса идет в младший регистр, а следующего - в старший. Интересно отметить, что загрузка пары HL может выполняться двумя способами.

 

Мнемоника

Код

Мнемоника

Код

LD A,(nn)

3A n n

LD SP,(nn)

ED 7B n n

LD HL,(nn)

2A n n

Вторая форма

ED 6B n n

LD BC,(nn)

ED 4B n n

LD DE,(nn)

ED 5B n n

LD IX,(nn)

DD 2A n n

LD IY,(nn)

FD 2A n n

 

5.3.2. Загрузка регистра косвенной адресацией.

Здесь не указывается, из какого адреса надо взять данные, зато указывается, в какой регистровой паре находится этот адрес. Еще раз напомним, что загружается не этот адрес, а то, что в нем находится.

Пример: LD A,(HL) - код 7E загрузить в регистр A то число, которое находится в ячейке памяти, адрес которой находится в регистре HL.

 

Остальные этой подгруппы.

 

Мнемоника

Код

Мнемоника

Код

LD A,(BC)

0A

LD A,(DE)

1A

LD H,(HL)

66

LD L,(HL)

6E

LD B,(HL)

46

LD C,(HL)

4E

LD D,(HL)

56

LD E,(HL)

5E

 

5.3.3. Загрузка регистра индексной адресацией.

Этим методом из памяти могут загружаться однобайтные данные в аккумулятор или в регистры общего назначения. Адрес требуемого байта задается следующим образом:

·         в регистре IX или IY находится базовый адрес таблицы или массива данных;

·         в команде после кода операции указывается операнд «смещение» s требуемого адреса относительно базового. Величина s может быть только однобайтной от 0 до 255.

Обратите внимание на возможную ошибку: если Вам надо загрузить в регистр общего назначения тот байт, который находится по базовому адресу таблицы, хранящемуся в IX или в IY, то смещение все равно указывать надо. Просто в этом случае s=0.

 

Мнемоника

Код

Мнемоника

Код

LD A,(IX+s)

DD 7E s

LD A,(IY+s)

FD 7E s

LD H,(IX+s)

DD 66 s

LD H,(IY+s)

FD 66 s

LD L,(IX+s)

DD 6E s

LD L,(IY+s)

FD 6E s

LD B,(IX+s)

DD 46 s

LD B,(IY+s)

FD 46 s

LD C,(IX+s)

DD 4E s

LD C,(IY+s)

FD 4E s

LD D,(IX+s)

DD 56 s

LD D,(IY+s)

FD 56 s

LD E,(IX+s)

DD 5E s

LD E,(IY+s)

FD 5E s

 

Ни одна из команд загрузки регистров из памяти не меняет флаги. В Справочнике (часть 3) указано время исполнения команд в тактовых циклах. При частоте 3,5 МГц один тактовый импульс длится - 0,000000286 сек. Минимальная продолжительность команды в процессоре Z-80 - 4  тактовых цикла. Из рассмотренных в данной группе команд самыми быстрыми являются команды загрузки регистров косвенной адресацией. Они занимают в основном 7 циклов. Команды загрузки прямой адресацией длятся 16 - 20 циклов, а при индексной адресации - 19 циклов.

 

5.4. Команды записи данных из регистров в память

 

Команды этой группы прямо противоположны командам предыдущей группы. Также как и там, здесь можно выделить три подгруппы в зависимости от метода адресации.

 


5.4.1. Запись в память при прямой адресации.

 

Мнемоника

Код

Мнемоника

Код

LD (nn),A

32 n n

LD (nn),SP

ED 73 n n

LD (nn),HL

22 n n

Вторая форма

ED 63 n n

LD (nn),BC

ED 43 n n

LD (nn),DE

ED 53 n n

LD (nn),IX

DD 22 n n

LD (nn),IY

FD 22 n n

 

Обратите внимание на то, что в этой подгруппе нет команд на запись в память целых чисел. Когда необходимо выполнить такую операцию, ее делают поэтапно. Сначала число заносят в регистр командой 1-ой группы, а затем отправляют из регистра в память командой 4-й группы.

Поскольку эти команды являются противоположными командами 3-й группы, они часто употребляются совместно. Командами 4-й группы программные переменные отправляются на временное хранение в отведенное им в памяти место, а командами 3-й группы - вызываются из памяти в процессор для обработки.

 

5.4.2. Запись в память при косвенной адресации.

 

Мнемоника

Код

Мнемоника

Код

LD (HL),A

77

LD (BC),A

02

LD (DE),A

12

LD (HL),H

74

LD (HL),L

75

LD (HL),B

70

LD (HL),C

71

LD (HL),D

72

LD (HL),E

73

LD (HL),n

36 n

 

5.4.3. Запись в память при индексной адресации.

Команды этой подгруппы существуют для всех одиночных регистров общего назначения и аккумулятора. Базовый адрес может находиться как в регистровой паре IX, так и в IY.

 

Мнемоника

Код

Мнемоника

Код

LD (IX+s),A

DD 77 s

LD (IY+s),A

FD 77 s

LD (IX+s),H

DD 74 s

LD (IY+s),H

FD 74 s

LD (IX+s),L

DD 75 s

LD (IY+s),L

FD 75 s

LD (IX+s),B

DD 70 s

LD (IY+s),B

FD 70 s

LD (IX+s),C

DD 71 s

LD (IY+s),C

FD 71 s

LD (IX+s),D

DD 72 s

LD (IY+s),D

FD 72 s

LD (IX+s),E

DD 73 s

LD (IY+s),E

FD 73 s

LD (IX+s),n

DD 36 s n

LD (IY+s),n

FD 36 s n

 




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



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

Похожие статьи:
Ремонт - Неисправности Pentagon 128+ и их ремонт.
Открытые письма Nemo №6.246
Реклама - Реклама и объявления.
Программистам - процедура зaкpaшивaния зaмкнутoгo oбъектa нa экpaне.
Coding - приемы оптимизации кода.

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