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

  • JMP Адрес (PC)  B1

  • (PC) 

  • CALL Адрес [SP-1] [SP-2]  (PC)

  • Формат команды условного вызова B1

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


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

    4.8 Команды перехода и вызова подпрограмм



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

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

    Команды перехода, называемые также командами ветвления, позволяют организовать в программах циклы и разветвления.

    Команды вызова подпрограмм дают возможность сократить объем разрабатываемых программ за счет повторного использования подпрограмм. Наличие в МП стека с указателем стека делает возможным возврат в главную программу после выполнения подпрограммы.

    4.8.1 Команды переходов


    Эти команды занимают в оперативной памяти 3 байта и выполняются за 3 машинных цикла (10 тактов). Во всех этих командах применяется прямая адресация.

    При выполнении команды перехода изменяется содержимое счетчика команд PC. Содержимое второго и третьего байтов команды перехода пересылается автоматически в счетчик команд во время фазы выполнения. Тогда при очередном цикле выборки МП извлекает команду из области памяти, на которую указывает 2-й и 3-й байты команды перехода. Таким образом, происходит переход в другую точку программы. Теперь выполняются одна за другой команды новой последовательности. Это продолжается до тех пор, пока не будет опять выполнена команда перехода.
    а) Переход безусловный

    JMP Адрес

    (PC)  B1

    11000011



    B2

    Мл. байт адреса




    B3

    Ст. байт адреса







    7 0


    После этой команды выполнение программы продолжается с новой исходной точки, т.е. с адреса, содержащегося в байтах В2 и ВЗ команды перехода.

    б) Переходы условные

    (PC) , если проверяемое условие выполняется; в противном случае PC (PC )+3, т.е. выполняется следующая команда после команды условного перехода

    B1

    11

    ССС

    010

    B2

    Мл. байт адреса

    B3

    Ст. байт адреса







    7 0


    Значение разрядов ССС команда выбирается в зависимости от проверяемого условия. В МП К580 имеется возможность делать переходы в зависимости от результата проверки следующих условий:

    Команда перехода

    Проверяемое условие

    Значение ССС


    JNZ Адрес

    (Tz) = 0

    000

    JZ Адрес

    (Tz) = 1

    001

    JNC Адрес

    (Tc) = 0

    010

    JC Адрес

    (Tc) = 1

    011

    JPO Адрес

    (Tp) = 0

    100

    JPE Адрес

    (Tp) = 1

    101

    JP Адрес

    (Ts) = 0

    110

    JM Адрес

    (Ts) = 1

    111


    Примеры:

    0806) JMP beep

    beep: 0A76

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

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

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

    0806

    C3

    C3

    0807

    76

    76

    0808

    0A

    0A

    PC

    0806

    0A76

    FL

    02

    02


    0A58) JMP beep

    beep: 0B43

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

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

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

    0A58

    C3

    C3

    0A59

    43

    43

    0A5A

    0B

    0B

    PC

    0A58

    0B43

    FL

    02

    02


    0921) JNZ L0

    L0: 0A42

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

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

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

    0921

    C2

    C2

    0922

    42

    42

    0923

    0A

    0A

    PC

    0921

    0A42

    FL

    02 (TZ=0)

    02


    0800) JNZ L0

    L0: 09FE

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

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

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

    0800

    C2

    C2

    0801

    FE

    FE

    0802

    09

    09

    PC

    0800

    0803

    FL

    42 (TZ=1)

    42


    0921) JC L0

    L0: 0A42

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

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

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

    0921

    DA

    DA

    0922

    42

    42

    0923

    0A

    0A

    PC

    0921

    0A42

    FL

    03 (TC=1)

    03


    0921) JC L0

    L0: 0A42

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

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

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

    0921

    DA

    DA

    0922

    42

    42

    0923

    0A

    0A

    PC

    0921

    0924

    FL

    02 (TC=0)

    02



    4.8.2 Команды вызова подпрограмм и возврата из подпрограмм


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

    Команды данной группы не изменяют содержимого регистра признаков.
    а) Вызов подпрограммы безусловный

    CALL Адрес

    [SP-1] [SP-2]  (PC)

    11001101



    SP  (SP) -2

    Мл. байт адреса




    PC 

    Ст. байт адреса







    7 0


    При выполнении этой команды никаких проверок не производится, т.е. вызов подпрограммы производится в любом случае. Команда занимает три байта и выполняется за 5 машинных циклов (17 тактов).
    б) Условный вызов подпрограммы

    Переход к подпрограмме происходит только в том случае, если выполняется проверяемое условие. При этом:

    [SP-1] [SP-2]  (PC); SP  (SP) –2; PC 

    В этом случае команда выполняется за 5 циклов (17 тактов).

    Если проверяемое условие не выполняется, то переход к подпрограмме не происходит и выполняется следующая команда программы с адресом PC = (PC) +3. В этом случае команда выполняется за 3 цикла (11 тактов).


    Формат команды условного вызова

    B1

    11

    ССС

    100

    B2

    Мл. байт адреса

    B3

    Ст. байт адреса







    7 0


    Значение разрядов ССС выбирается в зависимости от проверяемого условия:


    Команда вызова

    Проверяемое условие

    Значение ССС

    СNZ Адрес

    (Tz) = 0

    000

    СZ Адрес

    (Tz) = 1

    001

    СNC Адрес

    (Tc) = 0

    010

    СC Адрес

    (Tc) = 1

    011

    СPO Адрес

    (Tp) = 0

    100

    СPE Адрес

    (Tp) = 1

    101

    СP Адрес

    (Ts) = 0

    110

    СM Адрес

    (Ts) = 1

    111


    в) Возврат из подпрограммы безусловный

    RET

    PC [SP] [SP+1]; SP (SP) + 2

    11001001







    7 0


    Команда выполняется за три машинных цикла (10 тактов).

    г) Возврат из подпрограммы условный


    Команда условного возврата из подпрограммы

    11

    CCC

    000




    7

    0


    Если проверяемое условие выполняется, то PC  [SP] [SP-1]; SP (SP) + 2 и происходит выход из подпрограммы в точку, адрес которой записан в стеке. В этом случае команда выполняется за три машинных цикла (11 тактов). Если это условие не выполняется, то возврата не происходит и выполняется следующая команда подпрограммы, т.е.

    PC = (PC) + 1

    В этом случае команда выполняется в течение одного машин­ного цикла (5 тактов).

    Значение разрядов ССС команды определяется проверяемым условием:


    Команда возврата

    Проверяемое условие

    Значение ССС

    RNZ

    (Tz) = 0

    000

    RZ


    (Tz) = 1

    001

    RNC

    (Tc) = 0

    010

    RC


    (Tc) = 1

    011

    RPO

    (Tp) = 0

    100

    RPE


    (Tp) = 1

    101

    RP


    (Ts) = 0

    110

    RM

    (Ts) = 1

    111


    При выполнении команд возврата в) и г) МП извлекает из стека значение программного счетчика, при котором произошел переход из программы предыдущего уровня и загружает это значение в счетчик команд. Команде «возврат из подпрограммы» ничего не сообщается относительно того, какого уровня вложения выполняется подпрограмма и сколько раз происходил вызов этой подпрограммы. Выполняя эту команду, МП просто возвращается к тому значению программного счетчика, которое было последним загружено в стек.
    Примеры:

    0AF3) CALL BEEP

    BEEP: 0BC0)

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

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

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

    0AF3

    CD

    CD

    0AF4

    C0

    C0

    0AF5

    0B

    0B

    PC

    0AF3

    0BC0

    SP

    0BB0

    0BAE

    0BAE

    00

    F6

    0BAF

    00

    0A

    FL

    02

    02


    0BD4) RET

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

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

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

    0BD4

    C9

    C9

    SP

    0BAE

    0BB0

    0BAE

    F6

    F6

    0BAF

    0A

    0A

    PC

    0BD4

    0AF6

    FL

    02

    02


    0A12) CPO L1

    L1: 0AFE)

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

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

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

    0A12

    E4

    E4

    0A13

    FE

    FE

    0A14

    0A

    0A

    SP

    0BAE

    0BAC

    0BAD

    00

    15

    0BAC

    00

    0A

    PC

    0A12

    0AFE

    FL

    02 (TP=0)

    02


    0800) CP L1

    L1: 0C54)

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

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

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

    0800

    F4

    F4

    0801

    54

    54

    0802

    0C

    0C

    SP

    0BAC

    0BAC

    PC

    0800

    0803

    FL

    82 (TS=1)

    82



    3456) CC M0

    M0: 0807)

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

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

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

    3456

    DC

    DC

    3457

    07

    07

    3458

    08

    08

    SP

    0BB0

    OBAE

    0BAF

    00

    59

    0BAE

    00

    34

    PC

    3456

    0807

    FL

    03 (TC=1)

    03



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


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