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