Д. В. Андреев Программирование микроконтроллеров mcs-51

Вид материалаУчебное пособие
MOV direct,Rn
MOV direct,direct
MOV direct,@Ri
MOV direct,#data8
MOV @Ri, direct
Movc a,@a+dptr
Movc a,@a+dptr
ORL A,direct
ORL direct,A
ORL direct,#data8
POP direct
PUSH direct
SUBB A,direct
XCH A,direct
XRL A,direct
XRL direct,A
XRL direct,#data8
ASCII операнды
Mt1 ascii pen
DS операнды
...
Полное содержание
Подобный материал:
1   2   3   4   5   6   7   8   9   10

Команда "переслать байт" пересылает содержимое аккумулятора A в ячейку, адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. При этом содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(direct)(A)


;(A)=3CH, (B)=4DH

MOV B,A ;(A)=3CH,(B)=3CH




MOV direct,Rn ;где n=0-7

1 0 0 0 1 r r r

direct

где rrrB=000-111B

Команда "переслать байт" пересылает содержимое заданного регистра Rn выбранного банка в ячейку, адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. При этом содержимое Rn не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 циклa.

Алгоритм

Пример

(direct)(Rn), где n=0-7


;(R7)=5EH, (P1)=0FFH

MOV P1,R7 ;(R7)=5EH, (P1)=5EH




MOV direct,direct

1 0 0 0 0 1 0 1

direct

direct

Команда "переслать байт" пересылает байт данных между двумя ячейками, расположенными в области резидентной памяти данных (РПД) или (и) в среде регистров специальных функций. Адрес ячейки-источника (ячейки-приемника) определяется вторым (первым) операндом и размещается во втором (в третьем) байте команды. Необходимо отметить, что при пересылке содержимое ячейки-источника не изменяется. Команда на состояние флагов не влияет и выполняется за 2 циклa.

Алгоритм

Пример

(direct)(direct)


;в РПД (4CH)=7AH, (B)=0F4H

MOV 4CH,B ;(B)=0F4H,

;в РПД (4CH)=0F4H




MOV direct,@Ri ;где i{0,1}

1 0 0 0 0 1 1 i

direct

Команда "переслать байт" пересылает содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, в ячейку, адрес которой определяется символическим именем direct в области РПД или в среде регистров специальных функций. При этом содержимое ячейки-источника не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(direct)((Ri)), где i{0,1}


;в РПД (6FH)=57H,

;(R0)=6FH, (PSW)=0C2H

MOV PSW,@R0 ;(PSW)=57H, ;(R0)=6FH, в РПД (6FH)=57H




MOV direct,#data8

0 1 1 1 0 1 0 1

direct

data8

Команда "переслать байт" копирует байт данных, непосредственно указанный в команде и имеющий символическое имя data8, в ячейку, адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(direct)data8


;(P2)=0FFH

MOV P2,#33H ;(P2)=33H




MOV @Ri,A ;где i{0,1}

1 1 1 1 0 1 1 i



Команда "переслать байт" пересылает содержимое аккумулятора A в ячейку резидентной памяти данных (РПД), адресуемую содержимым заданного регистра Ri выбранного банка, при этом содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

((Ri))(A), где i{0,1}

;(A)=11H, (R1)=25H,

;в РПД (25H)=48H

MOV @R1,A ;(A)=11H, (R1)=25H,

;в РПД (25H)=11H




MOV @Ri, direct ;где i{0,1}

1 0 1 0 0 1 1 i

direct

Команда "переслать байт" загружает ячейку резидентной памяти данных (РПД), адресуемую содержимым заданного регистра Ri выбранного банка, содержимым ячейки, адрес которой определяется символическим именем direct в области РПД или в среде регистров специальных функций. При этом содержимое ячейки-источника не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

((Ri))(direct), где i{0,1}


;в РПД (55H)=31H,

;(R0)=55H, (TH1)=0CDH

MOV @R0,TH1 ;(TH1)=0CDH, ;(R0)=55H, в РПД (55H)=0CDH




MOV @Ri,#data8 ;где i{0,1}

