历史上的今天
返回首页

历史上的今天

今天是:2025年02月22日(星期六)

2020年02月22日 | ARM指令集——数据处理指令

2020-02-22 来源:eefocus

ARM汇编指令集


ARM汇编文件的组成


指令:编译完成后作为一条指令(机器码)存储在内存单元中,CPU执行时能够完成处理的操作

伪指令:在编译时替换成能被识别的ARM指令

伪操作:知道编译器进行编译,编译完成后不生成指令,也不占用内存空间。

ARM汇编指令类型


数据处理指令

跳转指令:实现程序执行过程中的跳转

Load/Store指令:CPU与内存数据之间的操作指令

状态寄存器存送指令:对状态寄存器操作(只能使用这些指令对状态寄存器操作)

协处理器指令:对协处理器进行操作

异常产生指令:产生异常(软中断),实现模式切换

数据处理指令 mov,add,adds,adc,sub,subs,sbc,rsb,mul,and,orr,eor,bic,cmp,tst,teq,lsl,lsr,asr,rorv


数据处理指令语法


<操作{}{S}> , ,

<操作码> <目标寄存器Rd> <第一操作寄存器Rn> <第二操作数Operand2>

;第一个位置必须是寄存器,第二操作数可以是寄存器,也可以是立即数

 


数据传送指令  MOV


mov r1, #0x1  ;r1 = 0x1    0x1 是立即数

mov r2, r1  ;r2 = r1 

mvn r3, r2  ;r3 = ~r2

mov r1, 0xffffff00  ;0xffffff00 不是立即数,只是编译器在编译阶段对其进行了替换

mvn r1, 0x000000ff  ;替换的指令


;一条数据传送指令 mov reg, #n mov reg占用 bit[31:12],bit[11:0]留给立即数使用,因此立即数自包含2^12个

;一个立即数由 bits[8:0]循环右移 2 * bits[11:9]得到。(一个八位的数循环右移偶数次得到)

;立即数的本质是包含于指令中的数,占用指令本身的空间


加法指令 ADD


;加法指令执行时,若没有进位 CPSR 'C' 位置 0

mov r0, #1

mov r1, #1

add r2, r1, r0  ;r2 = r1 + r0

add r2, r1, #2  ;r2 = r1 + 2

 数据操作对CPSR的影响 


;默认情况下,数据处理指令不影响条件码标志位,但可以选择通过添加“S”来影响标志位。

mov r1, #0mov r2, #-1

adds r3, r1, r2 

带进位的加法指令 ADC



;两个64位数相加,第一个64位的低32位放在 r0,高位放到 r1,第二个64位数的低32位放在 r2 高32位放在 r3

;编写代码实现两个64位数的和,结果的低32位放在 r4 高32位放在 r5

mov r0, #0xfffffffe  ;第一个数的低32位

mov r1, #1  ;第一个数的高32位

mov r2, #0x5  ;第二个数的低32位 

mov r3, #1  ;第二个数的高32位

adds r4, r0, r2 

adc r5, r1, r3  ; adc运算的实质是 r5 = r1 + r3 + 'C'  'C'位 CPSR 进位标志


减法指令 SUB


;减法指令执行时,没有借位时 CPSR 'C' 位置 1

mov r0, #5

mov r1, #3

sub r2, r0, r1  ;r2 = r0 - r1

带借位的减法指令 SBC


mov r0, #1  ;第一个数的低32位

mov r1, #3  ;第一个数的高32位

mov r2, #3  ;第二个数的低32位

mov r3, #1  ;第二个输的高32位

subs r4, r0, r2  

sbc r5, r1, r3


逆向减法指令 RSB


mov r0, #3

rsb r1, r0, #5  ;r1 = 5 - r0

乘法指令 MUL


;为了提高效率,任何乘法指令不可以使用立即数

mov r0, #3

mov r1, #5

mov r2, r0, r1  ;r2 = r0 * r1

乘——累加指令 MLA


mla r3 ,r0, r1, r2  ;r3 = (r0 * r1) + r2

逻辑与指令 AND


mov r0, #0xf0

mov r1, #0x0f

and r2, r0, r1  ;r2 = r0 & r1

逻辑或指令 ORR


mov r0, #0xf0

mov r1, #0x0f

orr r2, r0, r1  ;r2 = r0 | r1

逻辑异或运算指令 EOR


mov r0, #0xf0

mov r1, #0x0f

eor r2, r0, r1  ;r2 = r0 ^ r1

位清零指令 BIC


mov r0, #0xff

bic r0, r0, #0xf  ;第二个操作数的每一位为 1 就把第一个操作数对应的位清零

 比较指令 CMP


;实质是一条减法指令

;没有目标register,用来比较两个数是否相等,结果放到 CPSR 的 'Z' 位判断

mov r0, #2

mov r1, #1

cmp r0, r1

 位测试指令 TST


;实质是与运算 常用于用来测试某一位或某几位是 0 还是 1,结果通过 CPSR 的 'Z' 位判断

tst r0, #0x3

 相等测试指令 TEQ


;实质是异或运算,测试两个数是否相等,两个数相等时异或结果位 0,通过 CPSR 的 'Z' 位判断

teq r0, r1

 移位指令 LSL、LSR、ASR、ROR



;需要与mov配合,不能够单独使用

mov r0, #0xff

mov r1, r0, lsl #4  ;将 r0 逻辑左移 4 位放入 r1 中

;LSL 逻辑左移:高位移出,低位补零

