Основные правила написания на Ассемблере 580. Основные правила составления программ на ассемблере
Скачать 75.39 Kb.
|
1.2. Программная модель микропроцессорной системы Система команд микропроцессора – это полный перечень элементарных действий, которые может выполнить микропроцессор. Управляемый командами микропроцессор выполняет очень простые действия, однако с помощью этих действий (команд) можно запрограммировать любую сложную операцию. Проектировщику необходимо запомнить весь перечень команд и хорошо представлять действия, которые будет выполнять микропроцессор при их обработке. Программная модель системы, построенной на базе микропроцессора серии КР580, состоит из следующих элементов: программно-доступных регистров и триггеров разрешения прерывания; программно-доступных восьмиразрядных ячеек памяти; программно-доступных восьмиразрядных регистров. Программно - доступные регистры микропроцессора – это регистры общего назначения, регистр указателя стека, регистр признаков и регистр счетчика команд. Разряды регистров нумеруются справа налево целыми числами, начиная с нуля. Регистр общего назначения (РОН) — это один из шести восьмиразрядных регистров микропроцессора, обозначенных буквами В, С, D, Е, Н, L, или аккумулятор, обозначенный буквой А. Регистры В и С, D и Е, Н и L в некоторых командах рассматриваются как шестнадцатиразрядные регистры, называемые регистровыми парами. Регистры В, D и Н образуют старшие восемь разрядов регистровых пар, а регистры С, Е и L – младшие. Регистр указатель стека (УC) — это шестнадцатиразрядный регистр, который содержит адрес вершины стека. Стек – это динамическая последовательная структура данных в ОЗУ, организованная таким образом, что очередная запись данных всегда осуществляется в вершину (начало) стека. Максимальный размер стека равен адресуемой емкости памяти. В вершину стека могут записываться только шестнадцатибитные данные. При записи данных в стек содержимое регистра указателя стека уменьшается на 2, а при считывании — увеличивается на 2. Регистр признаков (F) — это восьмиразрядный регистр, содержащий признаки результата выполнения команды (рис. 1).
Рис.1. Регистр признаков Признаки устанавливаются следующим образом: - признак S — единица, если седьмой разряд результата равен единице, в противном случае — ноль; -признак нуля Z — единица, если во всех разрядах результата ноли, в противном случае — ноль; - признак дополнительного переноса V — единица при переносе из третьего разряда или при заеме в третий разряд результата, в противном случае — ноль; - признак четности Р — единица, если результат в двоичном коде содержит четное количество единиц, в противном случае — ноль; - признак переноса С — единица при переносе из седьмого разряда или при заеме в седьмой разряд результата, в противном случае — ноль. Аккумулятор и регистр признаков образуют слово состоянияпроцессора, обозначенное буквами PSW. Аккумулятору соответствуют восемь старших разрядов, а регистру признаков — младшие. Регистр счетчика команд(СК) — это шестнадцатиразрядный регистр, указывающий адрес следующей команды, которая должна быть выполнена микропроцессором. Триггер разрешения прерывания используется для управления прерываниями микропроцессора. Если триггер установлен в единицу, то прерывание разрешается, если триггер установлен в ноль, то прерывание запрещается. Программно-доступные восьмиразрядные ячейки памяти используются в качестве памяти микропроцессорной системы (МПС) . Разряды ячейки памяти нумеруются справа налево целыми числами, начиная с ноля. Максимальная емкость памяти, реализуемой запоминающим устройством, равна 65 536 байт. Программно-доступные восьмиразрядные регистры используются для ввода и вывода. Максимальное число регистров для ввода данных составляет 256, для вывода данных — столько же. Команды микропроцессора используют только те элементы данных, обработка которых осуществляется непосредственно микропроцессором, т. е. восьми- и шестнадцатибитовые. Восьмибитовые данные — это восемь бит (один байт), которые хранятся в РОН или ячейке памяти и обрабатываются микропроцессором как одно целое. Шестнадцатибитовые данные — это 16 бит (два байта) данных, которые могут храниться в шестнадцатиразрядном регистре или в двух последовательных ячейках памяти и обрабатываются микропроцессором как одно целое, причем в памяти старшие восемь бит записываются по адресу на единицу большему, чем адрес младших. При адресации шестнадцатибитовых данных указывается адрес младшей ячейки памяти, содержащей эти данные. Операнды команд могут храниться в программно-доступных регистрах микропроцессора или в памяти МПС. Для указания операнда в регистре используются: регистровая адресация и регистровая неявная адресация. При регистровой адресации в коде команды существует поле для указания регистра, содержащего операнд. При регистровой неявнойадресации специального поля в коде команды нет. Для указания операнда в памяти используются адресации: непосредственная, прямая, косвенная и стековая. При непосредственной адресации операнд задается в команде. При прямой адресации в команде указывается адрес операнда. При косвенной регистровой адресации адрес операнда указывается в регистровой паре или для команды XTHL — в регистре указателя стека. 1.3. Команды микропроцессора КР580ВМ80 Команды микропроцессора делятся на группы: команды пересылки и загрузки данных, команды обмена данными, арифметические команды, команды поразрядной обработки данных, команды передачи управления, команды управления микропроцессором. Команды могут быть длиной один, два или три байта. При описании команд (ниже) байты разделены штрихами. Команды пересылки и загрузки данных: - MOV R1,R2 – пересылка из регистра в регистр; - LDAX B(D) – пересылка из ячейки памяти, адрес которой записан в регистровой паре ВС (DE), в аккумулятор; - STAX В(D) – пересылка из аккумулятора в ячейку памяти, адрес которой записан в регистровой паре BC (DE); - LDA_B2_B3 – пересылка из ячейки памяти, адрес которой записан во втором и третьем байтах команды, в аккумулятор; - STA_B2_B3 – пересылка из аккумулятора в ячейку памяти, адрес которой указан во втором и третьем байтах команды; - SPHL – пересылка данных из регистровой пары HL в указатель стека; - PCHL – пересылка данных из регистровой пары HL в счетчик команд; - LHLD_B2_B3 – пересылка данных из ячеек памяти с адресами, записанным во втором и третьем байтах команды и на единицу большем, в регистровую пару HL; - SHLD_B2_B3 – пересылка данных из регистровой пары HL в ячейки памяти с адресами, записанными во втором и третьем байтах команды и на единицу большем; - MVI R_B2 – загрузка второго байта команды в регистр R; - LXI B (D,H)_B2_B3 – загрузка второго и третьего байтов команды в регистровую пару BС (DЕ,HL). Команды обмена данными: - XCHG – обмен данными между парами регистров HL и DE; - XTHL – обмен данными между парой регистров HL и вершиной стека (L)¬®[УC], (H)¬®[УC+1]. Группа арифметических команд. Команды сложения : - ADD R – сложение содержимого аккумулятора с содержимым регистра R (A) ¬ (A) + (R); - ADI_B2 – сложение содержимого аккумулятора со вторым байтом команды (A) ¬ (A) + B2; - ADC R – сложение содержимого аккумулятора с содержимым регистра R и признаком (С) (А)¬ (A) + (R) + (С); - ACI_B2 – сложение содержимого аккумулятора со вторым байтом команды и признаком (С) (A) ¬ (A) + B2 +(С); - DAD B (D, H, SP) – сложение содержимого пары регистров HL с содержимым пары регистров BC (DE или HL или указателем стека) и запись результата в пару HL. Команды вычитания : - SUB R – вычитание из содержимого аккумулятора содержимого регистра R (A) ¬ (A) – (R); - SUI_B2 – вычитание из содержимого аккумулятора второго байта команды (A) ¬ (A) – B2; - SBB R – вычитание из содержимого аккумулятора содержимого регистра R и признака (С) (А)¬ (A) – (R) – (С); - SBI_B2 – вычитание из содержимого аккумулятора второго байта команды и признака (С) (A) ¬ (A) – B2 – (С). Операции инкремента и декремента: - INRR – увеличение содержимого регистра на 1 (R) +1 ® (R); - INX B (D, H, SP) – увеличение содержимого пары регистров BC (DE), (HL), (SP) на 1 ; - DCR R – уменьшение содержимого регистра R на 1 (R) -1 ® (R); - DCX B ( D, H, SP) – уменьшение содержимого пары регистров BC (DE), (HL), (SP) на 1 . Группа команд поразрядной обработки данных. Логические команды : - ANA R – операция “И” между содержимым аккумулятора и содержимым регистра (A) ¬ (A) L (R); - ANI_B2 – операция “И” между содержимым аккумулятора и вторым байтом команды (A) ¬ (A) L B2; - ORA R – операция “ИЛИ” между содержимым аккумулятора и содержимым регистра R (A) ¬ (A) V (R); - ORI_B2 – операция “ИЛИ” между содержимым аккумулятора и вторым байтом команды (A) ¬ (A) V B2; - XRA R – операция “ИЛИ-НЕ” между содержимым аккумулятора и содержимым регистра R (A) ¬ (A) " (R); - XRI_B2 – операция “ИЛИ-НЕ” между содержимым аккумулятора и вторым байтом команды (A) ¬ (A) " B2. Команды сравнения: - CMP R – операция (A) – (R); если (A) = (R), то Z = 1; если (А) <(R), то С=1; - CPI_B2 – операция (А) – B2; если (A) = B2, то Z = 1; если (A)< B2, то С=1. Команды сдвига: - RLC – сдвиг влево (каждый бит сдвигается на один разряд влево, а 7 бит переносится в 0 и одновременно записывается в признак (С)) Dm®Dm+1, D7®D0, D7®C; - RRC – сдвиг вправо (каждый бит сдвигается на один разряд вправо, а 0 бит переносится в 7 и одновременно записывается в признак (С)) Dm+1®Dm, D0® D7, D0®C; - RAL – сдвиг влево через перенос (каждый бит сдвигается на один разряд влево, 7 бит записывается в признак (С), а бит из (С) записывается в 0 бит) Dm®Dm+1, D7®C, C®D0; - RAR – сдвиг вправо через перенос (каждый бит сдвигается на один разряд вправо, 0 бит записывается в признак (С), а бит из (С) записывается в 7 бит) Dm+1®Dm, D0®C, C®D7. Команда инверсии содержимого аккумулятора - СМА (А) ¬ (Ā). Команды безусловного перехода: - JMP_ В2_ В3 – записать информацию из второго и третьего байта команды в счетчик команд; - PCHL – записать содержимое пары регистров HL в счетчик команд. Команды условного перехода:
Команда безусловного вызова подпрограммы : - CALL_В2_ В3 – вызов подпрограммы с начальным адресом, записанным во втором и третьем байтах команды. Команды условного вызова подпрограммы:
Команда безусловного возврата из подпрограммы – RET. Команды условного возврата из подпрограмм:
Команды операций со стеком: - PUSH B(D,H) – запись содержимого регистровой пары BC (DE,HL) в стек (B,D,H) ®[ УС-1 ], (C,E,L) ®[ УС-2 ], (УС)=(УС)-2; - PUSH PSW – запись слова состояния в стек (A) ®[УС-1], (F) ®[ УС-2 ], (УС)=(УС)-2; - POP B(D,H) – запись из стека в регистровую пару BC(DE,HL) [УС] ® (C,E,L), [УС+1] ®(B,D,H), (УС)=(УС)+2; - POP PSW – запись слова состояния из стека [УС] ® (F), [УС+1] ®( A), (УС)=(УС)+2. Команды управления микропроцессором: - CMC – инверсия признака (С) (С) ® (С); - STC – запись 1 в признак (С) 1 ® (С); - EI – разрешение прерываний; - DI – запрет прерываний; - NOP – команда «нет операции»; - НLТ – останов. Ввод-вывод через порты МПС осуществляется специальными командами микропроцессора: IN ADDR и OUT ADDR, где ADDR — адрес внешнего устройства. Так как адрес внешнего устройства указывается в одном байте, то микропроцессор может обмениваться информацией не более чем с 256 внешними устройствами. Число различных команд микропроцессора составляет 78, и для них зарезервировано 78 имен команд, перечисленных выше. Многие базовые команды из числа 78 порождают несколько различных кодов операций, поэтому общее число кодов команд составляет 244 (см. табл. 1). Время выполнения команды, оцениваемое числом тактов микропроцессора, составляет 4 – 18 тактов. Для подавляющего числа команд время выполнения команды (число тактов) есть величина постоянная, однако существуют команды, для которых это время может меняться. Такими командами являются команды условного вызова и возврата из подпрограмм. Время выполнения команды зависит от того, выполняется условие или нет. Если условие выполняется, время выполнения команды увеличивается. Программирование на Ассемблере можно осуществить, используя таблицу , приведенную в Приложении 2 . В этой таблице приведены команды по группам. Приведены мнемокод (см. также таблицу 1), двоичный код команды или двоичный код содержащий символы источника или приемника данных, число байтов в команде , число тактов, выполняемые действия, характер изменения битов регистра признаков. 2. КРОСС-СРЕДСТВА ОТЛАДКИ 2.1. Формат ассемблерной строки Разработка и отладка микропроцессорных программ ведется с помощью различных отладочных средств: от оценочных учебных модулей до универсальных аппаратно-программных комплексов. Последнее время фирмами разработчиками МП поставляются аппаратно-программные комплексы, сопрягаемые с персональными компьютерами. Они содержат ряд программ и плату с МП, подключаемую к последовательному или параллельному порту ЭВМ (встречаются оба варианта). При этом реализуются следующие возможности: - ассемблирование исходного файла; - моделирование на программном уровне (симуляция) исходного файла; - моделирование на аппаратном уровне (эмуляция) исходного файла. В лабораторном практикуме плата с МП отсутствует, поэтому обучение проводится на программном уровне. Исходный файл прикладной программы пишется в любом текстовом редакторе и ему присваивается расширение .asm. Запись программы на Ассемблере требует соблюдения определенных правил. Программа пишется в виде последовательности команд. Каждая команда записывается в одной строке и имеет четыре поля: |