0 1 1 1 0 1 1 i

data8

Команда "переслать байт" копирует байт данных data8, непосредственно указанный в команде, в ячейку резидентной памяти данных (РПД), адресуемую содержимым заданного регистра Ri выбранного банка. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

((Ri))data8, где i{0,1}

;(R1)=53H, в РПД (53H)=86H

MOV @R1,#77H ;(R1)=53H,

;в РПД (53H)=77H




MOV C,bit

1 0 1 0 0 0 1 0

bit

Команда "переслать бит" загружает флаг переноса C содержимым бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (либо регистров специальных функций), допускающей побитовое обращение. Команда на состояние других флагов, а также используемого бита не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(C)(bit)


;(C)=0, (P1[4])=1

MOV C,P1.4 ;(C)=1,

;(P1[4])=1




MOV bit,C

1 0 0 1 0 0 1 0

bit

Команда "переслать бит" копирует содержимое флага переноса C в бит, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (РПД) или регистров специальных функций, допускающей побитовое обращение. Команда имеет время выполнения 2 цикла и на состояние флагов не влияет, за исключением случая, когда флаг является операндом-приемником.

Алгоритм

Пример

(bit)(C)


;в РПД (22H)=0D0H, (C)=1

MOV 10H,C ;(C)=1,

;в РПД (22H)=0D1H




MOV DPTR,#data16

1 0 0 1 0 0 0 0

data16[15-8]

data16[7-0]

Команда "переслать два байта" загружает указатель данных DPTR 16-битовой константой data16, непосредственно указанной в команде, причем содержимое второго и третьего байтов команды загружается соответственно в старший (DPH) и младший (DPL) байты DPTR. Команда на флаги не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(DPTR)data16

;(DPH)=23H, (DPL)=0DFH

MOV DPTR,#1234H ;(DPH)=12H, (DPL)=34H




MOVC A,@A+DPTR

1 0 0 1 0 0 1 1



Команда "переслать байт" загружает аккумулятор A содержимым ячейки памяти программ (ПП), причем адрес используемой ячейки вычисляется как сумма исходного содержимого A и содержимого 16-битового указателя данных DPTR. Таким образом, в указанной пересылке может участвовать любая ячейка из памяти программ объемом до 64 Кбайт. Содержимое DPTR не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(A)((A)+(DPTR))

;(A)=01H, (DPTR)=30FFH,

;в ПП (3100H)=22H

MOVC A,@A+DPTR ;(A)=22H, ;(DPTR)=30FFH




MOVC A,@A+PC

1 0 0 0 0 0 1 1



Команда "переслать байт" загружает в аккумулятор A содержимое ячейки памяти программ (ПП), причем адрес используемой ячейки вычисляется как сумма исходного содержимого A и содержимого программного счетчика PC, которое увеличено на единицу. Таким образом, в указанной пересылке может участвовать любая ячейка из памяти программ объемом до 64 Кбайт. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(A)((A)+(PC)+1)

;(A)=11H, (PC)=2300H,

;в ПП (2312H)=44H

MOVC A,@A+PC ;(A)=44H,

;(PC)=2301H




MOVX A,@Ri ;где i{0,1}

1 1 1 0 0 0 1 i



Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки внешней памяти данных (ВПД), адресуемой содержимым заданного регистра Ri выбранного банка, при этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 256 байт.

Алгоритм

Пример

(A)((Ri)), где i{0,1}

;(A)=0CCH, (R0)=44H,

;в ВПД (44H)=3EH

MOVX A,@R0 ;(A)=3EH, (R0)=44H,

;в ВПД (44H)=3EH




MOVX A,@DPTR

1 1 1 0 0 0 0 0



Команда "переслать байт" выполняет загрузку аккумулятора A содержимым ячейки внешней памяти данных (ВПД), адресуемой содержимым 16-битового указателя данных DPTR, при этом содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 64 Кбайт.

Алгоритм

Пример

(A)((DPTR))

;(A)=76H, (DPTR)=6D44H,

;в ВПД (6D44H)=88H

