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

Авторы: А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ч Ш Ы Э Ю Я
Книги: А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
Бесплатная онлайн библиотека LoveRead.me

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

📃 Cтраница 72

Код

Команда

06

MVI B, xx

0E

MVI C, xx

16

MVI D, xx

1E

MVI E, xx

26

MVI H, xx

2E

MVI L, xx

36

MVI [HL], xx

3E

MVI A, xx

Например, после выполнения команды MVI E,37h в регистре E будет содержаться байт 37h. Этот третий метод обращения к памяти называется непосредственной адресацией.

Набор из 32 кодов команд выполняет четыре основные арифметические операции, с которыми мы познакомились, когда собирали процессор (глава 17). К ним относятся сложение (ADD), сложение с переносом (ADC), вычитание (SUB) и вычитание с заимствованием (SBB). Во всех случаях аккумулятор является одним из двух операндов, а также местом назначения для результата.

Код

Команда

Код

Команда

80

ADD A, B

90

SUB A, B

81

ADD A, C

91

SUB A, C

82

ADD A, D

92

SUB A, D

83

ADD A, E

93

SUB A, E

84

ADD A, H

94

SUB A, H

85

ADD A, L

95

SUB A, L

86

ADD A,[HL]

96

SUB A,[HL]

87

ADD A, A

97

SUB A, A

88

ADC A, B

98

SBB A, B

89

ADC A, C

99

SBB A, C

8A

ADC A, D

9A

SBB A, D

8B

ADC A, E

9B

SBB A, E

8C

ADC A, H

9C

SBB A, H

8D

ADC A, L

9D

SBB A, L

8E

ADC A,[HL]

9E

SBB A,[HL]

8F

ADC A, A

9F

SBB A, A

Предположим, что в аккумуляторе А содержится байт 35h, а в регистре B — байт 22h. После выполнения команды SUB A, B в аккумуляторе будет содержаться байт 13h.

Если в A содержится байт 35h, в регистре H — 10h, в регистре L — 7Ch, в ячейке памяти 107Ch — 4Ah, то при выполнении команды ADD A,[HL] байт в аккумуляторе (35h) прибавляется к байту в ячейке, к которой обращается пара регистров HL (4Ah), а результат (7Fh) сохраняется в аккумуляторе.

Команды ADC и SBB позволяют процессору 8080 складывать и вычитать 16-, 24-, 32-битные числа, а также числа большей разрядности. Предположим, что пары регистров BC и DE содержат 16-битные числа. Вы хотите сложить их и поместить результат в пару регистров BC. Это можно сделать так.

MOV A, C ; младший байт

ADD A, E

MOV C, A

MOV A, B ; старший байт

ADC A, D

MOV B, A

Для сложения используются две команды: ADD — для младшего байта, ADC — для старшего. Любой бит переноса, возникающий в результате первого сложения, участвует во втором сложении. Поскольку прибавлять можно только к значению в аккумуляторе, в этом небольшом фрагменте кода команда MOV используется не менее четырех раз. Команды MOV очень часто встречаются в программном коде для процессора 8080.

Пришло время поговорить о флагах микросхемы 8080. В процессоре из главы 17 использовались флаг переноса и флаг нуля. Микросхема 8080 предусматривает еще три флага: знака, четности и вспомогательного переноса. Все флаги хранятся в 8-битном регистре, который называется словом состояния программы (Program Status Word, PSW). Такие команды, как LDA, STA или MOV, не влияют на эти флаги. Однако команды ADD, SUB, ADC и SBB изменяют флаги следующим образом:

флаг знака устанавливается в 1, если старший бит результата равен 1, то есть если результат отрицательный;

флаг нуля устанавливается в 1, если результат равен 0;

флаг четности устанавливается в 1, если результат четен, то есть выраженный в двоичном формате результат содержит четное количество 1; флаг четности устанавливается в 0, если результат нечетен; флаг четности иногда используется для грубой проверки результата на наличие ошибок; при написании программ для процессора 8080 этот флаг используется редко;

флаг переноса устанавливается в 1, если в результате выполнения команды ADD или ADC возникает бит переноса либо в результате выполнения команд SUB и SBB бит переноса не возникает (такая реализация флага переноса отличается от того, как он был реализован в компьютере из главы 17);

флаг вспомогательного переноса устанавливается в 1, если в результате выполнения команды возникает перенос из младшей тетрады в старшую; этот флаг используется только для команды DAA (Decimal Adjust Accumulator — десятичная коррекция аккумулятора).

На флаг переноса непосредственно влияют две команды.

Код

Команда

Значение

37

STC

Установить флаг переноса в 1

3F

CMC

Дополнить флаг переноса до 1 или инвертировать флаг переноса

В отличие от компьютера из главы 17, который тоже выполнял команды ADD, ADC, SUB и SBB (хотя и не с такой же степенью гибкости), процессор 8080 способен еще и на булевы операции И, ИЛИ и исключающее ИЛИ. За выполнение арифметических и логических операций отвечает арифметико-логическое устройство процессора.

Код

Команда

Код

Команда

A0

AND A, B

B0

OR A, B

A1

AND A, C

B1

OR A, C

A2

Реклама
Вход
Поиск по сайту
Ищем:
Календарь