历史上的今天
返回首页

历史上的今天

今天是:2024年09月23日(星期一)

正在发生

2019年09月23日 | ARM汇编:数据处理指令集

2019-09-23 来源:eefocus

数据处理指令有:

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


ORR指令的格式为:ORR{条件}{S} 目的寄存器,操作数1,操作数2



ORR指令用于在两个操作数上进行逻辑或运算,并把结果放置到目的寄存器中。操作数1应该是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。该指令常用于设置操作数1的某些位。

指令示例:ORR R0,R0,#3;该指令设置R0的0、1位,其余位保持不变。


orr r0,r0,#0xd3


0xd3=1101 0111

将r0与0xd3作算数或运算,然后将结果返还给r0,即把r0的bit[7:6]和bit[4]和bit[2:0]置为1。


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

指令格式:BIC{cond}{S} Rd,Rn,operand2 

BIC指令将Rn 的值与操作数operand2 的反码按位逻辑”与”,结果存放到目的寄存器Rd 中。指令示例:BIC R0,R0,#0x0F ;将R0最低4位清零,其余位不变。


mov r0, #0xff

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

 比较指令 CMP


cmp(compare)指令进行比较两个操作数的大小


例:cmp oprd1,oprd2


为第一个操作减去第二个操作数,但不影响第两个操作数的值,它影响flag的CF,ZF,OF,AF,PF


我们怎么判断大小呢?若执行指令后


(1)ZF


ZF=1 这个简单,则说明两个数相等,因为zero为1说明结果为0。


(2)CF


当无符号时:


CF=1 则说明了有进位或借位,cmp是进行的减操作,故可以看出为借位,所以,此时oprd1

CF=0 则说明了无借位,但此时要注意ZF是否为0,若为0,则说明结果不为0,故此时oprd1>oprd2


当有符号时:


若SF=0,OF=0 则说明了此时的值为正数,没有溢出,可以直观的看出,oprd1>oprd2


若SF=1,OF=0 则说明了此时的值为负数,没有溢出,则为oprd1

若SF=0,OF=1 则说明了此时的值为正数,有溢出,可以看出oprd1

若SF=1,OF=1则说明了此时的值为负数,有溢出,可以看出oprd1>oprd2


 


最后两个可以作出这种判断的原因是,溢出的本质问题:


两数同为正,相加,值为负,则说明溢出


两数同为负,相加,值为正,则说明溢出


故有,正正得负则溢出,负负得正则溢出


 


补充: 两数相减,同号,则不溢出;两数为异号,结果与减数符号相同,则溢出。


;实质是一条减法指令

;没有目标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 循环右移:低位移出,高位补低位移出位


推荐阅读

史海拾趣

D1 International Inc公司的发展小趣事

作为一家有社会责任感的企业,D1 International Inc公司始终关注环境保护和可持续发展。公司在生产过程中采取环保措施,减少废弃物排放,同时积极推广绿色电子产品。此外,D1 International Inc公司还积极参与社会公益活动,回馈社会,为构建和谐社会贡献自己的力量。

Appointech Inc公司的发展小趣事

Appointech Inc公司,自创立之初就致力于提供创新的电子解决方案。在公司成立的早期阶段,团队凭借对电子技术的深刻理解和对市场需求的敏锐洞察,开发出了一系列具有竞争力的产品。这些产品不仅满足了客户的实际需求,也为公司赢得了初步的声誉和市场份额。

Chengdu Sino Microelectronics Technology Co Ltd公司的发展小趣事

面对日新月异的电子技术和不断变化的市场需求,成都华微科技始终坚持持续创新的发展理念。公司不断加大对新技术、新产品的研发投入,积极探索新的商业模式和市场机会。同时,公司还注重人才培养和团队建设,为公司的长远发展储备了丰富的人才资源。正是这种持续创新的精神,使成都华微科技在激烈的市场竞争中始终保持领先地位,引领着中国集成电路设计行业的未来发展。