MOVX A,@DPTR ;(DPTR)=6D44H,

;(A)=88H, в ВПД (6D44H)=88H




MOVX @Ri,A ;где i{0,1}

1 1 1 1 0 0 1 i



Команда "переслать байт" копирует содержимое аккумулятора A в ячейку внешней памяти данных (ВПД), адресуемую содержимым заданного регистра Ri выбранного банка. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 256 байт.

Алгоритм

Пример

((Ri))(A), где i{0,1}

;(A)=0C6H, (R1)=22H,

;в ВПД (22H)=33H

MOVX @R1,A ;(A)=0C6H, (R1)=22H,

;в ВПД (22H)=0C6H




MOVX @DPTR,A

1 1 1 1 0 0 0 0



Команда "переслать байт" копирует содержимое аккумулятора A в ячейку внешней памяти данных (ВПД), адресуемую содержимым 16-битового указателя данных DPTR. Команда на состояние флагов не влияет, имеет время выполнения 2 цикла и обеспечивает доступ к ВПД объемом до 64 Кбайт.

Алгоритм

Пример

((DPTR))(A)

;(A)=55H, (DPTR)=1234H,

;в ВПД (1234H)=11H

MOVX @DPTR,A ;(DPTR)=1234H,

;(A)=55H,

;в ВПД (1234H)=55H




MUL AB

1 0 1 0 0 1 0 0



Команда "умножение" умножает 8-битовую переменную из аккумулятора A на 8-битовую переменную из регистра B, при этом старший и младший байты произведения загружаются соответственно в B и A. Содержимое флага переноса C сбрасывается в "0". Содержимое флага переполнения OV устанавливается в "1" если результат умножения больше 0FFH, в противном случае - также сбрасывается. Содержимое флага AC не изменяется. Команда имеет время выполнения 4 цикла.

Алгоритм

Пример

(A)(B)=data16

(A)data16[7-0], (B)data16[15-8]

(C)0

если data16  0FFH, то (OV)0

если data16  0FFH, то (OV)1

;(A)=50H=80, (B)=0A0H=160,

;(C)=1, (OV)=0

MUL AB ;(C)=0, (OV)=1,

;(A)=00H, (B)=32H




NOP

0 0 0 0 0 0 0 0



Команда "нет операции" увеличивает содержимое программного счетчика PC на единицу, при этом состояние всех остальных программно доступных элементов микроконтроллера не изменяется. Команда имеет время выполнения 1 цикл.

Алгоритм

Пример

(PC)(PC)+1


;(PC)=1FFH

NOP

NOP ;(PC)=201H




ORL A,Rn ;где n=0-7

0 1 0 0 1 r r r

где rrrB=000B-111B

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым заданного регистра Rn выбранного банка, помещая результат в A. Содержимое используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(A)(Rn), где n=0-7

;(A)=0FH, (R4)=0F3H

ORL A,R4 ;(A)=0FFH,

;(R4)=0F3H




ORL A,@Ri ;где i{0,1}

0 1 0 0 0 1 1 i



Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(A)((Ri)), где i{0,1}

;(A)=22H, (R0)=55H,

;в РПД (55H)=11H

ORL A,@R0 ;(A)=33H, (R0)=55H, ;в РПД (55H)=11H




ORL A,direct

0 1 0 0 0 1 0 1

direct

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(A)(direct)


;(A)=23H, (PSW)=14H

ORL A,PSW ;(A)=37H,

;(PSW)=14H




ORL A,#data8

0 1 0 0 0 1 0 0

data8

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с байтом данных data8, непосредственно указанным в команде. Результат размещается в A. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(A)data8

;(A)=36H

ORL A,#41H ;(A)=77H




ORL direct,A

0 1 0 0 0 0 1 0

direct

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(direct)(A)(direct)

;(A)=55H, (P2)=0AAH

ORL P2,A ;(A)=55H,

;(P2)=0FFH




ORL direct,#data8

0 1 0 0 0 0 1 1

direct

data8

Команда "логическое ИЛИ" выполняет поразрядную дизъюнкцию байта данных data8, непосредственно указанного в команде, с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(direct)(direct)data8

