Nicron
#10
05 декабря 1996 |
|
Железо - обзор микропроцессора Zilog Z380, продолжение.
╔══════════════════════════════════════════════════════════════╗ ║▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░ MPU Z380 ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║ ╚══════════════════════════════════════════════════════════════╝ [ Продолжение. Предыдущие публикации - в номерах 9,8,7,6. ] (C) WLODEK BLACK ...Вот мы и добрались до системы команд! Начнем с самого просто- го, как обычно, - пересылок. Группа команд 8-разрядной загрузки. В ней добавились к имеющимся в Z80 инструкциям только операции с половинками индексных регистров: Команда Действие LD XYU,n XYU <- n LD XYL,n XYL <- n , где "XY" - IX или IY, а "n" - 8-разрядная константа. Также объявлены команды пересылок между половинками индексных регистров и регистрами общего назначения: LD XYU,s LD XYL,s LD s,XYU LD s,XYL , где "s" - регистр общего назначения. На самом деле эти операции выполнялись и на Z80, только они бы- ли не объявлены в официальном списке команд. Теперь же у них по- явилась стандартная мнемоника, а вместе с нею и полноправное вхождение в перечень инструкций. Инструкции вида LD r,(XY+d) LD (XY+d),r LD (XY+d),n LD A,(nn) LD (nn),A могут быть префиксованы DDIR IB или DDIR IW для расширения раз- рядности операнда. В остальном состав группы 8-разрядных пересылок точно такой же, как и у прототипа. Группа команд 16- и 32-разрядной загрузки. Новые команды: LD[W] (pp),nn (pp+1) <- nh загрузка 16-битной константы nn (pp) <- nl по адресу, указываемому парой pp, например, LD (BC),nn; LD pp,(uu) pph <- (uu+1) косвенная загрузка регистровой ppl <- (uu) пары pp с адреса, указываемого парой uu, например LD IX,(BC); LD (pp),uu (pp+1) <- uuh помещение значения пары uu по (pp) <- uul адресу, указываемому парой pp: LD (DE),IX; LD pp,UU pp <- UU пересылка значения одной пары в другую: LD BC,HL; LD XY,pp XY <- pp LD IX,BC; LD IY,DE; LD pp,XY pp <- XY LD BC,IX; LD DE,IY; LD IX,IY пересылка значения одного LD IY,IX индексного регистра в другой; LD (pp),XY (pp+1) <- XYU сохранение индексного регистра (pp) <- XYL по адресу,указываемому парой pp; LD (BC),IX; LD XY,(pp) XYU <- (pp+1) загрузка индексного регистра с XYL <- (pp) адреса, указываемого парой pp; LD IY,(DE); LD pp,(XY+d) pph <- (XY+d)h загрузка пары pp с адреса, инде- ppl <- (XY+d)l ксируемого по IX или IY со сме- щением d: LD HL,(IX+d); LD IX,(IY+d) загрузка одного индексного реги- LD IY,(IX+d) стра с адреса, индексируемого другим индексным регистром со смещением d; LD pp,(SP+d) pph <- (SP+d)h загрузка пары с адреса, индекси- ppl <- (SP+d)l руемого указателем стека SP со смещением d; LD DE,(SP+d); LD XY,(SP+d) -"- индексного регистра; LD (XY+d),pp загрузки в противоположном на- LD (IX+d),IY правлении - помещение пары pp LD (IY+d),IX или индексного регистра в память LD (SP+d),pp по адресу, индексируемому XY или LD (SP+d),XY SP; LD[W] I,HL I <- HL загрузка регистра вектора преры- ваний значением пары HL; LD I,HL; LDW I,HL ("W" - необя- зательный элемент); LD[W] HL,I HL <- I чтение регистра вектора прерыва- ний в пару HL; LD HL,I; LDW HL,I. Символ "W" можно употреблять для удобства чтения программы, что- бы визуально подчеркнуть, что речь идет об операнде формата "слово". Все команды 16-разрядной загрузки, в том числе и "старые", в ре- жиме "длинное слово" (LW; Long Word mode), установленном в реги- стре SR, будут работать с 32-разрядными операндами. Однобайтовое смещение в индексных операциях и 16-разрядный адрес в операциях с прямой адресацией можно расширить до соответствен- но 16 или 24-х или до 24-х или 32-х бит с помощью префиксов DDIR IB, DDIR IW, если формат данных установлен в одинарное сло- во. В режиме "длинное слово" операнды суть "16-разрядный адрес" и так превращаются в 32-разрядные и требуют соответствующего ко- личества байт, но индексное смещение остается в прежнем формате и требует, при необходимости, префиксования DDIR (! Возможно, в этом нюансе я чего-то и напутал (все-таки с английского оригина- ла читаю)). Группа PUSH / POP. Добавились: PUSH nn (SP-2) <- nnl занесение в стек константы; (SP-1) <- nnh (константу можно расширить SP <- SP-2 через DDIR); PUSH SR (SP-2) <- SR(7-0) (SP-1) <- SR(15-8) SP <- SP-2 POP SR SR(6-0) <- (SP) <-- бит SR(7) не пере- SR(15-8) <- (SP+1) устанавливается через SR(23-16) <- (SP+1) POP; это бит расширен- SR(31-24) <- (SP+1) ного режима процессора; SP <- SP+2 его можно сбросить толь- ко RESET-ом; При установленном формате "обычное слово" POP SR, как видно, ве- дет себя довольно оригинально - 8...15-й биты SR копируются в 2 старших байта регистра. При режиме "длинное слово" в стек зано- сится все 32-битное значение и так же все снимается при POP(это справедливо для всех регистровых пар); старшая половина 32-бит- ного значения заносится в стек первой (по отношению к "основной" части значения). "PUSH nn" можно расширить с помощью DDIR. Нерасширенный"PUSH nn" в режиме "длинное слово" заносит дополнительно #0000 в стек (та- кже это относится к PUSH AF). "POP nn", разумеется, не существует (смысл очевиден). При работе процессора в режиме "Z80" указатель стека закольцован на младших 64К памяти; старшие разряды сброшены в 0. [ Продолжение следует ].
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября