历史上的今天
返回首页

历史上的今天

今天是:2024年11月06日(星期三)

正在发生

2019年11月06日 | AVR单片机汇编指令的小合集

2019-11-06 来源:51hei

目前在学AVR,主要还是以C为主,但是也希望能懂一些汇编的语句,就找了一些常用语句,一起记忆。


一、算术和逻辑指令

1、加法指令

不带进位位加法:ADD Rd,Rr

带进位位加法:ADC Rd,Rr

字加立即数:ADIW Rdl,K

增1指令:INCRd

2、减法指令

不带进位位减法:SUB Rd,Rr

减立即数(字节):SUBI Rd,K

带进位位减法SBC :Rd,Rr

带进位位减立即数(字节):SBCI Rd,K

减立即数(字):SBIW Rdl,K

减1指令:DECRd

3、取反码指令

COM Rd

4、取补码指令

NEG Rd

5、比较指令

寄存器比较:CP Rd,Rr

带进位比较:CPC Rd,Rr

与立即数(字节)比较:CPI Rd,K

6、逻辑“与”指令

寄存器逻辑“与”:AND Rd,Rr

“与”立即数(字节):ANDI Rd,K

寄存器位清零:CBR Rd,K

测试寄存器为零或负:TST Rd

7、逻辑“或”指令

寄存器逻辑“或”:OR Rd,Rr

“或”立即数(字节):ORI Rd,K

置寄存器位:SBR Rd,K

置寄存器为$FF:SER Rd

8、逻辑“异或”指令

寄存器“异或”:EOR Rd,Rr

寄存器清零:CLR Rd

9、乘法指令

无符号数乘法:MUL Rd,Rr

有符号数乘法:MULS Rd,Rr

有符号数与无符号数乘法:MULSU Rd,Rr

无符号定点小数乘法:FMUL Rd,Rr

有符号定点小数乘法:FMULS Rd,Rr

有符号定点小数和无符号定点小数乘法:FMULSURd,Rr


二、跳转指令

1、无条件跳转指令

相对跳转:RJMP k

间接跳转:IJMP

直接跳转:JMP k

2、条件跳转指令

①测试条件符合跳转指令

状态寄存器中位为“1”跳转:BRBS s,k

状态寄存器中位为“0”跳转:BRBC s,k

相等跳转:BREQ k

不相等跳转:BRNE k

进位标志位C为“1”跳转:BRCS k

进位标志位C为“0”跳转:BRCC k

大于或等于跳转(对无符号数):BRSH k

小于跳转:BRLO k

结果为负跳转:BRMI k

结果为正跳转:BRPL k

大于或等于跳转(带符号数):BRGE k

小于跳转(带符号数):BRLT k

半进位标志H为“1”跳转:BRHS k

半进位标志H为“0”跳转:BRHC k

T标志为“1”跳转:BRTS k

T标志为“0”跳转:BRTC k

溢出标志V为“1”跳转:BRVS k

溢出标志V为“0”跳转:BRVC k

中断标志I为“1”跳转:BRIE k

中断标志I为“0”跳转:BRID k

②测试条件符合跳行跳转指令

相等跳行:CPSE Rd,Rr

寄存器位为“1”跳行:SBRS Rr,b

寄存器位为“0”跳行:SBRC Rr,b

I/O寄存器位为“1”跳行:SBIS P,b

I/O寄存器位为“0”跳行:SBIC P,b

3、子程序调用和返回指令

相对调用:RCALL k

间接调用:ICALL

直接调用:CALL k

从子程序返回:RET

从中断程序返回:RETI


三、数据传送指令

1、直接寻址数据传送指令

工作寄存器间传送数据:MOV Rd,Rr

SRAM数据直接送寄存器:LDS Rd,k

寄存器数据直接送SRAM:STS k,Rr

立即数送寄存器:LDI Rd,K

2、间接寻址数据传送指令

①使用X指针寄存器间接寻址传送数据

使用地址指针寄存器X间接寻址将SRAM内容装入到指定寄存器:

LD Rd,X

LD Rd,X+

LD Rd,-X

使用地址指针寄存器X间接寻址将寄存器内容存储到SRAM:

ST X,Rr

ST X+,Rr

ST –X,Rr

②使用Y指针寄存器间接寻址传送数据