;(P1)=0FFH

ORL P1,#73H ;(P1)=0FFH




ORL C,bit

0 1 1 1 0 0 1 0

bit

Команда "логическое ИЛИ" выполняет дизъюнкцию содержимого флага переноса C с содержимым бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных (РПД) или регистров специальных функций, допускающей побитовое обращение. Результат помещается в С. Содержимое используемого бита не изменяется. Команда на состояние других флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(C)(C)(bit)


;(C)=0, (P1[2])=1,

;в РПД (2EH)=12H

ORL C,P1.2 ;(C)=1, (P1[2])=1

ORL C,70H ;(C)=1,

;в РПД (2EH)=12H




ORL C,/bit

1 0 1 0 0 0 0 0

bit

Команда "логическое ИЛИ" выполняет дизъюнкцию содержимого флага переноса C с инвертированным значением бита из области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение, при этом содержимое используемого бита, 8-разрядный адрес которого определяется символическим именем bit, не изменяется. Результат помещается в С. Команда на состояние других флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(C)(C)

;(C)=0, (AC)=0

ORL C,/AC ;(C)=1, (AC)=0




POP direct

1 1 0 1 0 0 0 0

direct

Команда "чтение из стека" копирует содержимое ячейки резидентной памяти данных (РПД), адресуемой содержимым указателя стека SP, в ячейку, адрес которой определяется символическим именем direct в области РПД или в среде регистров специальных функций. При этом содержимое указателя стека уменьшается на единицу. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(direct)((SP))

(SP)(SP)-1

;(SP)=32H, (DPH)=0AAH,

;в РПД (32H)=55H

POP DPH ;(SP)=31H,(DPH)=55H




PUSH direct

1 1 0 0 0 0 0 0

direct

Команда "запись в стек" увеличивает содержимое указателя стека SP на единицу и после этого копирует содержимое ячейки, адрес которой определяется символическим именем direct в области резидентной памяти данных (РПД) или в среде регистров специальных функций, в ячейку РПД, адресуемую содержимым SP. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(SP)(SP)+1

((SP))(direct)


;(SP)=44H, (DPL)=33H,

;в РПД (45H)=0CEH

PUSH DPL ;(SP)=45H, в РПД (45H)=33H




RET

0 0 1 0 0 0 1 0



Команда "возврат из подпрограммы" последовательно копирует содержимое двух ячеек, адресуемых содержимым указателя стека SP в резидентной памяти данных (РПД), в программный счетчик PC. При этом содержимое SP уменьшается на два. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(PC[15-8])((SP))

(SP)(SP)-1

(PC[7-0])((SP))

(SP)(SP)-1

;(SP)=32H, (PC)=3DFH,

;в РПД (31H)=23H, (32H)=01H

RET ;(SP)=30H, (PC)=123H,

;в РПД (31H)=23H, (32H)=01H




RETI

0 0 1 1 0 0 1 0



Команда "возврат из прерывания" последовательно копирует содержимое двух ячеек, адресуемых содержимым указателя стека SP в резидентной памяти данных (РПД), в программный счетчик PC и разрешает прерывания с уровнем приоритета, равным уровню приоритета только что обработанного прерывания. При этом содержимое SP уменьшается на два. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.




Алгоритм

Пример




(PC[15-8])((SP))

(SP)(SP)-1

(PC[7-0])((SP))

(SP)(SP)-1

;(SP)=23H, (PC)=0D3FH,

;в РПД (22H)=34H, (23H)=02H

RETI ;(SP)=21H, (PC)=234H,

;в РПД (22H)=34H, (23H)=02H

RL A

0 0 1 0 0 0 1 1






Команда "сдвиг аккумулятора влево" сдвигает содержимое аккумулятора A на один бит влево, причем содержимое бита 7 пересылается в бит 0. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A[M+1])(A[M]), где M=0-6

(A[0])(A[7])

;(A)=85H, (C)=0

RL A

RL A ;(A)=16H, (C)=0




RLC A

0 0 1 1 0 0 1 1



Команда "сдвиг аккумулятора влево через флаг переноса" сдвигает содержимое аккумулятора A на один бит влево, причем содержимое бита 7 аккумулятора пересылается во флаг переноса C, а содержимое C - в бит 0 аккумулятора. Команда на состояние других флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A[M+1])(A[M]), где M=0-6

(A[0])(С), (С)(A[7])

;(A)=85H, (C)=0

RLC A ;(A)=0AH, (C)=1




RR A

0 0 0 0 0 0 1 1



Команда "сдвиг аккумулятора вправо" сдвигает содержимое аккумулятора A на один бит вправо, причем содержимое бита 0 пересылается в бит 7. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A[M])(A[M+1]), где M=0-6

(A[7])(A[0])

;(A)=85H, (C)=1

RR A

RR A ;(A)=61H, (C)=1




RRC A

0 0 0 1 0 0 1 1



Команда "сдвиг аккумулятора вправо через флаг переноса" сдвигает содержимое аккумулятора A на один бит вправо, причем содержимое бита 0 аккумулятора пересылается во флаг переноса C, а содержимое C - в бит 7 аккумулятора. Команда на состояние других флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A[M])(A[M+1]), где M=0-6

(A[7])(С), (С)(A[0])

;(A)=85H, (C)=0

RRC A ;(A)=42H, (C)=1




SETB C

1 1 0 1 0 0 1 1



Команда "установить бит" устанавливает содержимое флага переноса C в "1". Команда на состояние других флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(C)1

;(C)=0

SETB C ;(C)=1




SETB bit

1 1 0 1 0 0 1 0

bit

Команда "установить бит" устанавливает в "1" содержимое бита, 8-разрядный адрес которого определяется символическим именем bit в области ячеек резидентной памяти данных или регистров специальных функций, допускающей побитовое обращение. Команда имеет время выполнения 1 цикл и на состояние флагов не влияет, за исключением случая, когда флаг является операндом команды.

Алгоритм

Пример

(bit)1


;(P2)=38H

SETB P2.0 ;(P2)=39H




SJMP addr

1 0 0 0 0 0 0 0

rel

Команда "короткий переход" выполняет безусловный переход по адресу addr, определяемому при помощи сложения 8-битового числа rel (со знаком), размещенного в младшем байте команды, с содержимым счетчика команд PC после увеличения его на 2. Таким образом, указанный переход возможен в пределах от -128 до +127 относительно начального адреса следующей команды, при этом отрицательное значение rel представляется двоичным числом в дополнительном коде. Команда на флаги не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(PC)(PC)+2+rel

;MT4 соответствует адресу 104H,

;(PC)=165H, rel=9DH

SJMP MT4 ;(PC)=104H




SUBB A,Rn ;где n=0-7

1 0 0 1 1 r r r

где rrrB=000B-111B

Команда "вычитание с заемом" вычитает содержимое заданного регистра Rn выбранного банка вместе с содержимым флага переноса С из содержимого аккумулятора A, помещая результат в A. Содержимое используемого регистра не изменяется. При появлении заема в разрядах 7 и 3 аккумулятора устанавливаются в "1" флаг переноса C и флаг дополнительного переноса AC соответственно, в противном случае эти флаги сбрасываются в "0". Содержимое флага переполнения OV устанавливается, если есть заем в бите 6 и нет заема в бите 7, или есть заем в бите 7 и нет - в бите 6, в противном случае флаг OV сбрасывается. Время выполнения команды 1 цикл.

Алгоритм

Пример

(A)(A)-(C)-(Rn), где n=0-7

(С)x, (OV)=x, (AC)=x, где x{0,1}

;(A)=0C9H, (R2)=54H, (C)=1

SUBB A,R2 ;(A)=74H,(R2)=54H,

;(AC)=0, (C)=0, (OV)=1




SUBB A,@Ri ;где i{0,1}

1 0 0 1 0 1 1 i




Команда "вычитание с заемом" вычитает содержимое флага переноса С вместе с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка, из содержимого аккумулятора A, помещая результат в A. Содержимое используемой ячейки не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A)(A)-(C)-((Ri)), где i{0,1}

(С)x, (OV)=x, (AC)=x, где x{0,1}

;(A)=49H, (R0)=3AH,

;в РПД (3AH)=68H, (C)=1

SUBB A,@R0 ;(A)=0E0H,

;(AC)=0, (C)=1, (OV)=0




SUBB A,direct

1 0 0 1 0 1 0 1

direct

Команда "вычитание с заемом" вычитает из содержимого аккумулятора A содержимое флага переноса С вместе с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A)(A)-(C)-(direct)

(С)x, (OV)=x, (AC)=x, где x{0,1}

;(A)=97H, (C)=0, (B)=25H

SUBB A,B ;(A)=72H, (B)=25H,

;(AC)=0, (C)=0, (OV)=1




SUBB A,#data8

1 0 0 1 0 1 0 0

data8

Команда "вычитание с заемом" вычитает содержимое флага переноса С вместе с байтом данных data8, непосредственно указанным в команде, из содержимого аккумулятора A, помещая результат в A. Логика установки (сброса) флагов и время выполнения такие же, как у рассмотренной выше команды с аналогичной мнемоникой.

Алгоритм

Пример

(A)(A)-(C)-data8

(С)x, (OV)=x, (AC)=x, где x{0,1}

;(A)=0BEH, (C)=0

SUBB A,#3FH ;(A)=7FH,

;(AC)=1, (C)=0, (OV)=1




SWAP A

1 1 0 0 0 1 0 0




Команда "обмен тетрадой" осуществляет обмен содержимым младших четырех и старших четырех битов аккумулятора A. Команда на флаги не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A[3-0])(A[7-4])

(A[7-4])(A[3-0])

;(A)=49H

SWAP A ;(A)=94H




XCH A,Rn ;где n=0-7

1 1 0 0 1 r r r

где rrrB=000B-111B

Команда "обмен байтом" выполняет обмен содержимого аккумулятора A с содержимым заданного регистра Rn выбранного банка. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(Rn), где n=0-7

(Rn)(A)

;(A)=0FAH, (R6)=93H

XCH A,R6 ;(A)=93H, (R6)=0FAH




XCH A,@Ri ;где i{0,1}

1 1 0 0 0 1 1 i



Команда "обмен байтом" выполняет обмен содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)((Ri)), где i{0,1}

((Ri))(A)

;(A)=0FDH, (R1)=30H,

;в РПД (30H)=17H

XCH A,@R1 ;(A)=17H, (R1)=30H,

;в РПД (30H)=0FDH




XCH A,direct

1 1 0 0 0 1 0 1

direct

Команда "обмен байтом" выполняет обмен содержимого аккумулятора A с содержимым ячейки, адрес которой определяется символическим именем direct в области резидентной памяти данных или в среде регистров специальных функций. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(direct)

(direct)(A)

;(A)=24H, (DPL)=3DH

XCH A,DPL ;(A)=3DH,

;(DPL)=24H




XCHD A,@Ri ;где i{0,1}

1 1 0 1 0 1 1 i



Команда "обмен тетрадой" выполняет обмен содержимого младшей тетрады (биты 3-0) аккумулятора A с содержимым младшей тетрады ячейки резидентной памяти данных (РПД), при этом содержимое старших тетрад A и используемой ячейки, адресуемой содержимым заданного регистра Ri выбранного банка, не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A[3-0])((Ri))[3-0], где i{0,1}

((Ri))[3-0](A[3-0])

;(A)=0FDH, (R1)=30H,

;в РПД (30H)=17H

XCHD A,@R1 ;в РПД (30H)=1DH, ;(A)=0F7H, (R1)=30H




XRL A,Rn ;где n=0-7

0 1 1 0 1 r r r

где rrrB=000B-111B

Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым заданного регистра Rn выбранного банка, помещая результат в A. При этом содержимое используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(A)(Rn), где n=0-7

;(A)=0FH, (R4)=0F3H

XRL A,R4 ;(A)=0FCH, (R4)=0F3H




XRL A,@Ri ;где i{0,1}

