Главная страница
Навигация по странице:

  • ADD ri A  (A) + (ri) B1 >

  • ADC ri A  (A) + (ri) + (Tc) B1 >

  • SBB ri A  (A) - (ri) - (Tc) B1 >

  • ADI Данные A(A) + C6

  • ACI Данные A(A) + +(Tc) CE

  • SUI Данные A(A) - D6

  • SBI Данные A(A) - - (Tc) DE

  • DAD ri HL  (HL)+ (ri)(ri+1) 00 ri+1

  • ANA ri A  (A)  (ri)

  • XRA ri A  (A)  (ri)

  • ORA ri A  (A)  (ri)

  • ANI Данные A(A)  E6

  • XRI Данные A(A)  EE

  • ORI Данные A(A)  F6

  • CMP ri (A) - (ri) 10111 ri

  • CPI Данные (A) - FE

  • 0_МПиИСТС_Все главы. Микропроцессоры и интерфейсные средства транспортных средств


    Скачать 10.01 Mb.
    НазваниеМикропроцессоры и интерфейсные средства транспортных средств
    Анкор0_МПиИСТС_Все главы.doc
    Дата18.12.2017
    Размер10.01 Mb.
    Формат файлаdoc
    Имя файла0_МПиИСТС_Все главы.doc
    ТипУчебное пособие
    #11960
    страница18 из 47
    1   ...   14   15   16   17   18   19   20   21   ...   47

    4.7 Арифметические и логические операции



    При выполнении арифметических и логических операций, когда операнды однобайтовые, один из операндов всегда находится в аккумуляторе, а второй находится в одном из регистров A, B, C, D ,E, H, L или M. При непосредственной адресации второй операнд приводится во втором байте команды. Результат выполнения операции записывается в аккумулятор. При этом прежнее содержимое аккумулятора теряется.

    Микропроцессор содержит ограниченное число арифметических и логических команд: сложение, вычитание, логическое сложение и логическое умножение, исключающее ИЛИ, сравнение и дополнение. Более сложные операции над числовыми данными реализуются программно.

    4.7.1 Арифметические операции над (A) и (r)



    а) Сложение

    ADD ri

    A(A) + (ri) <B1>

    10000

    ri

    б) Сложение с переносом

    ADC ri

    A(A) + (ri) + (Tc) <B1>

    10001

    ri

    в) Вычитание

    SUB ri

    A(A) - (ri) <B1>

    10010

    ri

    г) Вычитание с переносом

    SBB ri

    A(A) - (ri) - (Tc) <B1>

    10011

    ri


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

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

    При выполнении команд вычитания 3 флага из 5 устанавливаются всегда одинаковым образом, независимо от того сводится вычитание к сложению или нет. Это TS, TZ ,TP; флаги TC и Th ведут себя иначе. Изменение Th определяется при преобразовании вычитания в сложение (путем смены знака вычитаемого и преобразования значения в дополнительный код). Флаг TC=1 если код уменьшаемого меньше кода вычитаемого, т.е. имеет место заем.

    Применение операций с переносом позволяет обрабатывать не только байтовые числа, но и многобайтовые.
    Примеры:
    015B) ADD M

    Адрес/регистр

    Код до выполнения

    операции

    Код после выполнения

    операции

    015B

    86

    86

    H

    3E

    3E

    L

    23

    23

    3E23

    6C

    6C

    A

    A4

    10

    FL

    02

    13

    PC

    015B

    015C


    1A20) ADC E

    Адрес/регистр

    Код до выполнения операции

    Код после выполнения операции

    1A20

    8B

    8B

    A

    16

    6A=16+54+0

    E

    54

    54

    FL

    02; (Tc)=0

    06

    PC

    1A20

    1A21


    00B3) ADC C

    Адрес/регистр

    Код до выполнения

    операции

    Код после выполнения

    операции

    00B3

    89

    89

    C

    DB

    DB

    A

    AF

    8B=DB+AF+1

    FL

    13; Tc=1

    97

    PC

    00B3

    00B4


    Рассмотренные команды являются однобайтовыми, выполняются за один цикл (4 такта); если операнд хранится в памяти (М), то операция выполняется за два цикла (7 тактов). При выполнении команд меняется содержимое всех триггеров регистра признаков.
    1A30) SUB D

    Адрес/регистр

    Код до выполнения

    операции

    Код после выполнения

    операции

    1A30

    92

    92

    D

    45

    45

    A

    FC

    B7

    FL

    02

    96

    PC

    1A30

    1A31


    1A40) SBB B

    Адрес/регистр

    Код до выполнения

    операции

    Код после выполнения

    операции

    1A40

    98

    98

    B

    6A

    6A

    A

    5B

    F0 = 5B-6A-1

    FL

    03; Tc=1

    97

    PC

    1A40

    1A41


    Рассмотрим несколько особенных примеров.
    082А) SBB H

    Адрес/регистр

    Код до выполнения

    операции

    Код после выполнения

    операции

    082A

    9C

    9C

    A

    60

    60

    H

    FF

    FF

    FL

    83, TC=1

    17

    PC

    082A

    082B

    Особенностью данной команды является то, что триггеры признаков TC и TH устанавливаются так, как это происходит при выполнении этой команды в два этапа:

    1) (A) - TC = 60 – 1= 5F

    2) ((A) - TC ) – H = 5F – FF = 60;

    и признаки переноса и полупереноса (TC и TH) устанавливаются в соотвествии со вторым этапом, т.е. TC = 1, TH = 1.
    0903) АDD L

    Адрес/регистр

    Код до выполнения

    операции

    Код после выполнения

    операции

    0903

    85

    85

    A

    7F

    81

    L

    02

    02

    FL

    13

    96

    PC

    0903

    0904


    0A09) SUB D

    Адрес/регистр

    Код до выполнения

    операции

    Код после выполнения

    операции

    0A09

    92

    92

    A

    83

    79

    D

    0A

    0A

    FL

    17

    02

    PC

    0A09

    0A0A

    Особенностью двух последних команд является то, что их результаты имеют смысл только в тех случаях, когда обрабатываемые коды являются кодами чисел без знака.

    4.7.2 Арифметические операции с непосредственной адресацией


    а) Сложение со вторым байтом

    ADI Данные

    A(A) +

    C6

    <B2>

    Данные

    б) Сложение со вторым байтом и переносом

    ACI Данные

    A(A) + +(Tc)

    CE

    <B2>

    Данные

    в) Вычитание второго байта

    SUI Данные

    A(A) - < B1>

    D6

    <B2>

    Данные


    г) Вычитание второго байта с переносом

    SBI Данные

    A(A) - - (Tc)

    DE

    <B2>

    Данные

    При выполнении этой группы команд второй операнд приводится непосредственно в команде во втором ее байте. Команды являются двухбайтовыми, выполняются за два цикла (7 тактов). Триггеры признаков устанавливаются в соответствии с результатом выполненной операции. В результате выполнения операции изменяется содержимое аккумулятора, старое содержимое аккумулятора теряется.

    Примеры:

    12A6) ADI 47

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    12A6

    C6

    C6

    12A7

    47

    47

    A

    24

    6B=24+47

    FL

    97

    02

    PC

    12A6

    12A8


    0802) ACI A7

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    0802

    CE

    CE

    0803

    A7

    A7

    A

    53

    FB

    FL

    03

    82

    PC

    0802

    0804


    0804) SUI FD

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    0804

    D6

    D6

    0805

    FD

    FD

    A

    FB

    FE

    FL

    03

    83

    PC

    0804

    0806


    0806) SBI 0A

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    0806

    DE

    DE

    0807

    0A

    0A

    A

    F8

    ED

    FL

    03

    96

    PC

    0806

    0808



    4.7.3 Сложение содержимого пар регистров


    DAD ri

    HL (HL)+ (ri)(ri+1)

    00

    ri+1

    010

    При ri+1=111 - HL (HL) + (SP)

    При выполнении этой команды содержимое пары регистров HL складывается с содержимым пар ВС, DE или с содержимым указателя стека (SP). В коде команд приводится код младшего регистра пары (С или Е). В результате выполнения операции уста­навливается в соответствующее состояние только триггер переноса, который принимает значение в соответствии с переносом из старшего бита старшего регистра. Команда выполняется за три цикла (10 тактов).
    Пример:
    1FC1) DAD D

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    1FC1

    19

    19

    H

    1A

    70

    L

    10

    35

    D

    56

    56

    C

    25

    25

    FL

    97

    96

    PC

    1FC1

    1FC2



    4.7.4 Логические операции над (А) и (r)



    а) Логическая операция "И"


    ANA ri

    A(A) (ri)

    10100

    ri







    7

    0


    Эта операция, как и все остальные логические операции, явля­ется побитовой. Можно считать, что для обработки битов каждого разряда используется одна двухвходовая логическая схема, на один вход которой подается значение бита аккумулятора, а на другой - значение соответствующего бита слова, расположенного в памяти (М) или одном из регистров (A, B, C, D, E, H ,L ). В микропроцессоре преду­смотрено восемь таких двухвходовых схем - по одной для каждого разряда микропроцессора. После выполнения операции результат запишется в аккумулятор, а старое содержимое аккумулятора потеря­ется. В результате выполнения операции логического умножения все триггеры регистра признаков кроме триггера переноса (Тс) установятся в соответствии с полученным результатом; триггер переноса установится в состояние "0".Триггер полупереноса (Тн) принимает значение разряда А3 результата. На выполнение операции затрачивается один цикл (4 такта). Если ri =М, то число циклов равно 2 (7 тактов)
    Пример:

    0800) ANA C

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    0800

    A1

    A1

    A

    11010111=D7

    10000000=80

    C

    10100000=A0

    A0

    FL

    02

    82

    PC

    0800

    0801


    б) "Исключающее ИЛИ"


    XRA ri

    A(A) (ri)

    10101

    ri

    Эта операция, как и предыдущая, является побитовой; для ее исполнения используются те же регистры. После выполнения команды результат записывается в аккумулятор на место первого операнда. Триггеры признаков, кроме триггеров переноса и полупереноса, устанавливаются в соответствии с результатом. Триггеры Тс и Тн прини­мают значение "0". Операция выполняется за 1/2 цикла (4/7 ) тактов.

    Пример:

    0800) XRA C

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    0800

    A9

    A9

    A

    11010111=D7

    01110111=77

    C

    10100000=A0

    A0

    FL

    02

    06

    PC

    0800

    0801


    в) Логическая операция "ИЛИ"


    ORA ri

    A(A) (ri)

    10110

    ri


    Все сказанное для команды б) справедливо и для этой команды.
    Пример:
    0800) ORA C

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    0800

    B1

    B1

    A

    11010111=D7

    11110111=F7

    C

    10100000=A0

    A0

    FL

    02

    82

    PC

    0800

    0801



    4.7.5 Логические операции с непосредственной адресацией





    1. Логическая операция "И" со вторым байтом




    ANI Данные

    A(A) 

    E6

    <B2>

    Данные


    б) Логическая операция "исключающее ИЛИ" со вторым байтом.

    XRI Данные

    A(A) 

    EE

    <B2>

    Данные


    в) Логическая операция "ИЛИ" со вторым байтом

    ORI Данные

    A(A)  < B1>

    F6

    <B2>

    Данные

    Все сказанное для логических операций над А и ri (п. 4) справедливо и для команд данной группы. Отличие состоит лишь в том, что второй операнд приводится непосредственно в команде во втором ее байте. Каждая операция выполняется за 2 машинных цикла (7 тактов).
    Примеры:

    0900) XRI 2B

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    0900

    EE

    EE

    0901

    00101011 =2B

    2B

    A

    10101010 =AA

    10000001=81

    FL

    02

    86

    PC

    0900

    0902


    0800) ANI 98

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    0800

    E6

    E6

    0801

    98

    98

    A

    AE

    88

    FL

    03

    96

    PC

    0800

    0802


    0802) ORI FE

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    0802

    F6

    F6

    0803

    FE

    FE

    A

    A3

    FF

    FL

    03

    86

    PC

    0802

    0804



    4.7.6 Операции сравнения



    а) Сравнение (А) с (ri)

    CMP ri

    (A) - (ri)

    10111

    ri


    Пример:

    0100) CMP D

    Адрес

    Код до выполнения операции

    Код после выполнения операции

    0100

    BA

    BA

    A

    B6

    B6

    D

    CB

    CB

    FL

    02

    87

    PC

    0100

    0101


    б) Сравнение (А) со вторым байтом

    CPI Данные

    (A) -

    FE

    <B2>

    Данные


    Пример:
    0125) CPI 25

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    0125

    FE

    FE

    0126

    25

    25

    A

    96

    96

    FL

    02

    17

    PC

    0125

    0127


    Выполнение команд этой группы аналогично выполнению команды "вычитание", но ее результат не загружается в аккумулятор. Хотя по окончании операции исходные данные в аккумуляторе не изменяются, разрядам Z, S и С регистра признаков присваиваются значения в соответствии с полученным результатом.

    В качестве регистров ri в команде а) могут быть выбраны A, B, C, D, E, H, L, M. С помощью этой команды можно производить сравнение двух слов на "больше", "меньше", "равно".

    На выполнение команды а) затрачивается 1 машинный цикл (4такта) при работе с регистрами или 2 цикла (7 тактов), если данные нахо­дятся в памяти (М) по адресу HL . команда б) выполняется за 2 цикла (7 тактов).

    4.7.7 Операции циклического сдвига (а).


    а) Сдвиг аккумулятора влево без переноса

    RLC


    00000111


    б) Сдвиг аккумулятора вправо без переноса

    RRC


    00001111


    в) Сдвиг аккумулятора влево с переносом

    RAL


    00010111


    г) Сдвиг аккумулятора вправо с переносом

    RAR


    00011111


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

    Каждая команда выполняется в течение одного машинного цикла (4 такта). В результате выполнения команды изменяется значение только триггера переноса С, а другие признаки остаются без изменения.
    Примеры:

    0800) RLC

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    0800

    07

    07

    A

    96

    2D

    FL

    02

    03

    PC

    0800

    0801

    0801) RRC

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    0801

    0F

    0F

    A

    96

    4B

    FL

    02

    02

    PC

    0801

    0802

    0802) RAL

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    0802

    17

    17

    A

    96

    2C

    FL

    02

    03

    PC

    0802

    0803


    0803) RAR

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    0803

    1F

    1F

    A

    96

    4B

    FL

    02

    02

    PC

    0803

    0804


    4.7.8 Дополнение аккумулятора


    CMA

    <B1>

    00101111







    7 0


    С помощью этой команды производится инвертирование всех разрядов аккумулятора. Команда выполняется в течение одного цикла (4 такта). Значение триггеров признаков при этом не изменяется.

    Пример:
    0823) CMA

    Адрес/ регистр

    Код до выполнения операции

    Код после выполнения операции

    0823

    2F

    2F

    A

    F2

    0D

    FL

    02

    02

    PC

    0823

    0824



    1   ...   14   15   16   17   18   19   20   21   ...   47


    написать администратору сайта