Программирование в машинных кодах и на языке ассемблера 1993 г.

Команды для работы с битами - Команды сдвига,ротации и проверки битов.


5.14. Команды сдвига и ротации битов

 

Команды этой группы работают с байтами данных, содержащимися в регистрах процессора, путем перемещения битов в этих байтах. Способ перемещения битов и определяет название и назначение команды.

 

5.14.1. Команды сдвига.

Команды сдвига выполняют перемещения битов в байте на соседнее место влево или вправо. Существуют два типа сдвигов - сдвиг логический и сдвиг арифметический. При логическом сдвиге байт рассматривается как набор из восьми двоичных знаков (0 или1). При арифметическом сдвиге содержимое рассматривается как число со знаком.

Команда SRL.

Это сокращение от Shift right logical (логический сдвиг вправо). Структурная схема:

По этой команде каждый бит смещается вправо на соседнее место. Нулевой бит поступает в регистр F, где включается флаг переноса, если бит 0 был включен и выключается, если бит 0 был выключен. В старший (седьмой бит) засылается 0. т.е. он выключается.

Команд с мнемоникой SRL всего 10. Их коды зависят от того, к каким регистрам они применяются.

 

Мнемоника

Код

Мнемоника

Код

SRL A

CB 3F

SRL H

CB 3C

SRL L

CB 3D

SRL B

CB 38

SRL C

CB 39

SRL D

CB 3A

SRL E

CB 3B

SRL (HL)

CB 3E

SRL (IX+s)

DD CB s 3E

SRL (IY+s)

FD CB s 3E

 

Команда SRA.

Это сокращение от Shift right arithmetic (арифметический сдвиг вправо). Структурная схема:

Команда очень похожа на команду SRL. Единственным отличием является то, что бит 7 устанавливается в то же положение, в котором он был до сдвига. Это означает, что если в байте содержится целое число со знаком, то знак в результате этой операции не изменится. Внимательно приглядевшись к этой операции, Вы увидите, что сдвиг вправо эквивалентен делению содержимого байта пополам. При этом если число было нечетное (бит 0 включен), то образуется остаток от деления, о чем свидетельствует включение флага С регистра F.

 

Мнемоника

Код

Мнемоника

Код

SRA A

CB 2F

SRA H

CB 2C

SRA L

CB 2D

SRA B

CB 28

SRA C

CB 29

SRA D

CB 2A

SRA E

CB 2B

SRA (HL)

CB 2E

SRA (IX+s)

DD CB s 2E

SRA (IY+s)

FD CB s 2E

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Команда SLI

Команда SLA

Это арифметический сдвиг влево. Структурная схема:

 

По этой команде все биты сдвигаются на одну позицию влево. В бит 0 (младший) засылается 0. Бит 7 сдвигается во флаг переноса. Операция эквивалентна умножению байта на два. Если при этом образуется число большее, чем 255. включается флаг С.

Поскольку при сдвиге влево арифметический и логический сдвиг совпадают, то для последнего не выделено своей команды.

 

Мнемоника

Код

Мнемоника

Код

SLA A

CB 27

SLA H

CB 24

SLA L

CB 25

SLA B

CB 20

SLA C

CB 21

SLA D

CB 22

SLA E

CB 23

SLA (HL)

CB 26

SLA (IX+s)

DD CB s 26

SLA (IY+s)

FD CB s 26

 

5.14.2. Команды ротации.

Команды ротации очень похожи на команды сдвига. Разница состоит в том, что здесь тот бит, который выходит за пределы байта, поступает в байт с противоположной стороны. Более подробно эти операции показаны на структурных схемах.

 

Команды RL

Ротация влево. Структурная схема:

 

Бит 7 перемещается во флаг переноса, а флаг переноса - в бит 0.

Мнемоника

Код

Мнемоника

Код

RL A

CB 17

RL H

CB 14

RL L

CB 15

RL B

CB 10

RL C

CB 11

RL D

CB 12

RL E

CB 13

RL (HL)

CB 16

RL (IX+s)

DD CB s 16

RL (IY+s)

FD CB s 16

 

Команды RR

 

 

Ротация вправо Структурная схема:

 

Бит 0 перемещается во флаг переноса, а флаг переноса - в бит 7.

Мнемоника

Код

Мнемоника

Код

RR A

CB 1F

RR H

CB 1C

RR L

CB 1D

RR B

CB 18

RR C

CB 19

RR D

CB 1A

RR E

CB 1B

RR (HL)

CB 1E

RR (IX+s)

DD CB s 1E

RR (IY+s)

FD CB s 1E

 

Команды RRC

