Онлайн книга «Код. Тайный язык информатики»
|
Код Команда 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 |