没有合适的资源?快使用搜索试试~ 我知道了~
AVR汇编指令1
需积分: 0 1 下载量 70 浏览量
2022-08-03
21:11:52
上传
评论
收藏 745KB PDF 举报
温馨提示
试读
35页
第 3 章 ATmega128(L)的指令系统本章目标本章主要介绍 ATmega128(L)的指令系统,首先分析 ATmega128(L)的指令的特点、分类和寻
资源详情
资源评论
资源推荐
《AVR 单片机 C 语言开发入门与典型实例》(修订版)
作者:华清远见
第 3 章
ATmega128
(
L
)的指令系统
本章目标
本章主要介绍 ATmega128(L)的指令系统,首先分析 ATmega128(L)的
指令的特点、分类和寻址方式,并详细介绍了指令系统的每条指令,最后介绍了
ATmega128(L)汇编语言的一些基本知识。本章的主要内容有以下几个方面。
指令系统的特点、分类和寻址方式
分类介绍指令系统的每条指令
汇编语言的介绍
专业始于专注 卓识源于远见
‐ 2 ‐
3.1 ATmega128(L)的指令系统概述
对于 ATmega128(L)来说,它不仅具备比较完善和功能强大的硬件结构和组成,如 SPI、USART、TWI、
ADC 和模拟比较器等,而且它的指令系统采用先进的 RISC 体系结构,从而使 AT mega128(L)的整体表
现更加出色,可以应用在很多场合。
ATmega128(L)的指令系统是 RISC 结构的精简指令集,完全兼容 AV R 单片机的指令系统,具有高性能
的数据处理能力,可以对位、半字节、字节和双字节数据进行各种操作,包括算术和逻辑运算、数据传输、
布尔运算、控制转移和硬件乘法等操作。
ATmega128(L)的指令系统中共有 133 条指令,按功能可以分为以下 5 大类。
算术和逻辑运算指令(28 条),如表 3.1 所示;
比较和跳转指令(36 条),如表 3.2 所示;
数据传输指令(38 条),如表 3.3 所示;
位操作和位测试指令(28 条),如表 3.4 所示;
MCU控制指令(3 条),如表 3.5 所示。
表 3.1 Tmega128(L)指令系统中的算术和逻辑运算指令(28 条)
助 记 符 操 作 数 说 明 操 作 受影响的标志位
ADD
Rd,Rr 两个寄存器相加 Rd←Rd+Rr Z、C、N、V 和 H
ADC
Rd,Rr 两个寄存器带进位相加 Rd←Rd+Rr+C Z、C、N、V 和 H
ADIW
Rdl,K 立即数与字相加
Rdh
:
Rdl←Rdh+Rdl+K
Z、C、N、V 和 S
SUB
Rd,Rr 两个寄存器相减 Rd←Rd−Rr Z、C、N、V 和 H
SUBI
Rd,K 寄存器与常数相减 Rd←Rd−K Z、C、N、V 和 H
SBC
Rd,Rr 两个寄存器带进位相减 Rd←Rd−Rr−C Z、C、N、V 和 H
SBCI
Rd,K 寄存器带常数及进位相减 Rd←Rd−K−C Z、C、N、V 和 H
SBIW
Rdl,K 字与立即数相减
Rdh
:
Rdl←Rdh+Rdl−K
Z、C、N、V 和 S
AND
Rd,Rr 两个寄存器逻辑与 Rd←Rd•Rr Z、N、V 和 S
ANDI
Rd,K 寄存器与常数逻辑与 Rd←Rd•K Z、N、V 和 S
OR
Rd,Rr 两个寄存器逻辑或 Rd←Rd v Rr Z、N、V 和 S
ORI
Rd,K 寄存器与常数逻辑或 Rd←Rd v K Z、N、V 和 S
EOR
Rd,Rr 两个寄存器异或
Rd←Rd
Rr
Z、N、V 和 S
COM Rd
取反 Rd←$FF−Rd Z、C、N、V 和 S
NEG Rd
取补 Rd←$00−Rd I 和 T 外的所有位
SBR
Rd,K 置位寄存器的某些位 Rd←Rd v K Z、N、V 和 S
CBR
Rd,K 清零寄存器的某些位 Rd←Rd•($FF−K) Z、N、V 和 S
INC Rd
加 1 Rd←Rd+1 Z、N、V 和 S
DEC Rd
减 1 Rd←Rd−1 Z、N、V 和 S
TST Rd
测试寄存器值为 0 或负 Rd←Rd•Rd Z、N、V 和 S
CLR Rd
清零寄存器
Rd←Rd
Rd
Z、N、V 和 S
SER Rd
置位寄存器 Rd←$FF 无
MUL
Rd,Rr 无符号数相乘
R1
:
R0←Rd x Rr
Z 和 C
MULS
Rd,Rr 有符号数相乘
R1
:
R0←Rd x Rr
Z 和 C
MULSU
Rd,Rr 有符号数与无符号数相乘
R1
:
R0←Rd x Rr
Z 和 C
FMUL
Rd,Rr 无符号小数相乘
R1
:
R0←(Rd x Rr)<<1
Z 和 C
专业始于专注 卓识源于远见
‐ 3 ‐
FMULS
Rd,Rr 有符号小数相乘
R1
:
R0←(Rd x Rr)<<1
Z 和 C
FMULSU
Rd,Rr 有符号与无符号小数相乘
R1
:
R0←(Rd x Rr)<<1
Z 和 C
表 3.2 ATmega128(L)指令系统中的比较和跳转指令(36 条)
助记符 操作数 说 明 操 作 受影响的标志位
RJMP k
相对跳转 PC←PC+k+1 无
IJMP
无 间接跳转到(Z) PC←Z 无
JMP k
直接跳转 PC←k 无
RCALL k
相对子程序调用 PC←PC+k+1 无
ICALL
无 相对调用到(Z) PC←Z 无
CALL k
直接子程序调用 PC←k 无
RET
无 子程序返回 PC←STACK 无
RETI
无 中断返回 PC←STACK
I
CPSE
Rd,Rr 比较,相等则跳过下一条指令 if(Rd=Rr) PC←PC+2or3 无
CP
Rd,Rr 比较
Rd−Rr
Z、N、V、C 和 H
CPC
Rd,Rr 带进位位比较
Rd−Rr−C
Z、N、V、C 和 H
CPI
Rd,K 比较寄存器与立即数
Rd−K
Z、N、V、C 和 H
SBRC
Rr,b 寄存器的某位清 0 即跳转 if(Rr(b)=0) PC←PC+2 or 3 无
SBRS
Rr,b 寄存器的某位置位即跳转 if(Rr(b)=1) PC←PC+2 or 3 无
SBIC
P,b I/O 寄存器的某位清 0 即跳转 if(P(b)=0) PC←PC+2 or 3 无
SBIS
P,b I/O 寄存器的某位置位即跳转 if(P(b)=1) PC←PC+2 or 3 无
BRBS
s,k 状态标志置位即跳转 if(SREG(s)=1) then PC←PC+k+1 无
BRBC
s,k 状态标志清 0 即跳转 if(SREG(s)=0) then PC←PC+k+1 无
BREQ k
相等即跳转 if(Z=1) then PC←PC+k+1 无
BRNE k
不相等即跳转 if(Z=0) then PC←PC+k+1 无
BRCS k
进位标志置位即跳转 if(C=1) then PC←PC+k +1 无
BRCC k
进位标志清 0 即跳转 if(C=0) then PC←PC+k+1 无
BRSH k
相同或更大即跳转 if(C=0) then PC←PC+k+1 无
BRLO k
小于即跳转 if(C=1) then PC←PC+k+1 无
BRMI k
负数即跳转 if(N=1) then PC←PC+k+1 无
BRPL k
正数即跳转 if(N=0) then PC←PC+k+1 无
BRGE k
有符号数大于/等于即跳转
if(N
V=0) then PC←PC+k+1
无
BRLT k
有符号数小于 0 即跳转
if(N
V=1) then PC←PC+k+1
无
BRHS k
半进位标志置位即跳转 if(H=1) then PC←PC+k+1 无
BRHC k
半进位标志清 0 即跳转 if(H=0) then PC←PC+k+1 无
BRTS k
T 标志置位即跳转 if(T=1) then PC←PC+k+1 无
BRTC k
T 标志清 0 即跳转 if(T=0) then PC←PC+k+1 无
BRVS k
溢出标志置位即跳转 if(V=1) then PC←PC+k+1 无
BRVC k
溢出标志清 0 即跳转 if(V=0) then PC←PC+k+1 无
BRIE k
中断使能即跳转 if(I=1) then PC←PC+k+1 无
BRID k
中断禁止即跳转 if(I=0) then PC←PC+k+1 无
表 3.3 ATmega128(L)指令系统中的数据传输指令(38 条)
助记符 操作数 说 明 操 作 受影响的标志位
MOV
Rd,Rr 寄存器之间数据转移 Rd←Rr 无
专业始于专注 卓识源于远见
‐ 4 ‐
MOVW
Rd,Rr 寄存器字传输
Rd+1
:
Rd←Rr+1
:
Rr
无
LDI
Rd,K 加载立即数 Rd←K 无
LD
Rd,X 间接加载 Rd←(X) 无
LD
Rd,X+ 间接加载并执行后加操作 Rd←(X),X←X+1 无
LD
Rd,−X 间接加载并执行预减操作 X←X−1,Rd←(X) 无
LD
Rd,Y 间接加载 Rd←(Y) 无
LD
Rd,Y+ 间接加载并执行后加操作 Rd←(Y),Y←Y+1 无
LD
Rd,−Y 间接加载并执行预减操作 Y←Y−1,Rd←(Y) 无
LDD
Rd,Y+q 带偏移量的间接加载 Rd←(Y+q) 无
LD
Rd,Z 间接加载 Rd←(Z) 无
LD
Rd,Z+ 间接加载并执行后加操作 Rd←(Z),Z←Z+1 无
LD
Rd,−Z 间接加载并执行预减操作 Z←Z−1,Rd←(Z) 无
LDD
Rd,Z+q 带偏移量的间接加载 Rd←(Z+q) 无
LDS
Rd,k 从 SRAM 中直接加载 Rd←(k) 无
ST
X,Rr 间接存储 (X)←Rr 无
ST
X+,Rr 间接存储并执行后加操作 (X)←Rr,X←X+1 无
ST
−X,Rr 间接存储并执行预减操作 X←X−1,(X)←Rr 无
ST
Y,Rr 间接存储 (Y)←Rr 无
ST
Y+,Rr 间接存储并执行后加操作 (Y)←Rr,Y←Y+1 无
ST
−Y,Rr 间接存储并执行预减操作 Y←Y−1,(Y)←Rr 无
STD
Y+q,Rr 带偏移量的间接存储 (Y+q)←Rr 无
ST
Z,Rr 间接存储 (Z)←Rr 无
ST
Z+,Rr 间接存储并执行后加操作 (Z)←Rr,Z←Z+1 无
ST
−Z,Rr 间接存储并执行预减操作 Z←Z−1,(Z)←Rr 无
STD
Z+q,Rr 带偏移量的间接存储 (Z+q)←Rr 无
STS
k,Rr 直接存储到 SRAM (k)←Rr 无
LPM
无 加载程序存储器 R0←(Z) 无
LPM
Rd,Z 加载程序存储器 Rd←(Z) 无
LPM
Rd,Z+ 加载程序存储器并执行后加操作 Rd←(Z),Z←Z+1 无
ELPM
无 扩展的加载程序存储器操作
R0←(RAMPZ
:
Z)
无
ELPM
Rd,Z 扩展的加载程序存储器操作
Rd←(RAMPZ
:
Z)
无
ELPM
Rd,Z+
扩展的加载程序存储器操作并执
行后加操作
Rd←(RAMPZ
:
Z),
RAMPZ
:
Z←RAMPZ
:
Z+1
无
SPM
无 存储程序存储器
(Z)←R1
:
R0
无
IN
Rd,P 读入端口数据 Rd←P 无
OUT
P,Rr 将数据输出到端口 P←Rr 无
PUSH Rr
将寄存器的数值推入堆栈 STACK←Rr 无
POP Rd
将寄存器的数值弹出堆栈 Rd←STACK 无
表 3.4 ATmega128(L)指令系统中的位操作和位测试指令(28 条)
助记符 操作数 说 明 操 作 受影响的标志位
SBI
P,b 置位 I/O 寄存器的某一位 I/O(P,b)←1 无
CBI
P,b 清零 I/O 寄存器的某一位 I/O(P,b)←0 无
LSL Rd
逻辑左移 Rd(n+1)←Rd(n),Rd(0)←0 Z、C、N 和 V
LSR Rd
逻辑右移 Rd(n)←Rd(n+1),Rd(7)←0 Z、C、N 和 V
ROL Rd
通过进位位向左循环 Rd(0)←C,Rd(n+1)←Rd(n), Z、C、N 和 V
专业始于专注 卓识源于远见
‐ 5 ‐
C←Rd(7)
ROR Rd
通过进位位向右循环
Rd(7)←C,Rd(n)←Rd(n+1),
C←Rd(0)
Z、C、N 和 V
ASR Rd
算术右移 Rd(n)←Rd(n+1),n=0~6 Z、C、N 和 V
SWAP Rd
高 4 位与低 4 位交换 Rd(3~0)←Rd(7~4),Rd(7~4)←Rd(3~0) 无
BSET s
置位标志位 SREG(s)←1
SREG(s)
BCLR s
清 0 标志位 SREG(s)←0
SREG(s)
BST
Rr,b 将寄存器的某一位保存到 TT←Rr(b)
T
BLD
Rd,b 将T 加载到寄存器的某一位 Rd(b)←T 无
SEC
无 置位进位位 C←1
C
CLC
无 清 0 进位位 C←0
C
SEN
无 置位负数标志位 N←1
N
CLN
无 清 0 负数标志位 N←0
N
SEZ
无 置位 0 标志位 Z←1
Z
CLZ
无 清 0 零标志位 Z←0
Z
SEI
无 全局中断标志位置位 I←1
I
CLI
无 全局中断标志位清 0 I←0
I
SES
无 置位符号测试标志位 S←1
S
CLS
无 清 0 符号测试标志位 S←0
S
SEV
无 置位 2 的补码溢出标志 V←1
V
CLV
无 清除 2 的补码溢出标志 V←0
V
SET
无 置位 SREG 的 T 标志 T←1
T
CLT
无 清除 SREG 的 T 标志 T←0
T
SEH
无 置位 SREG 的半进位标志 H←1
H
CLH
无 清除 SREG 的半进位标志 H←0
H
表 3.5 ATmega128(L)指令系统中的 MCU 控制指令(3 条)
助 记 符 操 作 数 说 明 操 作 受影响的标志位
NOP
无 无操作 无 无
SLEEP
无 休眠 参见有关休眠的说明 无
WDR
无 看门狗复位 参见有关看门狗定时器的说明 无
BREAK
无
Break
只用于片上调试 无
表 3.1~3.5 中给出了 ATmega128(L)指令系统的所有指令助记符、操作数及相应的操作,下面对其中所
使用的符号的意义进行简单地说明。
(1)状态寄存器及其中的标志位说明如下。
SREG:状态寄存器;
C:进位标志位,表示一个算术或逻辑操作之后有无产生进位;
Z:零标志位,表示一个算术或逻辑操作之后的结果是否为 0;
N:负数标志位,表示一个算术或逻辑操作之后的结果是否为负数;
V:二进制的补码溢出标志位,用来支持二进制的补码运算;
S:符号标志位,由式子“S=N
V”决定,即负数标志位 N 和二进制的补码溢出标志位 V 两者的异或
值;
H:半进位标志位,指示了一些 ALU 操作过程中有无半进位的出现;
T:位拷贝存储位,通常出现在位拷贝指令 BLD 和 BST 中作为目的或源地址;
I:全局中断使能位。
(2)寄存器和操作码的说明如下。
剩余34页未读,继续阅读
WaiyuetFung
- 粉丝: 63
- 资源: 316
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0