КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Описание машинных команд
ACALL <addr 11> - абсолютный вызов подпрограммы. Описание: вызывает подпрограмму, размещенную по указанному адресу <addr 11>. Команда увеличивает содержимое счетчика команд на 2 и затем помещает полученный результат в стек (младший байт первым). После это содержимое указателя стека SP увеличивается на 2. Т.к. в команде используется 11-разрядный адрес, полученный соединением пяти старших бит счетчика команд и второго байта команды, то подпрограмма должна начинаться в пределах той же 2K-байтной страницы. Команда не воздействует на флаги. Количество байт: 2 a10 a9 a8 1 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0 Пример: адрес команда исходный текст 1000 7111 ACALL 311h Действие команды: до команды после команды PC=1000 PC=0311 *SP=35 *SP=1002 ADD A, <байт-источник> - сложение. Описание: складывает содержимое аккумулятора А с содержимым байта- источника. Результат операции помещается в аккумулятор. Флаг переноса C устанавливается при переносе из 7 го разряда. Флаг вспомогательного переноса AC устанавливается при переносе из 3 го разряда. При сложении знаковых чисел флаг переполнения OV устанавливается при превышении максимального положительного числа или при получении числа меньшего минимально возможного. Для команды сложения разрешены следующие режимы адресации: 1) Первый операнд - неявная, второй операнд - регистровая; Количество байт: 1 0 0 1 0 1 r r r Пример: адрес команда исходный текст 0000 2F ADD A, R7 Действие команды: до команды после команды PC=0000 PC=0001 A=35 A=7A R7=46 R7=46 C=0 C=0 2) Первый операнд - неявная, второй операнд - косвенно-регистровая; Количество байт: 1 0 0 1 0 0 1 1 i Пример: адрес команда исходный текст 0010 26 ADD A, @R0 Действие команды: до команды после команды PC=0010 PC=0011 R0=15 R0=15 A=95 A=16 *15=81 *15=81 C=0 C=1 3) Первый операнд - неявная, второй операнд - прямая; Количество байт: 2 0 0 1 0 0 1 0 1 d d d d d d d d Пример: адрес команда исходный текст 0012 2564 ADD A, 100 Действие команды: до команды после команды PC=0012 PC=0014 A=95 A=96 *100=01 *100=81 C=1 C=0 4) Первый операнд - неявная, второй операнд - непосредственная. Пример: ADD A, #38h Количество байт: 2 0 0 1 0 0 1 0 0 i i i i i i i i Пример: адрес команда исходный текст 0014 2564 ADD A, #38h Действие команды: до команды после команды PC=0014 PC=0016 A=95 A=CD C=1 C=0 ADDC A, <байт-источник> - сложение с учетом переноса. Описание: складывает содержимое аккумулятора А с содержимым байта-источника, к получившемуся результату прибавляется значение флага переноса. Результат операции помещается в аккумулятор. Флаг переноса C устанавливается при переносе из 7 го разряда. Флаг вспомогательного переноса AC устанавливается при переносе из 3 го разряда. При сложении знаковых чисел флаг переполнения OV устанавливается при превышении максимального положительного числа или при получении числа меньшего минимально возможного. Для команды сложения разрешены следующие режимы адресации байта - источника:
Пример: ADDC A, R3 Количество байт: 1 Количество циклов: 1 Действие команды: (PC) = (PC) + 1 (A) = (A) + (C) + (Rn), n=0,:,7 Машинный код: 0 0 1 1 1 r r r
Пример: ADDC A, @R0 Количество байт: 1 Количество циклов: 1 Действие команды: (PC) = (PC) + 1 (A) = (A) + (C) + ((Ri)), i=0,1 Машинный код: 0 0 1 1 0 1 1 i
Пример: ADDC A, 30h Количество байт: 2 Количество циклов: 1 Действие команды: (PC) = (PC) + 2 (A) = (A) + (C) + (direct) Машинный код: 0 0 1 1 0 1 0 1 d d d d d d d d
Пример: ADDC A, #100 Количество байт: 2 Количество циклов: 1 Действие команды: (PC) = (PC) + 2 (A) = (A) + (C) + (date 8) Машинный код: 0 0 1 1 0 1 0 0 i i i i i i i i AJMP <addr 11> - абсолютный переход в пределах 2K-байтной страницы. Описание: передает управление команде, размещенной по указанному адресу <addr 11>. Команда увеличивает содержимое счетчика команд на 2 и затем заменяет младший байт счетчика команд на содержимое второго байта команды. Три младших бита старшего байта заменяются тремя старшими битами первого байта команды. Т.к. в команде используется 11- разрядный адрес, то адрес перехода должен начинаться в пределах той же 2K-байтной страницы памяти программ. Пример: AJMP 1024 Количество байт: 2 Количество циклов: 2 Действие команды: (PC) = (PC) + 2 (PC10-0) = адрес метки Машинный код: a10 a9 a8 0 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0 ANL <байт приемник>,<байт источник> - команда "логическое И" для байтовых переменных. Описание: выполняет операцию побитового "логического И" над указанными переменными и помещает результат в байт приемник. Команда не воздействует на флаги. Для команды ANL с аккумулятором в качестве байта назначения разрешены следующие режимы адресации байта - источника:
Пример: ANL A, R3 Количество байт: 1 Количество циклов: 1 Действие команды: (PC) = (PC) + 1 (A) = (A) & (Rn), n=0,1,2,3,4,5,6,7 Машинный код: 0 1 0 1 1 r r r
Пример: ANL A, @R0 Количество байт: 1 Количество циклов: 1 Действие команды: (PC) = (PC) + 1 (A) = (A) & ((Ri)), i=0,1 Машинный код: 0 1 0 1 0 1 1 i
Пример: ANL A, 30h Количество байт: 2 Количество циклов: 1 Действие команды: (PC) = (PC) + 2 (A) = (A) & (direct) Машинный код: 0 1 0 1 0 1 0 1 d d d d d d d d
Пример: ANL A, #100 Количество байт: 2 Количество циклов: 1 Действие команды: (PC) = (PC) + 2 (A) = (A) & (date 8) Машинный код: 0 1 0 1 0 1 0 0 i i i i i i i i Для команды ANL с произвольным адресом ячейки внутренней памяти данных в качестве байта назначения разрешены следующие режимы адресации байта - источника:
Пример: ANL 30h,A Количество байт: 2 Количество циклов: 1 Действие команды: (PC) = (PC) + 2 (direct) = (A) & (direct) Машинный код: 0 1 0 1 0 0 1 0 d d d d d d d d
Пример: ANL direct, #100 Количество байт: 3 Количество циклов: 2 Действие команды: (PC) = (PC) + 3 (direct) = (A) & (date 8) Машинный код: 0 1 0 1 0 0 1 1 d d d d d d d d i i i i i i i i Примечание: при выполнении команды ANL над содержимым внешнего порта используется значение из внутреннего регистра, а не данные, присутствующие на выводах микросхемы! ANL C,<бит источника> - "логическое И" битовой переменной и флага переноса C. Описание: Если бит источника равен 0, то происходит сброс флага переноса, в противном случае флаг переноса не изменяет текущего значения. На остальные флаги команда не воздействует.
Пример: ANL С, 20h Количество байт: 2 Количество циклов: 2 Действие команды: (PC) = (PC) + 2 (C) = (C) & (bit) Машинный код: 0 1 0 1 0 0 1 0 b b b b b b b b Знак '/' перед операндом в языке ассемблера указывает на то, что в качестве значения используется логическое отрицание адресуемого бита, при этом сам бит источника не изменяется. CJNE <байт назначения>,<байт источника>,<смещение> - сравнение и переход, если не равно. Описание: сравнивает значения первых двух операндов и выполняет переход, если операнды не равны. Если значение байта назначения без учета знака меньше байта источника без учета знака, то флаг переноса C устанавливается в '1', иначе сбрасывается в '0'. Ни один из операндов после выполнения команды не изменяется. Новое значение программного счетчика при переходе вычисляется суммирование содержимого программного счетчика со вторым операндом (третьим байтом команды). Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака третьего байта команды, представленного в дополнительном коде. Первые два операнда допускают четыре вида адресации:
· прямая; Пример: CJNE A, 30h, 15; direct=30h, rel=15 Количество байт: 3 Количество циклов: 2 Действие команды: (PC) = (PC) + 3 IF (A) < > (direct) THEN (PC) = (PC) + rel IF (A) < (direct) THEN (C) = 1 ELSE (C) = 0 Машинный код: 1 0 1 1 0 1 0 1 d d d d d d d d R e l A d r e s · непосредственная. Пример: CJNE A, #100, -78; data=100, rel=-78 Количество байт: 3 Количество циклов: 2 Действие команды: (PC) = (PC) + 3 IF (A) < > data THEN (PC) = (PC) + rel IF (A) < data THEN (C) = 1 ELSE (C) = 0 Машинный код: 1 0 1 1 0 1 0 0 i i i i i i i i R e l A d r e s
· непосредственная к регистровой Пример: CJNE R5, #100, 78; Rn=R5 data=100, rel=78 Количество байт: 3 Количество циклов: 2 Действие команды: (PC) = (PC) + 3 IF (Rn) < > data THEN (PC) = (PC) + rel IF (Rn) < data THEN (C) = 1 ELSE (C) = 0 Машинный код: 1 0 1 1 1 r r r i i i i i i i i R e l A d r e s · непосредственная к косвенно - регистровой Пример: CJNE @R0, #100, 78; Ri=R0 data=100, rel=78 Количество байт: 3 Количество циклов: 2 Действие команды: (PC) = (PC) + 3 IF ((Ri)) < > data, i=0,1 THEN (PC) = (PC) + rel IF ((Ri)) < data, i=0,1 THEN (C) = 1 ELSE (C) = 0 Машинный код: 1 0 1 1 0 1 1 i i i i i i i i i R e l A d r e s CLR A - сброс аккумулятора Описание: сбрасывает (записывает '0' во все биты аккумулятора). Команда не изменяет содержимое флагов. Пример: CLR A;Записывает в аккумулятор число 00h Количество байт: 1 Количество циклов: 1 Действие команды: (PC) = (PC) + 1 (A) = 0 Машинный код: 1 1 1 0 0 1 0 0 CLR <bit> - сбрасывает указанный бит в нуль. Описание: сбрасывает (записывает '0') в указанный во втором байте команды бит. Команда не изменяет содержимое флагов. Пример: CLR C;Записывает во флаг переноса '0' Количество байт: 1 Количество циклов: 1 Действие команды: (PC) = (PC) + 1 (C) = 0 Машинный код: 1 1 0 0 0 0 1 1
Пример: CLR P1.2;Записывает во второй бит порта 1 '0' Количество байт: 2 Количество циклов: 1 Действие команды: (PC) = (PC) + 2 (bit) = 0 Машинный код: 1 1 0 0 0 0 1 0 b b b b b b b b CPL A - каждый бит аккумулятора инвертируется. Описание: каждый бит аккумулятора инвертируется, т.е. если в каком-либо из восьми бит аккумулятора записана '1', то в этот бит записывается '0' и наоборот. Пример: CPL A Количество байт: 1 Количество циклов: 1 Действие команды: (PC) = (PC) + 1 (A) = not(A) Машинный код: 1 1 1 1 0 1 0 0 CPL <bit> - инвертируется указанный бит. Описание: бит адрес, которого указан во втором байте команды инвертируется, т.е. если бит содержит '1', то в этот бит записывается '0' и наоборот.
Пример: CPL 27 Количество байт: 2 Количество циклов: 1 Действие команды: (PC) = (PC) + 1 (bit) = not(bit) Машинный код: 1 0 1 1 0 0 1 0 b b b b b b b b CPL C - инвертируется флаг переноса 'C'. Описание: флаг переноса 'C' инвертируется, т.е. если флаг переноса 'C' содержит '1', то в него записывается '0' и наоборот. Пример: CPL C Количество байт: 1 Количество циклов: 1 Действие команды: (PC) = (PC) + 1 (C) = not(C) Машинный код: 1 0 1 1 0 0 1 1 DA A - десятичная коррекция аккумулятора при сложении двоично-десятичных чисел. Описание: команда десятичной коррекции позволяет вести сложение чисел, представленных в упакованном двоично-десятичном коде. Команда применяется после инструкций ADD или ADDC. Инструкции (команды) ADD или ADDC позволяют суммировать сразу две тетрады, расположенные в одном байте. Если биты аккумулятора с 0 по 3 содержат число большее 9 (xxxx1010:xxxx1111) или флаг вспомогательного переноса AC содержит '1', то к аккумулятору прибавляется число 6 для того, чтобы получить правильную двоично-десятичную цифру в младшей тетраде. Если старшие биты аккумулятора (с 4 по 7) содержат число большее 9 (1010xxxx:1111xxxx) или флаг переноса C содержит '1', то к аккумулятору прибавляется число 60h для того, чтобы получить правильную двоично-десятичную цифру в старшей тетраде. Если в результате операции DA A возникнет перенос, то флаг переноса C будет установлен в 1. Единичный флаг переноса после операции DA A означает, что результат суммирования больше 100 и этим можно воспользоваться для суммирования многоразрядных двоично-десятичных чисел. Команда десятичной коррекции не воздействует на флаг переполнения OV. Примечание: команда DA A не может преобразовать двоичное число из аккумулятора в двоично-десятичный вид или правильно скорректировать двоично-десятичное вычитание. Пример: DA A Количество байт: 1 Количество циклов: 1 Действие команды: (PC) = (PC) + 1 IF [[(A3-0) > 9] or [(AC) = 1]] THEN (A3-0) = (A3-0) + 6 AND IF [[(A7-4) > 9] or [(C) = 1]] THEN (A7-4) = (A7-4) + 6 Машинный код: 1 1 0 1 0 1 0 0 DEC <байт> - производит вычитание 1 из указанного операнда. Описание: ячейка памяти адрес, которой указан во втором байте команды уменьшается на 1. Если первоначально в ячейке было записано значение 00h, то в нее заносится значение 0FFh. Команда не воздействует на флаги. Примечание: при выполнении команды DEC над содержимым внешнего порта используется значение из внутреннего регистра, а не данные, присутствующие на выводах микросхемы! Для команды DEC разрешены следующие режимы адресации байта - источника:
Пример: DEC A Количество байт: 1 Количество циклов: 1 Действие команды: (PC) = (PC) + 1 (A) = (A) - 1 Машинный код: 0 0 0 1 0 1 0 0
Пример: DEC R3 Количество байт: 1 Количество циклов: 1 Действие команды: (PC) = (PC) + 1 (Rn) = (Rn) - 1, n=0,1,2,3,4,5,6,7 Машинный код: 0 0 0 1 1 r r r
Пример: DEC @R0 Количество байт: 1 Количество циклов: 1 Действие команды: (PC) = (PC) + 1 ((Ri)) = ((Ri)) - 1, i=0,1 Машинный код: 0 0 0 1 0 1 1 i
Пример: DEC 30h Количество байт: 2 Количество циклов: 1 Действие команды: (PC) = (PC) + 2 (direct) = (direct) - 1 Машинный код: 0 0 0 1 0 1 0 1 d d d d d d d d DIV AB - деление. Описание: делит 8-битовое беззнаковое целое число из аккумулятора А на 8-битовое целое без знака в регистре В. В аккумулятор A заносится целая часть результата деления, а в регистр В - остаток. Флаги переноса C и переполнения OV будут очищены (записан '0'). Если в регистре B перед операцией деления содержится '0', то в аккумуляторы A и B будут занесены неопределенные значения, а флаг переполнения будет установлен (записана '1'). Количество байт: 1 Количество циклов: 4 Действие команды: (PC) = (PC) + 1 (A) = (A) div (B) (A) = (A) mod (B) Машинный код: 0 1 0 0 0 1 0 0 DJNZ <байт>,<смещение> - вычитание 1 из указанной ячейки и переход, если результат не равен 0. Описание: вычитание 1 из указанной во втором байте команды ячейки памяти и переход к вычисляемому по третьему байту команды адресу, если результат вычитания не равен 0. Если первоначально в ячейке памяти содержится '0', то в результате выполнения операции туда будет записано число '0FFH'. Команда не воздействует на флаги. Новое значение программного счетчика при переходе вычисляется суммирование содержимого программного счетчика со вторым операндом (третьим байтом команды). Перед выполнением суммирования в программный счетчик заносится адрес первого байта следующей команды. Суммирование производится с учетом знака третьего байта команды, представленного в дополнительном коде. Примечание: при выполнении команды DJNZ над содержимым внешнего порта используется значение из внутреннего регистра, а не данные, присутствующие на выводах микросхемы! Для команды DJNZ разрешены следующие режимы адресации байта - источника:
Пример: DJNZ R3,LABEL1; Количество байт: 2 Количество циклов: 2 Действие команды: (PC) = (PC) + 2 (Rn) = (Rn) - 1, n=0,1,2,3,4,5,6,7 IF (Rn) < > 0, THEN n=0,1,2,3,4,5,6,7 (PC) = (PC) + rel Машинный код: 1 1 0 1 1 r r r R e l A d r e s
Пример: DJNZ 30h,LABEL1; Количество байт: 3 Количество циклов: 2 Действие команды: (PC) = (PC) + 3 (direct) = (direct) - 1 IF (direct) < > 0 THEN (PC) = (PC) + rel Машинный код: 1 1 0 1 0 1 0 1 d d d d d d d d R e l A d r e s
Дата добавления: 2014-01-07; Просмотров: 290; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |