Гл3_06 (1031649), страница 11
Текст из файла (страница 11)
Следует отметить, что регистр-указатель данных может быть использован как двухбайтовый регистр DPTR или как два однобайтовых регистра специальногоназначения DPH и DPL. Счетчик команд всегда используется, как двухбайтовый регистр.Синтаксис большинства команд ассемблерного языка МК состоит из мнемонического обозначения функции, вслед за которым идут операнды, указывающие методы адресации и типы данных. Различные типы данных или режимы адресации определяются установленными операндами, а не изменениями мнемонических обозначений. Например,аббревиатура "MOV" (переместить) используется восемнадцатью различными командамидля обработки трех типов данных (битов, байтов, адресов) в различных адресных пространствах.
Всего в ассемблере МК насчитывается 42 различных мнемоники, которые прикомбинации с различными способами адресации и составляют 111 команд.Кратко рассмотрим влияние команд на флаги PSW. Все команды, обновляющие содержимое аккумулятора влияют на бит паритета Р, устанавливающийся в единицу, есличисло единиц в аккумуляторе четно.Флаги переноса С, переполнения OV и дополнительного переноса АС устанавливаются в в командах, приведенных в таблице 3.18.Рябов Владимир Тимофеевич. Кафедра «Электронные технологии в машиностроении»МГТУ им.
Н. Э. Баумана, V_Ryabov@mail.ru132Таблица 3.18. Команды, влияющие на установку флагов PSWКомандаСложение аккумулятора с …ADD A, …Сложение аккумулятора с переносом и… ADDС A, ..Вычитание из аккумулятора заема и …SUBB A, ..Умножение аккумулятора на регистр ВMUL ABДеление аккумулятора на регистр ВDIV ABДесятичная коррекция аккумулятораDA AСдвиг аккумулятора вправо через CRRCСдвиг аккумулятора влево через CRLCУстановить бит переносаSETB СОчистить бит переносаCLR СЛогическое И бита и переносаANL С, bitЛогическое И инверсии бита и переносаANL С, /bitЛогическое ИЛИ бита и переносаORL C, bitЛогическое ИЛИ инверсии бита и переноса ORL C, /bitПересылка бита в перенос MOV C, bitСравнение _, _ и переход, если не равноCJNECXXX00ХХХ10ХХXXXXФлагиOV ACXXXXXXXXПримечания:1.
X - флаг равен 0 или 1.2. Операции над регистром области SFR с адресом байта 208 или с адресами битов 209—215 (т.е. над PSW или битами PSW) также влияют на установку флагов.Все команды удобно поделить на пять групп:1) арифметические команды;2) логические команды с байтовыми переменными;3) команды пересылки данных;4) команды работы с битами (команды битового процессора);5) команды ветвления программ и передачи управления.Арифметические команды.
В наборе команд МК есть операции сложения, сложения с учетом флага переноса, вычитания с заемом, инкрементирования, декрементирования, сравнения, десятичной коррекции, умножения и деления. Список арифметическихкоманд приведен в таблице 3.19. В столбце «КОП» приведен код операции. Символами rrrв коде закодирован номер регистра, участвующего в операции. В столбцах «Ц» и «Б» приведено число машинных циклов на выполнение команды и число байт, занимаемых командой в памяти программ.В АЛУ производятся действия над целыми числами без знака. В двуоперандныхоперациях: сложение (ADD), сложение с переносом (ADDC) и вычитание с заемом(SUBB) аккумулятор является первым операндом и принимает результат операции.
Вторым операндом может быть рабочий регистр выбранного банка рабочих регистров, регистр внутренней памяти данных с косвенно-регистровой и прямой адресацией или байтнепосредственных данных. Указанные операции влияют на флаги: переполнения, переноса, промежуточного переноса и флаг четности в слове состояния процессора (PSW).Использование разряда переноса в операциях сложения (ADDC) и вычитания(SUBB)позволяет организовать обработку длинных целых, т.е.повысить точность.Выполнение операций сложения и вычитания с учетом знака может быть осуществлено с помощью программного управления флагом переполнения (0V) регистра PSW.Флаг промежуточного переноса (АС) обеспечивает выполнение арифметических операцийв двоично-десятичном коде.Операции инкрементирования и декрементирования на флаги не влияют.Рябов Владимир Тимофеевич. Кафедра «Электронные технологии в машиностроении»МГТУ им.
Н. Э. Баумана, V_Ryabov@mail.ru133Таблица 3.19. Группа команд арифметических операцийНазвание командыМнемокодКОПЦ Б ОперацияСложение аккумулятора с реADD A, Rn00101rrr 1 2 (A)←(A)+(Rn)гистром (n=0-7)Сложение аккумулятора с пря- ADD A, ad00100101 1 2 (A)←(A)+(ad)мо адресуемым байтомСложение аккумулятора с бай- ADD A, @R1 00100111 1 1 (A)←(A)+((Ri))том из РПДСложение аккумулятора с кон- ADD A, #d00100100 1 2 (A)←(A)+#dстантой.Сложение аккумулятора с реADDC A, Rn00111rrr 1 1 (А)←(А)+(Rn)+(С)гистром и переносомСложение аккумулятора с пря- ADD A, ad00110101 1 2 (A)←(A)+(Rn)+(C)мо адресуемым байтом и переносомСложение аккумулятора с бай- ADDC A, @Ri 00110100 1 1 (A)←(A)+((Ri))+(C)том из РПД и переносом00100111Сложение аккумулятора с кон- ADDC A, #d00110100 1 2 (A)←(A)+#d+(C)стантой и переносомДесятичная коррекция аккуму- DA A11010100 1 1лятораВычитание из аккумулятора ре- SUBB A, Rn10011rrr 1 1 (A)←(A)-(C)-(Rn)гистра и заемаВычитание из аккумулятораSUBB A, Ad10010101 1 1 (A)←(A)-(C)-((ad))прямо адресуемого байта и заемаВычитание из аккумулятораSUBB A, @Ri 10010111 1 1 (A)←(A)-(C)-(Ri)байта РПД и заемаВычитание из аккумулятораSUBB A, #d10010100 1 2 (A)←(A)-(C)-#dконстанты и заемаИнкремент аккумулятораINC A00000100 1 1 (A)←(A)+1Инкремент регистраINC Rn00001rrr 1 1 (Rn)←(Rn)+1Инкремент прямо адресуемого INC ad00000101 1 2 (ad)←(ad)+1байтаИнкремент байта а РПДINC @Ri0000011i 1 1 ((Ri))←((Ri))+1Инкремент указателя данныхINC DPTR10100011 2 1 (DPTR)←(DPTR)+1Декремент аккумулятораDEC A00010100 1 1 (А)←(А)-1Декремент регистраDEC Rn00011rrr 1 1 (Rn)←(Rn)-1Декремент прямо адресуемогоDEC ad00010101 1 2 (ad)←(ad)-1байтаДекремент байта в РПДDEC @Ri0001011i 1 1 ((Ri))←((Ri))-1Умножение аккумулятора наMUL AB10100100 4 1 (B)(A)←(A)х(B)регистр ВДеление аккумулятора на реDIV AB10000100 4 1 (B).(A)←(A)/(B)гистр ВПри операции умножения содержимое аккумулятора А умножается на содержимоерегистра В и результат размещается следующим образом: младший байт в регистре В,старший — в регистре А.В случае выполнения операции деления целое от деления помещается в аккумулятор А, остаток от деления — в регистр В.Рябов Владимир Тимофеевич.
Кафедра «Электронные технологии в машиностроении»МГТУ им. Н. Э. Баумана, V_Ryabov@mail.ru134Логические команды с байтовыми переменными. Система команд МК позволяетреализовать логические операции: "И", "ИЛИ", "ИСКЛЮЧАЮЩЕЕ ИЛИ" на регистреаккумуляторе (А) и байте-источнике. Вторым операндом (байтом-источником) при этомможет быть рабочий регистр в выбранном банке рабочих регистров; регистр внутреннегоОЗУ, адресуемый с помощью косвенно-регистровой адресации; прямо адресуемые ячейкивнутреннего ОЗУ и регистры специального назначения; непосредственная величина.
Список логических команд приведен в таблице 3.20.Существуют логические операции, которые выполняются только на аккумуляторе:сброс и инвертирование всех восьми разрядов А; циклический сдвиг влево и вправо; циклический сдвиг влево и вправо с учетом флага переноса; обмен местами старшей и младшей тетрад (ниблов) внутри аккумулятора.Таблица 3.20. Группа команд логических операцийНазвание командыЛогическое И аккумулятора и регистраЛогическое И аккумулятора и прямо адресуемого байтаЛогическое И аккумулятора и РПДЛогическое И аккумулятора и константы.Логическое ИЛИ аккумулятора ипрямо адресуемого байтаЛогическое ИЛИ аккумулятора ирегистраЛогическое ИЛИ аккумулятора и РПДЛогическое ИЛИ аккумулятора иконстантыЛогическое ИЛИ прямо адресуемого байта и аккумулятораЛогическое ИЛИ прямо адресуемого байта м константыЛогическое ИЛИ прямо адресуемого байта и аккумулятораИсключающее ИЛИ аккумулятораи регистраИсключающее ИЛИ аккумулятораи прямо адресуемого байтаИсключающее ИЛИ аккумулятораи байта РПДИсключающее ИЛИ аккумулятораи константыИсключающее ИЛИ прямо адресуемого байта и аккумулятораИсключающее ИЛИ прямо адресуемого байта и константыСброс аккумулятораИнверсия аккумулятораСдвиг аккумулятора влево через CСдвиг аккумулятора вправо циклическийСдвиг аккумулятора вправо через CОбмен местами тетрад в аккумулятореМнемокодANL A, RnANL A, adКОПO1O11rrr01010101Ц Б Операция1 1 (А)←(А)∩(Rn)1 1 (А)←(А)∩(ad)ANL A, @RiANL A, #dORL A, adO1O11rrr01010111010001011 2 (А)←(А)∩((Ri))1 2 (А)←(А)∩#d1 1 (A)←(A)∪(ad)ORL A, RnO1001rrr1ORL A, @RiORL A, #d01000111010001001 1 (A)←(A) ∪ ((R1))1 2 (A)←(A) ∪ #dORL ad, A010000101 2 (ad)←(ad) ∪ (A)ORL ad, #d010000102ORL ad, A010000101 2 (ad) ←(ad) ∪ (A)XRL A, Rn01101rrr1XRL A, ad011001011 2 (A) ← (A)¤(ad)XRL A, @Ri011001111XRL A, #d011001001 2 (A) ← (A)¤ #dXRL ad, A011000101 2 (ad) ← (ad) ¤ (A)XRL ad, #d0110001123 (ad) ← (ad) ¤ #dCLR ACPL ARLC ARR A1110010011110100001100110000001111111 (A)←01 (A) ← - (A)21RRC ASWAP A00010011110001001 11 11 (A)←(A)∪(Rn)3 (ad)←(ad) ∪ #d1 (A) ← (A)¤(Rn)1 (A) ← (A) ¤ ((R1))Рябов Владимир Тимофеевич.
Кафедра «Электронные технологии в машиностроении»МГТУ им. Н. Э. Баумана, V_Ryabov@mail.ru135Логические команды широко используются в программах при управлении отдельными битами операндов. Без них просто не обойтись, когда команд битового процессора нет илиих невозможно использовать. Например, ключи на объекте управления подключены к регистру, находящемуся в пространстве внешней памяти данных подобно рассмотренному намиранее примеру (см.рис.
3.12) по адресу ADR_reg1. Тогда, чтобы установить в единицу, например, третий бит этого регистра, не изменяя остальных, необходимо выполнить:MOV DPTR, #ADR_reg1;загрузить в регистр указатель данных адрес регистраMOVX A, @DPTR;переслать содержимое регистра в аккумуляторORL A, #00001000В;логическое ИЛИ аккумулятора и константыMOVX @DPTR,A;переслать содержимое аккумулятора в регистр.Чтобы, наоборот, выключить третий бит, нужно сделать:MOV DPTR, #ADR_reg1;загрузить в регистр указатель данных адрес регистраMOVX A, @DPTR;переслать содержимое регистра в аккумуляторANL A, #11110111В;логическое И аккумулятора и константыMOVX @DPTR,A;переслать содержимое аккумулятора в регистр.Подобные приемы называют маскированием, обратите на их использование в программах,изучаемых в лабораторных работах по курсу.Команды пересылки данных.