0 1 1 0 0 1 1 i



Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (РПД), адресуемой содержимым заданного регистра Ri выбранного банка. Результат размещается в A. Содержимое используемой ячейки не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(A)((Ri)), где i{0,1}

;(A)=22H, (R0)=55H,

;в РПД (55H)=33H

XRL A,@R0 ;(A)=11H,

;(R0)=55H, в РПД (55H)=33H




XRL A,direct

0 1 1 0 0 1 0 1

direct

Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается в A. Содержимое используемой ячейки или используемого регистра не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(A)(direct)


;(A)=23H, (PSW)=34H

XRL A,PSW ;(A)=17H, (PSW)=34H




XRL A,#data8

0 1 1 0 0 1 0 0

data8

Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с байтом данных data8, непосредственно указанным в команде. Результат размещается в A. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(A)(A)data8

;(A)=36H

XRL A,#22H ;(A)=14H




XRL direct,A

0 1 1 0 0 0 1 0

direct

Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 содержимого аккумулятора A с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Содержимое A не изменяется. Команда на состояние флагов не влияет и имеет время выполнения 1 цикл.

Алгоритм

Пример

(direct)(A)(direct)

;(A)=55H, (P2)=63H

XRL P2,A ;(A)=55H, (P2)=36H




XRL direct,#data8

0 1 1 0 0 0 1 1

direct

data8

Команда "логическое ИСКЛЮЧАЮЩЕЕ ИЛИ" выполняет поразрядное сложение по модулю 2 байта данных data8, непосредственно указанного в команде, с содержимым ячейки резидентной памяти данных (либо регистра специальных функций), 8-разрядный адрес которой (которого) определяется символическим именем direct. Результат помещается соответственно в используемую ячейку или используемый регистр. Команда на состояние флагов не влияет и имеет время выполнения 2 цикла.

Алгоритм

Пример

(direct)(direct)data8

;(P1)=0FFH

XRL P1,#11H ;(P1)=0EEH



2.2.2. Директивы языка АСМ51


Директивы в отличие от команд ассемблерного языка не преобразуются в объектный код и применяются для управления процессом трансляции исходной МК-программы.

Рассмотрим основные директивы языка АСМ51.

ASCII операнды

Директива последовательно размещает в ячейках памяти программ (ПП) коды ASCII символов строки, указанной в поле операнды и заканчивающейся возвратом каретки.

Пример

;MT1 соответствует адресу

;20FH в ПП

MT1 ASCII PEN

;в ПП (20FH)=50H,

;(210H)=45H, (211H)=4EH

DB операнды

Директива последовательно размещает в ячейках памяти программ (ПП) байтовые константы, перечисленные через запятую в поле операнды. Если указанное поле отсутствует, то используется одна ячейка ПП, в которую заносится "0".

Пример

;MT1 соответствует адресу

;1FFH в ПП

MT1 DB 12H,<.NOT.11H+1

DB 10100101B,32

;в ПП (1FFH)=12H, ;(200H)=0EFH,

;(201H)=0A5H, (202H)=20H

DS операнды

Директива резервирует ячейки памяти программ (ПП), причем количество этих ячеек определяется значением, указанным в поле операнды.

Пример

;MT2 соответствует адресу

;200H в ПП

MT2 DS 12H ;(PC)=212H

DW операнды

Директива последовательно размещает в ячейках памяти программ (ПП) 2-байтовые константы, перечисленные через запятую в поле операнды. Если указанное поле отсутствует, то используются две ячейки ПП, в которые заносится "0".

Пример

;MT1=20FH

MT1 DW 3212H

DW

;в ПП (20FH)=32H,

;(210H)=12H,

;(211H)=(212H)=00H

END

Директива определяет конец МК-программы.

ENDM

Директива определяет конец макроопределения.

метка EQU операнды

Директива присваивает символическому имени, размещенному в поле метка, байтовое или 2-байтовое значение, указанное в поле операнды. Это имя не может быть переопределено.

Пример

SS EQU 25H

ZZ EQU SS+2

PP EQU ZZ-1

MOV A,#PP ;(A)=26H