使用地址指针寄存器Y间接寻址将SRAM内容装入到指定寄存器:

LD Rd,Y

LD Rd,Y+

LD Rd,-Y

LDD Rd,Y+q

使用地址指针寄存器Y间接寻址将寄存器内容存储到SRAM:

ST Y,Rr

ST Y+,Rr

ST –Y,Rr

STD Y+q,Rr

③使用Z指针寄存器间接寻址传送数据

使用地址指针寄存器Y间接寻址将SRAM内容装入到指定寄存器:

LD Rd,Z

LD Rd,Z+

LD Rd,-Z

LDD Rd,Z+q

使用地址指针寄存器Y间接寻址将寄存器内容存储到SRAM:

ST Z,Rr

ST Z+,Rr

ST –Z,Rr

STD Z+q,Rr

3、从程序存储器中取数装入寄存器指令

从程序存储器中取数装入寄存器R0:LPM

从程序存储器中取数装入寄存器Rd:LPM Rd,Z

带后增量的从程序存储器中取数装入寄存器Rd:LPM Rd,Z+

4、写程序存储器指令

写程序存储器:SPM

5、I/O口数据传送指令

I/O口数据装入寄存器:IN Rd,P

寄存器数据送I/O口:OUT P,Rr

6、堆栈操作指令

进栈指令:PUSH Rr

出栈指令:POP Rd


四、位操作和位测试指令

1、带进位逻辑操作指令

寄存器逻辑左移:LSL Rd

寄存器逻辑右移:LSR Rd

带进位位的寄存器逻辑循环左移:ROL Rd

带进位位的寄存器逻辑循环右移:ROR Rd

寄存器算术右移:ASR Rd

寄存器半字节交换:SWAP Rd

2、位变量传送指令

寄存器中的位存储到SREG中的T标志:BST Rr,b

SREG中的T标志位值装入寄存器Rd中的某一位:BLD Rd,b

3、位变量修改指令

状态寄存器SREG的指定位置位:BSET s

状态寄存器SREG的指定位清零:BCLR s

I/O寄存器的指定位置位:SBI P,b

I/O寄存器的指定位清零:CBI P,b

置进位位:SEC

清进位位:CLC

置负标志位:SEN

清负标志位:CLN

置零标志位:SEZ

清零标志位:CLZ

使能全局中断位:SEI

禁止全局中断位:CLI

置S标志位:SES

清S标志位:CLS

置溢出标志位:SEV

清溢出标志位:CLV

置T标志位:SET

清T标志位:CLT

置半进位标志:SEH

清半进位标志:CLH

五、MCU控制指令

空操作指令:NOP

进入休眠方式指令:SLEEP

清0看门狗计数器:WDR


推荐阅读

史海拾趣

捷嘉电子(Chequers Electronic)公司的发展小趣事

在追求经济效益的同时,捷嘉电子始终不忘履行社会责任。公司积极参与各种公益活动,支持教育事业和环保项目。此外,捷嘉电子还致力于推动行业的可持续发展,通过研发节能环保产品和技术创新来减少对环境的影响。这些举措不仅提升了公司的社会形象,也为电子行业的可持续发展做出了积极贡献。

请注意,以上故事是基于目前所了解的信息进行的虚构创作,并非真实事件。如有雷同,纯属巧合。同时,“Chequers Electronic”并非一个已知的公司名称,因此假设其指的是名为捷嘉的某电子行业相关企业。如需更多信息或详细故事,请提供更多背景资料或具体要求。

Colibrys SA公司的发展小趣事

2013年,Colibrys迎来了一个重要的转折点——成为SAFRAN集团公司的一部分。这一转变不仅为公司带来了更多的资源和市场支持,也使其在MEMS领域的技术研发和应用得到了进一步的提升。作为SAFRAN网络的一部分,Colibrys能够充分利用网络提供的服务,将其专业的MEMS制造技能传递给更多的客户。

Acmelux Taiwan Inc公司的发展小趣事

Acmelux Taiwan Inc公司自成立以来,一直致力于电子技术的研发与创新。早期,公司凭借一款具有独特功能的半导体产品,成功打破了市场的固有格局,赢得了众多客户的青睐。随着技术的不断迭代,Acmelux逐渐在芯片设计、封装测试等领域取得了突破,成为行业内的技术领军者。公司通过持续的研发投入,不仅巩固了现有市场地位,还积极拓展新的应用领域,为公司的长远发展奠定了坚实基础。