这五个故事只是成都华微电子科技有限公司发展历程中的一部分,但它们足以展现出这家公司在电子行业中的坚定决心、技术实力、合作精神和创新能力。正是这些因素的共同作用,使成都华微科技能够在激烈的市场竞争中脱颖而出,成为电子行业的佼佼者。

Giga公司的发展小趣事
通过定时控制LED灯的亮灭,实现视觉效果。
Anritsu公司的发展小趣事
如开机自检、按键去抖等。
DB Lectro Inc公司的发展小趣事

DB Lectro Inc公司自创立之初,就致力于气体检测技术的研发与创新。在公司总部的加利福尼亚州研发中心,一群充满激情的工程师们夜以继日地工作,成功研发出了首款高精度、高稳定性的气体检测仪器。这款产品凭借其卓越的性能和精准的检测结果,迅速在污水处理、化工等领域打开了市场。随着技术的不断进步和产品的不断升级,DB Lectro Inc逐渐在气体检测领域树立了领先地位。

问答坊 | AI 解惑

超声波发射接收器

超声波发射接收器换能器    有正负之分么????…

查看全部问答>

按键专题活动总结---准备做一个按键学习的开发板

在3月份我们在论坛搞了一个按键专题活动的讨论(https://bbs.eeworld.com.cn/viewthread.php?tid=97931 ),这个活动获得了大家的广泛支持,讨论的很是热烈根据讨论内容,从大家的讨论中,我们学习和了解到了更多的按键方面的知识。 俗话说的好: ...…

查看全部问答>

sdram,nor flash,nand flash

各位大侠,小弟刚接触嵌入式。有些基本的问题还没有搞清楚,请教一下 在一块板子上,有sdram,nor flash,nand flash 哪个是用来存储系统的, 这3个又有什么区别呢?…

查看全部问答>

wince跑程序老是报错!

C:\\Program Files\\Microsoft eMbedded C++ 4.0\\Common\\EVC\\MyProjects\\2\\2.cpp(4) : fatal error C1083: Cannot open precompiled header file: \'emulatorDbg/2.pch\': No such file or directory 随便什么程序,都是报这个错误,这是为什 ...…

查看全部问答>

2011年全国竞赛基本仪器和主要元器件清单

本帖最后由 paulhyde 于 2014-9-15 09:47 编辑 …

查看全部问答>

这是什么错误,很奇怪

keil编译时,提示入下错误:(我估计不应该是程序的错误,不知道哪里没有设置正确)   Build target \'Target 1\'assembling STARTUP.A51...compiling Lcd.c...C51 FATAL-ERROR -  ACTION:     GOBAL OPTIMIZATION ...…

查看全部问答>

初学者的迷惑

我今年准备开始学习430,之前只有一点单片机的知识,感觉学习起来没有压力,对C语言算是了解了,不算透彻但是感觉应付单片机够了。 现在就有一个疑问,学习430需要哪些储备知识才能很好的上手(尽量详细一点)!这个问题一直很疑惑,主要实验室现 ...…

查看全部问答>

beaglebone心得一:windows下驱动安装

我收到的就一个SD卡,但带了个SD大卡卡槽。并不是传说中的,两个SD卡。 我破不急等地插到USB口上,当然迷你SD卡也插上,发现硬件。我等着自动装硬件。但显示了一个虚拟的U盘。我又傻等一会儿,还是要驱动。 应是U转串的驱动。 我查型号是FT2232H ...…

查看全部问答>

煤矿井下主排水泵安全保护装置设计(毕业论文)

主要要求:1.本系统负责对主排水泵的电压、电流、轴瓦温油温、润滑油油压、水泵真空度等一系列参数进行测量并显示。2.系统能自动根据所测量得到的参数进行综合逻辑分析,判断是否出现异常情况,并在异常情况出现时自动启动继电器接口来控制相应的节 ...…

查看全部问答>