MCS-51 (1031646), страница 20
Текст из файла (страница 20)
Если- команда используется для работы с портом, величина, используемая в качестве исходных данных порта, считываете» из "защелки" порта, а не свыводов БИС.Команда ORL С.<бит источника)Команда "логическое "ИЛИ" для переменных-битов" устанавливает флаг переносаС, если булева величина равна логической "1", в противном случае устанавливает флаг С в"0". Косая дробь ("/") перед операндом на языке ассемблера указывает на то, что в качестве операнда используется логическое отрицание значения адресуемого бита, но сам битисточника не изменяете? Эта команда на другие флаги не влияет.1)Ассемблер:Код:Время:Алгоритм:Пример:ORL С,<bit>01110010 <bit address>2 циклаАссемблер:Код:Время:Алгоритм:Пример:ORL C,/<bit>10100000 <bit address>2 цикла(С):=(С) OR (bit)ORL C.P1.42);(С)=0, (Р1)=53Н (01010011В);(С)=1, (Р1)=53Н (01010011В)(С):=(С) OR /(bit)ORL С,/2А;(О=0, (03У[25])=39Н (00111001В);(С)=1, (03У[25])=39Н (00111001В)Команда POP <direct>Команда "чтение из стека" считывает содержимое ячейки, которая адресуется с помощью указателя стека, в прямо адресуемую ячейку ОЗУ, при этом указатель стекауменьшается на единицу.Эта команда не воздействует на флаги и часто используется для чтения из стекапромежуточных данных.Ассемблер:Код:Время:Алгоритм:POP <direct>11010000 < direct address>2 цикла(direct):=((SP)),(SP):=(SP)-1;(SP)=32H, (DPH)=01, (DPL)=0ABH,;(ОЗУ(32])=12Н, (03У[31])=56Н,;(ОЗУ[30])=20НПример:POP DPHPOP DPLPOP SP;(SP)=30H, (DPH)=12H, (DPL)=56H,;(ОЗУ[32])=12Н, (03У[31])=56Н;(SP)=20H, (ОЗУ[30])=20НPUSH <direct>Команда "запись в стек" увеличивает указатель стека на единицу и после этого содержимое указанной прямо адресуемой переменной копируется в ячейку внутреннегоОЗУ, адресуемого с помощью указателя стека.
На флаги эта команда не влияет и используется для записи промежуточных данных в стек.Ассемблер:PUSH <direct>92Код:Время:Алгоритм:11000000 < direct address>2 цикла(SP):=(SP)+1,((SP)):=(direct);(SP)=09H, (DPTR)=1279HПример:PUSH DPLPUSH DPH;(SP)=0BH, (DPTR)=127'9H,;(ОЗУ[0А])=79Н, (ОЗУ[0В])=12Н,Команда RETКоманда "возврат из подпрограммы" последовательно- выгружает старший имладший байты счетчика команд из стека, уменьшая указатель стека на 2. Выполнениеосновной программы обычно продолжается по адресу команды, следующей за ACALLили LCALL.
На флаги эта команда не влияет.Ассемблер:Код:Время:Алгоритм:Пример:RET001000102 цикла(PC)[15-8]:=((SP)),(SP):=(SP)-1,(PC)[7-0]:=((SP)),(SP):=(SP)-1;(SP)=0DH, (ОЗУ[0С])=93Н, (ОЗУ[0D])=02Н;(SP)=0BH, (PC)=0293HRETКоманда RETIКоманда "возврат из прерывания" выгружает старший и младший байты счетчикакоманд из стека и устанавливает "логику прерываний", разрешая прием других прерываний с уровнем приоритета, равным уровню приоритета только что обработанного прерывания. Указатель стека уменьшается на 2.
Слово состояния программы (PSW) не восстанавливается автоматически. Выполнение основной программы продолжается с команды,следующей за командой, на которой произошел переход к обнаружению запроса на прерывание. Если при выполнении команды RETI обнаружено прерывание с таким жеили меньшим уровнем приоритета, то одна команда основной программы успевает выполниться до обработки такого прерывания.Ассемблер:Код:Время:Алгоритм:Пример:RETI001100102 цикла(PC)[15-8]:=((SP)),(SP):=(SP)-1,(PC)[7-0]:=((SP)),(SP):=(SP)-1;(SP)=0BH, (ОЗУ[0А])=2АН, (ОЗУ[0B])=03Н;(РС)=YYYYН, где Y=0-FH;(SP)=09H, (PC)=032АНRETIКоманда RL AКоманда "сдвиг содержимого аккумулятора влево", сдвигает восемь бит аккумулятора на один бит влево, бит 7 засылается на место бита 0.
На флаги эта команда не влияет.Ассемблер:Код:Время:Алгоритм:Пример:RL A001000111 цикл(A[N+1]):=(A[N]), где N=0-6(А[0]):=(А[7]);(A)=0D5H (11010101В), (С)=0 ;(А)=0АВН(10101011В), (С)=0RL А93Команда RLC АКоманда "сдвиг содержимого аккумулятора влево через флаг переноса" сдвигаетвосемь бит аккумулятора и флаг переноса влево на один бит. Содержимое флага переносапомещается на место бита 0 аккумулятора, а содержимое бита 7 аккумулятора переписывается в флаг переноса. На другие флаги эта команда не влияет.Ассемблер:Код:Время:Алгоритм:Пример:RLС A001100111 цикл(A[N+1]):=(A[N]), где N=0-6(А[0]):=(С)(С):=(А[7]);(А)=56Н (01010110В), (С)=1;(A)=0ADH (10101101B), (С)=0RLС АКоманда RR АКоманда "сдвиг содержимого аккумулятора вправо" сдвигает вправо на один битвсе восемь бит аккумулятора. Содержимое бита 0 помещается на место бита 7.
На флагиэта команда не влияет.Ассемблер:Код:Время:Алгоритм:Пример:RR A000000111 цикл(A[N]):=(A[N+l]), где N=0-6(А[7]):=(А[0]);(A)=0D6H (11010110B), (С)=1;(А)=6ВН (01101011В), (С)=1RR АКоманда RRC АКоманда "сдвиг содержимого аккумулятора вправо через флаг переноса" сдвигаетвосемь бит аккумулятора и флаг переноса на один бит вправо.
Бит 0 перемещается в флагпереноса, а исходное содержимое флага переноса помещается в бит 7. На другие флаги этакоманда не влияет.Ассемблер:Код:Время:Алгоритм:Пример:RRC A000100111 цикл(A[N]):=(A[N+l]), где N=0-6(A[7]):=(C)(С):=(А[0]);(А)=95Н (10010101В), (С)=0;(А)=4АН (01001010В), (С)=1RRC АКоманда SETB <бит>Команда "установить бит" устанавливает указанный бит в "1".
Адресуется:1) к флагу переноса (С);2) к биту с прямой адресацией.1)2)Ассемблер:Код:Время:Алгоритм:Пример:Ассемблер:Код:Время:Алгоритм:SETB С110100111 цикл(C):=1;(C)=0SETB С;(С)=1SETB (bit)11010010 <bit address>1 цикл(bit):=194;(P2)=38H (00111000B)Пример:SETB P2.0SETB P2 .7;(P2)=B9H (10111001B)Команда SJMP <метка>Команда "короткий переход" выполняет безусловное ветвление в программе поуказанному адресу. Адрес ветвления вычисляется сложением смещения со знаком во втором байте команды с содержимым счетчика команд после прибавления к нему 2.
Такимобразом, адрес перехода должен находиться в диапазоне от 128 байт, предшествующихкоманде, до 127 байт, следующих за ней.Ассемблер:Код:Время:Алгоритм:Пример:SJMP <метка>10000000 <rel8>2 цикла(РС):=(РС)+2,(РС):=(РС)+(rеl8);(РС)=0418Н,SJMP MET1;метка МЕТ1 соответствует адресу 039АН;(РС)=039АН, где (rel8)=80H=-128 DECSJMP MET2;(РС)=041АН, где метка МЕТ2 соответствует;адресу 041АН,;(rel8)=7DH=+125 DECКоманда SUBB А,<байт источника)Команда "вычитание с заемом" вычитает указанную переменную вместе с флагомпереноса из содержимого аккумулятора, засылая результат в аккумулятор. Эта командаустанавливает флаг переноса (заема), если при вычитании для бита 7 необходим заем, впротивном случае флаг переноса сбрасывается. Если флаг переноса установлен перед выполнением этой команды, то это указывает на то, что заем необходим при вычитании сувеличенной точностью на предыдущем шаге, поэтому флаг переноса вычитается из содержимого аккумулятора вместе с операндом источника.
(АС) устанавливается, если заемнеобходим для бита 3 и сбрасывается в противном случае. Флаг переполнения (0V) устанавливается, если заем необходим для бита 6, но его нет для бита 7, или есть для бита 7,но нет для бита 6.При вычитании целых чисел со знаком (0V) указывает на отрицательное число, которое получается при вычитании отрицательной величины из положительной, или положительное число, которое получается при вычитании положительного числа из отрицательного.Операнд источника допускает четыре режима адресации:1) регистровый2) прямой3) косвенно-регистровый4) непосредственный (к константе).1)Ассемблер:Код:Время:Алгоритм:Пример:2)Ассемблер:Код:Время:Алгоритм:SUBB A,Rn ; где п=0-710011rrr где rrr = 000-1111 цикл(A):=(A)-(C)-(Rn);(C):=X, (AC):=X, (OV):=X, где Х=(0 или 1);(А)=С9Н, (R2)=54H, (C)=lSUBB A,R2;(A)=74H, (R2)=54H, (C)=0,;(AC)=0, (OV)=lSUBB A,<direct>10010101 <direct address>1 цикл(A):=(A)-(C)-(direct);953)(C):=X, (AC):=X, (OV):=X, где Х=(0 или 1)Пример:;(А)=97Н, (В)=25Н, (С)=0;(А)=72Н, (В)=25Н,(С)=0, ;(AC)=0, (OV)=lSUBB А,ВАссемблер: SUBB A,@Ri ; где i=0,lКод:Время:Алгоритм:Пример:4)Ассемблер:Код:Время:Алгоритм:Пример:1001011i1 цикл(A):=(A)-(C)((Ri));(C):=X, (AC):=X, (0V):=X, где Х=(0 или 1);(A)=49H, (C)=l, (R0)=33H,SUBB A,@R0 ;(03У[33])=68Н;(A)=E0H, (C)=1,(AC)=0, (OV)=0SUBB A,#data10010100 <data8>1 цикл(A):=(A)-(C)-(#data8);(C):=X, (AC):=X, (0V):=X, где X=(0 или 1);(A)=0BEH, (C)=0SUBB A,#3FH ;(A)=7FH, (C)=0, (AC)=1, (OV)=1Команда SWAP AКоманда "обмен тетрадами внутри аккумулятора" осуществляет обмен междумладшими четырьмя и старшими четырьмя битами аккумулятора (между старшей имладшей тетрадами).Эта команда может рассматриваться так же, как команда четырехбитового циклического сдвига.
На флаги эта команда не влияет.Ассемблер: SWAP AКод:Время:Алгоритм:Пример:110001001 цикл(А[3-0]):=(А[7-4]), (А[7-4]):=(А[3-0]);(A)=0D7H (11010111B);(A)=7DH (01111101B)SWAP AКоманда ХСН А,<байт>Команда "обмен содержимого аккумулятора с переменной-байтом" осуществляетобмен содержимого аккумулятора с содержимым источника, указанным в команде. Операнд источника может использовать следующие режимы адресации:1) регистровый2) прямой3) косвенно-регистровый.1)2)Ассемблер:Код:Время:Алгоритм:Пример:(A):=(Rn), (Rn):=(A прошлое);(A)=3CH, (R4)=15H;(A)=15H, (R4)=3CHХСН A,R4Ассемблер: ХСН A,<dirrect>Код:Время:Алгоритм:Пример:3)ХСН A,Rn;где n=0-711001rrr, где rrr=000-1111 циклАссемблер:Код:Время:Алгоритм:Пример:1 цикл(A):=(direct), (direct):=(A прошлое);(A)=0FEH, (P3)=0DAH;(A)=0DAH, (P3)=0FEHХСН А,РЗXCHA,@Ri , где i=0,l1 цикл(A):=((Ri)), ((Ri)):=(A прошлое);(R1)=39H, (03У[39])=44Н, (А)=0ВСН96XCH A,@R1;(ОЗУ[39])=0ВСН, (А)=44НКоманда XCHD A,@RiКоманда "обмен тетрадой" выполняет обмен младшей тетрады (биты 3—0) аккумулятора с содержимым младшей тетрады (биты 3—0) ячейки внутреннего ОЗУ, косвенная адресация к которой производится с помощью указанного регистра.