;LSR 逻辑右移:低位移出,高位补零

;ASR 算是右移:低位移出,高位补符号位

;ROR 循环右移:低位移出,高位补低位移出位


推荐阅读

史海拾趣

芯旺微电子(ChipON)公司的发展小趣事

近年来,芯旺微电子在资本市场也取得了显著的成果。公司先后完成了多轮融资,吸引了众多知名投资机构的关注和投资。同时,芯旺微电子也在积极推进上市进程,计划通过资本市场进一步拓展业务规模和提升品牌影响力。这些战略布局的实施不仅为芯旺微电子提供了更多的资金支持和发展动力,也为其未来的发展奠定了坚实的基础。

恒连电子(EVERCOM)公司的发展小趣事

恒连电子注重企业文化建设和团队建设,为员工创造了一个良好的工作环境和发展平台。公司倡导“以人为本”的管理理念,关注员工的成长和发展,为员工提供丰富的培训和学习机会。同时,公司还建立了完善的激励机制和福利制度,激发员工的工作积极性和创造力。在团队建设方面,公司注重团队协作和沟通能力的培养,鼓励员工相互学习、共同进步。通过优秀的团队建设和企业文化建设,恒连电子打造了一支高效、专业、团结的队伍,为公司的发展提供了有力的人才保障。

Daniel Woodhead公司的发展小趣事

随着技术的不断进步,Daniel Woodhead公司开始将目光投向更广阔的市场。公司推出了一系列基于自家微处理器的电子产品,如个人计算机、服务器和工作站等。这些产品凭借其出色的性能和稳定性,在市场上获得了良好的口碑。同时,公司还加大了品牌宣传力度,通过赞助科技展会和举办技术研讨会等活动,进一步提升了品牌影响力。

Digital View公司的发展小趣事

Digital View公司成立于1995年,当时正值电子显示技术快速发展的时期。公司创始人凭借对数字显示技术的深刻理解和前瞻性的市场洞察力,决定专注于平板数字显示市场连接解决方案的研发和生产。在创业初期,公司面临资金短缺、技术瓶颈等多重困难,但团队凭借坚韧不拔的精神,成功开发出多款具有竞争力的产品,逐渐在市场上获得认可。

Delta Electronics公司的发展小趣事

Delta Electronics在电源管理技术方面一直处于行业领先地位。公司不断投入研发资源,推动电源技术的创新和进步。其中,Delta开发的高效率开关式电源供应器,以其高效、稳定和可靠的性能,赢得了全球客户的广泛认可。此外,公司还积极推广绿色能源和节能技术,为客户提供环保、节能的电源解决方案。

格科微电子(GALAXYCORE)公司的发展小趣事

除了电源管理技术外,Delta在工业自动化领域也取得了重要突破。公司开发了一系列工业自动化产品和解决方案,如变频器、PLC、HMI等,广泛应用于机械制造、自动化生产线等领域。这些产品和解决方案不仅提高了生产效率,降低了生产成本,还为客户提供了更加智能化、自动化的生产方式。

问答坊 | AI 解惑

有利用单片机实现数据采集之后再串口传输的实例吗?

因为接触单片机应用的时间不常,想看看有没有这方面的实例可以参考的 谢谢啦!!…

查看全部问答>

VS.NET 2005开发PDA用程序

有这么一个小程序,就是当数据库有数据的时候,会弹出一个对话框,在弹出对话框的同时,我想加上一段提示音,但是试了好几种方法,都不行,哪位高手能指教下啊,小弟感激不敬!!…

查看全部问答>

哪位在本本上用并口连接过H-Jtag 调试?

这样的是: 在PC上我跑IAR, 和 ADS 的两个工程文件,都没有问题, 用自己做的调试板+H-JTAG,都能正常 而换到本本上,在H-JTAG时,检测硬件都没问题,但调试时,分别出了问题: 1 在ADS 上, 按F5后,跑不到,MAIN() 函数那,发现死在 PLL初 ...…

查看全部问答>

WINCE驱动程序是否可以同时开启SPI中断和DMA中断?

请教一下,一个驱动程序程序中,可不可以同时存在SPI中断和DMA中断?还是只能用一个中断? 当驱动程序使用了DMA中断后,SPI中断是否起作用?…

查看全部问答>

【求助】关于延时的问题!

我用C写延时子程序,请问怎么样才可以算出延时了多久呀!好像430讲时序方面也讲的很少,哪位高手有这方面的资料或程序,可否借光参考一下。…

查看全部问答>

基于TMS320F28335的光伏并网模拟装置

基于TMS320F28335的光伏并网模拟装置…

查看全部问答>

0-10mv交流经过运放输出0-5v的直流

本帖最后由 dontium 于 2015-1-23 13:11 编辑 设计电路,在模电书上看到信号放大的电路,是三个运放,有没有两个运放的还有就是单电源运放放大的 …

查看全部问答>

TI M4处理器

以前主要搞PIC单片机软件,现在想学习TI  M4处理器 能给点的建议吗?(最好能推荐款开发板)。…

查看全部问答>

病人/老人身体状况监测系统

采用Ti SensorTag,安卓手机 , 能实时连续采集病人/老人的身体状况,比如体温脉搏,心率,皮肤电阻等信息,实实传到具有蓝牙设备的手持安卓终端上(手机),来进行监测,分析,并给病人/老人提醒,建议。危险或异常情况下可以通过监测端短信给监护 ...…

查看全部问答>