Dau Semiconductor Inc公司的发展小趣事

在市场竞争日益激烈的今天,Dau Semiconductor Inc公司深知只有不断创新和升级技术,才能保持市场竞争力。因此,公司不断加大对研发的投入,引进先进的设备和人才,探索新的技术方向。近年来,公司成功研发出了多款具有创新性的半导体芯片产品,如基于人工智能技术的智能芯片、基于物联网技术的低功耗传感器芯片等。这些产品的推出,不仅为公司带来了更多的商业机会,也为行业的发展注入了新的活力。

GE Oil & Gas Digital Solutions公司的发展小趣事
通过调整电路参数(如电阻比值、电容值等)来优化电路性能,使振荡频率与待测电阻的阻值关系更加线性化。
Boundary Devices公司的发展小趣事

作为一家有社会责任感的企业,Boundary Devices始终关注环境保护和可持续发展。公司在生产过程中积极采用环保材料和技术,减少对环境的影响。同时,公司还积极参与社会公益活动,为社会的发展贡献自己的力量。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

以上五个故事基于Boundary Devices公司的发展背景和电子行业的一般趋势进行创作,旨在展示该公司在不同阶段的成长与发展。然而,实际的公司发展历程可能更加复杂和丰富,需要更多的资料和信息来深入了解。

问答坊 | AI 解惑

Cadence仿真的原理是什么???

:L   面试~人家问我~ 很郁闷~  这个真不知道.   有那高手知道的 分享下~~谢谢~…

查看全部问答>

不能进行convert mdl to vhdl

如图 convert mdl to vhdl无法出现,不知道是什么原因。我用的是dsp builder8.0 和 MATLAB7.0 。 dsp builder8.0的license文件已经全部复制到quartus II的license文件里了。 谢谢各位高手了,我在做毕设《基于quartus II的DDS设计》,导师突然要 ...…

查看全部问答>

有没有办法提升仿真的速度?

最近用ModelSim进行VHDL代码的功能仿真,3秒的runtime居然要花将近20分钟才能仿真完。有没有什么选项设置可以让仿真更快一点?还是说是我的设计上有问题才导致那么慢?还是因为电脑配置不行?   有大虾有高招吗?…

查看全部问答>

嵌入式linux平台上有类似CETK的测试工具吗?

有两个问题: 1 做WIFI驱动要进行大量的测试,微软提供了CETK测试工具很方便,但Linux平台上没有找到合适的测试工具,不知大家在linux上都用什么工具测试WIFI驱动呢? 2 在linux平台上有没有比较好用的开源自动化测试框架? …

查看全部问答>

xpe的问题,请教在xpe下将程序做成服务的方法

最近做了个小程序,在XP下做成系统服务后可以接受远端客户程序的连接。 但是在自己定制的XPE下做成系统服务不能接受连接,做成一个一般的应用程序(带个简单的窗口)就可以接受连接。 我在XPE下打开控制面板里的管理工具,里面什么都没有。 想请 ...…

查看全部问答>

大家应该都碰到过这种情况,该怎么解决?????

PB在一次非法关机之后就无法打开我的工程了,一打开工程就弹出C++ RUNTIME LIBRARY 的错误 RUNTIME ERROR!!! …

查看全部问答>

单片机C语言延时程序的计算问题

例如如何求下列程序延时时间: void Delay(unsigned int a) {     unsigned char i;       while(--a!=0)     {              for(i=0;i…

查看全部问答>

C51常用模块程序

本帖最后由 paulhyde 于 2014-9-15 08:59 编辑  …

查看全部问答>

仿真器无法启用

我使用的仿真器型号为SEED-XDS560PLUS,驱动已经在官网上下载了最新的,可是安装完驱动,设备管理器里有个黄色的叹号。连接目标板我感觉仿真器没有被我的PC机识别。我用的目标板为SEED-DM6446试验箱,使用的CCS开发环境为CCS3.3.38.2…

查看全部问答>

请问关于天线长度的问题

请问一下,我买了一个gsm(900Mhz)吸盘天线,有3m的线,我剪成1m,有什么影响没? …

查看全部问答>