[257]Лабораторные_МС_68HC11 (1086954), страница 4
Текст из файла (страница 4)
ВADDA (opr), ADDB (opr)командах ADC к результату дополнительно прибавляется значение флага переноса. Результат сложения аккумуляторов коS X H I N Z V Cмандой ABA заносится в регистр A, результат сложения ре- - ? - ? ? ? ?гистра B с индексным регистром - в соответствующий индексный регистр.ADDD (opr), SUBD (opr),При выполнении команд вычитания происходит вычитаSBA,ние из регистра-приемника второго операнда (в случае SBASBCA (opr), SBCB (opr),происходит вычитание регистра B из регистра A). КомандыSUBA (opr), SUBB (opr)SBC дополнительно вычитают из регистра-приемника значение флага переноса.S X H I N Z V CКоманды, учитывающие флаг переноса, как правило, ис- - - - ? ? ? ?пользуются при операциях над многобайтными числами. Нижеприводится пример сложения и вычитания двух 3-х байтныхABX, ABYчисел, расположенных в ячейках $0Þ$2 и $3Þ$5 соответственно.В одной из последующих лабораторных работ мы рассмотS X H I N Z V Cрим подобный пример, реализованный с помощью цикла.- - - - - - - cpuorgldxldd6811$c800#010,x; сложение младших 2 байтАрифметические команды.15Лабораторная работа №3adddstddexldaaadcastaaldxldaaldabsbadexldaasbcastaadexldaasbcastaa3,x0,x; переход к 3-му байту0,x3,x0,x#$20,x3,x; сложение с учетом переноса; записываем результат; вычитание с использованием SBA; переход к следующему байту0,x3,x0,x; переход к последнему байту0,x3,x0,x; результат получен, записываем; последний байтДвоично-десятичная коррекция после сложения команDAAдами ABA, ADDA и ADCA обеспечивает суммирование двухчисел, представленных в двоично-десятичном формате.
ПриS X H I N Z V Cэтом флаг переноса используется в качестве старшего бита,- - - - ? ? ?* ?обеспечивая получение корректного двоично-десятичного зна*-значение не определеночения.Фактически, команда DAA после команд сложения действует следующим образом:1. если содержимое младшей тетрады аккумулятора больше 9 или флаг полупереноса H установлен в “1”, то к аккумулятору добавляется число 6;2.
если содержимое старшей тетрады аккумулятора стало после этого более 9 или установленфлаг переноса, то число 6 добавляется и к старшей тетраде аккумулятора.cpu6811org$c800ldaa #$99; 99 в двоично-десятичном кодеldab #$20aba; результат равен B9daa; коррекция до двоично-десятичного; значения: C = 1, A = $19tabldaa #0; использование clra не допустимо,; т.к. будет сброшен флаг переносаadca #0; D = $0119Команда умножения производит беззнаковое умножениеMULдвух чисел, представленных в восьмиразрядных аккумуляторов.Результат помещается в 16-разрядный аккумулятор D.
ФлагS X H I N Z V Cпереноса при этом устанавливается таким образом, что при- - - - - - - ?выполнении команды ADCA #0 происходит округление старшего байта.cpu6811org$c800ldaa #$10ldab #$68mul; $10 * $68 = $0680Арифметические команды.16adca#0IDIVS X H I- - - -N Z V C- ? 0 ?FDIVS X H I- - - -N Z V C- ? ? ?cpuorglddldxidivfdivЛабораторная работа №3; A = $7Команда IDIV производит целочисленное деление аккумулятора D на индексный регистр X. После выполнения в регистр X заносится частное, а в регистр D - остаток от деления.При выполнении команды IDIV делимое обычно больше делителя.
Команда FDIV производит операцию дробного делениятех же аргументов. Фактически FDIV может быть представленкак умножение регистра D на 216 с последующим выполнениемкоманды IDIV, поэтому при выполнении этой команды делитель обычно больше делимого. Эти две команды очень редкоиспользуются на практике.6811$c800#1020#512;;;;DXDD====1020 ($3fc)512 ($200)1 ($1), X = 508 ($1fc)129 ($81), X = 4 ($4)Арифметические команды.17Лабораторная работа №33. Контрольные вопросы1.
Какие команды сложения Вы знаете?2. Какие методы адресации используют команды ABA, ADDA, ABY?3. Какие команды вычитания Вам известны?4. Каким образом используется бит переноса в операции вычитания?5. Над какими операндами могут выполняться команды INC, DEC?6. Объясните отличие в выполнении команд ADD и ADC.7. Где располагаются результаты команды FDIV и что они собой представляют?8. Что может служить операндом команды ADCA?9.
Какой флаг устанавливается, если результат операции сложения превышает $FF?10.Объясните, по какому принципу устанавливаются флаги переноса, нуля и переполнения врегистре статуса CCR при выполнении арифметических команд сложения и вычитания.11.Объясните логику работы команд сложения/вычитания с учетом переноса/заема при обработке многобайтовых чисел.12.Объясните логику работы команды DAA.13.Чем отличаются команды FDIV и IDIV?4. Задания1. Напишите программу суммирования двух 16-разрядных чисел, представленных в BCDформате.2. Напишите программу суммирования регистров МК по следующей формулеD=A+B+lo(X)+hi(X)+lo(Y)+hi(Y), где lo и hi соответственно младший и старший байтысоответствующих регистров.3.
Напишите программу вычитания содержимого регистров X и Y из регистра D.4. Напишите программу сравнения ячеек памяти $0 и $1. Регистр A должен быть равен единице, если ячейки памяти равны.5. Вычислите произведение двух ячеек памяти. Содержимое всех регистров должно остатьсянеизменным.6. Напишите программу, позволяющую вычислить адрес элемента двухмерного массива размерностью 6(6, расположенного по адресу $c900. Индекс задается регистрами A и B.7. Напишите программу, которая преобразует число, заданное в регистре А, в восьмеричноепредставление этого числа в ASCII коде.8. Напишите программу, которая преобразует число, заданное в регистре А, в десятичноепредставление этого числа в ASCII коде.9.
Просуммируйте содержимое двух ячеек памяти. Содержимое всех регистров должноостаться неизменным.10.Вычислите разность содержимого регистров X и Y.11.Вычислите произведение регистров X и Y.12.Используя только команды TAB, SUBA, STAB, LDAB, DECA и XGDX занесите в регистрA значение $FF.13.Вычислите частное от деления содержимого индексного регистра X на содержимое индексного регистра Y. При этом все остальные регистры необходимо сохранить в начальных условиях.14.Напишите программу сравнения 16-разрядных чисел, расположенных в ячейках памяти$0 и $2.
Регистр A должен быть равен нулю, если ячейки памяти не равны.Арифметические команды.18Лабораторная работа №4Лабораторная работа №4Логические команды. Команды работы с битовыми полями.Команды сдвигов.1. ВведениеВ данной лабораторной работе будут приведены эксперименты, предназначенные дляизучения работы логических команд (операции НЕ, И, ИЛИ, исключающее ИЛИ), командработы с битовыми полями (установка и сброс битов) и команд сдвигов (арифметический,логический и циклический сдвиги).2. Логические командыЛогические команды включают в себя действия булевой алгебры над аккумуляторомили, в случае команды COM, над ячейкой памяти, заданной при помощи расширенной илиТаблица 4.1.
Логические команды.COMAANDABITAORAAEORACOMBANDBBITBORABEORBCOMиндексной адресации. Команды BITA и BITB по принципу работы схожи с командамиANDA и ANDB, но не изменяют содержимого аккумулятораCOMA, COMB,(ср. CMPA и SUBA).COM (opr)Обычно логические команды используются для выборочнойустановки,обнуления, дополнения и тестирования битов,S X H I N Z V Cчто часто используется при работе с периферийными уст- - - - ? ? 0 1ройствами. Следующий пример показывает каким образомможно перенести содержимое старшего и младшего битов порANDA (opr), ANDB (opr),та С (крайних переключателей) в старший и младший битыBITA (opr), BITB (opr),порта B (крайних светодиодов). При этом младший бит порта СORAA (opr), ORAB (opr),переносится с инверсией.
(Программа написана таким обраEORA (opr), EORB (opr)зом, чтобы задействовать максимальное число логических команд и не оптимизирована на скорость выполнения).S X H I N Z V C- - - - ? ? 0 cpuorgldaaldabandboraa6811$c800$1f03$1f04#%01111110#%01111110comaeora#%10000000abastaa$1f04;;;;;;;;;;;;;;считать состояние переключателейсчитать состояние светодиодоввыделить неизменную частьустановить все неиспользуемые битыв “1”инвертировать значение аккумулятораинвертировать значение старшегобитасовместить результат (заметьте, чтомы заблаговременно маскировалинеиспользуемые биты, чтобы сейчассовместить два числа простымсуммированием)высветить результат на светодиодахЛогические команды.
Команды работы с битовыми полями. Команды сдвигов.19Лабораторная работа №43. Команды работы с битовыми полямиКоманды работы с битовыми полями позволяют изменять указанные биты приемника(ячейки памяти или регистра статуса CCR), оставляя незадействованные биты нетронутыми.Список команд приведен в таблице 4.2.Таблица 4.2. Команды работы с битовыми полями.SECSEISEVBSET*CLCCLICLVBCLR*Примечания:*- Команды, использующие прямую или индексную адресацию в качестве первого параметра и непосредственную - в качестве второго.Команды, представленные в первых трех столбцах таблицы, устанавливают (SE?) илисбрасывают (CL?) отдельные флаги в регистре статуса, на которые указывает третья буква вмнемонике команды (C - флаг переноса, I - маскирование прерываний, V - флаг переполнения).