Эта команды отличаются от команд RR тем, что флаг переноса не вовлекается в ротацию, хотя результат операции на него влияет. Суть операции ясна из структурной схемы.

 

 

Мнемоника

Код

Мнемоника

Код

RRC A

CB 0F

RRC H

CB 0C

RRC L

CB 0D

RRC B

CB 08

RRC C

CB 09

RRC D

CB 0A

RRC E

CB 0B

RRC (HL)

CB 0E

RRC (IX+s)

DD CB s 0E

RRC (IY+s)

FD CB s 0E

 

Команды RLC

Эта команды отличаются от команд RL тем, что флаг переноса не вовлекается в ротацию, хотя результат операции на него влияет. Суть операции ясна из структурной схемы.

 

 

Мнемоника

Код

Мнемоника

Код

RLC A

CB 07

RLC H

CB 04

RLC L

CB 05

RLC B

CB 00

RLC C

CB 01

RLC D

CB 02

RLC E

CB 03

RLC (HL)

CB 06

RLC (IX+s)

DD CB s 06

RLC (IY+s)

FD CB s 06

 

5.14.3. Однобайтные команды ротации аккумулятора.

Поскольку регистр А широко используется во многих программах, для него продублированы 4 команды ротации. Они выполнены как однобайтные. Это позволяет при их использовании экономить память.


 

Мнемоника

Код

Комментарий

RLA

17

= RL A

RRA

1F

= RR A

RLCA

07

= RLC A

RRCA

0F

= RRC A

5.14.4. Команды ротации полубайтов.

В этой подгруппе только две команды. Они применяются для работы, когда используется двоичная форма записи десятичных чисел (BCD-арифметика). Напомним, что здесь один байт может представлять два десятичных разряда (числа от 0 до 99), а каждый полубайт (4 бита) может представлять число от 0 до 9. Значения от A до F - не используются. Перенос в старший полубайт выполняется уже тогда, когда младший полубайт принимает значение, большее 9 (в двоичной форме 1001).

В каждой из этих операций участвуют по одному младшему полубайту регистра A и по одному полному байту, взятому из ячейки памяти, на адрес которой указывает содержимое регистровой пары HL процессора.

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

Мнемоники этих команд - RLD и RRD.

 

Мнемоника

Код

Мнемоника

Код

RLD

ED 6F

RRD

ED 67

 

Структурная схема команды RLD.

 

 

Структурная схема команды RRD.

 

 

Интересно отметить, что старший полубайт в аккумуляторе, как Вы видите, этими командами не затрагивается. Кроме того, как Вы видите из структурных схем, эти команды различаются только направлением ротации - влево или вправо, причем понятия «влево» и «вправо» относятся не к аккумулятору, а к той ячейке памяти, на которую указывает содержимое HL.

Влияние команд сдвига и ротации на регистр флагов Вы можете установить по таблицам «Справочника…», но основная суть такова:

1)                             все команды, кроме RRD и RLD влияют на флаг переноса.

2)                             все команды, кроме RLA, RRA, RLCA, RRCA влияют на флаг четности.

 

5.15. Команды для работы с битами

 

Процессор имеет обширный набор команд для работы с отдельными битами. Этими командами биты могут включаться (SET), выключаться (RES) и проверяться (BIT).

Надо сказать, что для стандартного БЕЙСИКа операции с битами вообще невозможны, хотя существуют некоторые расширенные версии, предоставляющие такую возможность.

 

5.15.1. Команды включения битов.

Эти команды применяются программистом, когда надо обеспечить гарантированное включение какого-либо бита в одиночном регистре или в заданной ячейке памяти. Все команды этой подгруппы начинаются с мнемоники SET. Примеры применения команд:

      SET 0,A - включить нулевой бит аккумулятора.

      SET 4,(HL) - включить четвертый бит в байте, адрес которого находится в регистровой паре HL.

После включения бит принимает значение 1.

Коды команд включения битов приведены в таблице 5.15.1.1.

 

5.15.2. Команды выключения битов.

Команды служат для гарантированного выключения каких-либо битов в одиночном регистре или в заданной ячейке памяти. Команды этой подгруппы начинаются с мнемоники RES. После выключения нужный бит равен нулю. Машинные коды команд выключения битов приведены в табл.5.15.2.1.

 

Команды включения.

Таблица 5.15.1.1

 

SET 0

SET 1

SET 2

SET 3

SET 4

SET 5

SET 6

SET 7

A

CB C7

CB CF

CB D7

CB DF

CB E7

CB EF

CB F7

CB FF

H

CB C4

CB CC

CB D4

CB DC

CB E4

CB EC

CB F4

CB FC

L

CB C5

CB CD

CB D5

CB DD

CB E5

CB ED

CB F5

