
SREG: 8 位状态寄存器,其中每一位的定义为:
C: 进位标志位
Z: 结果为零标志位
N: 结果为负数标志位
V: 2 的补码溢出标志位
S: N⊕V,用于符号测试的标志位
H: 操作中产生半进位的标志位
T: 用于和 BLD、BST 指令进行位数据交换的位
I: 全局中断触发/禁止标志位
算术和逻辑指令
加法指令
1.不带进位位加法
ADD Rd,Rr 0≤d≤31,0≤r≤31
说明:两个寄存器不带进位 C 标志相加,结果送目的寄存器 Rd。
2.带进位位加法
ADC Rd,Rr 0≤d≤31,0≤r≤31
说明:两个寄存器和 C标志的内容相加,结果送目的寄存器 Rd。
3.字加立即数
ADIW Rdl,K dl 为:24、26、28、30,0≤K≤63
说明:寄存器对(一个字)同立即数(0~63)相加,结果放到寄存器对。
4.增1 指令
INC Rd 0≤d≤31
说明:寄存器 Rd 的内容加 1,结果送目的寄存器 Rd 中。
减法指令
1.不带进位位减法
SUB Rd,Rr 0≤d≤31,0≤r≤31
说明:两个寄存器相减结果送目的寄存器 Rd 中。
2.减立即数(字节)
SUBI Rd,K 16≤d≤31,0≤K≤255
说明:一个寄存器和常数相减,结果送目的寄存器 Rd。
3.带进位位减法
SBC Rd,Rr 0≤d≤31,0≤r≤31
说明:两个寄存器带着 C 标志相减,结果放到目的寄存器 Rd 中。
4.带进位位减立即数(字节)
SBCI Rd,K 16≤d≤31,0≤K≤255
说明:寄存器和立即数带着 C 标志相减,结果放到目的寄存器 Rd 中。
5.减立即数(字)
SBIW Rdl,K dl为24、26、28、30,0≤K≤63
说明:寄存器对(字)与立即数 0~63 相减,结果放入寄存器对。
6.减1 指令
DEC Rd 0≤d≤31
说明:寄存器 Rd 的内容减 1,结果送目的寄存器 Rd 中。
取反码指令
COM Rd 0≤d≤31
说明:该指令完成对寄存器 Rd 的二进制反码操作。
操作:Rd←$FF-Rd PC←PC+1 机器码:1001 010d dddd 0000
取补码指令
NEG Rd 0≤d≤31
说明:寄存器 Rd 的内容转换成二进制补码值。
操作:Rd←$00-Rd PC←PC+1 机器码:1001 010d dddd 0001
比较指令
1.寄存器比较
CP Rd,Rr 0≤d≤31,0≤r≤31
说明:该指令完成两个寄存器 Rd 和 Rr 相比较操作,而寄存器的内容不改变,该指令
后能使用所有条件跳转指令。
2.带进位比较
CPC Rd,Rr 0≤d≤31, 0≤r≤31
说明:该指令完成寄存器 Rd 的值和寄存器 Rr 加 C 相比较操作,而寄存器的内容不改
变,该指令后能使用所有条件跳转指令。
3.与立即数(字节)比较
CPI Rd,K 16≤d≤31,0≤K≤255
说明:该指令完成寄存器 Rd 和常数的比较操作,寄存器的内容不改变,该指令后能使
用所有条件跳转指令。
逻辑与指令
1.寄存器逻辑与
AND Rd,Rr 0≤d≤31,0≤d≤31
说明:寄存器 Rd 和寄存器 Rr 的内容逻辑与,结果送目的寄存器 Rd。
2.与立即数(字节)
ANDI Rd,K 16≤d≤31,0≤K≤255
说明:寄存器 Rd 的内容与常数逻辑与,结果送目的寄存器 Rd。
3.寄存器位清零
CBR Rd,K 16≤d≤31,0≤K≤255
说明:清除寄存器 Rd 中的指定位,利用寄存器 Rd 的内容与常数表征码 K 的补码相与,
其结果放在寄存器 Rd 中。
4.测试寄存器为零或负
TST Rd 0≤d≤31
说明:测试寄存器为零或负,实现寄存器内容自己同自己的逻辑与操作,而寄存器内
容不改变。
逻辑或指令
1.寄存器逻辑或
OR Rd,Rr 0≤d≤31, 0≤r≤31
应用:置数,使某位为 1,用 1 去或;保留,用 0 去逻辑或;代替硬件或门。
说明:完成寄存器 Rd 与寄存器 Rr 的内容逻辑或操作,结果送目的寄存器 Rd 中。
2.或立即数(字节)
ORI Rd,K 16≤d≤31, 0≤K≤255
说明:完成寄存器 Rd 的内容与常量 K 逻辑或操作,结果送目的寄存器 Rd中。
3.置寄存器位
SBR Rd,K 16≤d≤31, 0≤K≤255
说明:用于对寄存器 Rd 中指定位置位。完成寄存器 Rd 和常数表征码 K 之间的逻辑或
操作,结果送目的寄存器 Rd。
4.置寄存器为$FF
SER Rd 16≤d≤31
说明:直接装入$FF 到寄存器 Rd。
逻辑异或指令
1.寄存器异或
EOR Rd,Rr 0≤d≤31, 0≤r≤31
说明:完成寄存器 Rd 和寄存器 Rr 的内容逻辑异或操作,结果送目的寄存器 Rd。
2.寄存器清零
CLR Rd 0≤d≤31
说明:寄存器清零。该指令采用寄存器 Rd 与自己的内容相异或实现的寄存器的所有位
都被清零。
乘法指令
1.无符号数乘法
MUL Rd,Rr 0≤d≤31, 0≤r≤31
说明: 该指令完成将寄存器 Rd 和寄存器 Rr 的内容作为两个无符号 8 位数的乘法操作,
结果为 16 位的无符号数,保存在 R1:R0 中,R1 为高 8 位,R0 为低 8 位。如果操作数为寄存器 R1 或 R0,则结果会将原操作数覆盖。
2.有符号数乘法
MULS Rd,Rr 16≤d≤31, 16≤r≤31
说明: 该指令完成将寄存器 Rd 和寄存器 Rr 的内容作为两个 8位有符号数的乘法操作,
结果为 16 位的有符号数,保存在 R1:R0 中,R1 为高 8 位,R0 为低 8 位。源操作数为寄存器 R16~R31。
3.有符号数与无符号数乘法
MULSU Rd,Rr 16≤d≤23, 16≤r≤23
说明:该指令完成将寄存器 Rd(8 位,有符号数)和寄存器 Rr(8 位,无符号数)的
内容相乘操作,结果为 16 位的有符号数,保存在 R1:R0 中,R1 为高 8 位,R0 为低 8 位。
源操作数为寄存器 R16~R23。
4.无符号定点小数乘法
FMUL Rd,Rr 16≤d≤23, 16≤r≤23
说明:该指令完成将寄存器 Rd(8 位无符号数)和寄存器 Rr(8 位无符号数)的内容相乘操作,结果为 16 位的无符号数,并将结果左移一位后保存在 R1:R0 中,R1 为高 8 位,R0 为低 8 位。源操作数为寄存器 R16~R23。
5.有符号定点小数乘法
FMULS Rd,Rr 16≤d≤23, 16≤r≤23
说明:该指令完成寄存器 Rd(8 位带符号数)和寄存器 Rr(8 位带符号数)的内容相乘操作,结果为 16 位的带符号数,并将结果左移一位后保存在 R1:R0 中,R1 为高 8 位,R0 为低 8 位。源操作数为寄存器 R16~R23。
6.有符号定点小数和无符号定点小数乘法
FMULSU Rd,Rr 16≤d≤23, 16≤r≤23
说明:该指令完成寄存器 Rd(8 位带符号数)和寄存器 Rr(8 位无符号数)的内容相乘操作,结果为 16 位的带符号数,并将结果左移一位后保存在 R1:R0 中,R1 为高 8 位,R0 为低 8 位。源操作数为寄存器 R16~R23。
跳 转 指 令
无条件跳转指令
1.相对跳转
RJMP k -2048≤k≤2047
说明:相对跳转到 PC-2048~PC+2047字范围内的地址,在汇编程序中,用目的地址的标号替代相对跳转字 k。
2.间接跳转
IJMP
说明:间接跳转到 Z 指针寄存器指向的 16 位地址。Z 指针寄存器是 16 位宽,允许在
当前程序存储器空间 K 字(128K字节)内跳转。
3.直接跳转
JMP k 0≤k≤4194303
说明:直接跳转到 k 地址处,在汇编程序中,用目的地址的标号替代跳转字 k。
条件跳转指令
1.测试条件符合跳转指令
(1)状态寄存器中位为“1”跳转
BRBS s,k 0≤s≤7,-≤k≤63
说明:执行该指令时,PC 先加 1,再测试 SREG 的 s 位,如果该位被置位,则跳转 k
个字,k 为 7 位带符号数,最多可向前跳 63 个字,向后跳 个字;否则顺序执行。在汇编程序中,用目的地址的标号替代相对跳转字 k。
(2)状态寄存器中位为“0”跳转
BRBC s,k 0≤s≤7,-≤k≤63
说明:执行该指令时,PC 先加 1,再测试 SREG 的 s 位,如果该位被清零,则跳转 k
个字,k 为 7 位带符号数,最多可向前跳 63 个字,向后跳 个字;否则顺序执行。在汇编程序中,用目的地址的标号替代相对跳转字 k。
(3)相等跳转
BREQ k -≤k≤63
说明:条件相对跳转,测试零标志位 Z,如果Z位被置位,则相对 PC 值跳转 k 个字。
如果在执行 CP、CPI、SUB 或 SUBI 指令后,立即执行该指令,且当寄存器 Rd 中数与寄存器 Rr 中数相等时,将发生跳转。这条指令相当于指令 BRBS 1,k。
(4)不相等跳转
BRNE k -≤k≤63
说明:条件相对跳转,测试零标志位 Z,如果Z位被清零,则相对 PC 值跳转 k 个字。这条指令相当于指令 BRBC 1,k.
(5)进位标志位 C 为“1”跳转
BRCS k -≤k≤63
说明:条件相对跳转,测试进位标志 C,如果C位被置位,则相对 PC 值跳转 k 个字。
这条指令相当于指令 BRBS 0,k。
(6)进位标志位 C 为“0”跳转
BRCC k -≤k≤63
说明:条件相对跳转,测试进位标志 C,如果C位被清除,则相对 PC 值跳转 k 个字。
这条指令相当于指令 BRBC 0,k。
(7)大于或等于跳转(对无符号数)
BRSH k -≤k≤63
说明:条件相对跳转,测试进位标志 C,如果C位被清零,则相对 PC 值跳转 k 个字。
如果在执行 CP、CPI、SUB或 SUBI 指令后,立即执行该指令,且当在寄存器 Rd 中无符号二进制数大于或等于寄存器Rr中无符号二进制数时, 将发生跳转。 该指令相当于指令 BRBS 0,k。
(8)小于跳转(对无符号数)
BRLO k -≤k≤63
说明:条件相对跳转,测试进位标志 C,如果C位被置位,则相对 PC 值跳转 k 个字。如果在执行 CP、CPI、SUB或 SUBI 指令后立即执行该指令,且当在寄存器 Rd 中无符号二进制数小于在寄存器Rr中无符号二进制数时,将发生跳转。该指令相当于指令BRBS 0,k
(9)结果为负跳转
BRMI k -≤k≤63
说明:条件相对跳转,测试负号标志 N,如果N位被置位,则相对 PC 值跳转 k 个字。该指令相当于指令 BRBS 2,k
(10)结果为正跳转
BRPL k -≤k≤63
说明:条件相对跳转,测试负号标志 N,如果N位被清零,则相对 PC 值跳转 k 个字。
该指令相当于指令 BRBC 2,k
(11)大于或等于跳转(带符号数)
BRGE k -≤k≤63
说明:条件相对跳转,测试符号标志 S,如果S位被清零,则相对 PC 值跳转 k 个字。如果在执行 CP、CPI、SUB 或 SUBI 指令后立即执行该指令,且当在寄存器 Rd 中带符号二进制数大于或等于寄存器Rr中带符号二进制数时, 将发生跳转。 该指令相当于指令 BRBC 4,k。
(12)小于跳转(带符号数)
BRLT k -≤k≤63
说明:条件相对跳转,测试符号标志 S,如果S位被置位,则相对 PC 值跳转 k 个字。如果在执行 CP、CPI、SUB或 SUBI 指令后立即执行该指令,且当在寄存器 Rd 中带符号二进制数小于在寄存器 Rr 中带符号二进制数时,将发生跳转。该指令相当于指令 BRBS 4,k
(13)半进位标志为“1”跳转
BRHS k -≤k≤63
说明:条件相对跳转,测试半进位标志 H,如果 H 位被置位,则相对 PC 值跳转k 个字。该指令相当于指令 BRBS 5,k。
(14)半进位标志为“0”跳转
BRHC k -≤k≤63
说明:条件相对跳转,测试半进位标志 H,如果 H 位被清零,则相对 PC 值跳转k 个字。该指令相当于指令 BRBC 5,k。
(15)T 标志为“1”跳转
BRTS k -≤k≤63
说明:条件相对跳转,测试标志位 T,如果标志位 T 被置位,则相对 PC值跳转 k 个字。该指令相当于指令 BRBS 6,k。
(16)T 标志为“0”跳转
BRTC k -≤k≤63
说明:条件相对跳转,测试 T 标志位,如果标志位 T 被清零,则相对 PC 值跳转 k 个字。该指令相当于指令 BRBC 6,k。
(17)溢出标志为“1”跳转
BRVS k -≤k≤63
说明:条件相对跳转,测试溢出标志 V,如果V位被置位,则相对 PC 值跳转 k 个字。该指令相当于指令 BRBS 3,k。
(18)溢出标志为“0”跳转
BRVC k -≤k≤63
说明:条件相对跳转,测试溢出标志 V,如果V位被清零,则相对 PC 值跳转 k 个字。该指令相当于指令 BRBC 3,k。
(19)中断标志为“1”跳转
BRIE k -≤k≤63
说明:条件相对跳转,测试全局中断允许标志 I,如果I 位被置位,则相对 PC 值跳转k 个字。该指令相当于指令 BRBS 7,k。
(20)中断标志为“0”跳转
BRID k -≤k≤63
说明:条件相对跳转,测试全局中断允许标志 I,如果I 位被清零,则相对 PC 值跳转k 个字。该指令相当于指令 BRBC 7,k。
2.测试条件符合跳行跳转指令
(1)相等跳行
CPSE Rd,Rr 0≤d≤31, 0≤r≤31
说明:该指令完成两个寄存器 Rd 和Rr 的比较,若 Rd=Rr,则跳一行执行指令。
(2)寄存器位为“0”跳行
SBRC Rr,b 0≤r≤31, 0≤b≤7
说明:该指令测试寄存器第 b 位,如果该位被清零,则跳一行执行指令。
(3)寄存器位为“1”跳行
SBRS Rr,b 0≤r≤31, 0≤b≤7
说明:该指令测试寄存器第 b 位,如果该位被置位,则跳下一行执行指令。
(4)I/O 寄存器位为“0”跳行
SBIC P,b 0≤P≤31, 0≤b≤7
说明:该指令测试 I/O 寄存器第 b 位,如果该位被清零,则跳一行执行指令。该指令只在低 32 个I/O 寄存器内操作,地址为 I/O 寄存器空间的 0~31。
(5)I/O 寄存器位为“1”跳行
SBIS P,b 0≤P≤31,0≤b≤7
说明:该指令测试 I/O 寄存器第 b 位,如果该位被置位,则跳一行执行指令。该指令只在低 32 个I/O 寄存器内操作,地址为 I/O 寄存器空间的 0~31。
子程序调用和返回指令
1.相对调用
RCALL k -2048≤k≤2047
说明:将 PC+1 后的值(RCALL 指令后的下一条指令地址)压入堆栈,然后调用在当前PC 前或后 k+1 处地址的子程序。
2.间接调用
ICALL
说明:间接调用由 Z 寄存器中(16 位指针寄存器)指向的子程序。地址指针寄存器 Z为 16 位,允许调用在当前程序存储空间 K 字(128K 字节)内的子程序。
3.直接调用
CALL k 0≤k≤65535
说明:将 PC+2 后的值(CALL 指令后的下一条指令地址)压入堆栈,然后直接调用 k处地址的子程序。
4.从子程序返回
RET
说明:从子程序返回,返回地址从堆栈中弹出。
5.从中断程序返回
RETI
说明:从中断程序中返回,返回地址从堆栈中弹出,且全局中断标志被置位。
数据传送指令
1.工作寄存器间传送数据
MOV Rd,Rr 0≤d≤31,0≤r≤31
说明:该指令将一个寄存器内容传送到另一个寄存器中,源寄存器 Rr的内容不改变,而目的寄存器 Rd 复制了Rr 的内容。
2.SRAM 数据直接送寄存器
LDS Rd,k 0≤d≤31, 0≤k≤65535
说明:把 SRAM 中一个存储单元的内容(字节)装入到寄存器,其中 k 为该存储单元的16 位地址。
3.寄存器数据直接送 SRAM
STS k,Rr 0≤r≤31, 0≤k≤65535
说明:将寄存器的内容直接存储到 SRAM 中,其中 k 为存储单元的 16 位地址。
4.立即数送寄存器
LDI Rd,K 16≤d≤31, 0≤K≤255
说明:装入一个 8 位立即数到寄存器 R16~R31中。
间接寻址数据传送指令
1.使用X 指针寄存器间接寻址传送数据
(1)使用地址指针寄存器 X 间接寻址将 SRAM 内容装入到指定寄存器
①LD Rd,X 0≤d≤31;将指针为 X的 SRAM 中的数送寄存器,指针不变。
②LD Rd,X+ 0≤d≤31;先将指针为 X 的SRAM 中的数送寄存器,X 指针加 1。
③LD Rd,-X 0≤d≤31;X 指针减1,将指针为 X的 SRAM 中的数送寄存器。
(2)使用地址指针寄存器 X 间接寻址将寄存器内容存储到 SRAM
①ST X,Rr 0≤d≤31;将寄存器内容送 X 为指针的 SRAM 中,X 指针不改变。
②ST X,Rr 0≤d≤31;先将寄存器内容送 X 为指针的 SRAM中,后 X 指针加 1。
③ST -X,Rr 0≤d≤31;先将 X 指针减 1,然后将寄存器内容送 X 为指针的 SRAM中。
2.使用Y 指针寄存器间接寻址传送数据
(1)使用地址指针寄存器 Y 间接寻址将 SRAM 中的内容装入寄存器
①LD Rd,Y 0≤d≤31;将指针为 Y的 SRAM 中的数送寄存器,Y 指针不变。
②LD Rd,Y+ 0≤d≤31; 先将指针为 Y的 SRAM 中的数送寄存器, 然后 Y 指针加 1。
③LD Rd,-Y 0≤d≤31;先将 Y 指针减 1,将指针为 Y 的SRAM中的数送寄存器。
④LDD Rd,Y+q 0≤d≤31,0≤q≤63;将指针为 Y+q的 SRAM 中的数送寄存器,而 Y 指针不改变。
(2)使用地址指针寄存器 Y 间接寻址将寄存器内容存储到 SRAM
①ST Y,Rr 0≤d≤31;将寄存器内容送 Y 为指针的 SRAM 中,Y 指针不改变。
②ST Y+,Rr 0≤d≤31; 先将寄存器内容送 Y 为指针的 SRAM 中, 然后 Y 指针加 1。
③ST –Y,Rr 0≤d≤31;先将 Y 指针减 1,然后将寄存器内容送 Y 为指针的SRAM 中。
④STD Y+q,Rr 0≤d≤31,0≤q≤63;将寄存器内容送 Y+q 为指针的 SRAM 中。
3.使用Z 指针寄存器间接寻址传送数据
(1)使用地址指针寄存器 Z 间接寻址将 SRAM 中的内容装入到指定寄存器
①LD Rd,Z 0≤d≤31;将指针为 Z的 SRAM 中的数送寄存器,Z 指针不变。
②LD Rd,Z+ 0≤d≤31;先将指针为Z的SRAM中的数送寄存器,然后Z指针加1。
③LD Rd,-Z 0≤d≤31;先将Z 指针减1,然后将指针为Z 的SRAM 中的数送寄存器。
④LDD Rd,Z+q 0≤d≤31,0≤q≤63;将指针为 Z+q的 SRAM 中的数送寄存器,而 Z 指针不改变。
(2)使用地址指针寄存器 Z 间接寻址将寄存器内容存储到 SRAM
①ST Z,Rr 0≤d≤31;将寄存器内容送 Z 为指针的 SRAM 中,Z 指针不改变。
②ST Z+,Rr 0≤d≤31;先将寄存器内容送Z为指针的SRAM中,然后Z指针加1。
③ST -Z,Rr 0≤d≤31;先将 Z 指针减 1,然后将寄存器内容送 Z 为指针的SRAM 中。
④STD Z+q,Rr 0≤d≤31,0≤q≤63;将寄存器内容送 Z+q 为指针的 SRAM 中。
以上 22 条指令操作之后,X、Y、Z 指针寄存器要么不改变,要么是加 1 或减 1。使用
X、Y、Z 指针寄存器的这些特性特别适用于访问矩阵表和堆栈指针等。
从程序存储器中取数装入寄存器指令
1.从程序存储器中取数装入寄存器 R0
LPM
说明:将 Z指向的程序存储器空间的一个字节装入寄存器 R0。
2.从程序存储器中取数装入寄存器
LPM Rd,Z 0≤d≤31
说明:将 Z指向的程序存储器空间的一个字节装入寄存器 Rd。
3.带后增量的从程序存储器中取数装入寄存器 Rd
LPM Rd,Z+
说明:将 Z指向的程序存储器空间的一个字节装入 Rd,然后 Z 指针加1。
4.从程序存储器中取数装入寄存器 R0(扩展)
ELPM
说明:将 RAMPZ:Z 指向的程序存储器空间的一个字节装入寄存器 R0。
5.从程序存储器中取数装入寄存器(扩展)
ELPM Rd,Z 0≤d≤31
说明:将 RAMPZ:Z 指向的程序存储器空间的一个字节装入寄存器 Rd。
6.带后增量的从程序存储器中取数装入寄存器 Rd(扩展)
LPM Rd,Z+
说明:将 RAMPZ:Z 指向的程序存储器空间的一个字节装入 Rd,然后 RAMPZ:Z 指针加1。
写程序存储器指令
SPM
说明:将寄存器对 R1:R0 的内容(16 位字)写入 Z 指向的程序存储器空间。
I/O口数据传送
1.I/O 口数据装入寄存器
IN Rd,P 0≤d≤31, 0≤P≤63
说明:将 I/O 空间(口、定时器、配置寄存器等)的数据传送到寄存器区中的寄存器Rd 中。
2.寄存器数据送 I/O 口
OUT P,Rr 0≤r≤31, 0≤P≤63
说明:将寄存器区中 Rr的数据传送到 I/O 空间(口、定时器、配置寄存器等) 。
堆栈操作指令
1.进栈指令
PUSH Rr 0≤d≤31
说明:该指令存储寄存器 Rr 的内容到堆栈。
2.出栈指令
POP Rd 0≤d≤31
说明:该指令将堆栈中的字节装入到寄存器 Rd中。
位操作和位测试指令
带进位逻辑操作指令
1.寄存器逻辑左移
LSL Rd 0≤d≤31
说明:寄存器 Rd 中所有位左移 1 位,第 0 位被清零,第 7 位移到 SREG 中的 C 标志。该指令完成一个无符号数乘 2 的操作。
操作:C←b b b b b b b b ←0 PC←PC+1 机器码:0000 11dd dddd dddd
2.寄存器逻辑右移
LSR Rd 0≤d≤31
说明:寄存器 Rd 中所有位右移 1 位,第 7 位被清零,第 0 位移到 SREG 中的 C 标志。该指令完成一个无符号数除 2 的操作,C 标志被用于结果舍入。
操作:0→b7b6b5b4b3b2b1b0→C PC←PC+1 机器码:1001 010d dddd 0110
3.带进位位的寄存器逻辑循环左移
ROL Rd 0≤d≤31
说明:寄存器 Rd 的所有位左移 1 位,C 标志被移到 Rd 的第 0 位,Rd 的第 7 位移到 C标志。
操作:C←b7b6b5b4b3b2b1b0←C PC←PC+1 (参见 ADC 指令)
4.带进位位的寄存器逻辑循环右移
ROR Rd 0≤d≤31
说明: 寄存器 Rd 的所有位右移 1 位, C 标志被移到 Rd 的第7位, Rd 的第0 位移到C 标志。
操作:C→b7b6b5b4b3b2b1b0→C PC←PC+1 机器码:1001 010d dddd 0111
5.寄存器算术右移
ASR Rd 0≤d≤31
说明:寄存器 Rd 中的所有位右移 1 位,而第 7 位保持原逻辑值,第 0 位被装入 SREG
的 C 标志位。这个操作实现 2 的补码值除 2,而不改变符号,进位标志用于结果的舍入。
6.寄存器半字节交换
SWAP Rd 0≤d≤31
说明:寄存器中的高半字节和低半字节交换。
位变量传送指令
1.寄存器中的位存储到 SREG 中的T 标志
BST Rr,b 0≤d≤31,0≤b≤7
说明:把寄存器 Rr 中的位 b 存储到SREG 状态寄存器中的 T 标志位中。
2.SREG 中的 T 标志位值装入寄存器 Rd 中的某一位
BLD Rd,d 0≤d≤31,0≤b≤7
说明:复制 SREG 状态寄存器的 T 标志到寄存器 Rd中的位 b。
位变量修改指令
1.状态寄存器 SREG 的指定位置“1”
BSET s 0≤s≤7
说明:置“1”状态寄存器 SREG 的某一标志位。
2.状态寄存器 SREG 的指定位清“0”
BCLR s 0≤s≤7
说明:清零 SREG 状态寄存器 SREG 中的一个标志位。
3.I/O 寄存器的指定位置“1”
SBI P,b 0≤P≤31, 0≤b≤7
说明: 对 P 指定的 I/O 寄存器的指定位置 “1” 。 该指令只在低 32 个I/O 寄存器内操作,I/O 寄存器地址为 0~31。
4.I/O 寄存器的指定位置“0”
CBI P,b 0≤P≤31,0≤b≤7
说明:清零指定 I/O 寄存器中的指定位。 该指令只用在低 32 个I/O 寄存器上操作, I/O寄存器地址为 0~31。
5.置进位位
SEC 置位 SREG 状态寄存器中的进位标志 C
6.清进位位
CLC 清零 SREG 状态寄存器中的进位标志 C
7.置位负标志位
SEN 置位 SREG 状态寄存器中的负数标志 N
8.清负标志位
CLN 清零 SREG 状态寄存器中的负数标志 N
9.置零标志位
SEZ 置位 SREG 状态寄存器中的零标志 Z
10.清零标志位
CLZ 清零 SREG 状态寄存器中的零标志 Z
11.触发全局中断位
SEI 置位 SREG 状态寄存器中的全局中断标志 I
12.禁止全局中断位
CLI 清除 SREG 状态寄存器中的全局中断标志 I
13.置S 标志位
SES 置位 SREG 状态寄存器中的符号标志 S
14.清S 标志位
CLS 清零 SREG 状态寄存器中的符号标志 S
15.置溢出标志位
SEV 置位 SREG 状态寄存器中的溢出标志 V
16.清溢出标志位
CLV 清零 SREG 状态寄存器中的溢出标志 V
17.置T 标志位
SET 置位 SREG 状态寄存器中的 T 标志
18.清T 标志位
CLT 清零 SREG 状态寄存器中的 T 标志
19.置半进位标志
SHE 置位 SREG 状态寄存器中的半进位标志 H
20.清半进位标志
CLH 清零 SREG 状态寄存器中的半进位标志 H
MCU控制指令
1.空操作指令
NOP
2.进入休眠方式指令
SLEEP
说明:该指令使 MCU 进入休眠方式运行。休眠模式由 MCU 控制寄存器定义。当 MCU 在休眠状态下由一个中断被唤醒时,在中断程序执行后,紧跟在休眠指令后的指令将被执行。
3.清零看门狗计数器
WDR
说明:该指令清零看门狗定时器。在允许使用看门狗定时器情况下,系统程序在正常运行中必须在 WD 预定比例器给出限定时间内执行一次该指令,以防止看门狗定时器溢出,造成系统复位。参见看门狗定时器硬件部分。
表3-6 伪指令表
序 号 伪 指 令 说 明 序 号 伪 指 令 说 明
1 BYTE 在RAM中定义预留存储单元 10 EXIT 退出文件
2 CSEG 声明代码段 11 INCLUDE 包含指定的文件
3 DB 定义字节常数 12 MACRO 宏定义开始
4 DEF 定义寄存器符号名 13 ENDMACRO 宏定义结束
5 DEVICE 指定为何器件生成汇编代码 14 LISTMAC 列表宏表达式
6 DSEG 声明数据段 15 LIST 列表文件生成允许器
7 DW 定义字常数 16 NOLIST 关闭列表文件生成
8 EQU 定义标识符常量 17 ORG 设置程序起始位置
9 ESEG 声名E2
PROM段 18 SET 赋值给标识符
伪指令表
| 序号 | 伪 指 令 | 说 明 | 序 号 | 伪 指 令 | 说 明 |
| 1 | BYTE | 在RAM中定义预留存储单元 | 10 | EXIT | 退出文件 |
| 2 | CSEG | 声明代码段 | 11 | INCLUDE | 包含指定的文件 |
| 3 | DB | 定义字节常数 | 12 | MACRO | 宏定义开始 |
| 4 | DEF | 定义寄存器符号名 | 13 | ENDMACRO | 宏定义结束 |
| 5 | DEVICE | 指定为何器件生成汇编代码 | 14 | LISTMAC | 列表宏表达式 |
| 6 | DSEG | 声明数据段 | 15 | LIST | 列表文件生成允许器 |
| 7 | DW | 定义字常数 | 16 | NOLIST | 关闭列表文件生成 |
| 8 | EQU | 定义标识符常量 | 17 | ORG | 设置程序起始位置 |
| 9 | ESEG | 声名E2PROM段 | 18 | SET | 赋值给标识符 |
