DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1044|回复: 0
打印 上一主题 下一主题

[待整理] Thumb指令集之: Thumb编程模型

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-10 07:29:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        11.2  Thumb编程模型

        所有的Thumb指令都是16位的。它们都是ARM指令重新编码得到的,所以继承了ARM指令集的许多特点。
         
        ① 有数据处理、数据传送和流控制的指令结构。
        ② 支持8位字节、16位半字和32位字数据类型,半字以两字节边界对齐,字以4字节边界对齐。
        ③ 32位的无分段存储器(unsegmented memory)。
         
        Thumb指令集除了继承了ARM指令集的一些特点外,与ARM指令集存在以下一些差异。
         
        ① 大多数Thumb指令为无条件执行指令(所有ARM指令都是条件执行的)。
        ② 许多Thumb数据处理指令采用了2地址格式(目的寄存器与源寄存器相同)。而ARM指令中除64位乘法指令外,其余指令均采用3地址模式。
        ③ Thumb指令格式减少了很多ARM指令格式的限制,使Thumb指令编写的代码密度大大提高。
         
        无论处理器处于什么状态,所有的异常都使处理器返回到ARM状态,并完成异常处理。但异常发生时,CPSR状态寄存器在进入异常时被保存到相应的SPSR中,当异常处理结束后,处理器将恢复到异常发生前的状态,并按照发生异常时处理器的状态继续执行ARM或Thumb指令。
         
        应该注意的是,ARM异常返回指令需要根据ARM流水线的行为对返回地址进行调整。由于Thumb指令是2字节长,而ARM指令是4字节长,所以由Thumb执行状态进入异常时其自然偏移量应与ARM不同(ARM状态下,拷贝到链接寄存器的值PC-4)。为了减少编程的复杂性,ARM体系结构中设置了硬件逻辑,以实现Thumb状态的自动地址偏移调整,使ARM和Thumb状态编程一致。
         
        表11.2列出了Thumb状态下发生异常时LR的值。
        表11.2 Thumb状态异常返回指令
                                                                        异    常
                       
                                                                        异常链接寄存器值
                       
                                                                        返 回 指 令
                       
                                                                        Reset
                       
                                                                        不可预知的值
                       
                                                                        -
                       
                                                                        未定义指令
                       
                                                                        未定义指令地址+2
                       
                                                                        MOV  PC,r14
                       
                                                                        SWI
                       
                                                                        Swi指令地址+2
                       
                                                                        MOV  PC,r14
                       
                                                                        预取异常
                       
                                                                        预取异常指令+4
                       
                                                                        MOV  PC,r14,#4
                       
                                                                        数据异常
                       
                                                                        产生预取异常指令地址+8
                       
                                                                        MOV  PC,r14,#8
                       
                                                                        IRQ
                       
                                                                        下一条将被执行的指令地址+4
                       
                                                                        MOV  PC,r14,#4
                       
                                                                        FIQ
                       
                                                                        下一条将被执行的指令地址+4
                       
                                                                        MOV  PC,r14,#4
                       
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-27 10:29 , 耗时 0.079468 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表