为啥要使用thumb模式,与ARM相比较,Thumb代码的两大优势是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥要使用thumb模式,与ARM相比较,Thumb代码的两大优势是啥?相关的知识,希望对你有一定的参考价值。

Thumb模式是采集16位的编码方式,这在有些场合下很有应用,相比32位模式,Thumb虽然仅有16位,在代码精简的同时,性能上并没有减少多少。

Thumb指令集不是完整的指令集,它是ARM指令集的子集。但是Thumb指令具有更高的代码密度,即占用存储空间小,仅为ARM代码规格的65%,但其性能却下降的很少。所以,Thumb指令集使ARM处理器能应用到有限的存储带宽,并且,代码密度要求很高的嵌入式系统中去。

扩展资料:

regist:低寄存器的全部或其子集。  括号是指令格式的一部分,它们不代表指令列表可选。列表中至少有1个寄存器。thumb堆栈是满递减堆栈,堆栈向下增长,且sp指向堆栈的最后入口。寄存器以数字顺序存储在堆栈中。最低数字的寄存器存储在最低地址处。

pop regist,pc这条指令引起处理器转移到从堆栈弹出给pc的地址,这通常是从子程序返回,其中r在子程序开头压进堆栈。这些指令不影响条件码标志。

参考资料来源:百度百科-Thumb指令

参考技术A Thumb模式是采集16位的编码方式,这在有些场合下很有应用,相比32位模式,Thumb虽然仅有16位,在代码精简的同时,性能上并没有减少多少。 参考技术B 使ARM使用更加灵活,完善了软件中断指令的功能和把一些未使用的指令空间捕捉未未定义指令 参考技术C arm模式和thumb模式是指指令的长度不同。前者是32位的,后者是16位的,更高效一些,不过指令的使用功能也有限。

ARM处理器架构的Thumb指令集中关于IT指令的使用

在ARMv6T2以及ARMv7架构扩展了Thumb指令集,其中加入了IT指令,进一步增强了代码的紧凑性。

Thumb中有一个比较有意思的指令——IT,这条指令用于根据指定的条件来执行后面相继的四条指令。当然,Thumb-2中大部分算术逻辑指令都含有带条件执行的特征,不过Thumb-2是32位的。如果你需要更紧凑的指令,那么使用Thumb结合ThumbEE来做带条件的指令执行还是不错的选择。Thumb本身不具备带条件指令执行的特性。

IT指令的描述为:IT{<x>{<y>{<z>}}} <firstcond>    

其中,<x>表示第二条指令的条件;<y>表示第三条指令的条件;<z>表示第四条指令的条件。<firstcond>是条件操作数,表示第一条指令的条件。

<x>、<y>、<z>的标识其实就两种符号——T或E。T表示Then,表示相应的指令所满足的条件与<firstcond>一致;E表示else,表示相应的指令所满足的条件与<firstcond>完全相反。因此,对于第一条指令而言,总是为T的,因此不需要在IT中显示给出,它直接对应于<firstcond>的条件。

另外,在IT块中不能再使用IT指令。即,相继的四条指令中不允许出现IT指令。

下面给出一些示例代码:

 

    cmp     r1, #0
    itete   eq
    moveq   r1, #10
    movne   r2, #20
    moveq   r3, #30
    movne   r12, #50

    stmia   r0, {r1-r3, r12}

    bx      lr

 

可能会觉得奇怪,为何itete 指令中的 ete 已经表示了条件了,为何下面的指令中还需要条件,moveq,movne。这点需要注意。

以上是关于为啥要使用thumb模式,与ARM相比较,Thumb代码的两大优势是啥?的主要内容,如果未能解决你的问题,请参考以下文章

ARM指令和THUMB指令有啥区别

嵌入式系统中的存储器映射是怎么回事,为啥要映射

ARM的编程模式

Flash与S3C44B0X连接时地址线为啥要偏移一位

ARM处理器架构的Thumb指令集中关于IT指令的使用

ARM汇编语言基础