EXTERN операнды

Директива объявляет символические имена, указанные через запятую в поле операнды, как внешние, то есть определяемые в другой (других) МК-программе (МК-программах).

INCLUDE операнды

Директива включает в трансляцию файл, имя которого вместе с расширением указаны в поле операнды. Включения не могут подвергаться вложению.

LIST

Директива разрешает вывод листинга следующего за ней текста МК-программы. По умолчанию выполняется директива NLIST.

LONG операнды

Директива последовательно размещает в ячейках памяти программ (ПП) 4-байтовые константы, перечисленные через запятую в поле операнды. Если указанное поле отсутствует, то используются четыре ячейки ПП, в которые заносится "0".

Пример

;MT1 соответствует адресу

;4EEH в ПП

MT1 LONG 11223344H

;в ПП (4EEH)=11H,

;(4EFH)=22H, (4F0H)=33H,

;(4F1H)=44H

метка MACRO операнды

Директива начинает макроопределение, которое составляется из операторов языка АСМ51 (строк исходного текста МК-программы) и должно заканчиваться директивой ENDM. Любое поле включенных в макроопределение операторов (кроме поля комментарий) может быть представлено формальным параметром, которые перечисляются через запятую в поле операнды. В поле метка указывается символическое имя макрокоманды, которая будет определяться данным макроопределением. Макрокоманда может использоваться в МК-программе произвольное число раз и при трансляции заменяется на тело своего макроопределения, причем фактические параметры, перечисленные через запятую в поле операнды макрокоманды подставляются вместо соответствующих формальных параметров макроопределения.

До трансляции

После трансляции


TC MACRO x,y,z

MOV A,#z

x A,#y

ENDM

MOV R0,#25

TC ORL,15H,10

MOVX @R0,A

END

1 TC MACRO x,y,z

2 MOV A,#z

3 x A,#y

4 ENDM

5 0000 7819 MOV R0,#25

6 0002 TC ORL,15H,10

7 0002 740A MOV A,#10

8 0004 4415 ORL A,#15H

9 0006 ENDM

10 0006 F2 MOVX @R0,A

11 0007 END

NLIST

Директива запрещает вывод листинга следующего за ней текста МК-программы, если ранее выполнялась директива LIST.

ORG операнды

Директива устанавливает значение программного счетчика PC, причем указанное значение определяется содержимым поля операнды. При отсутствии директивы исходное значение PC принимается равным нулю.

Пример

;(PC)=1234H

ORG 12H

;(PC)=0012H

PUBLIC операнды

Директива объявляет символические имена, указанные через запятую в поле операнды, как глобальные (общие), то есть такие, к которым можно осуществлять ссылку из других МК-программ.

метка REG операнды

Директива присваивает символическому имени, размещенному в поле метка, байтовое или битовое значение, указанное в поле операнды, причем указанное значение может быть задано не только числом, другим символическим именем или выражением, но и именем программно доступного элемента микроконтроллера. Символическое имя, размещенное в поле метка, не может быть переопределено.

Пример

X REG R4 ;X определя-

;ется как регистр R4

Y REG P3 ;Y определя-

;ется как порт P3

Z REG Y ;Z определяет-

;ся как порт P3

B.0 REG C ;B.0 определя-

;ется как флаг C

B.1 REG X.1 ;B.1 опреде-

;ляется как первый бит

;регистра R4

RECSIZE операнды

Директива используется для управления редактором связей. В частности, от содержимого поля операнды этой директивы зависит максимальный размер записей в загрузочном модуле МК-программы (см. подраздел 3.3).

SYMBOLS

Директива используется для управления редактором связей. В частности, разрешает формирование специального файла, содержащего символические имена, в формате MICROTEK или ZAK (см. подраздел 3.3).

метка VAR операнды

Директива присваивает символическому имени, размещенному в поле метка, байтовое или 2-байтовое значение, указанное в поле операнды. Это имя может быть переопределено.

Пример

SS VAR 25H

MOV A,#SS ;(A)=25H

SS VAR 13H

MOV A,#SS ;(A)=13H