您的位置:首页 > 财经 > 产业 > Keil汇编相关知识

Keil汇编相关知识

2024/10/7 0:20:09 来源:https://blog.csdn.net/DJQ2020391635/article/details/139966978  浏览:    关键词:Keil汇编相关知识

一、汇编的组成

1.汇编指令:在内存中占用内存,执行一条汇编指令会让处理器进行相关运算

分类:数据处理指令,跳转指令,内存读写指令,状态寄存器传送指令,软中断产生指令,协助处理器指令

2.伪操作:不是汇编指令,不占用指令周期,起到声明作用

3.伪指令:不是汇编指令,占用指令内存,当执行伪指令会让处理器进行对应的运算操作,通常伪指令是一条或多条汇编指令的另外一种用法

4.注释:

单行注释:@,其他架构汇编注释可能是;
多行注释:/**/
条件编译:
.if 逻辑值
代码段
.else
代码段
.endif

二、汇编指令的基本格式

<opcode>{<cond>}{s}        <Rd>,        <Rn>,        <shifter_operand>
<opcode>:汇编指令的指令码,由指令码决定现在是哪一个指令
cond:条件码,可以有可无,执行指令前先判断,满足才执行指令
s:指令码后加s,表示指令的运算结果会影响到CPSR寄存器的条件位
Rd:目标寄存器,指令运算结果会保存在目标寄存器中
Rn:第一操作寄存器,只能写寄存器,参与运算的第一个数值
shifter_operand:第二操作数,可以是寄存器,也可以是一个立即数
运算解释:先判断条件码对应条件是否满足,如满足则将第一操作数与第二操作数按指令码进行运算,运算的结果保存在目标寄存器中,并且结果影响CPSR条件位

三、数据搬移指令

1.mov{条件码} 目标寄存器,操作数vn
条件码可有可无,当存在条件码时,需满足条件才能1将操作数的数值搬移到目标寄存器
2.mvn{条件码} 目标寄存器,操作数
将操作数按位取反后的结果搬移到目标寄存器中
3.立即数
能够当作指令的一部分直接去执行的数据,操作数在当作指令的一部分执行时,需要对该操作数进行处理并保存到指令空间的[11:0]位中,如果处理完毕能够保存进去,说明该操作数是立即数。
处理方式:对该操作数进行循环右移偶数位,如果右移过程中,该操作数右移的值有在0-255这个范围内,说明该操作数是一个立即数,此时将循环右移的值保存在指令空间的[7:0]位,循环右移的偶数位数除以2的值保存到指令空间的[11:8]中(快速判断是否立即数:起始位为1和结束位为1之间的位数要小于7是立即数),当循环右移始终得不到0-255的数据,此时将其取反,如果取反值在0-255之间,该数据也是立即数
4.如果要将一个非立即数保存到寄存器中,可以使用伪指令LDR

四、数据移位指令

算术右移:除了最高符号位不变,最低位移出,最高位补0
逻辑右移:lsr{条件码},目标寄存器,第一操作寄存器,第二操作数
        最低位移出,最高位补0,将第一操作寄存器的数值右移第二操作数对应的位数
循环右移:ror{条件码},目标寄存器,第一操作寄存器,第二操作数
        最低位移出,补到最高位,将第一操作寄存器的数值循环右移第二操作数对应的位数
逻辑左移:lsl{条件码},目标寄存器,第一操作寄存器,第二操作数
        将第一操作寄存器的数值左移第二操作数对应的位数
在书写操作数时可以使用c风格移位运算:如:mov r1,#(oxff>>4);

五、位运算指令

与:与0置0,与1不变
and{条件码},目标寄存器,第一操作寄存器,第二操作数
将第一操作寄存器和第二操作数进行按位与操作,结果保存到目标寄存器中

或:或1置1,或0不变
orr{条件码},目标寄存器,第一操作寄存器,第二操作数
将第一操作寄存器和第二操作数进行按位或操作,结果保存到目标寄存器中

异或:相同为0,相异为1
eor{条件码},目标寄存器,第一操作寄存器,第二操作数
将第一操作寄存器和第二操作数进行按位异或操作,结果保存到目标寄存器中

按位取反
mvn{条件码},目标寄存器,操作数
将操作数进行按位取反操作,结果保存到目标寄存器中

按位清0:想要运算结果为0,则给一个运算数据1
bic{条件码},目标寄存器,第一操作寄存器,第二操作数
将第一操作寄存器和第二操作数进行按位清零操作,结果保存到目标寄存器中

六、算数运算指令
1.加法指令:
        add{条件码}{s}目标寄存器,第一操作寄存器,第二操作数
        将第一操作数寄存器的值加第二操作数,结果保存到目标寄存器,如果在指令后加s,结果会影响CPSR条件位
        adc{条件码}{s}目标寄存器,第一操作寄存器,第二操作数
         将第一操作数寄存器的值加第二操作数再加上CPSR的c位值,结果保存到目标寄存器,如果在指令后加s,结果会影响CPSR条件位
2.减法指令:
        sub{条件码}{s}目标寄存器,第一操作寄存器,第二操作数
        将第一操作数寄存器的值减去第二操作数,结果保存到目标寄存器,如果在指令后加s,结果会影响CPSR条件位
        sbc{条件码}{s}目标寄存器,第一操作寄存器,第二操作数
         将第一操作数寄存器的值减去第二操作数再减去CPSR的c位值取反,结果保存到目标寄存器,如果在指令后加s,结果会影响CPSR条件位
3.乘法指令:mul{条件码}{s}目标寄存器,第一操作寄存器,第二操作数
        将第一操作数寄存器的值乘以第二操作数,结果保存到目标寄存器,如果在指令后加s,结果会影响CPSR条件位
4.在32位的处理器上进行64位的数据运算:将64位数据保存两个寄存器中,先运算低32位,运算结果影响CPSR位,后运行高32位考虑CPSR位
七、比较指令

cmp 第一操作寄存器,第二操作数
        进行两个数的比较,比较指令的本质时两个数的减法运算,运算结果影响CPSR条件位,一般比较指令会和条件码一起使用,先通过比较指令产生条件,后面的指令加上条件码,判断条件码对应的条件是否满足

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com