CB FD

B

CB C0

CB C8

CB D0

CB D8

CB E0

CB E8

CB F0

CB F8

C

CB C1

CB C9

CB D1

CB D9

CB E1

CB E9

CB F1

CB F9

D

CB C2

CB CA

CB D2

CB DA

CB E2

CB EA

CB F2

CB FA

E

CB E3

CB CB

CB D3

CB DB

CB E3

CB EB

CB F3

CB FB

(HL)

CB C6

CB CE

CB D6

CB DE

CB E6

CB EE

CB F6

CB FE

(IX+s)

DD CB s C6

DD CB s CE

DD CB s D6

DD CB s DE

DD CB s E6

DD CB s EE

DD CB s F6

DD CB s FE

(IY+s)

FD CB s C6

FD CB s CE

FD CB s D6

FD CB s DE

FD CB s E6

FD CB s EE

FD CB s F6

FD CB s FE

 

5.15.3. Команды проверки битов.

Команды служат для проверки того, является заданный бит включенным или выключенным. Обычно за этой командой следует условный переход, вызов подпрограммы или возврат по флагу нуля. Команды этой подгруппы начинаются с мнемоники BIT.

В результате действия этой команды включается или выключается флаг нуля (Z-флаг регистра F).

Машинные коды команд этой группы представлены в таблице .5.15.3.1.

Команды выключения.

Таблица 5.15.2.1

 

 

RES 0

RES 1

RES 2

RES 3

RES 4

RES 5

RES 6

RES 7

A

CB 87

CB 8F

CB 97

CB 9F

CB A7

CB AF

CB B7

CB BF

H

CB 84

CB 8C

CB 94

CB 9C

CB A4

CB AC

CB B4

CB BC

L

CB 85

CB 8D

CB 95

CB 9D

CB A5

CB AD

CB B5

CB BD

B

CB 80

CB 88

CB 90

CB 98

CB A0

CB A8

CB B0

CB B8

C

CB 81

CB 89

CB 91

CB 99

CB A1

CB A9

CB B1

CB B9

D

CB 82

CB 8A

CB 92

CB 9A

CB A2

CB AA

CB B2

CB BA

E

CB 83

CB 8B

CB 93

CB 9B

CB A3

CB AB

CB B3

CB BB

(HL)

CB 86

CB 8E

CB 96

CB 9E

CB A6

CB AE

CB B6

CB BE

(IX+s)

DD CB s 86

DD CB s 8E

DD CB s 96

DD CB s 9E

DD CB s A6

DD CB s AE

DD CB s B6

DD CB s BE

(IY+s)

FD CB s 86

FD CB s 8E

FD CB s 96

FD CB s 9E

FD CB s A6

FD CB s AE

FD CB s B6

FD CB s BE

 

Команды проверки.

Таблица 5.15.3.1

 

 

BIT 0

BIT 1

BIT 2

BIT 3

BIT 4

BIT 5

BIT 6

BIT 7

A

CB 47

CB 4F

CB 57

CB 5F

CB 67

CB 6F

CB 77

CB 7F

H

CB 44

CB 4C

CB 54

CB 5C

CB 64

CB 6C

CB 74

CB 7C

L

CB 45

CB 4D

CB 55

CB 5D

CB 65

CB 6D

CB 75

CB 7D

B

CB 40

CB 48

CB 50

CB 58

CB 60

CB 68

CB 70

CB 78

C

CB 41

CB 49

CB 51

CB 59

CB 61

CB 69

CB 71

CB 79

D

CB 42

CB 4A

CB 52

CB 5A

CB 62

CB 6A

CB 72

CB 7A

E

CB 43

CB 4B

CB 53

CB 5B

CB 63

CB 6B

CB 73

CB 7B

(HL)

CB 46

CB 4E

CB 56

CB 5E

CB 66

CB 6E

CB 76

CB 7E

(IX+s)

DD CB s 46

DD CB s 4E

DD CB s 56

DD CB s 5E

DD CB s 66

DD CB s 6E

DD CB s 76

DD CB s 7E

(IY+s)

FD CB s 46

FD CB s 4E

FD CB s 56

FD CB s 5E

FD CB s 66

FD CB s 6E

FD CB s 76

FD CB s 7E

 




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Обратная связь - контакты редакции.
ZXNet - Как использовать ZXNet для связи с другими сетями.
Ликбез - полный дизассемблер ПЗУ (часть 14).
Hard Disk Drive - Новые подпрограммы Теневого Сервис Монитора для работы с контроллером периферии SMUC.
Новости - язвительный отчет с Enlight'97 и неофициальные результаты, предварительная инфа о новом пати Funtop'98.

В этот день...   21 ноября