Книга Код. Тайный язык информатики, страница 71. Автор книги Чарльз Петцольд

Разделитель для чтения книг в онлайн библиотеке

Онлайн книга «Код. Тайный язык информатики»

Cтраница 71

40

MOV B, B

50

MOV D, B

41

MOV B, C

51

MOV D, C

42

MOV B, D

52

MOV D, D

43

MOV B, E

53

MOV D, E

44

MOV B, H

54

MOV D, H

45

MOV B, L

55

MOV D, L

46

MOV B,[HL]

56

MOV D,[HL]

47

MOV B, A

57

MOV D, A

48

MOV C, B

58

MOV E, B

49

MOV C, C

59

MOV E, C

4A

MOV C, D

5A

MOV E, D

4B

MOV C, E

5B

MOV E, E

4C

MOV C, H

5C

MOV E, H

4D

MOV C, L

5D

MOV E, L

4E

MOV C,[HL]

5E

MOV E,[HL]

4F

MOV C, A

5F

MOV E, A

Как видите, весьма удобные команды. При наличии значения в одном из регистров можно переместить его в другой. Обратите внимание на четыре команды, которые используют пару регистров HL, например на следующую.

MOV B,[HL]

Упомянутая выше команда LDA перемещает байт из памяти в аккумулятор; 16-битный адрес этого байта следует непосредственно за кодом команды LDA. Эта команда MOV перемещает байт из памяти в регистр B. Однако адрес байта, который должен быть загружен в регистр, хранится в паре регистров HL. Как 16-битный адрес оказался в паре регистров HL? Это могло произойти разными способами. Возможно, этот адрес был каким-то образом вычислен.

В общем, обе команды загружают байт из памяти в микропроцессор, но используют два разных метода для адресации памяти. Первый метод называется прямой адресацией, а второй — индексной адресацией.

LDA A,[aaaa]

MOV B,[HL]

Второй набор из 32 команд MOV показывает, что ячейки памяти, адресуемые парой регистров HL, могут являться не только источником, но и местом назначения.

Код

Команда

Код

Команда

40

MOV B, B

50

MOV D, B

60

MOV H, B

70

MOV [HL], B

61

MOV H, C

71

MOV [HL], C

62

MOV H, D

72

MOV [HL], D

63

MOV H, E

73

MOV [HL], E

64

MOV H, H

74

MOV [HL], H

65

MOV H, L

75

MOV [HL], L

66

MOV H,[HL]

76

HLT

67

MOV H, A

77

MOV [HL], A

68

MOV L, B

78

MOV A, B

69

MOV L, C

79

MOV A, C

6A

MOV L, D

7A

MOV A, D

6B

MOV L, E

7B

MOV A, E

6C

MOV L, H

7C

MOV A, H

6D

MOV L, L

7D

MOV A, L

6E

MOV L,[HL]

7E

MOV A,[HL]

6F

MOV L, A

7F

MOV A, A

Некоторые из этих команд, например MOV A, A, не делают ничего полезного. Команды MOV [HL],[HL] вообще не существует. Код, который мог бы ей соответствовать, выделен команде HLT (Halt — остановить).

Более показательный способ анализа команд MOV — рассмотрение битового шаблона их кода. Код команды MOV состоит из восьми битов:

01ннниии,

где буквы ннн соответствуют 3-битному коду места назначения, а иии — 3-битному коду источника. Эти 3-битные коды обозначают следующие регистры.

000 = регистр B

001 = регистр C

010 = регистр D

011 = регистр E

100 = регистр H

101 = регистр L

110 = ячейка памяти по адресу HL

111 = аккумулятор

Команда MOV L, E соответствует коду 01101011, или 6Bh. Вы можете свериться с предыдущей таблицей, чтобы убедиться в этом.

Вероятно, где-то внутри процессора 8080 три бита иии используются в селекторе «8 на 1», а три бита ннн управляют дешифратором «3 на 8», определяющим регистр, где будет зафиксировано значение.

Регистры B и C также можно использовать как 16-битную пару регистров BC, а регистры D и E — как 16-битную пару регистров DE. Если в любой из этих пар регистров содержится адрес ячейки памяти, откуда вы хотите считать или куда хотите записать байт, можете использовать следующие команды.

Код

Команда

Код

Команда

02

STAX [BC], A

0A

LDAX A,[BC]

12

STAX [DE], A

1A

LDAX A,[DE]

Другой тип команды Move называется Move Immediate («Переместить непосредственно») и обозначается мнемокодом MVI. Эта команда состоит из двух байтов. Первый — код команды, второй — байт данных. Этот байт перемещается из памяти в один из регистров или в ячейку памяти, адрес которой содержится в паре регистров HL.

Вход
Поиск по сайту
Ищем:
Календарь
Навигация